CAVLC
基于上下文自适应的可变长编码
主要用于4×4子块残差数据(经过变换,量化后)的编码。
残差数据经过变换,量化后的数据表现出如下特性:
- 非零系数主要集中在低频部分,高频部分大部分是0
- 量化后的数据经过 zig-zag扫描,DC系数附近的非零系数值较大,高频位置上的非零系数大部分是+1和-1
- 相邻的4×4块的非零系数的数目是相关的
在CAVLC中,上下文模型的选择主要体现在两个方面:
- 非零系数编码所需表格的选择
- 拖尾系数后缀长度的更新
具体的编码过程:
- 对非零系数数目 TotalCoeffs 以及拖尾系数的数目 TrailingOnes进行编码
步骤1约定如下:
- 非零系数范围0~16,
- 拖尾系数数目范围0~3.
- 如果+1,-1的总个数大于3,那么只有最后三个被视为拖尾系数
对这两个元素的编码是通过查表法。共有四个变长表格和1个定长表格可供选择。
其中,定长表格的码字长6比特,高4位表示非零系数个数,低两位表示拖尾系数个数。
为了选择合适的表格,现在定义一个变量NC。
- 待编码数据为 色度分量的直流系数时 NC= -1
- 其他情况 NC由下表决定
NB
|
NA
|
NC
|
X
|
X
|
(NA+NB)/2
|
X
|
|
NA
|
|
X
|
NB
|
|
|
0
|
表中变量定义如下:
- NA 为待编码块左边的4×4块的非零系数数目
- NB为待编码块上边的4×4块的非零系数数目
- X 表示与当前待编码块 属于同一个片而且可用
OK,现在NC值已经获得了,下面就可以选择表格了。
NC
|
表格
|
0<=NC<2
|
变长表格1
|
2<=NC<4
|
变长表格2
|
4<=NC<8
|
变长表格3
|
NC=-1
|
变长表格4
|
NC>=8
|
定长表格
|
表格在此就不列出了。
2.对每个拖尾系数的符号进行编码
其中0表示正,1表示负。编码顺序是按照反向扫描顺序,从高频区开始
3.对除拖尾系数外,非零系数的幅值进行编码
4.对最后一个非零系数前零的数目TotalZeros进行编码
例如:一串数 0 0 5 0 3 0 0 0 1 0 0 -1 0 0 0 0
最后一个非零系数是-1,故TotolZeros=2+1+3+2=8
5.对每个非零系数前零的个数RunBefore进行编码
RunBefore在以下两种情况下是不需要编码的:
- 最后一个非零系数(低频位置上)前零的个数
- 如果没有剩余的零需要编码,就没有必要再进行RunBefore的编码
转载于:https://blog.51cto.com/datou97/748625