HEVC新技术(一):基于MVC的AMVP技术

基于MVC(Motion Vector Competition)的AMVP(Advanced Motion Vector Prediction)

技术是HEVC采用的新技术之一。

所谓AMVP,就是通过空域相邻PU以及时域相邻PU的运动矢量信息构造出一个预测运动矢

量候选列表,通过遍历运动矢量候选列表,选择最佳的预测运动矢量。

在HEVC参考软件HM14.0中对应的代码如下:

// AMVP(Advanced Motion Vector Prediction)
#if ZERO_MVD_EST
Void TEncSearch::xEstimateMvPredAMVP( TComDataCU* pcCU, TComYuv* pcOrgYuv, UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, TComMv& rcMvPred, Bool bFilled, UInt* puiDistBiP, UInt* puiDist  )
#else
Void TEncSearch::xEstimateMvPredAMVP( TComDataCU* pcCU, TComYuv* pcOrgYuv, UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, TComMv& rcMvPred, Bool bFilled, UInt* puiDistBiP )
#endif
{
  AMVPInfo* pcAMVPInfo = pcCU->getCUMvField(eRefPicList)->getAMVPInfo();

  TComMv  cBestMv;
  Int     iBestIdx = 0;
  TComMv  cZeroMv;
  TComMv  cMvPred;
  UInt    uiBestCost = MAX_INT;
  UInt    uiPartAddr = 0;
  Int     iRoiWidth, iRoiHeight;
  Int     i;

  pcCU->getPartIndexAndSize( uiPartIdx, uiPartAddr, iRoiWidth, iRoiHeight );
  // Fill the MV Candidates
  if (!bFilled)
  {
    pcCU->fillMvpCand( uiPartIdx, uiPartAddr, eRefPicList, iRefIdx, pcAMVPInfo );
  }

  // initialize Mvp index & Mvp
  iBestIdx = 0;
  cBestMv  = pcAMVPInfo->m_acMvCand[0];
#if !ZERO_MVD_EST
  if (pcAMVPInfo->iN <= 1)
  {
    rcMvPred = cBestMv;

    pcCU->setMVPIdxSubParts( iBestIdx, eRefPicList, uiPartAddr, uiPartIdx, pcCU->getDepth(uiPartAddr));
    pcCU->setMVPNumSubParts( pcAMVPInfo->iN, eRefPicList, uiPartAddr, uiPartIdx, pcCU->getDepth(uiPartAddr));

    if(pcCU->getSlice()->getMvdL1ZeroFlag() && eRefPicList==REF_PIC_LIST_1)
    {
#if ZERO_MVD_EST
      (*puiDistBiP) = xGetTemplateCost( pcCU, uiPartIdx, uiPartAddr, pcOrgYuv, &m_cYuvPredTemp, rcMvPred, 0, AMVP_MAX_NUM_CANDS, eRefPicList, iRefIdx, iRoiWidth, iRoiHeight, uiDist );
#else
      (*puiDistBiP) = xGetTemplateCost( pcCU, uiPartIdx, uiPartAddr, pcOrgYuv, &m_cYuvPredTemp, rcMvPred, 0, AMVP_MAX_NUM_CANDS, eRefPicList, iRefIdx, iRoiWidth, iRoiHeight);
#endif
    }
    return;
  }
#endif
  if (bFilled)
  {
    assert(pcCU->getMVPIdx(eRefPicList,uiPartAddr) >= 0);
    rcMvPred = pcAMVPInfo->m_acMvCand[pcCU->getMVPIdx(eRefPicList,uiPartAddr)];
    return;
  }

  m_cYuvPredTemp.clear();
#if ZERO_MVD_EST
  UInt uiDist;
#endif
  //-- Check Minimum Cost.
  for ( i = 0 ; i < pcAMVPInfo->iN; i++)
  {
    UInt uiTmpCost;
#if ZERO_MVD_EST
    uiTmpCost = xGetTemplateCost( pcCU, uiPartIdx, uiPartAddr, pcOrgYuv, &m_cYuvPredTemp, pcAMVPInfo->m_acMvCand[i], i, AMVP_MAX_NUM_CANDS, eRefPicList, iRefIdx, iRoiWidth, iRoiHeight, uiDist );
#else
    uiTmpCost = xGetTemplateCost( pcCU, uiPartIdx, uiPartAddr, pcOrgYuv, &m_cYuvPredTemp, pcAMVPInfo->m_acMvCand[i], i, AMVP_MAX_NUM_CANDS, eRefPicList, iRefIdx, iRoiWidth, iRoiHeight);
#endif
    if ( uiBestCost > uiTmpCost )
    {
      uiBestCost = uiTmpCost;
      cBestMv   = pcAMVPInfo->m_acMvCand[i];
      iBestIdx  = i;
      (*puiDistBiP) = uiTmpCost;
#if ZERO_MVD_EST
      (*puiDist) = uiDist;
#endif
    }
  }

  m_cYuvPredTemp.clear();

  // Setting Best MVP
  rcMvPred = cBestMv;
  pcCU->setMVPIdxSubParts( iBestIdx, eRefPicList, uiPartAddr, uiPartIdx, pcCU->getDepth(uiPartAddr));
  pcCU->setMVPNumSubParts( pcAMVPInfo->iN, eRefPicList, uiPartAddr, uiPartIdx, pcCU->getDepth(uiPartAddr));
  return;
}

利用AMVP技术可以充分挖掘时域相关性和空域相关性,提高编码效率。

时间: 2024-09-24 17:34:40

