首页 > 代码库 > HEVC逆扫描之二:关于扫描表的说明
HEVC逆扫描之二:关于扫描表的说明
注:HM代码版本为HM-16.2+SCM-3.0rc1/。
在介绍逆扫描的过程之前,先说明扫描表的存储和初始化过程(初始化只在解码器启动时进行,对应函数为initROM())。
HEVC扫描方式中提到:对于超过 4x4 的块,先将块分成若干个4x4的CG(Coefficient Group),CG之间和每个CG内部都使用选定的扫描顺序进行扫描。所以,存在两种扫描表:像素点扫描表和CG扫描表。
在源程序中,扫描表是保存在一个四维数组g_scanOrder中,该数组的申明如下图。
图4 扫描数组的申明
该数组维度说明如下表所示。
表1 扫描表维度说明
维度 | 意义 | 取值范围 | 备注 |
1 | 像素点扫描表/CG扫描表 | SCAN_UNGROUPED/ SCAN_GROUPED_4x4 | SCAN_UNGROUPED对应CG扫描表;SCAN_GROUPED_4x4对应像素点扫描表。 |
2 | 扫描方式 | 对角、水平、垂直三种扫描方式 | 下面以最复杂的对角扫描为例说明对角扫描方式下的扫描过程。 |
3 | 宽度的深度值 | [0, 6] | 对应1x1~64x64,包含非对称尺寸。 |
4 | 高度的深度值 | [0, 6] |
注:该数组为指针数组,该数组的每一个元素对应一张具体的扫描表。
下面以一个8x8的亮度TU、扫描方式为对角扫描为例,说明其对应的两个扫描表。光栅扫描顺序表如下。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 |
56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
图5 8x8光栅扫描顺序表
对应的像素点扫描表如下:
0 | 8 | 1 | 16 | 9 | 2 | 24 | 17 |
10 | 3 | 25 | 18 | 11 | 26 | 19 | 27 |
32 | 40 | 33 | 48 | 41 | 34 | 56 | 49 |
42 | 35 | 57 | 50 | 43 | 58 | 51 | 59 |
4 | 12 | 5 | 20 | 13 | 6 | 28 | 21 |
14 | 7 | 29 | 22 | 15 | 30 | 23 | 31 |
36 | 44 | 37 | 52 | 45 | 38 | 60 | 53 |
46 | 39 | 61 | 54 | 47 | 62 | 55 | 63 |
图6 8x8像素点扫描表
对应的CG扫描表如下:
0 | 2 |
1 | 3 |
图7 8x8 CG扫描表
HEVC逆扫描之二:关于扫描表的说明