登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

H.264无符号整数指数哥伦布码编码  

2011-08-26 02:30:27|  分类: H264 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

我在阅读x264/common/bs.h,读到如下面的一个函数时,搜到了这篇文章,因为我要在代码里把文章作为注解,所以转过来放在我博客上,如果放别人的链接,可能原文日后会不存在了。

 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 ) );
}

   

转载:用于参考学习,望原文作者海涵!

H.264无符号整数指数哥伦布码编码

指数哥伦布码(Exponential-Golomb code, 即Exp-Golomb code)压缩编码方法过程:

用来表示非负整数的k阶指数哥伦布码可用如下步骤生成:

1.        将数字以二进制形式写出,去掉最低的k个比特位,之后加1

2.        计算留下的比特数,将此数减一,即是需要增加的前导零个数

3.将第一步中去掉的最低k个比特位补回比特串尾部

比特串格式为“前缀1后缀”。1)1后缀=codeNum+1,如codeNum = 3,则1后缀=4,即为100,后缀为00;2)前缀与后缀的比特数相同,且前缀的各位比特为0,

下例为对不同codeNum进行的编码结果:

 0 => 1 => 1

 1 => 10 => 010 (10为2个比特,所以1前面要补的0的个数为:2-1=1,所以为:0   10)

 2 => 11 => 011

 3 => 100 => 00100

 4 => 101 => 00101

 5 => 110 => 00110

 6 => 111 => 00111

 7 => 1000 => 0001000

 8 => 1001 => 0001001 (1001为4个比特,所以前面补4-1=3个0)

   

 待编码数字  加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                                                 0

001 1001                                                      5

01 1010                                                       2

010                                                                1

  000 1011                                                      10

 0001 001                                                       8

  评论这张
 
阅读(1940)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018