HEVC新技术(一):基于MVC的AMVP技术的相关文章

用Struts开发基于MVC的Web应用

MVC介绍 MVC模式是一种非常理想化的设计模式,应用MVC模式完成两个以上项目的人都有同样的体会,他们已经对以前的工作方法进行了彻底的改造.工作模式的改变要付出痛苦的代价,但现在你有现成的技术架构可以采用,避免在项目中自己开发.摸索.它就是开源Apache Struts framework,它提供了实现MVC设计模式最好的实现工具. 在本文中,我们将简单了解.体会一下模型-视图-控制器(MVC)设计模式,特别地,我们来看看如何用Struts架构来完美地实现MVC模式.我们先从理论上简单地描述M

HEVC算法和体系结构:环路滤波技术

环路滤波(In-Loop Filtering)技术 类似于以往的视频编码标准,HEVC仍采用基于块的混合编码框架,一些失真效应仍然存在,如方块效应.振铃效应.颜色偏差以及图像模糊等等.为了解决这些问题,HEVC中采用了环路滤波技术,它其实是一种用于解码端的后处理滤波技术,主要包括去块滤波(Deblocking Filter,DBF)和样点自适应补偿(Sample Adaptive Offset,SAO).其中,DBF的作用与H.264类似,主要是去除块效应,但是相比于H.264,其决策与滤波过程

基于MVC模式的Struts框架概述

作者:yarshray   关键字: Java  J2EE  MVC  JSP  Servlet  MVC  Struts 内容简介:        MVC设计模式成为了目前十分流行的一种设计方法.它是一种软件的设计方法模式.并且被大量的开发和实践所证明.因此本文通过介绍Struts框架这种已经实现了MVC模式的软件构件框架了讨论该模式的优势和如何投入到软件开发中去.        本文内容注重理论和实践相结合,比较系统的从多层设计方式到分布式软件开发中所用到的技术,从而切入目前Sun公司退出的

基于MVC模式的Struts框架研究与应用

摘要: Struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发.本文讨论了Struts框架实现MVC模式的原理与方法,给出了一个具体的应用实例. 分布式企业应用软件结构复杂.涉及多种技术,对设计开发人员提出了很高的要求.在此情况下,运用设计模式――可复用的设计方案进行软件的设计开发十分必要.MVC模式已被证明是一种成功的软件设计模式,本文主要讨论了一种实现MVC模式的应用框架――Struts,并通过一个实例展示了Struts框架实现MVC模式的方法.

“基于带宽的广告”技术: 广告内容随带宽而变

创业公司GoldSpot Media推出新型"基于带宽的广告"技术,该技术可以让广告商在不同带宽下显示不同的http://www.aliyun.com/zixun/aggregation/17577.html">广告内容.如果用户手机使用的是付费的3G网络,广告内容显示为单一的横幅广告:如果用户手机使用免费的wi-fi上网,在横幅广告上会加载一个自动播放的,在屏幕部分区域显示的重叠式视频广告.该模式既增加了视频收视率又不浪费用户流量. 之前,不管带宽是多少,用户首先都会

京华时报推出了基于移动图片识别技术的“云”报纸

在移动http://www.aliyun.com/zixun/aggregation/3519.html">互联网时代,印刷媒体如何捕捉新技术为我所用?北京的京华时报日前推出了基于移动图片识别技术的"云"报纸. "云"报纸需要一份报纸和一部可拍照的移动智能终端.先下载安装一个"联通亿拍"的应用,激活其中的"我是拍客"功能,就能开启拍照识别程序,然后将摄像头对准京华时报的报头,按下拍照识别键,就能完整地在终端上呈

基于Linux集群技术的校园网络中心方案

随着网络技术的发展和网络应用的进一步深入,校园网络承担了越来越多的来自教学.科研及管理方面的应用.校园网络中心作为校内局域网络的数据存储发布.流量的管理控制.用户的管理以及内外网络转接控制中心,必须解决因流量增加所带来的一系列问题.传统的网络中心方案中,当流量增加后,一般是升级单一的服务器系统,这往往会造成过高的投入和维护成本,极大地降低了性能价格比.运用基于Linux集群技术设计的校园网络中心方案可以有效地解决这一问题. 校园网络中心体系结构 基于Linux集群技术的校园网络中心的体系结构是以

基于MVC设计模式的WEB应用框架研究

摘要 MVC设计模式是基于J2EE的WEB应用开发的首选模式,当前许多流行的框架也都是基于MVC设计模式的.本文简要介绍了MVC设计模式和Struts框架,并提出了一种基于MVC模式的新型WEB应用开发框架--WebFramework,并对该框架的各个层次的组成.功能进行了详细的描述. 关键词 MVC设计模式:J2EE:框架:Struts 引言 随着开源软件的兴起,各种框架也纷纷出现,如Apache 的开源框架Struts就是典型的代表.在实际软件开发中运用这些框架,大大降低了J2EE开发的复杂

我的软件工程硕士论文题目是基于mvc的erp仓库子系统,论文结构请指教!

问题描述 我的软件工程硕士论文题目是基于mvc的erp仓库子系统,今年年底毕业,论文结构请指教!我软件是用c#,.net编的!用的是sql2000,vs2005但我总觉得不是mvc架构,牛人请指教!还有论文的架构我还没想好,请指教! 解决方案 解决方案二:mvc你只要有view,model,controller就算是了,虽然不好用.解决方案三:那c#里面会有view,model,controller三层吗?解决方案四:不会,不过你可以把asp.net看成是v和c,m你自己实现