HEVC中的帧内预测

今日对照HEVC标准TELECOMMUNICATION STANDARDIZATION SECTOR OF ITU (04/2013)阅读HM代码,代码版本2016-8-18,karls

1. 编码器一次读入一个GOP的图像,再一次编码一帧

2. 编码流程为TEncSlice::compressSlice->TEncCu::compressCtu

3.在编码CTU时,递归调用TEncCu::xCompressCU进行四叉树决策,每递归一次uiDepth+1,并对4个下层CU分别调用TEncCu::xCompressCU

4. 在TEncCu::xCompressCU时,先要判断CU是否超过了边界(标志为bBoundary),如果右下角在图像外了,则当前CU不能直接编码,需要分割成小的CU再判断能否编码

5.在帧间模式判断时,先检测2NX2N模式,再检测Merge/Skip模式,并判断是否earlyDetectionSkipMode。

6. 如果不earlyDetectionSkipMode,再继续检查2NXN,NX2N,NXN,并根据是否使用AMP进行其它模式检查

7. 进行INTRA的2NX2N模式检查,如果uiDepth为最深的层数,则再进行NXN的检查

8. 对选出的RD代价最小的模式,如果PPS限制了DQP,还要进行DQP的调整,重新用新QP编码


注:1. 帧内预测时,预测块的大小为TU块的大小,参见标准 a variable nTbS specifying the transform block size

       2. 编码过程中,为了简化复杂度,在使用RMD方式在帧内预测的35个模式中选择需要做FullRDO的几种模式时,是直接按CU块的大小进行预测(不是TU块大小),这时可能CU是64x64,此时按64x64做的预测以及HARDMAND变换和SAD计算。此时的计算实际上是不符合标准的(因为标准没有64x64的帧内预测),但此时只需要计算预测残差的SAD值用作RMD的比较,不进行变换编码,因此是可行的。

      3. RMD的几种模式和MPM的几种模式合起来做RDO选择最佳模式,此时为了简化TU的计算,将TU块的大小限定为CU块的大小,但如果CU是64x64,则需要分成4个32x32的TU块进行预测,并算出4个TU块的RDO代价相加用为CU块代价。

     4. RDO完成后得到最优模式后再进行编码时,需要将进行TU块的四叉树划分,此时才是真实的RDO的TU划分。

     5. TU在进行变换时是和量化同时进行的。与H264不同,H265的变换与量化是可分离的,两部分可独立完成。

TU的分割:

xRecurIntraCodingLumaQT函数递归调用自己,得到最优的TU划分


你可能感兴趣的:(HEVC中的帧内预测)