Opened 2 months ago

Last modified 6 weeks ago

#440 new defect

Issue on cu_skip_flag

Reported by: wangyang.cs Owned by:
Priority: minor Milestone:
Component: spec Version: VVC D6 vE
Keywords: cu_skip_flag, IBC CU size Cc: ksuehring, bbross, XiangLi, fbossen, jvet@…, jvet@…, wangyang.cs@…

Description

There is one issue on cu_skip_flag in current VVC draft (JVET-O2001-vE). In the draft described below, when (slice_type == I && treeType == SINGLE_TREE && sps_ibc_enabled_flag == 1 && (cbWidth > 64
cbHeight > 64), cu_skip_flag will be parsed.

7.3.8.5 Coding unit syntax
coding_unit( x0, y0, cbWidth, cbHeight, cqtDepth, treeType, modeType ) {

chType = treeType = = DUAL_TREE_CHROMA? 1 : 0
if( slice_type != I | | sps_ibc_enabled_flag | | sps_palette_enabled_flag) {

if( treeType != DUAL_TREE_CHROMA &&

!( ( ( cbWidth = = 4 && cbHeight = = 4 ) | | modeType = = MODE_TYPE_INTRA )

&& !sps_ibc_enabled_flag ) )

cu_skip_flag[ x0 ][ y0 ]


However, largest IBC luma CU size has been limited to 64x64.
The modified draft is described as follows:


7.3.8.5 Coding unit syntax
coding_unit( x0, y0, cbWidth, cbHeight, cqtDepth, treeType, modeType ) {

chType = treeType = = DUAL_TREE_CHROMA? 1 : 0
if( slice_type != I | | sps_ibc_enabled_flag | | sps_palette_enabled_flag) {

if( treeType != DUAL_TREE_CHROMA &&

!( ( ( cbWidth = = 4 && cbHeight = = 4 ) | | modeType = = MODE_TYPE_INTRA )

&& !(sps_ibc_enabled_flag && cbWidth <= 64 && cbHeight <= 64 ) ) )

cu_skip_flag[ x0 ][ y0 ]


Change history (9)

comment:1 Changed 2 months ago by wangyang.cs

  • Cc wangyang.cs@… added
  • Priority changed from major to minor

comment:2 follow-up: Changed 2 months ago by hmjang

This Ticket handles same issue on #325.
But, the proposed condition seems not handle some eceptional case.
For example, when the case is that current slice is I-Slice, current block is 128x128 and sps_ibc_enabled_flag is equal to 0. for this case cu_skip_flag is not needed to signal.

but, by the proposed condition in this ticket, cu_skip_flag is signaled.

It should be confirmed by reporter.

comment:3 in reply to: ↑ 2 Changed 2 months ago by wangyang.cs

In the case of I-slice, modeType is equal to MODE_TYPE_INTRA, cu_skip_flag is not signaled in the proposed condition.

comment:4 follow-up: Changed 2 months ago by hmjang

Thank you for the feedback.

I agree that cu_skip_flag is not need to signal when modeType is equal to MODE_TYPE_INTRA. But, I-Slice itself does not mean MODE_TYPE_INTRA. if My understanding is correct, the modeType of 128x128(CTU) block in I-Slice(Single Tree and Dual tree) might be set equal to MODE_TYPE_ALL and it is defined by modeTypeCondition and mode_constraint_flag for SCIPU case.

Hence, the cu_skip_flag could be signalled for 128x128 block which is in I-Slice by the proposed condition in this ticket.

If we keep the condition in this ticket, MODE_TYPE_ALL for I-Slice should be changed to MODE_TYPE_INTRA. It seems reasonable.

Otherwise, the condition should be described as below in order to handle all case.

if( treeType != DUAL_TREE_CHROMA &&

((slice_type != I && ( sps_ibc_enabled_flag | | !( ( cbWidth = = 4 && cbHeight = = 4 ) | | modeType = = MODE_TYPE_INTRA ))) | |
(slice_type == I && sps_ibc_enabled_flag && cbWidth <=64 && cbHeight <= 64)))

comment:5 in reply to: ↑ 4 Changed 2 months ago by wangyang.cs

I agree.

In my opinion, sps_palette_enabled_flag makes it complicated when parsing cu_skip_flag. sps_palette_enabled_flag has nothing to do with cu_skip_flag, pred_mode_flag, and pred_mode_ibc_flag.

How about putting pred_mode_plt_flag outside if( slice_type != I | | sps_ibc_enabled_flag | | sps_palette_enabled_flag)?

Thus, the case of I-slice, sps_ibc_enabled_flag is equal to 0 won't meet the condition any more.

comment:6 Changed 2 months ago by wangyang.cs

It is recommended to change the syntax table as follows:

if( slice_type != I | | sps_ibc_enabled_flag | | sps_palette_enabled_flag) {

if( treeType != DUAL_TREE_CHROMA &&

!( ( ( cbWidth = = 4 && cbHeight = = 4 ) | | modeType = = MODE_TYPE_INTRA )
&& !(sps_ibc_enabled_flag && cbWidth <=64 && cbHeight <= 64) ) )
cu_skip_flag[ x0 ][ y0 ]

if( cu_skip_flag[ x0 ][ y0 ] = = 0 && slice_type != I

&& !( cbWidth = = 4 && cbHeight = = 4 ) && modeType = = MODE_TYPE_ALL )
pred_mode_flag

if( ( ( slice_type = = I && cu_skip_flag[ x0 ][ y0 ] = =0 ) | |

( slice_type != I && ( CuPredMode[ chType ][ x0 ][ y0 ] != MODE_INTRA | |
( cbWidth = = 4 && cbHeight = = 4 && cu_skip_flag[ x0 ][ y0 ] = = 0 ) ) ) ) &&
cbWidth <= 64 && cbHeight <= 64 && modeType != MODE_TYPE_INTER &&
sps_ibc_enabled_flag && treeType != DUAL_TREE_CHROMA )
pred_mode_ibc_flag

}
if( ( ( ( slice_type = = I | | ( cbWidth = = 4 && cbHeight = = 4 ) | | sps_ibc_enabled_flag ) &&

CuPredMode[ x0 ][ y0 ] = = MODE_INTRA ) | |
( slice_type != I && !( cbWidth = = 4 && cbHeight = = 4 ) && !sps_ibc_enabled_flag
&& CuPredMode[ x0 ][ y0 ] != MODE_INTRA ) ) && sps_palette_enabled_flag &&
cbWidth <= 64 && cbHeight <= 64 && && cu_skip_flag[ x0 ][ y0 ] = = 0 &&
modeType != MODE_INTER )
pred_mode_plt_flag

comment:7 Changed 6 weeks ago by bbross

Ticket #325 has been marked as a duplicate of this ticket.

comment:8 Changed 6 weeks ago by bbross

Thanks for bringing up this issues and proposing potential solutions.
In order to address this issues, I would like to know:
a) How is it done in VTM? Is there a mismatch?
b) If I understand it correctly, the issue is that a skip flag equal to 1 would be allowed for intra CUs > 64x64 since IBC is not allowed for these CUs but allows the signalling of the skip flag, correct?

comment:9 Changed 6 weeks ago by wangyang.cs

Thanks for your comments.
a) Yes, there is a mismatch. In VTM, cu_skip_flag is not signaled for intra CUs > 64x64 in I slice. Spec should be corrected.
b) That's exactly what I mean. There is no need to signal cu_skip_flag for CUs > 64x64 in I slice.

Note: See TracTickets for help on using tickets.