HM/JEM检查当前CU的模式是否是最优模式

33 篇文章 5 订阅
25 篇文章 3 订阅

在HM/JEM中,TEncCu::xCheckBestMode函数用于检验当前模式是否是到目前为止最优的模式,如果当前模式的CU的代价小于之前的最优模式,则做相应的处理,整个函数就是一条if语句(没有else子句)。

/** check whether current try is the best with identifying the depth of current try
 * \param rpcBestCU
 * \param rpcTempCU
 * \param uiDepth
 */
#if JVET_C0024_QTBT
Void TEncCu::xCheckBestMode( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth, UInt uiWidth, UInt uiHeight DEBUG_STRING_FN_DECLARE(sParent) DEBUG_STRING_FN_DECLARE(sTest) DEBUG_STRING_PASS_INTO(Bool bAddSizeInfo) )
#else
Void TEncCu::xCheckBestMode( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, UInt uiDepth DEBUG_STRING_FN_DECLARE(sParent) DEBUG_STRING_FN_DECLARE(sTest) DEBUG_STRING_PASS_INTO(Bool bAddSizeInfo) )
#endif
{
  if( rpcTempCU->getTotalCost() < rpcBestCU->getTotalCost() )
  {
    TComYuv* pcYuv;
    // Change Information data
    TComDataCU* pcCU = rpcBestCU;
    rpcBestCU = rpcTempCU;
    rpcTempCU = pcCU;


#if JVET_C0024_QTBT
    if (uiWidth==0 || uiHeight==0)
    {
      uiWidth = rpcTempCU->getWidth(0);
      uiHeight = rpcTempCU->getHeight(0);
    }
    UInt uiWIdx = g_aucConvertToBit[uiWidth]; 
    UInt uiHIdx = g_aucConvertToBit[uiHeight];
    // Change Prediction data
    pcYuv = m_pppcPredYuvBest[uiWIdx][uiHIdx];
    m_pppcPredYuvBest[uiWIdx][uiHIdx] = m_pppcPredYuvTemp[uiWIdx][uiHIdx];
    m_pppcPredYuvTemp[uiWIdx][uiHIdx] = pcYuv;


    // Change Reconstruction data
    pcYuv = m_pppcRecoYuvBest[uiWIdx][uiHIdx];
    m_pppcRecoYuvBest[uiWIdx][uiHIdx] = m_pppcRecoYuvTemp[uiWIdx][uiHIdx];
    m_pppcRecoYuvTemp[uiWIdx][uiHIdx] = pcYuv;
#else
    // Change Prediction data
    pcYuv = m_ppcPredYuvBest[uiDepth];
    m_ppcPredYuvBest[uiDepth] = m_ppcPredYuvTemp[uiDepth];
    m_ppcPredYuvTemp[uiDepth] = pcYuv;


    // Change Reconstruction data
    pcYuv = m_ppcRecoYuvBest[uiDepth];
    m_ppcRecoYuvBest[uiDepth] = m_ppcRecoYuvTemp[uiDepth];
    m_ppcRecoYuvTemp[uiDepth] = pcYuv;
#endif


    pcYuv = NULL;
    pcCU  = NULL;


    // store temp best CI for next CU coding
#if JVET_C0024_QTBT
    m_ppppcRDSbacCoder[uiWIdx][uiHIdx][CI_TEMP_BEST]->store(m_ppppcRDSbacCoder[uiWIdx][uiHIdx][CI_NEXT_BEST]);
#else
    m_pppcRDSbacCoder[uiDepth][CI_TEMP_BEST]->store(m_pppcRDSbacCoder[uiDepth][CI_NEXT_BEST]);
#endif




#if DEBUG_STRING
    DEBUG_STRING_SWAP(sParent, sTest)
    const PredMode predMode=rpcBestCU->getPredictionMode(0);
    if ((DebugOptionList::DebugString_Structure.getInt()&DebugStringGetPredModeMask(predMode)) && bAddSizeInfo)
    {
      std::stringstream ss(stringstream::out);
      ss <<"###: " << (predMode==MODE_INTRA?"Intra   ":"Inter   ") << partSizeToString[rpcBestCU->getPartitionSize(0)] << " CU at " << rpcBestCU->getCUPelX() << ", " << rpcBestCU->getCUPelY() << " width=" << UInt(rpcBestCU->getWidth(0)) << std::endl;
      sParent+=ss.str();
    }
#endif
  }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jem5396数据手册是一本详细介绍jem5396芯片特性和规格的技术文档。该手册包含了有关jem5396芯片使用和配置的所有必要信息。 首先,手册提供了对jem5396芯片的基本介绍。它解释了该芯片的功能和用途,以及它适用的领域和应用。这使得用户能够了解当下这个芯片的主要用途是什么,以及如何在实际应用中发挥其功能。 其次,手册详细说明了jem5396芯片的技术规格。这包括关于尺寸、电源要求、通信接口和其他物理特性的信息。这些规格对于设计师来说是非常重要的,因为它们决定了芯片在不同系统中的集成和使用方式。 手册还提供了关于jem5396芯片功能和操作的详细描述。它解释了芯片所支持的功能和模式,并提供了相应的寄存器配置、命令和接口协议。这使得用户能够更好地理解如何使用芯片以实现所需的功能。 此外,手册还包含了jem5396芯片的性能参数和特性。它提供了关于功耗、速度、精度、温度范围和可靠性等方面的详细信息。这对于系统设计者来说很重要,因为他们需要这些数据来评估该芯片是否满足他们的设计需求。 最后,手册还包含了有关jem5396芯片的应用示例和建议。这些示例展示了如何使用芯片来实现特定的功能,给出了一些建议和最佳实践,以确保芯片的最佳性能和稳定性。 总之,jem5396数据手册是一本非常有用的技术文档,为用户提供了有关该芯片的详尽信息。无论是系统设计师、工程师还是研发人员,他们都可以通过手册来了解芯片的特性、规格和使用方法,以便更好地集成和应用jem5396芯片。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值