VTM3.0代码阅读:xCheckRDCostInter函数

xCheckRDCostInter函数在xCompressCU中用于检查inter_ME帧间模式,该模式基于AMVP获取初始运动信息,并通过ME细化得到MVP和MVD。在ME之后,predInterSearch函数计算最小失真的pred像素,xEncodeInterResidual函数则计算resi和reco像素成本,确定最优模式并存储到bestCS。同时,函数中包含了GBi的相关处理逻辑。
摘要由CSDN通过智能技术生成

xCheckRDCostInter函数在xCompressCU中被调用,用来check普通帧间模式,也就是inter_ME模式。
inter_ME模式通过AMVP得到相邻块中的最优的两个运动信息,以此作为运动估计的起始点,然后经过ME,获得MVP和MVD等inter运动信息。
在通过ME得到运动信息之后,即MVP之后,通过MC得到pred像素。这些都在predInterSearch函数中实现。(predInterSearch函数中是通过选择最小pred像素失真来选择最优inter运动信息的)
最后计算最优inter运动信息下的resi和reco像素信息,得到cost,通过xCheckBestMode将最优模式存入bestCS。这些在xEncodeInterResidual函数中实现。
函数中加了很多GBi的代码,以后看。

void EncCu::xCheckRDCostInter( CodingStructure *&tempCS, CodingStructure *&bestCS, Partitioner &partitioner, const EncTestMode& encTestMode )
{
   
  tempCS->initStructData( encTestMode.qp, encTestMode.lossless );	//tempCS清空初始化

#if JVET_L0646_GBI
  
  m_pcInterSearch->setAffineModeSelected(false);

  if( tempCS->slice->getCheckLDC() )
  {
   
    m_bestGbiCost[0] = m_bestGbiCost[1] = std::numeric_limits<double>::max();
    m_bestGbiIdx[0] = m_bestGbiIdx[1] = -1;
  }

  m_pcInterSearch->resetBufferedUniMotions();
  int gbiLoopNum = (tempCS->slice->isInterB() ? GBI_NUM : 1);
  gbiLoopNum = (tempCS->sps->getSpsNext().getUseGBi
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值