在ALF的系数上纠结了两个周,不了解它为什么没有传flag却可以从解码端直接获得,终于终于在VLCReader.cpp
中抓到了它,也许这对RBSP的了解也有很大的益处吧,下面走进变长编码的世界。
1 简介
VLC即变长编码。原理是用短码来编频率高的信息来达到少比特的目的。
我们知道视频编码中多数内容都是通过CABAC进行编解码的,对多数flag和变换系数熵编码都使用,并具有较高的编码效率。但以零阶指数哥伦布码为首的VLC的编码效率对于广义高斯信源也很高,且编解码简单,因此在VPS、SPS、PPS参数和Slice头信息的大部分语法元素上都得以使用。
2 零阶指数哥伦布码
只要根据码字信息就能计算出编码后的码长,通过简单的计算解码码字,无需查表。
解码方式:
1、读取第一个1前面0的个数,有几位0就先加上2的几次方,记为C1
;
2、读取第一个1后面的二进制数字,记为C2
;
3、解码值为C1+C2-1
,若需要表达有符号数,则如下表所示:
码字 | 解码值 | 有符号数 |
---|---|---|
1 | 0 | 0 |
010 | 1 | 1 |
011 | 2 | -1 |
00100 | 3 | 2 |
00101 | 4 | -2 |
00110 | 5 | 3 |
00111 | 6 | -3 |