VVC/JEM代码学习24:xRecurIntraChromaCodingQT()

在执行色度分量的预测时,对色度分量的11种候选模式都调用一次xRecurIntraChromaCodingQT函数,在里面完成预测,求残差,变换量化和重建,并返回失真。

Void
TEncSearch::xRecurIntraChromaCodingQT(TComYuv*    pcOrgYuv,
                                      TComYuv*    pcPredYuv,
                                      TComYuv*    pcResiYuv,
#if COM16_C806_LARGE_CTU
                                      Pel*        resiLuma[NUMBER_OF_STORED_RESIDUAL_TYPES],
#else
                                      Pel         resiLuma[NUMBER_OF_STORED_RESIDUAL_TYPES][MAX_CU_SIZE * MAX_CU_SIZE],
#endif
                                      Distortion& ruiDist,
                                      TComTU&     rTu
                                      DEBUG_STRING_FN_DECLARE(sDebug))
{
  TComDataCU         *pcCU                  = rTu.getCU();
  const UInt          uiTrDepth             = rTu.GetTransformDepthRel();//一定为0;
#if JVET_C0024_QTBT
  assert(rTu.GetAbsPartIdxTU()==0 && uiTrDepth==0);
  UInt uiWIdx = g_aucConvertToBit[pcCU->getWidth(0)];
  UInt uiHIdx = g_aucConvertToBit[pcCU->getHeight(0)];
#else
  const UInt          uiAbsPartIdx          = rTu.GetAbsPartIdxTU();
#endif
  const ChromaFormat  format                = rTu.GetChromaFormat();
#if !JVET_C0024_QTBT
  UInt                uiTrMode              = pcCU->getTransformIdx( uiAbsPartIdx );
#endif
  const UInt          numberValidComponents = getNumberValidComponents(format);

#if JVET_C0024_QTBT
  assert(uiTrDepth==0);
#else
  if(  uiTrMode == uiTrDepth )
  {
#endif
    if (!rTu.ProcessChannelSection(CHANNEL_TYPE_CHROMA))
    {
      return;
    }

#if !JVET_C0024_QTBT
    const UInt uiFullDepth = rTu.GetTransformDepthTotal();
#endif

    Bool checkTransformSkip = pcCU->getSlice()->getPPS()->getUseTransformSkip();
#if JVET_C0024_QTBT
    checkTransformSkip &= TUCompRectHasAssociatedTransformSkipFlag(pcCU->getSlice()->isIntra(), rTu.getRect(COMPONENT_Cb), pcCU->getSlice()->getPPS()->getPpsRangeExtension().getLog2MaxTransformSkipBlockSize());
#else
    checkTransformSkip &= TUCompRectHasAssociatedTransformSkipFlag(rTu.getRect(COMPONENT_Cb), pcCU->getSlice()->getPPS()->getPpsRangeExtension().getLog2MaxTransformSkipBlockSize());
#endif

    if ( m_pcEncCfg->getUseTransformSkipFast() )
    {
#if JVET_C0024_QTBT//只有亮度分量使用跳过变换时才允许色度分量使用
      checkTransformSkip &= TUCompRectHasAssociatedTransformSkipFlag(pcCU->getSlice()->isIntra(), rTu.getRect(COMPONENT_Y), pcCU->getSlice()->getPPS()->getPpsRangeExtension().getLog2MaxTransformSkipBlockSize());
#else
      checkTransformSkip &= TUCompRectHasAssociatedTransformSkipFlag(rTu.getRect(COMPONENT_Y), pcCU->getSlice()->getPPS()->getPpsRangeExtension().getLog2Max
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值