#900 closed defect (fixed)

SW and SW mismatch on parsing condition of lfnst_idx

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

Description

In VVC D8 vC,
lfnstNotTsFlag = ( treeType == DUAL_TREE_CHROMA | |

transform_skip_flag[ x0 ][ y0 ][ 0 ] == 0 ) &&

( treeType = = DUAL_TREE_LUMA | |
( transform_skip_flag[ x0 ][ y0 ][ 1 ] == 0 &&

transform_skip_flag[ x0 ][ y0 ][ 2 ] == 0 ) )

While in VTM8.0rc1,

for (uint32_t compID = COMPONENT_Y; compID < numValidComp; compID++)
{

if (currTU.blocks[compID].valid() && TU::getCbf(currTU, (ComponentID)compID) && currTU.mtsIdx[compID] == MTS_SKIP)
{

isTrSkip = true;
break;

}

}

According to the spec text, if intra_bdpcm_luma_flag=1 and tu_cbf_luma=0, transform_skip_flag[0] is derived to be 1, thus lfnstNotTsFlag=0 and lfnst_idx will not be parsed. This is regardless what the chroma mode is.

But according to VTM, if tu_cbf_cb and/or tu_cbf_cr is 1 and chroma transform_skip_flag is 0, isTrSkip will be false, thus VTM will parse lfnst_idx.

Not sure which one makes more sense. Personally I would suggest to align spec text with SW. A possible fix is:

lfnstNotTsFlag = ( !tu_cbf_luma[x0][y0] | | transform_skip_flag[ x0 ][ y0 ][ 0 ] = = 0 ) &&

( !tu_cbf_cb[x0][y0] | | transform_skip_flag[ x0 ][ y0 ][ 1 ] = = 0 ) &&
( !tu_cbf_cr[x0][y0] | | transform_skip_flag[ x0 ][ y0 ][ 2 ] = = 0 )

Change history (1)

comment:1 Changed 15 months ago by bbross

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

Thanks for bringing that up.

This has been fixed in D9 by the adoption of JVET-R0319.

Note: See TracTickets for help on using tickets.