Opened 5 years ago

Closed 5 years ago

#325 closed defect (duplicate)

Redundant syntax parsing related to IBC restriction for 128x128 blocks

Reported by: geonjungko Owned by:
Priority: minor Milestone:
Component: spec Version: VVC D6 vE
Keywords: Cc: ksuehring, bbross, XiangLi, fbossen, jvet@…

Description

Because IBC mode is restricted for 128x128 blocks, 128x128 blocks in I slice should use MODE_INTRA. Therefore cu_skip_flag, pred_mode_flag and pred_mode_ibc_flag are not necessary, and it is not required to enter the parsing part of those syntax elements in the coding unit syntax.

Suggested fix:
coding_unit( x0, y0, cbWidth, cbHeight, treeType ) {

if( ( slice_type != I | | sps_ibc_enabled_flag ) && !( slice_type == I && cbWidth == 128 && cbHeight == 128 ) ) {

/* parse cu_skip_flag, pred_mode_flag, and pred_mode_ibc_flag */

}

Change history (10)

comment:1 Changed 5 years ago by bbross

  • Version changed from VVC D5 v8 to VVC D5 v9

comment:2 Changed 5 years ago by bbross

  • Version changed from VVC D5 v9 to VVC D5 v10

comment:3 Changed 5 years ago by bbross

  • Version changed from VVC D5 v10 to VVC D6 vD

comment:4 Changed 5 years ago by bbross

How is VTM handling this case, is there a mismatch?

comment:5 Changed 5 years ago by axink

The VTM encoder does not check block size larger than 64x64 for IBC.
For those larger blocks, the skip modes are signaled as 0 always (redundancy).
BTW: now the size constraint for IBC becomes "cbWidth != 128 && cbHeight != 128", considering this, the suggested fix should be:

if( ( slice_type != I | | sps_ibc_enabled_flag ) && !( slice_type == I && ( cbWidth == 128 | | cbHeight == 128 ) ) ) {

comment:6 Changed 5 years ago by hmjang

for your infroamtion,

IBC is allowed when block size is smaller than or equal to 64x64 both for encoder and decoder in the lastest VTM software of master branch.
this is handled by JVET_O1161_IBC_MAX_SIZE macro. this macro also handle pred_mode_flag, cu_skip_flag, pred_mode_ibc_flag signaling.
In spec, pred_mode_flag and pred_mode_ibc_flag already handle this problem.

But the mismatch is still existed for cu_skip_flag signaling.
Current specifiation do not have block size restriction for cu_skip_flag signaling. Therefore, redundant syntax signaling could be happend.

But it is not happened under CTC configuation because 128x128 block is splited to 64x64 block implicitly in Intra slice which is coded by dual tree structure.
This is happend only under non-CTC configuration, Intra slice is coded single tree stucture.

To fix this mismatch, spec should be changed as below for cu_skip_flag signaling.

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:7 Changed 5 years ago by geonjungko

As mentioned in previous comments, the mismatch exists. Both solutions above seem to fix the redundancy problem.

In addition, based on the current size constraint for IBC, the second bullet of pred_mode_ibc_flag inferring method needs to be changed to "Otherwise, if cbWidth or cbHeight is equal to 128, ~".

comment:8 Changed 5 years ago by bbross

  • Version changed from VVC D6 vD to VVC D6 vE

comment:9 Changed 5 years ago by fbarbier

Any update on this one ? i am also facing some issues on IBC streams with blocks with width or height equal to 128.

comment:10 Changed 5 years ago by bbross

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

Closed as duplicate of #440.

Note: See TracTickets for help on using tickets.