注:HM代码版本为HM-16.2+SCM-3.0rc1/。
对应TDecSbac::parseCoeffNxN()函数解析。暂时先忽略掉几个模式:pcCU->getCUTransquantBypass(uiAbsPartIdx)、pcCU->getSlice()->getPPS()->getUseTransformSkip()、pcCU->isRDPCMEnabled(uiAbsPartIdx),这些判断假定全部为假。
忽略掉以上几个模式之后,程序流程图如下:
图8 逆扫描流程图
1. 获取的编码参数
获取的编码参数如下表所示。
表2 获取的编码参数
参数 |
备注 |
像素点扫描表 |
若块尺寸为8x8,那么g_scanOrder中尺寸为:log2BlockWidth=3,log2BlockHeight=3 |
CG扫描表 |
若块尺寸为8x8,那么g_scanOrder中尺寸为:log2WidthInGroups=1,log2HeightInGroups=1 |
扫描方式 |
扫描方式是按照与编码端相同的方式推断出来的 |
CG尺寸 |
包括宽度和高度,意为当前TU包含几个CG |
firstSignificanceMapContext |
与熵解码相关,这里暂不作讨论 |
2. 获取最后一个非零系数的位置
获取最后一个非零系数的位置是熵解码的过程,是编码端写进码流里的,这里暂不做讨论。