【VTM10.0】帧内之DM技术

色度只有8种候选模式:
在这里插入图片描述
在这里插入图片描述
横轴是色度块所对应的亮度块的预测方向,纵轴是当前色度块的候选预测模式。
冗余性检验: 如列表前面出现过DM的模式,则用66取代列表前面的重复模式
以免在RDcost的时候和DM模式重复,最后选取RDcost最小的一种角度模式,即可最终确定色度角度预测模式。

DM模式:
找到当前色度CU位置对应的亮度CU位置,将其中心块的预测模式作为DM候选模式。

在这里插入图片描述

uint32_t PU::getFinalIntraMode( const PredictionUnit &pu, const ChannelType &chType )
{
  //uiIntraMode赋值为当前pu的帧内模式
  uint32_t uiIntraMode = pu.intraDir[chType];

  if( uiIntraMode == DM_CHROMA_IDX && !isLuma( chType ) )
  {//如果当前不是亮度 且 是DM模式,则获得他中心点的亮度模式
    uiIntraMode = getCoLocatedIntraLumaMode(pu);//函数解析见下方
  }
  if( pu.chromaFormat == CHROMA_422 && !isLuma( chType ) && uiIntraMode < NUM_LUMA_MODE ) // map directional, planar and dc
  {//如果是422模式并且当前不是亮度,并且目前uiIntraMode的值小于NUM_LUMA_MODE,则进行帧内422角度的映射
    uiIntraMode = g_chroma422IntraAngleMappingTable[uiIntraMode];
  }
  return uiIntraMode;
}
uint32_t PU::getCoLocatedIntraLumaMode(const PredictionUnit &pu)
{//找当前色度块对应的亮度中间的位置的PU传进去
  return PU::getIntraDirLuma(PU::getCoLocatedLumaPU(pu));
}
uint32_t PU::getIntraDirLuma( const PredictionUnit &pu )
{
  if (isMIP(pu))
  {//如果是MIP模式,那么就返回planar
    return PLANAR_IDX;
  }
  else
  {//否则返回当前的亮度模式
    return pu.intraDir[CHANNEL_TYPE_LUMA];
  }
}

猜你喜欢

转载自blog.csdn.net/zzy_pphz/article/details/116719411