H264中的指数哥伦布编码

本文详细介绍了H264码流中的无符号指数哥伦布编码,包括其结构(前缀、1和后缀)、计算方法以及与其它编码方式的关系,如舍位和有符号版本。同时提及了码流描述符和LeadingZeroBits在编码过程中的作用。
摘要由CSDN通过智能技术生成

接上篇H264的熵编码和句法阅读,介绍了H264码流中使用到的几种熵编码,本章着重介绍其中4种指数哥伦布编码的编码方法

其中最重要的是无符号指数哥伦布编码,其他几种编码方式都是它的变种

无符号指数哥伦布编码

在H264的码流描述符是ue(v)

无符号指数哥伦布编码分为三个部分 前缀,1和后缀

                                                             prefix + 1 + suffix

前缀由多个0构成,字符1作为中间分割,后缀的数量和前缀的0的数量保持一致

举一个例子:

0001011

这里首先找到第一个1,前面有3个0,所以其前缀为000

后缀为3个字符,所以后缀为011

无符号指数哥伦布获取码值CodeNum 的方法为

          

这里的LeadingZeroBits指的就是前缀的0的数量

read_bits(leadingZeroBits)指的是按二进制获取leadingZeroBits个bit位的码值

比如上面的例仔leadingZeroBits = 3

那么codeNum= 2^3 -1 + [011] = 8 - 1 + 3 = 10

上图表示了不同前缀数量,对应的codeNum的范围

舍位指数哥伦布编码

语法元素编码舍位指数哥伦布编码te(v)和ue(v)非常相关,首先判断语法元素的范围,语法元素在[0,x]之间,x必须>=1,x就代表1前面的0的字符的数量就是LeadingZeroBits :

如果x>1, 那么te(v)=ue(v), 就直接使用无符号指数哥伦布编码的值

如果x=1, 那么codeNum就等于其下一位的取反, 就是后缀的取反

有符号指数哥伦布编码

有符号指数哥伦布编码有描述符se(v)表示,se(v)必须先按照ue(v)的规则得到一个codeNum,然后将CodeNum输入如下公式得到se值

                                              se = (-1)^(k+1) Ceil(k/2)

举个例仔还是以上面0001011为例

得到ue值10, 那么k=10 代入公式 (-1)^(10+1) Ceil(10/2) = -5

如果ue值等于3,那么k=3代入公式(-1)^(3+1) Ceil(3/2) = 2

Ceil()为向上取整函数

映射指数哥伦布编码

映射指数哥伦布编码用描述符me(v)表示,me(v)是使用ue(v)的值去查表查到一个对应的me, 所以第一步还是计算出一个ue值得codeNum,然后根据ITU H64标准文档的 9.1.2章节去查表即可

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jacen.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值