指数哥伦布编码
指数哥伦布编码是熵编码的一种
作用在 SPS 和 PPS
编解码注意
-
H.264 码流中的操作单位是 bit ,不是 byte ,视频编解码十分在乎体积。
-
指数哥伦布编码是变长编码,
种类
- 无符号指数哥伦布熵编码 ue(v)
- 有符号指数哥伦布熵编码 se(v)
- 映射哥伦布熵编码 me(v)
- 截断哥伦布熵编码 te(v)
无符号 ue
- 先把要编码的数字 +1,假设我们要编码的数字是 4, 那么我们先对 4 + 1 ,就是5
- 将 +1 之后的数字 5 先转换成二进制,就是:101.
- 转换成二进制之后,我们看转化成的二进制有多少位,然后在前面补 0 ,例如 101 有3位,那么我们应该在前面补两个 0
- 4 进行无符号指数哥伦布编码之后得到的二进制码流就是 00101
有符号 se
- 先把要编码的数字取绝对值后转成二进制,-5 取绝对值之后二进制是 101
- 在最后加一个符号位:1011
- 转换成二进制之后,我们看转化成的二进制有多少位,然后在前面补 0 ,例如 101 有3位,那么我们应该在前面补两个 0 得到的二进制码流就是 0001011
映射 me
- 编码数字5 ,得到的码流就是 00110, 占5个 bit 的空间
- 编码数字47 , 得到的码流就是 00000110000, 占 11 bit 的空间
指数哥伦布熵编码有个特性,那就是数字越大,占用的空间越大。
为了解决这个问题,就出现了映射指数哥伦布熵编码,就是提供了一个码表,当你遇到一段码流的时候,你要先用无符号和有符号获取到 key ,然后去码表中,找到对应的值。
截断 te
当语法元素以截断指数哥伦布解码时, 首先需要判断的语法元素的取值范围。
- 截断指数哥伦布熵编码