Opened 2 years ago

Closed 2 years ago

#97 closed defect (fixed)

ALF CTU control flag(s) issue

Reported by: bbross Owned by:
Priority: major Milestone: VVC D3 v2
Component: spec Version: VVC D3 v1
Keywords: Cc: ksuehring, bbross, XiangLi, fbossen, jvet@…

Description (last modified by bbross)

Current Draft and VTM have 3 flags (alf_ctb_flag[cIdx]) to control ALF on CTU level for each colour component.

However, there has been some discussion of whether this is covered by the Ljubljana meeting decisions on ALF:

"Decision(VTM): Adopt JVET-K0371 (based on subtest 2.4.1.4c, 4x4 classification based on Laplacian for luma only, 7x7 luma, 5x5 chroma filters); disable prediction of adaptive filters from fixed filter set; disable temporal prediction; put filter parameters into slice header; Enabling flag at CTU level."

Having separate flags for luma and chroma at the slice level does not imply that separate flags are needed for luma and chroma at the CTB level. The recorded decision refers to a CTU, which is a unit that contains both luma and chroma and would presumably switch the filtering on or off for both of them at the same time.

Consequently, the draft text should be changed as follows to match that interpretation:

Slice Header:

slice_alf_enabled_flag
if ( slice_alf_enabled_flag )

alf_chroma_idc
alf_chroma_ctb_present_flag
alf_ctu_adaptive_flag

When alf_ctu_adaptive_flag is not present, it is inferred to be equal to 0.

CTU:

if( slice_alf_enabled_flag ) {

alf_ctb_flag[0]
if( alf_chroma_ctb_present_flag ) {

if( alf_chroma_idx & 0x1 )

alf_ctb_flag[1]

if( alf_chroma_idx & 0x2 )

alf_ctb_flag[2]

}

}

if( alf_ctu_adaptive_flag )

ctu_alf_enabled_flag

When ctu_alf_enabled_flag is not present, it is inferred as follows.
– If slice_alf_enabled_flag, ctu_alf_enabled_flag is inferred to be equal to 1.
– Otherwise, ctu_alf_enabled_flag is inferred to be equal to 0.

The variables CtbAlfFlag[ cIdx ] for cIdx equal to 0..2 are derived as follows:

CtbAlfFlag[ 0 ] = ctu_alf_enabled_flag
CtbAlfFlag[ 1 ] = ctu_alf_enabled_flag && ( alf_chroma_idc & 0x1 )
CtbAlfFlag[ 2 ] = ctu_alf_enabled_flag && ( alf_chroma_idc & 0x2 )

Change history (3)

comment:1 Changed 2 years ago by bbross

  • Description modified (diff)

comment:2 Changed 2 years ago by bbross

After some further discussion, it was concluded that the agreed and reviewed ALF text JVET-K0564 contains 3 separate CTU control flags but not alf_chroma_ctb_present_flag.
Hence alf_chroma_ctb_present_flag should be removed:

Slice Header:

slice_alf_enabled_flag
if ( slice_alf_enabled_flag )

alf_chroma_idc
alf_chroma_ctb_present_flag

CTU:

if( slice_alf_enabled_flag ) {

alf_ctb_flag[0]
if( alf_chroma_ctb_present_flag ) {

if( alf_chroma_idx & 0x1 )

alf_ctb_flag[1]

if( alf_chroma_idx & 0x2 )

alf_ctb_flag[2]

}

}

comment:3 Changed 2 years ago by bbross

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

Fixed in D3 v2

Note: See TracTickets for help on using tickets.