1
xCheckBestMode函数: 检查最优模式,如果rpcTempCU的代价小于rpcBestCU存的代价,则将temp中的数据拷贝到best中。
CU的划分是通过调用xCompressCU函数实现的,通过递归调用自身实现CU的划分以及编码,递归划分的流程比较简单,首先是对当前CU进行编码,获得当前整个CU的RD Cost,然后将当前CU进行四叉树划分,分别计算每一个子CU的RD Cost,最后比较划分后的四种子CU的RD Cost之和,从而决定当前CU是否进行划分。由于HM中xCompressCU函数是通过递归实现四叉树划分的,所以考虑划分时应该从下往上计算RD Cost。
以下16x16划分8x8为例,当块划分到16x16时,先首先调用一次xCheckRDCostIntra函数,以16x16大小的CU进行预测等操作,计算出RD Cost和失真,此时将计算得到的RD Cost存入到rpcBestCU中,在xCheckRDCostIntra中调用xCheckBestMode函数,将重建的16x16CU块存入到m_ppcRecoYuvBest[depth](这里的depth是2)中;然后进入for循环中,调用四次xCompressCU函数,计算出四个子CU的RD Cost与失真之和,将RD Cost存入到rpcTempCU中,并通过xCopyYuv2Tmp函数,将重建YUV存入到m_ppcRecoYuvTemp[depth](这里的depth是2)中。在最后,再调用xCheckBestMode函数,决定比较rpcBestCU, rpcTempCU的RD Cost决定是否对16x16CU进行进一步的划分,如果需要进一步划分,则将m_ppcRecoYuvTemp[depth](这里的depth是2)中的重建YUV拷贝到m_ppcRecoYuvBest[depth](这里的depth是2)中。
——————————————————————————————————————————————————————————————
if( rpcTempCU->getTotalCost() < rpcBestCU->getTotalCost())
若假设条件为1,则全为最小划分。判断标准:m_dTotalCost(TComDataCU)

浙公网安备 33010602011771号