xCompressCU()递归调用过程

在xCompressCU()这个函数里面,一直会见到两个缓存区:rpcBestCU和rpcTempCU。转到xCheckRDCostIntra()里面,实际做预测工作的是estIntraPredQT(),用的都是rpcTempCU。做完预测返回后在最后面有一个xCheckBestMode(),转到里面。


关键的语句就是if( rpcTempCU->getTotalCost() < rpcBestCU->getTotalCost() )。一旦这条语句成立,rpcTemp和rpcBestCU两个缓存区就会交换。

再回到xCompressCU()。体现四叉树子CU划分结构的是for ( UInt uiPartUnitIdx = 0; uiPartUnitIdx < 4; uiPartUnitIdx++ )这个循环区。在这个循环区里面的xCompressCU(),用的是pcSubBestPartCU和pcSubTempPartCU。每预测完一个子CU后,都要执行一次rpcTempCU->copyPartFrom(),即把子CU的最佳预测数据复制到当前CU的Temp里面。

在这个循环区完后,继续往下找,还会发现一个xCheckBestMode()。这个就是决定划分深度的关键。这个函数里面的rpcBestCU代表的就是当前深度的预测数据,rpcTempCU代表的就是4个子CU,也就是下一深度的总预测数据。通过这个函数,就能实现两层深度的预测数据比较,并确定采用哪层深度。

由此总结,每个深度的预测用的都是temp,预测完后跟best比较并交换。best保留作为当前深度的预测数据,而temp再次初始化。在下一深度的4个子CU预测中用的是subtemp,每预测完一个子CU,就跟subbest比较交换,再把subbest的数据复制到已经初始化的temp的相应位置。当temp获取完4个子CU的subbest的数据后,就代表了整个下一深度的数据,这时再与代表当前深度数据的best比较交换。


(转自他人,只为学习)

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值