JVET-R0271 AHG9: High-level constraints of dependent quantization and sign data hiding [A. Nalci, M. Coban, M. Karczewicz (Qualcomm)]
This was initially reviewed in Track B on Saturday 18 April and was later moved here from section 5.3.1 since it is an HLS signalling issue. (There are other items in section 5.3.1 that are related, as the matter involves both high-level and low-level issues.)
In the 17th JVET meeting, a slice level flag “slice_ts_residual_coding_disabled_flag” was adopted into VVC as part of JVET-Q0089 for lossless coding. This flag can bypass transform skip residual coding (TSRC) regardless of the residual type and transform or regular residual coding (RRC) is used for TS blocks. Since TS blocks can now be coded with RRC, dependent quantization (DQ) and sign data hiding (SDH) can introduce undesired behavior as pointed in Ticket #981, lossy results for lossless coding and potential coding loss. In this proposal several high-level aspects are proposed to alleviate this issue.
In variant #1, signalling of slice_ts_residual_coding_disabled_flag based on the picture level flags ph_dep_quant_enabled_flag and pic_sign_data_hiding_enabled_flag is disallowed such that, if either flag is 1 then TS blocks always use TSRC.
In variant #2, the picture header flags ph_dep_quant_enabled_flag and pic_sign_data_hiding_enabled_flag are first moved to slice header and signalling of slice level DQ and SDH flags are done depending on the slice_ts_residual_coding_disabled_flag. If slice_ts_residual_coding_disabled_flag=1 DQ and SDH flags are not signalled and inferred as 0.
In variant #3, the picture header flags ph_dep_quant_enabled_flag and pic_sign_data_hiding_enabled_flag are moved to slice header before slice_ts_residual_coding_disabled_flag and the signalling of slice_ts_residual_coding_disabled_flag are conditioned on these flags. In this case, if slice_ts_residual_coding_disabled_flag=0 then DQ and SDH are automatically turned off at the slice level.
In variant #4, picture header flags ph_dep_quant_enabled_flag and pic_sign_data_hiding_enabled_flag are moved to slice header (as in variant #2) however no signalling constraint is enforced. These tools can be turned off at the slice level (using config settings) to ensure lossless coding.
Variant #4 is identical with JVET-R0155 as presented.
Variant #3 is another option that was also mentioned in JVET-R0155 (but not presented).
Variant #1 is identical with JVET-R0153 aspect 2 method 2, and JVET-R0325
Variant #4 seems to be the most straightforward solution to resolve the coding efficiency problem of mixed lossy/lossless coding (where we don’t even know how severe that problem is). Definitely, there is nothing broken in the current spec, but software needs to be fixed wrt to DQ context derivation.
On the other hand, variant #3 (and also variant #2, which is spending 1 more bit in typical case) would at the same time resolve the issues brought in context of combining BDPCM and SDH. The same problem would probably exist when BDPCM was combined with DQ (which is not exercised in current software).
Decision (text/SW): Adopt JVET-R0271 variant #3
This also resolves the problem of text/software mismatch wrt to using DQ context derivation in TS/RRC coding.