HEVC---xCompressCU()函数作用及位置

      xCompressCU( )作为HEVC编码器最重要的函数之一,主要是确定CU的分割深度、预测模式等参数。

(一) xCompressCU( )位置

      以HM16.5版本为例进行分析,在工程“TAppEncoder”里面打开“encmain.cpp”文件。

      然后依次按照下列图的顺序即可找到xCompressCU()位置。

      (1)

                         

      (2)

                   

      (3)

                    

      (4)

                             

      (5)

                 

      (6)

          

(7)


(二) xCompressCU( )函数介绍

参考:https://blog.csdn.net/king20168/article/details/76113446

/*Para rpcBestCU 存放最优数据 

Para rpcBestCU 存放局部最优数据 
Para uiDepth CU深度 
Para eParent 父CU的PU模式*/ 
HEVC编码器最重要的的函数之一,主要是确定CU的分割深度、预测模式等参数。从宏观上大致可以包含merge和skip的预测函数xCheckRDCostMerge2Nx2N()、帧间预测函数xCheckRDCostInter()和帧内预测函数xCheckRDCostIntra() 以及函数copyPartFrom()和xCheckBestMode()。该函数实现的功能:遍历每个预测模式,通过比较率失真代价值,得到最优的预测模式,保存到参数rpcBestCU中,然后通过调用自身进行子CU的编码。遍历每种预测函数时,均使用rpcTempCU参数,参数rpcTempCU主要有两个作用:1.存放每一个预测函数的最优参数,然后通过xCheckBestMode() 函数将最优参数传给rpcBestCU;注意的是,在进行下一个预测函数之前,rpcTempCU会被初始化,模式信息、代价值、失真和码率等参数将会被清零;2.存放子CU的最优信息,当CU进行回溯裁剪时,通过比较rpcBestCU和 rpcTempCU两个参数的率失真代价值进行判断是否划分。copyPartFrom()函数实现的是将子CU的最优信息传递给rpcTempCU。参数eParent是父CU的最优预测模式,这个参数在进行非对称分割模式的预测时会用到。子CU总的率失真代价值的计算:这个率失真代价值的计算并不是将子CU的最优率失真代价值进行相加得到,而是根据总的失真和码率进行计算。这是因为在预测完成后,还会增加一定的码率,如编码分割标志位。函数简介如下: 
1. xCheckRDCostMerge2Nx2N():merge和skip模式的预测函数,当残差为0时,为skip模式。这个函数与普通的帧间预测函数的区别是没有运动估计过程。 
2. xCheckRDCostInter():普通帧间模式2N×2N、N×N、N×2N、2N×N、2N×nD、2N×nU、nL×2N和nR×2N的预测函数,主要包括运动估计和运动补偿两个过程。作用:进行预测,得到每种帧间模式的率失真代价值、失真和码率,并通过比较得到最优的帧间模式。 
3. xCheckRDCostIntra():帧内预测函数,帧内模式包括平面模式、DC模式以及33种角度预测模式。 
4. copyPartFrom():将子CU的最优编码信息传递给当前深度的rpcTempCU中。 
5. xCheckBestMode():通过比较rpcTempCU和rpcBestCU中的编码信息,将最优的信息存放在rpcBestCU中。 
xCompressCU的基本流程图

猜你喜欢

转载自blog.csdn.net/sinat_33718563/article/details/80265012