#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
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.
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?