|
static inline int bs_read_ue( bs_t *s )
while( bs_read1( s ) == 0 && s->p < s->p_end && i < 32 ) |
转载:用于参考学习,望原文作者海涵!
H.264无符号整数指数哥伦布码编码
指数哥伦布码(Exponential-Golomb code, 即Exp-Golomb code)压缩编码方法过程:
用来表示非负整数的k阶指数哥伦布码可用如下步骤生成:
1.
2.
3.将第一步中去掉的最低k个比特位补回比特串尾部
比特串格式为“前缀1后缀”。1)1后缀=codeNum+1,如codeNum = 3,则1后缀=4,即为100,后缀为00;2)前缀与后缀的比特数相同,且前缀的各位比特为0,
下例为对不同codeNum进行的编码结果:
| 待编码数字 | 加1 | 加1后二进制表示 | 需补的前缀0 | 其它 |
| 0 | 1 | 00000001 | ||
| 1 | 2 | 10 | ||
| 2 | 3 | 11 | ||
| 3 | 4 | 100 | ||
| 4 | 5 | 101 | ||
| 5 | 6 | 110 | ||
| 6 | 7 | 111 | ||
| 7 | 8 | 1000 | ||
| 8 | 9 | 1001 | ||
| 9 | 10 | 1010 | ||
| 10 | 11 | 1011 | ||
| 11 | 12 | 1100 |
与此相反,这些语法元素的解析过程是由比特流当前位置比特开始读取,包括非0 比特,直至leading_bits 的数量为0。具体过程如下所示:
leadingZeroBits = ?1;
for( b = 0; !b; leadingZeroBits++ )
b = read_bits( 1 )
变量codeNum 按照如下方式赋值:
codeNum = 2leadingZeroBits ? 1 + read_bits( leadingZeroBits )
这里read_bits( leadingZeroBits )的返回值使用高位在先的二进制无符号整数表示。
如下示例:
二进制比特数
1001
001 1001
01 1010
010
本文详细解释了H.264编码中使用的无符号整数指数哥伦布码编码过程,包括生成方法、编码结果示例及解析流程,旨在帮助开发者深入理解并应用这一压缩编码技术。
1255

被折叠的 条评论
为什么被折叠?



