目录:
H.264协议CABAC熵编码学习(一)
H.264协议CABAC熵编码学习(二)
H.264协议CABAC熵编码学习(三)
H.264协议CABAC熵编码学习(四)
H.264协议CABAC熵编码学习(五)
上节我们介绍了CABAC的先导知识,这节我们将介绍H.264协议中的CABAC熵编码。
CABAC编码流程
在协议中CABAC编码流程主要分为三个部分:
语法元素二值化
上下文模型选择
基于查表法的二进制算术编码
CABAC全称为上下文自适应二进制算术编码(Context-based Adaptive Binary Arithmetic Coding),即动态调整0和1的概率,来压缩比特串。而在协议中,为了更加便捷的在计算机上实现二进制算术编码,使用了查表法,替代繁杂得乘法计算,大大加速了CABAC的编码过程。
语法元素二值化
具体二值化过程可以参考H.264协议CABAC熵编码学习(一)。
协议中规定了宏块级语法元素的二值化方案,具体可参考协议中Table 9-34。
基于查表法的二进制算术编码
在协议中,为了简化算术编码的计算复杂度,首先是将 [0,1] [ 0 , 1 ] 区间扩展成 [0,1024] [ 0 , 1024 ] ,同时将乘法转化成查表得方法,大大得缩减了计算复杂。接下来,我们将介绍协议中是如何进行二进制算术编码。
首先介绍几个变量得定义:
MPS:表示出现概率较大得数值,该数值为0或1
LPS:表示出现概率较小得数值,该数值为0或1
L(ow):概率区间得起始位置
R(ange):概率区间得长度
在协议中,一个概率区间的布局如下:
CABAC将 [0.01875,0.5] [ 0.01875 , 0.5 ] 区间划分成0~63个状态,其中63号状态表示退出,0号状态表示数值翻转,即LPS和MPS所代表的值进行翻转。每个状态的概率计算如下: