HEVC代码学习31:xCheckRDCostMerge2Nx2N函数

本文主要探讨HEVC(High Efficiency Video Coding)编码中merge模式的xCheckRDCostMerge2Nx2N函数,该函数用于构建Merge候选列表,通过比较运动补偿后的残差和RD成本来选择最优的运动矢量。在merge模式下,不进行运动估计,直接使用空间邻近块的MV进行预测。文章提到了函数的工作流程,包括调用getInterMergeCandidates、motionCompensation和encodeResAndCalcRdInterCU等步骤,并提供了相关函数的链接以供深入学习。
摘要由CSDN通过智能技术生成

推荐阅读
http://blog.csdn.net/nb_vol_1/article/details/51163625
http://blog.csdn.net/guoyaoyao1990/article/details/35339717

今天来学习HM中merge部分的代码,其入口函数为xCheckRDCostMerge2Nx2N。

这里需要注意的是,merge是借用空间邻近块的MV作为当前块的MV直接进行预测,不再进行运动估计。也就是说,对于merge是没有MVP的,直接得到的即为MV,不存在MVD。因此在merge模式下是没有运动估计的。

而这个被merge选到的MV由已编码的空间邻近块得到,不需要再进行传输了,只需要传输最优MV的候选列表索引即可。

xCheckRDCostMerge2Nx2N功能即为构造Merge候选列表,遍历列表进行运动补偿,通过比较RD cost,最终得到最优MV和最优模式信息。

工作流程如下:
1. 调用getInterMergeCandidates构造候选列表。
2. 遍历候选列表:
(1) 调用motionCompensation进行运动补偿。
(2) 调用encodeResAndCalcRdInterCU计算残差和RD cost
并进行编码。
(3) 比较选出最优MV和最优模式信息。

其中使用到的重要函数为getInterMergeCandidates(http://blog.csdn.net/lin453701006/article/details/78573347),motionCompensation(http://blog.csdn.net/lin453701006/article/details/72677630),encodeResAndCalcRdInterCU(http://blog.csdn.net/lin453701006/article/details/77249344)。

代码分析:

/** check RD costs for a CU block encoded with merge
 * \param rpcBestCU
 * \param rpcTempCU
 * \param earlyDetectionSkipMode
 */
//计算2Nx2N块Merge下的RD代价
Void TEncCu::xCheckRDCostMerge2Nx2N( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU DEBUG_STRING_FN_DECLARE(sDebug), Bool *earlyDetectionSkipMode )
{
  assert( rpcTempCU->getSlice()->getSliceType() != I_SLICE );       //检测非I帧
  if(getFastDeltaQp())      //快速deltaQP,默认关闭
  {
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值