注: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. 获取最后一个非零系数的位置
获取最后一个非零系数的位置是熵解码的过程,是编码端写进码流里的,这里暂不做讨论。
3. 为什么要通过像素点扫描表找到最后一个非零系数的位置?
通过熵解码得到的最后一个非零系数的位置是编码端传过来的,在编码端它表征的是在扫描之前最后一个非零量化系数的位置,这个位置我猜测是与扫描顺序相反的顺序找到的,具体查找过程推测如下。
<

本文详细介绍了HEVC逆扫描过程中,如何获取编码参数、确定最后一个非零系数的位置,以及如何通过该位置推断有效CG的最大索引。内容涵盖了熵解码、CG的扫描顺序和逆扫描顺序,解析了8x8亮度块的CG内部逆扫描过程。
最低0.47元/天 解锁文章
1299

被折叠的 条评论
为什么被折叠?



