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)

 

posted @ 2024-01-03 19:03  师映川  阅读(49)  评论(0)    收藏  举报