Opened 5 years ago

Closed 5 years ago

#462 closed defect (fixed)

incorrect predModeIntra for CCLM mode in 8.7.4.1

Reported by: hongbin Owned by:
Priority: minor Milestone:
Component: spec Version:
Keywords: Cc: ksuehring, bbross, XiangLi, fbossen, jvet@…

Description

8.7.4.1 general

current specification in JVET-O2001-vE:

– When predModeIntra is equal to either INTRA_LT_CCLM, INTRA_L_CCLM, or INTRA_T_CCLM, predModeIntra is set equal to IntraPredModeY[ xTbY + nTbW / 2 ][ yTbY + nTbH / 2 ].

shall be corrected to:
– When predModeIntra is equal to either INTRA_LT_CCLM, INTRA_L_CCLM, or INTRA_T_CCLM, predModeIntra is derived as follows:
– If intra_mip_flag[ xTbY + nTbW / 2 ][ yTbY + nTbH / 2 ] is equal to 1, predModeIntra is set equal to INTRA_PLANAR.
– Otherwise, if CuPredMode[ 0 ][ xTbY + nTbW / 2 ][ yTbY + nTbH / 2 ] is equal to MODE_IBC or MODE_PLT, predModeIntra is set equal to INTRA_DC.
– Otherwise, predModeIntra is set equal to IntraPredModeY[ xTbY + nTbW / 2 ][ yTbY + nTbH / 2 ].

Change history (4)

comment:1 Changed 5 years ago by bbross

Thanks for reporting this.

When I check VTM, I can find the mapping for the collocated MIP mode to INTRA_DC in case of CCLM:

  if( PU::isLMCMode( tu.cs->getPU( area.pos(), toChannelType( compID ) )->intraDir[ toChannelType( compID ) ] ) )
    {
#if JVET_O0219_LFNST_TRANSFORM_SET_FOR_LMCMODE
      intraMode = PU::getCoLocatedIntraLumaMode( *tu.cs->getPU( area.pos(), toChannelType( compID ) ) );
#else
      intraMode = PLANAR_IDX;
#endif
    }

Hence, I can confirm that the first condition is missing.

However, the function getCoLocatedIntraLumaMode does not check MODE_IBC or MODE_PLT and does not set the intra mode to INTRA_DC accordingly.
Am I missing something here?

comment:2 Changed 5 years ago by bbross

For MIP, I meant PLANAR not DC of course.

Further looking into VTM code and after internal discussion with Philipp, we have the following assumption regarding INTRA_DC for IBC and palette mode.

In VTM, could it be that for IBC and palette the luma intra mode is set per default to DC and not further changed?
Setting predModeIntra to IntraPredModeY in this case would result in DC if IBC or planar is used for prediction.
So the derivation is not as explicit as in the spec and hard to understand.

Could someone familiar with the code please confirm?

If that is the case, the code is
a) hard to read as I had trouble finding it when looking for that part
b) prone to errors as the default could be change in some other place with impact the impact that the implicit assumption of DC for IBC and palette holds not true anymore. I suppose this is not easy to debug as well.
So if that is the case, I would welcome a merge request improving the code for that part.

comment:3 Changed 5 years ago by biaowang

In Unit.cpp
at the beginning of PredictionUnit::initData()
luma is by default initialized with DC_IDX

comment:4 Changed 5 years ago by bbross

  • Resolution set to fixed
  • Status changed from new to closed

Thanks! So this confirms our assumption and the suggested fix is correct and fixed in a document we are preparing to be submitted as an editorial input to the 16th JVET meeting.

However my comments on hard to read and hard to maintain w.r.t that code remain.

Note: See TracTickets for help on using tickets.