前言
由于种种原因,哈夫曼编码并没有作为一种实际使用的技术应用到视频编解码算法中。
H.264实际使用到的熵编码算法,其中最简单的一种就叫:指数哥伦布编码。
H.264中的熵编码基本方法
-
熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工具,将语法元素写入输出码流。
-
熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用
-
h264中,针对不同语法元素定义了不同的熵编码方法
在h264协议文档中,一共制定了10种语法元素的描述符,这些描述符表达了码流解析为语法元素的方法,其中就包含了h264支持的所有熵编码的方法。
如
- b(8),用于表示还没有经过解析的h264压缩格式的裸流
- f(n),如图描述,是从最低一个字节的最高位算起的,通常它不表示一个实际的数值,更多用于表示填充位、标志位flag这样的数据
- u(n),表示使用的是n位的无符号整数来表示;也就是说,这个n位的二进制的比特位转化为一个无符号的整数表示的数值就是这个语法元素的取值
- i(n),与u(n)相对,直接用的的是二进制像十进制转化的方式
- ue(v)、se(v)、te(v)、me(v)表示的是四种指数哥伦布编码。最常用的是ue(v),也是其他三种的基础,其他三种都是由无符号的指数哥伦布编码换算得到的
- ce(v)、ae(v)是整个h264最重要的两种熵编码的方法,这两种算法远比指数哥伦布算法复杂得多,但能提供更好的压缩效率。
- ce(v),上下文自适应的变长编码算法,通常写为
CAVLC
- ae(v),上下文自适应的二进制算术编码算法,通常写为
CABAC