今天上午又看到一篇挺好的关于xCompressCU函数的总结文,不过是关于HM的,所以我就基于此文写一个JEM的吧。原文地址https://www.2cto.com/kf/201604/499329.html。
先来个文字版的简洁说明(写在下面的步骤不一定会执行,是需要经过条件判断的,其中还有很多步骤没写出来),代码记录在下一篇吧。
xCompressCU()
{
(1)从图像中获取原始YUV数据;
(2)计算最优CU的范围;
(3)计算QTBT的深度;
(4)调用xComputeQP计算QP;
(5)计算minQP和maxQP;
(6)if (!bBoundary
#if COM16_C806_LARGE_CTU
&& ucMinDepth <= uiDepth
#endif
#if JVET_C0024_QTBT
&& !bForceQT
#endif
#if JVET_D0077_SAVE_LOAD_ENC_INFO
&& !(saveLoadSplit & 0x01)
#endif
)
{
A. for (Int iQP = iMinQP; iQP <= iMaxQP; iQP++)//遍历每一个QP,执行下面的步骤,选取最优QP
{
a.初始化当前CU的数据-----inistEstData();
b.如果不是I slice ,进行帧间模式选择:
1)xCheckRDCostInter;
2) xCheckRDCostAffineMerge2Nx2N;