HM代码阅读3:AMVP候选填充函数Void TComDataCU::fillMvpCand ()

本文详细解析了HM编码器中AMVP(Adaptive Motion Vector Prediction)候选填充函数的工作原理,包括空域和时域相关性计算,MVP候选的获取策略,以及填充流程中的去冗余和补充0矢量等关键步骤,旨在帮助理解HEVC编码中的运动估计优化过程。
摘要由CSDN通过智能技术生成

AMVP候选理论回顾
根据图像中块与块的相关性计算,针对当前块,空域上与其相关性最强的块的位置如下图所示:
在这里插入图片描述

时域上相关性的最强的块如下图所示:
在这里插入图片描述
HM中该MVP填充流程如下:

  1. 计算得到当前PU左上、左下、右上的4x4块的索引值.将ZScan转换成Raster来找更好计算位置
  2. 预先判断当前PU左方的CU能不能获取,不能获取的话 isScaledFlagLX=false
  3. 依次找无需缩放的A0、A1。根据当前参考帧以及所选块参考帧来确定,若两个参考帧相同,则就无需缩放。如果无需缩放的MVP找不到,则寻找可以缩放的MVP。
  4. 依次找上方的CU:B0、B1、B2(此步只找无需缩放的MVP)
  5. 如果左方的CU不能用,再依次找可以缩放的 B0 B1 B2填入AMVP候选
  6. 判断当前MVP候选个数,同时去冗余
  7. 去完冗余后,若还不满足AMVP候选个数最大值,则寻找时域同位块的MV。
  8. 先找右下方的CU、右下方CU不可用或者是当前PU右下角的4x4块在当前CTU角落、在最后一行不在最后一列时也不可用。就开始寻找中心块
  9. 若还填不满 则填充0矢量.

代码如下:

/** Constructs a list of candidates for AMVP (See specification, section "Derivation process for motion vector predictor candidates")
 * \param uiPartIdx -当前处理PU的索引
 * \param uiPartAddr - 当前处理PU的起始地址(后续需要根据当前CU的地址来判断)
 * \param eRefPicList - 当前参考图像列表
 * \param iRefIdx - 当前参考帧
 * \param pInfo - 要存入的MVP信息
 */
Void TComDataCU::fillMvpCand ( const UInt partIdx, const UInt partAddr, const RefPicList eRefPicList, const Int refIdx, AMVPInfo* pInfo ) const
{
   
  pInfo->iN = 0;
  if (refIdx < 0)
  {
   
    return;
  }

  //-- Get Spatial MV
  // 得到当前PU左上,右上,左下4x4CU块的索引(4x4为默认最小CU)
  // Zscan为Z扫, Raster为逐行扫描
  UInt partIdxLT, partIdxRT, partIdxLB;
  deriveLeftRightTopIdx( partIdx, partIdxLT, partIdxRT ); //要以当前CU起始位置开始找
  deriveLeftBottomIdx( partIdx, partIdxLB );

  Bool isScaledFlagLX = false; /// variable name from specification; true when the PUs below left or left are available (availableA0 || availableA1).
  //判断左方的CTU,左下方CU能不能获取
  {
   
    UInt idx;
    const TComDataCU* tmpCU = getPUBelowLeft(idx, partIdxLB);
    isScaledFlagLX = (tmpCU != NULL) && (tmpCU->isInter(idx));
    if (!isScaledFlagLX)
    {
   
      tmpCU = getPULeft(idx, partIdxLB);
      isScaledFlagLX = (tmpCU != NULL) && 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值