Opened 5 years ago

Closed 5 years ago

#371 closed defect (fixed)

Avoid reading unused slice-level elements for joint coding of chroma residuals (JCCR) when sps_joint_cbcr_enabled_flag == 0

Reported by: crhelmrich Owned by:
Priority: trivial Milestone: VVC D6 vD
Component: spec Version: VVC D6 vC
Keywords: JCCR Cc: ksuehring, bbross, XiangLi, fbossen, jvet@…

Description

The newly introduced sps_joint_cbcr_enabled_flag element is read even when a coded sequence does not contain any chroma components. Moreover, the slice_joint_cbcr_sign_flag and slice_joint_cbcr_qp_offset elements are read regardless of the value of sps_joint_cbcr_enabled_flag.

To correct this issue and for consistency with the handling of the already existing sps_cclm_enabled_flag element, I suggest the following modification and kindly ask for comments.

Best,

Christian

Table in Sec. 7.3.2.3:

Tor consistency with the current syntax handling of sps_cclm_enabled_flag, change
"sps_joint_cbcr_enabled_flag"
to
"if( ChromaArrayType != 0 )

sps_joint_cbcr_enabled_flag"

Table in Sec. 7.3.6.1:

To avoid reading unused elements when sps_joint_cbcr_enabled_flag == 0, change
"if( ChromaArrayType != 0 )

slice_joint_cbcr_sign_flag"

to
"if( sps_joint_cbcr_enabled_flag && ChromaArrayType != 0 )

slice_joint_cbcr_sign_flag"

and change
"slice_joint_cbcr_qp_offset"
to
"if( sps_joint_cbcr_enabled_flag )

slice_joint_cbcr_qp_offset"

Change history (4)

comment:1 Changed 5 years ago by crhelmrich

  • Summary changed from Restrict presence of flags for joint coding of chroma residuals (JCCR) to "ChromaArrayType != 0" to Avoid reading unused slice-level elements for joint coding of chroma residuals (JCCR) when sps_joint_cbcr_enabled_flag == 0

Update: I was informed that the avoidance of an "if( ChromaArrayType != 0 )" around the SPS-level sps_joint_cbcr_enabled_flag element is intentional and according to decisions made at the meeting. The slice-level part of this ticket, however, is still worth being discussed according to my understanding. To repeat, I suggest the following.

Note that slice_joint_cbcr_sign_flag has just been adopted via JVET-O0105 at the Gothenburg meeting and, thus, wasn't accounted for in the JVET-O0376, aspect 2 proposal introducing sps_joint_cbcr_enabled_flag.

Table in Sec. 7.3.6.1:

To avoid reading unused elements when sps_joint_cbcr_enabled_flag == 0,
change
"if( ChromaArrayType != 0 )

slice_joint_cbcr_sign_flag"

to
"if( sps_joint_cbcr_enabled_flag && ChromaArrayType != 0 )

slice_joint_cbcr_sign_flag"

and change
"slice_joint_cbcr_qp_offset"
to
"if( sps_joint_cbcr_enabled_flag )

slice_joint_cbcr_qp_offset"

Best,

Christian

comment:2 Changed 5 years ago by delagrangep

  • I remember we had discussions during the meeting around gating PPS chroma QP offsets with chroma format or other, but refrained doing so to avoid SPS>PPS dependency. Actually, a note in the semantics explains that the QP offsets are not used in monochrome and joint offset is not used when sps_joint_cbcr_enabled_flag is zero.
  • I also remember the discussion about keeping useless data in SPS in an effort to make it fixed-length, or simpler to parse
  • I can't remember what was said about offsets in slice header.

I would suggest gating both slice_joint_cb_cr_sign_flag and slice_joint_cbcr_qp_offset with just sps_joint_cbcr_enabled_flag, and drop the "(ChromaArrayType == 0)" condition since it is somewhat redundant (sps_joint_cbcr_enabled_flag is expected to be false in monochrome).

Version 0, edited 5 years ago by delagrangep (next)

comment:3 Changed 5 years ago by bbross

I agree, we decided only to gate SH syntax depending on chroma, see notes under JVET-O0616:

"It was noted that in HEVC we don’t do the suggested removals in the SPS, only one bit needs to be wasted for each of these.
Decision (bug fix / cleanup): Adopt the SH aspects only."

Therefore, I agree with the suggested fix:
Gating both slice_joint_cbcr_sign_flag and slice_joint_cbcr_qp_offset with sps_joint_cbcr_enabled_flag, and drop the "(ChromaArrayType != 0)" condition.

comment:4 Changed 5 years ago by bbross

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

Will be fixed in vD

Note: See TracTickets for help on using tickets.