在H264編解碼中,哥倫布指數編碼是經常用到的,下面是無符號哥倫布指數編碼的C代碼:
static inline int bs_read_ue( bs_t *s )
{
??? int i = 0;
??? while( bs_read1( s ) == 0 && s->p < s->p_end && i < 32 )
??? {
??????? i++;
??? }
??? return( ( 1 << i) - 1 + bs_read( s, i ) );
}
bs_s結構體:
typedef struct bs_s
{
??? uint8_t *p_start;
??? uint8_t *p;
??? uint8_t *p_end;
??? int???? i_left;??? /* i_count number of available bits */
??? int???? i_bits_encoded; /* RD only */
} bs_t;
bs結構體的初始化:
static inline void bs_init( bs_t *s, void *p_data, int i_data )
{
??? s->p_start = (uint8_t*)p_data;
??? s->p?????? = (uint8_t*)p_data;
??? s->p_end?? = (uint8_t*)s->p + i_data;
??? s->i_left = 8;
}
?
從FFMpeg上抄來的