Opened 5 years ago

Closed 4 years ago

#754 closed defect (fixed)

SW/Spec mismatch on tu_cbf_luma signalling

Reported by: jason Owned by:
Priority: minor Milestone: VVC D10
Component: spec Version: VVC D9 vB
Keywords: ACT, tu_cbf_luma Cc: ksuehring, bbross, XiangLi, fbossen, jvet@…

Description

In the current master branch, tu_cbf_luma signalling depends on tu_cbf_cb, tu_cbf_cr and transform depth when ACT is applied to intra block.

// 'transform_unit' function in CABACReader.cpp
#if JVET_P0517_ADAPTIVE_COLOR_TRANSFORM
      bool lumaCbfIsInferredACT = (cu.colorTransform && cu.predMode == MODE_INTRA && trDepth == 0 && !chromaCbfs.sigChroma(area.chromaFormat));
      bool lastCbfIsInferred    = lumaCbfIsInferredACT; // ISP and ACT are mutually exclusive
      bool previousCbf          = false;
      bool rootCbfSoFar         = false;
#else
      bool previousCbf = false;
      bool rootCbfSoFar = false;
      bool lastCbfIsInferred = false;    
#endif
      ...
      bool cbfY = lastCbfIsInferred ? true : cbf_comp(cs, tu.Y(), trDepth, previousCbf, cu.ispMode);
      TU::setCbfAtDepth(tu, COMPONENT_Y, trDepth, (cbfY ? 1 : 0));

Meanwhile, in JVET-P2001-vE, tu_cbf_luma is always parsed for intra block with ACT mode.

7.3.9.10 Transform unit syntax

if( treeType == SINGLE_TREE || treeType == DUAL_TREE_LUMA ) {
   if( ( IntraSubPartitionsSplitType == ISP_NO_SPLIT && !( cu_sbt_flag &&
         ( ( subTuIndex == 0 && cu_sbt_pos_flag ) ||
         ( subTuIndex == 1 && !cu_sbt_pos_flag ) ) ) &&
         ( CuPredMode[ chType ][ x0 ][ y0 ] == MODE_INTRA ||
         ( chromaAvailable && ( tu_cbf_cb[ xC ][ yC ] || tu_cbf_cr[ xC ][ yC ] ) ||
         CbWidth[ chType ][ x0 ][ y0 ] > MaxTbSizeY ||
         CbHeight[ chType ][ x0 ][ y0 ] > MaxTbSizeY ) ) ||
       ( IntraSubPartitionsSplitType != ISP_NO_SPLIT &&
         ( subTuIndex < NumIntraSubPartitions - 1 || !InferTuCbfLuma ) ) )
       tu_cbf_luma[ x0 ][ y0 ]
       ...
}

Suggestion: Aligning spec with SW

if( treeType == SINGLE_TREE | | treeType == DUAL_TREE_LUMA ) {

if( ( IntraSubPartitionsSplitType == ISP_NO_SPLIT && !( cu_sbt_flag &&
( ( subTuIndex == 0 && cu_sbt_pos_flag ) | |
( subTuIndex == 1 && !cu_sbt_pos_flag ) ) ) &&
( ( CuPredMode[ chType ][ x0 ][ y0 ] == MODE_INTRA &&
!cu_act_enabled_flag[ x0 ][ y0 ] ) | |
( chromaAvailable && ( tu_cbf_cb[ xC ][ yC ] | | tu_cbf_cr[ xC ][ yC ] ) | |
CbWidth[ chType ][ x0 ][ y0 ] > MaxTbSizeY | |
CbHeight[ chType ][ x0 ][ y0 ] > MaxTbSizeY ) ) | |
( IntraSubPartitionsSplitType != ISP_NO_SPLIT &&
( subTuIndex < NumIntraSubPartitions - 1 | | InferTuCbfLuma ) ) )

tu_cbf_luma[ x0 ][ y0 ]

...

}

Change history (3)

comment:1 Changed 4 years ago by bbross

  • Version changed from VVC D7 vE to VVC D8 vB

comment:2 Changed 4 years ago by bbross

  • Milestone set to VVC D10
  • Version changed from VVC D8 vB to VVC D9 vB

Thanks for reporting.

Can anyone confirm that this mismatch still exists between VTM-9.1 and D9?

comment:3 Changed 4 years ago by bbross

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

This will be fixed in JVET-S2001-v7 with the adoption of JVET-S0233.

Note: See TracTickets for help on using tickets.