指数哥伦布解码

H.264中用到的指数哥伦布解码
标准中描述为ue(v)、te(v)、se(v)、me(v)时调用
哥伦布码字表前几行
码字                编码数字(Code_Num)
1                          0
010                     1           (10为2个比特,所以1前面要补的0的个数为:2-1=1,所以为:0  10)
011                      2
00100                 3
00101                 4
00110                  5
00111                  6
0001000             7

 

前缀为M个0

后缀为M位的二进制数[info]

解码时:
读取1前面的0,计数得到M的值
读取1后M比特
Code_Num = 2^M -1 + [info]
编码时, 语法元素值Value按照映射ue、te、se、me得到Code_Num

解码是,根据映射类型逆运算,得到Value
‍①ue为无符号映射,Value = Code_Num
②se为有符号映射,如下表

Code_Num    0    1    2    3    4    5  …
Value            0    1   -1    2   -2    3  …

③te截断映射,根据Value的取值范围做不同的处理
如果Value范围是[0,K],K是大于1的一个数,那么te和ue一样
如果Value范围是[0,1]
那么不用上面的哥伦布码表取得Code_Num
直接从码流里读取1比特,设值为b,Code_Num =  !b

④me映射是用Code_Num对应宏块预测模式,标准中表9-4给出了映射关系

from: https://blog.csdn.net/wh8_2011/article/details/53695975

-------------------------------------------------------------------------------------------------
无符号整数指数哥伦布码编码的算法如下:
M=floor(log2(codeNum+1));
INFO=codeNum+1–2^M;       {[1],[INFO]} = codeNum+1;
编码格式如下:
[Mzeros][1][INFO]。其包括前缀码和信息位两部分,前缀码由M比特的0和一个比特1组成,信息INFO的编码长度为M比特。因此每个Exp_golomb码字的数据长度是(2M+1)。
例如:如果codeNum=7,则M=floor(log2(7+1))=3,INFO=codeNum+1–2^M=7+1-2^M=0.
前缀码为0001。信息INFO为0,因为是3比特,所以写为000.
最终码为:0001000.
将0~9的编码情况列举如下:
0=>1
1=>010
2=>011
3=>00100
4=>00101
5=>00110
6=>00111
7=>0001000
8=>0001001
9=>0001010

或 比特串格式为“前缀1后缀”。

1)1后缀=codeNum+1,如codeNum = 3,则1后缀=4,即为100,后缀为00;

2)前缀与后缀的比特数相同,且前缀的各位比特为0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值