Opened 6 years ago
Closed 5 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 6 years ago by bbross
- Version changed from VVC D7 vE to VVC D8 vB
comment:2 Changed 5 years ago by bbross
- Milestone set to VVC D10
- Version changed from VVC D8 vB to VVC D9 vB
comment:3 Changed 5 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.
Thanks for reporting.
Can anyone confirm that this mismatch still exists between VTM-9.1 and D9?