Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#1366 closed defect (fixed)

Inference of cu_skip_flag and tu_y_coded_flag for dual tree IBC

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

Description

1.) If "when not present" in the following statements is interpreted to mean not present for either the DUAL_TREE_LUMA or DUAL_TREE_CHROMA parsing at location [x0][y0],

When cu_skip_flag[ x0 ][ y0 ] is not present, it is inferred to be equal to 0.
When tu_y_coded_flag[ x0 ][ y0 ] is not present, its value is inferred as follows...


then I think the inference of pred_mode_ibc_flag for DUAL_TREE_CHROMA below should be moved first in this list. Otherwise the cu_skip_flag[ x0 ][ y0 ] from the DUAL_TREE_LUMA CU will be used for the DUAL_TREE_CHROMA CU.

– If cu_skip_flag[ x0 ][ y0 ] is equal to 1, and cbWidth is equal to 4, and cbHeight is equal to 4, pred_mode_ibc_flag is inferred to be equal 1.
– Otherwise, if cu_skip_flag[ x0 ][ y0 ] is equal to 1 and modeType is equal to MODE_TYPE_INTRA, pred_mode_ibc_flag is inferred to be equal 1.
– Otherwise, if either cbWidth or cbHeight are equal to 128, pred_mode_ibc_flag is inferred to be equal to 0.
– Otherwise, if modeType is equal to MODE_TYPE_INTER, pred_mode_ibc_flag is inferred to be equal to 0.
– Otherwise, if treeType is equal to DUAL_TREE_CHROMA, pred_mode_ibc_flag is inferred to be equal to 0.
– Otherwise, pred_mode_ibc_flag is inferred to be equal to the value of sps_ibc_enabled_flag when decoding an I slice, and 0 when decoding a P or B slice, respectively.

2.) Alternatively, if "when not present" above is interpreted to mean not present in the current CU exclusively (neither of these syntax elements will ever be present in a DUAL_TREE_CHROMA CU), then I believe the following should not apply for DUAL_TREE_CHROMA treeType.

The variable CuSkipFlag[ x ][ y ] is set equal to cu_skip_flag[ x0 ][ y0 ] for x = x0..x0 + cbWidth - 1, y = y0..y0 + cbHeight - 1.

if treeType is equal to DUAL_TREE_CHROMA, tu_y_coded_flag[ x0 ][ y0 ] is inferred to be equal to 0.

Otherwise, the DUAL_TREE_CHROMA CU will erase the CuSkipFlag and tu_y_coded_flag from the DUAL_TREE_LUMA CU, which are required for IBC skip context derivation and deblocking.

Change history (4)

comment:1 Changed 4 years ago by bbross

First, my interpretation is that the "when not present" always applies to the current CU, i.e. 2.)
Second for CuSkipFlag, I agree that excluding the DUAL_TREE_CHROMA case works since this variable is only used in ctx derivation.
However, for tu_y_coded_flag, I remember having added this condition was added as a fix to ticket #668
https://jvet.hhi.fraunhofer.de/trac/vvc/ticket/668
Now I am wondering whether this fix was really necessary and removing it would break something.
Checking all current occurrences of tu_y_coded_flag it seems that removing that condition is safe.
Can somebody confirm that?

comment:2 Changed 4 years ago by bheng

If you just remove the condition, the flag would get set to 1 in every DUAL_TREE_CHROMA CU (like reported in #668). So, I think it also needs something like:

When tu_y_coded_flag[ x0 ][ y0 ] is not present and treeType is not equal to DUAL_TREE_CHROMA, its value is inferred as follows:

That way the luma flag will not be modified or inferred to be anything at all for a DUAL_TREE_CHROMA CU.

comment:3 Changed 4 years ago by bbross

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

Fixed as discussed/suggested in JVET-T0110-v2.

comment:4 Changed 4 years ago by bbross

You're right Brian, I missed that condition on DUAL_TREE_CHROMA in the inference of tu_y_coded_flag and it has been added in JVET-T0110-v3.

Note: See TracTickets for help on using tickets.