由三个部分组成:
一. 二进制化 (主要是将非二制的各语法元素转换成二进制的比特序列,也可以称为对输入流的预编码,经它编码后的输出是MPS概率极高的比特流。)
MPS(高概率符号0或1) 、LPS(低概率符号1 或0)
在算术编码流程中必须的记录状态为:
L 当前区间的下限
R 当前区间的大小长度
Binval 当前字符,即二进制的符号1或0
各字符的概率Px
当前处理的字符为MPS时,区间递进只是子区间的长度发生了改变,而作为影响实际输出值的L却没有发生改变,这个现象意味着如果输入流中连续出现大量的MPS,或者MPS相对LPS出现的概率比较高时, 可以达到极高的压缩效果,编码输出的码率也更接近熵率。
四种转换方式: Unary Binarization(U) ; Truncated unary binarization(TU); Kth order Exp_golomb binarization (UEGK); Fixed_length binarization (FL)
二. 上下文建模
为基本的CABAC 编码过程 , 一种regular coding mode 另一种为 bypass coding mode.
只有regular coding mode 应用了上下文模型,而直通模式用于加速编码流程,当概率近似为50%的时候。这部分主要说明regular coding mode的进程。这里,先说理论,再讲流程。
理论:
1,CABAC 算术编码基础
算术编码的复杂度主要体现在概率的估计和更新,
CABAC建立了一个基于查表的概率模型,将0~0.5 划分为64个概率量化值,这些概率对应于LPS字符,而MPS的概率为(1-Plps),概率的估计值被限制在查表内,概率的刷新也是依据于查表。如果当前出现的字符是MPS,则Plps 变小。
划分子区间的乘法运算 R=R x Px
对于这里的乘法运算,CABAC首先建立了一个二维表格,存储预先计算好的乘法结果,表格的入口参数一个来自Px( 对应于theta,概率量化值),另一个来自R(R的量化为:p=(R>>6)&3 ),
流程图:
图中,灰色部分是概率的刷新部分,表TABRangeLPS存储预先计算好的乘法结果,表TransIDxLPS是与对应的概率表。
有三个值是比较特殊的,:
theata=0 时,LPS的概率已达到了最大值0.5,如果下一个出现的是LPS,则此时LPS和MPS的字符交换位置.
Theta=63对应着LPS的最小概率值,但它并没有纳入CABAC的概率估计和更新的范围,这个值被用做特殊场合,传递特殊信息&