ECM代码学习:getIntraChromaCandModes

getIntraChromaCandModes函数主要是estIntraPredChromaQT中调用来色度列表的,在ECM中,色度列表默认为以下的12种,前四个模式即PLANAR、VER、HOR、DC模式,若其与DM模式推导得到的帧内预测模式相同则将其替换为VDIA模式。

色度默认列表

Index

Mode

0

PLANAR(VDIA)

1

VER(VDIA)

2

HOR(VDIA)

3

DC(VDIA)

4

CCLM

5

CCLM_L

6

CCLM_T

7

MMLM

8

MMLM_L

9

MMLM_T

10

DM

11

DIMD_CHROMA

若直接模式是MIP模式,则模式不能已在列表中。

代码及注释如下:

void PU::getIntraChromaCandModes(const PredictionUnit &pu, unsigned modeList[NUM_CHROMA_MODE])
{//默认的12种色度模式列表
  modeList[0] = PLANAR_IDX;
  modeList[1] = VER_IDX;
  modeList[2] = HOR_IDX;
  modeList[3] = DC_IDX;
  modeList[4] = LM_CHROMA_IDX;
#if MMLM
  modeList[5] = MDLM_L_IDX;
  modeList[6] = MDLM_T_IDX;
  modeList[7] = MMLM_CHROMA_IDX;
  modeList[8] = MMLM_L_IDX;
  modeList[9] = MMLM_T_IDX;
#if JVET_Z0050_DIMD_CHROMA_FUSION && ENABLE_DIMD
  modeList[10] = DM_CHROMA_IDX;
  modeList[11] = DIMD_CHROMA_IDX;
#else
  modeList[10] = DM_CHROMA_IDX;
#endif
#else
  modeList[5] = MDLM_L_IDX;
  modeList[6] = MDLM_T_IDX;
#if JVET_Z0050_DIMD_CHROMA_FUSION && ENABLE_DIMD
  modeList[7] = DM_CHROMA_IDX;
  modeList[8] = DIMD_CHROMA_IDX;
#else
  modeList[7] = DM_CHROMA_IDX;
#endif
#endif

  // If Direct Mode is MIP, mode cannot be already in the list.
  //如果直接模式是MIP模式,其不能已经在列表中
  if (isDMChromaMIP(pu))
  {
    return;
  }

  //获取当前亮度模式,若为前4种模式,即PLANAR,VER,HOR,DC,则将其设置为VDIA
  const uint32_t lumaMode = getCoLocatedIntraLumaMode(pu);
  for (int i = 0; i < 4; i++)
  {
    if (lumaMode == modeList[i])
    {
      modeList[i] = VDIA_IDX;
      break;
    }
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值