General constraint information in video coding

By introducing general constraint information format rules to control the syntax elements in video codec representation, the problem of low efficiency in multi-layer video codec is solved, and efficient bandwidth utilization and codec consistency are achieved.

CN115643821BActive Publication Date: 2026-04-14DOUYIN VISION CO LTD +1
View PDF 1 Cites 0 Cited by

Patent Information

Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
Filing Date
2021-04-13
Publication Date
2026-04-14

AI Technical Summary

Technical Problem

Existing video encoding and decoding technologies lack effective constraint information processing mechanisms when handling multi-layer video encoding and decoding, resulting in low encoding and decoding efficiency and an inability to meet the ever-increasing bandwidth demands.

Method used

By introducing general constraint information format rules, the occurrence and values ​​of syntax elements in the video encoding and decoding representation are controlled, enabling the conversion between video and bitstream. This includes the application of adaptive parameter sets and general constraint flags, ensuring that the encoding and decoding process conforms to specific format rules.

Benefits of technology

It improves the efficiency and consistency of the video encoding and decoding process, meets the ever-increasing bandwidth demand, and optimizes the processing capabilities of multi-layer video encoding and decoding.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN115643821B_ABST
    Figure CN115643821B_ABST
Patent Text Reader

Abstract

Methods, systems, and apparatus, including computer programs, are described for video processing. The processing can include encoding, decoding, or transcoding. An example video processing method includes performing a conversion between a video comprising one or more pictures and a bitstream of the video according to a format rule, wherein the format rule specifies including, in a general constraint syntax structure, a syntax element that indicates whether each picture includes only one slice and whether a picture header syntax structure is present in a slice header.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] Cross-reference to related applications

[0002] This application is a Chinese national phase application filed on April 13, 2021, with international patent application number PCT / CN2021 / 086873, claiming priority to international patent application No. PCT / CN2020 / 084560, filed on April 13, 2020. The entire disclosure of the above applications is incorporated herein by reference and forms part of this disclosure. Technical Field

[0003] This patent document relates to image and video encoding and decoding. Background Technology

[0004] Digital video accounts for the largest share of bandwidth usage on the internet and other digital communication networks. As the number of connected user devices capable of receiving and displaying video increases, the bandwidth demand for digital video is expected to continue to grow. Summary of the Invention

[0005] This document discloses techniques that can be used by video encoders and decoders to process codec representations using control information useful for decoding the codec representations of video.

[0006] In one example aspect, a video processing method is disclosed. The method includes: performing a conversion between a video having one or more images and a codec representation of the video, wherein each of the one or more images comprises exactly one stripe; wherein the codec representation conforms to a format rule; wherein the format rule specifies that a first field in the codec representation indicating the level, layer, and grade conforming to the codec representation includes a second field indicating the presence of a syntactic structure of various constraints observed during the conversion in the first field.

[0007] In another example, a different video processing method is disclosed. This method includes performing a conversion between a video and a video codec representation comprising one or more pictures and one or more stripes, wherein the codec representation conforms to a format rule, wherein the format rule specifies that the values ​​of one or more constraint flags at the first level in the codec representation control the occurrence of one or more syntax elements at the strip header (SH) level or the picture header (PH) level.

[0008] In another example, a different video processing method is disclosed. This method includes performing a conversion between a video and a video codec representation comprising one or more images and one or more stripes, wherein the codec representation conforms to format rules, wherein the format rules specify that the values ​​of one or more constraint flags at the first level in the codec representation constrain the values ​​of one or more syntax elements at the Picture Parameter Set (PPS) level.

[0009] In another example, a different video processing method is disclosed. This method includes performing a conversion between a video and a video codec representation comprising one or more images and one or more stripes, wherein the codec representation conforms to a format rule specifying that the codec representation includes an adaptive parameter set comprising syntax elements of identifiers for video parameter sets and / or sequence parameter sets and / or image parameter sets.

[0010] In another example, a different video processing method is disclosed. This method includes: performing a conversion between a video and a video codec representation comprising one or more images and one or more stripes, wherein the codec representation conforms to format rules specifying one or more general constraint flags applicable to the conversion; wherein the one or more general constraint flags indicate the applicability of general constraint information included in the codec representation to the conversion.

[0011] In another example, a different video processing method is disclosed. This method includes: performing a conversion between a video and a codec representation of the video, wherein the codec representation conforms to format rules, wherein the format rules specify that the codec representation conditionally includes a general constraint structure carrying general constraint information based on the characteristics of the conversion or the video.

[0012] In another example, a different video processing method is disclosed. This method includes performing a conversion between a video having one or more images and a video bitstream according to format rules, wherein the format rules specify that the presence and / or value of a syntax element in the image parameter set that indicates certain codec information exists in the image header or stripe header depends on the segmentation characteristics of the images in the reference image parameter set.

[0013] In another example, a different video processing method is disclosed. This method includes performing a conversion between a video comprising video units and a bitstream of the video, according to format rules, and wherein the format rules specify that the adaptive parameter set (APS) syntax structure referenced by the video units includes syntax elements indicating the presence of additional syntax elements in the APS.

[0014] In another example, a different video processing method is disclosed. This method includes performing a conversion between a video comprising one or more images and a video bitstream, according to format rules, wherein the format rules specify the inclusion of syntax elements in a general constraint syntax structure indicating whether each image comprises only one stripe and whether an image header syntax structure exists in the stripe header.

[0015] In another example, a different video processing method is disclosed. This method includes performing a conversion between a video and a video bitstream according to format rules, wherein the format rules specify that a syntax element indicating whether each image contains only one stripe is included in a general constraint syntax structure.

[0016] In another example, a different video processing method is disclosed. This method includes performing a conversion between a video and a video bitstream according to format rules, wherein the format rules specify bitstream consistency characteristics of the bitstream to determine the permissible shape of the image segmentation.

[0017] In yet another example, a video encoder apparatus is disclosed. The video encoder includes a processor configured to implement the methods described above.

[0018] In yet another example, a video decoder apparatus is disclosed. The video decoder includes a processor configured to implement the methods described above.

[0019] In yet another example, a computer-readable medium on which code is stored is disclosed. This code embodies one of the methods described herein in the form of processor-executable code.

[0020] These and other features will be described in this document. Attached Figure Description

[0021] Figure 1 This is a block diagram of an example video processing system.

[0022] Figure 2 This is a block diagram of a video processing device.

[0023] Figure 3 This is a flowchart of an example method for video processing.

[0024] Figure 4 This is a block diagram illustrating a video encoding / decoding system according to some embodiments of the present disclosure.

[0025] Figure 5 This is a block diagram illustrating an encoder according to some embodiments of the present disclosure.

[0026] Figure 6 This is a block diagram illustrating a decoder according to some embodiments of the present disclosure.

[0027] Figure 7 A flowchart illustrating an example method for video processing based on some implementations of the disclosed technology is shown.

[0028] Figure 8 A flowchart illustrating an example method for video processing based on some implementations of the disclosed technology is shown.

[0029] Figures 9A to 9C A flowchart illustrating an example method for video processing based on some implementations of the disclosed technology is shown. Detailed Implementation

[0030] Chapter headings are used in this document for ease of understanding, and the applicability of the technologies and embodiments disclosed in each chapter is not limited to that chapter alone. Furthermore, the use of H.266 technical terminology in some descriptions is merely for ease of understanding and not to limit the scope of the disclosed technologies. Therefore, the technologies described herein are also applicable to other video codec protocols and designs.

[0031] 1. Introduction

[0032] This document relates to video codec technology. Specifically, it concerns the design of constraint flag-related syntax in video codecs. This idea can be applied alone or in various combinations to any standard or non-standard video codec that supports multi-layer video codecs, such as the Multi-Functional Video Codec (VVC) currently under development.

[0033] 2. Abbreviation

[0034] APS Adaptive Parameter Set

[0035] AU Access Unit

[0036] AUD Access Unit Separator

[0037] AVC Advanced Video Codec

[0038] CLVS codec layer video sequence

[0039] CPB image buffer

[0040] CRA Fully Random Access

[0041] CTU (Codec Tree Unit)

[0042] CVS codec video sequence

[0043] DPB Decoding Image Buffer

[0044] DPS Decoding Parameter Set

[0045] EOB End of Bitstream

[0046] End of EOS sequence

[0047] GDR gradually decoded and refreshed

[0048] HEVC High-Efficiency Video Encoding and Decoding

[0049] HRD Assumption Reference Decoder

[0050] IDR Instant Decoding and Refresh

[0051] JEM Joint Exploration Model

[0052] MCTS Motion Restraint Piece Set

[0053] NAL Network Abstraction Layer

[0054] OLS Output Layer Set

[0055] PH Image Header

[0056] PPS Image Parameter Set

[0057] PTL levels, tiers, and grades

[0058] PU Image Unit

[0059] RBSP raw byte sequence payload

[0060] SEI Assist Enhancement Information

[0061] SH strip head

[0062] SPS Sequence Parameter Set

[0063] SVC Scalable Video Codec

[0064] VCL (Video Codec Layer)

[0065] VPS Video Parameter Set

[0066] VTM VVC Test Model

[0067] VUI Video Availability Information

[0068] VVC Multi-Functional Video Encoding and Decoding

[0069] 3. Introduction to Video Encoding and Decoding

[0070] Video codec standards have primarily evolved through the development of well-known ITU-T and ISO / IEC standards. ITU-T developed H.261 and H.263, while ISO / IEC developed MPEG-1 and MPEG-4 Visual. The two organizations jointly developed the H.262 / MPEG-2 video, H.264 / MPEG-4 Advanced Video Coding (AVC), and H.265 / HEVC standards. Since H.262, video codec standards have been based on a hybrid video codec architecture, employing temporal prediction plus transform coding. To explore future video codec technologies beyond HEVC, VCEG and MPEG jointly established the Joint Video Exploration Team (JVET) in 2015. Since then, JVET has adopted many new methods and incorporated them into reference software called the Joint Exploration Model (JEM). JVET meetings are held quarterly, and the goal of new codec standards is to reduce the bitrate by 50% compared to HEVC. The new video codec standard was officially named Multifunctional Video Codec (VVC) at the JVET meeting in April 2018, and the first version of the VVC Test Model (VTM) was also released at that time. Due to ongoing efforts to standardize VVC, new codec technologies have been adopted into the VVC standard at every JVET meeting. The VVC working draft and test model VTM are updated after each meeting. The current goal of the VVC project is to achieve Technical Finalization (FDIS) at the meeting in July 2020.

[0071] 3.1. General grade, level, and hierarchy syntax and semantics

[0072] In the latest VVC draft text, the general level, hierarchy, and semantics are as follows:

[0073]

[0074] The profile_tier_level() syntax provides level information and, optionally, tier, level, subtier, and general constraint information.

[0075] When the profile_tier_level() syntax structure is included in a VPS, OlsInScope is one or more OLSs specified by the VPS. When the profile_tier_level() syntax structure is included in an SPS, OlsInScope is the OLS that includes only the lowest layer among the layers of the reference SPS, and that lowest layer is an independent layer.

[0076] `general_profile_idc` indicates the level of OlsInScope compliance, as specified in Appendix A. The bitstream should not contain values ​​other than those specified in Appendix A. Other values ​​for `general_profile_idc` are reserved for future use by ITU-T | ISO / IEC.

[0077] The general_tier_flag specifies the layer context used to interpret the general_level_idc, as specified in Appendix A.

[0078] `general_level_idc` indicates the level of compliance with OlsInScope, as specified in Appendix A. The bitstream should not contain values ​​other than those specified in Appendix A. Other values ​​for `general_level_idc` are reserved for future use by ITU-T | ISO / IEC.

[0079] Note 1 – A larger value for general_level_idc indicates a higher level. The maximum level of signaling notification in the DCI NAL unit of OlsInScope can be higher than, but not lower than, the level of signaling notification in the SPS of the CLVS contained within OlsInScope.

[0080] Note 2 – When OlsInScope is matched with multiple profiles, general_profile_idc should indicate the profile that provides the preferred decoding result or preferred bitstream identifier, as determined by the encoder (in a manner not specified in this specification).

[0081] Note 3 – When the CVS of OlsInScope conforms to different tiers, multiple profile_tier_level() syntax structures can be included in the DCI NAL unit, such that for each CVS of OlsInScope, there is at least one set of indicated tiers, layers, and levels of the decoder capable of decoding the CVS.

[0082] num_sub_profiles specifies the number of syntax elements in general_sub_profile_idc[i].

[0083] general_sub_profile_idc[i] indicates the i-th interoperability metadata registered as specified in Rec. ITU-T T.35, the content of which is not specified in this specification.

[0084] A sublayer_level_present_flag[i] equal to 1 indicates that the level information exists in the profile_tier_level() syntax structure of the sublayer representation with TemporalId equal to i. A sublayer_level_present_flag[i] equal to 0 indicates that the level information does not exist in the profile_tier_level() syntax structure of the sublayer representation with TemporalId equal to i.

[0085] ptl_alignment_zero_bits should be equal to 0.

[0086] The semantics of the syntax element sublayer_level_idc[i] are the same as those of the syntax element general_level_idc, except for the specification of inference of non-existent values, but it applies to sublayer representations where TemporalId equals i.

[0087] When it does not exist, the value of sublayer_level_idc[i] is inferred as follows:

[0088] sublayer_level_idc[maxNumSubLayersMinus1] is inferred to be equal to general_level_idc of the same profile_tier_level() structure.

[0089] For i from maxNumSubLayersMinus1 - 1 to 0 (in descending order of i value) (inclusive of maxNumSubLayersMinus1 - 1 and 0), sublayer_level_idc[i] is inferred to be equal to sublayer_level_idc[i + 1].

[0090] 3.2. General Constraint Information Syntax and Semantics

[0091] In the latest VVC draft text, the syntax and semantics of general constraint information are as follows:

[0092]

[0093]

[0094] general_progressive_source_flag and general_interlaced_source_flag are interpreted as follows:

[0095] If general_progressive_source_flag equals 1 and general_interlaced_source_flag equals 0, then the source scan type of the image in OlsInScope should be interpreted as a line-by-line scan only.

[0096] Otherwise, if general_progressive_source_flag equals 0 and general_interlaced_source_flag equals 1, the source scan type of the image in OlsInScope should be interpreted as interlaced scan only.

[0097] Otherwise, if both general_progressive_source_flag and general_interlaced_source_flag are equal to 0, the source scan type of the image in OlsInScope should be interpreted as unknown or unspecified.

[0098] Otherwise (general_progressive_source_flag equals 1, and general_interlaced_source_flag equals 1), the source scan type for each image in OlsInScope is indicated at the image level using the syntax element source_scan_type in the Frame Field Information (SEI) message. The requirement for bitstream consistency is that the Frame Field Information (SEI) message should be present in every AU when both general_progressive_source_flag and general_interlaced_source_flag are equal to 1.

[0099] Note 1 – The decoder may ignore the values ​​of general_progressive_source_flag and general_interlaced_source_flag. Furthermore, the actual source scan type of the image is outside the scope of this specification, and the method by which the encoder selects the values ​​of general_progressive_source_flag and general_interlaced_source_flag is not specified.

[0100] A `general_non_packed_constraint_flag` value of 1 specifies that no frame encapsulation arrangement (SEI) messages should exist in the OlsInScope bitstream. A `general_non_packed_constraint_flag` value of 0 does not impose such a constraint.

[0101] Note 2 – The decoder can ignore the value of general_non_packed_constraint_flag because there is no decoding process requirement associated with the presence or interpretation of the frame encapsulation arrangement SEI message.

[0102] A `general_frame_only_constraint_flag` value of 1 specifies that OlsInScope transmits images representing frames. A `general_frame_only_constraint_flag` value of 0 specifies that OlsInScope may or may not represent frames.

[0103] Note 3 – The decoder can ignore the value of general_frame_only_constraint_flag because there is no requirement for it in the associated decoding process.

[0104] A `general_non_projected_constraint_flag` value of 1 specifies that no equirectangular projection SEI messages or generalized cube projection SEI messages should exist in the OlsInScope bitstream. A `general_non_projected_constraint_flag` value of 0 does not impose such a constraint.

[0105] Note 4 – The decoder may ignore the value of general_non_projected_constraint_flag because there is no decoding process requirement associated with the presence or interpretation of the isorectangular projection SEI message and the generalized cube projection SEI message.

[0106] An intra_only_constraint_flag value of 1 specifies that slice_type should be equal to I. An intra_only_constraint_flag value of 0 does not impose such a constraint.

[0107] The max_bitdepth_constraint_idc specifies that bit_depth_minus8 should be in the range of 0 to max_bitdepth_constraint_idc (inclusive).

[0108] max_chroma_format_constraint_idc specifies that chroma_format_idc should be in the range of 0 to max_chroma_format_constraint_idc (inclusive).

[0109] A value of 1 for `no_res_change_in_clvs_constraint_flag` specifies that `res_change_in_clvs_allowed_flag` should be 0. A value of 0 for `no_res_change_in_clvs_constraint_flag` does not impose such a constraint.

[0110] A value of 1 for `one_tile_per_pic_constraint_flag` specifies that each image should contain only one tile. A value of 0 for `one_tile_per_pic_constraint_flag` does not impose this constraint.

[0111] A value of 1 for `one_slice_per_pic_constraint_flag` specifies that each image should contain only one slice. A value of 0 for `one_slice_per_pic_constraint_flag` imposes no such constraint.

[0112] `one_subpic_per_pic_constraint_flag` equal to 1 specifies that each image should contain only one subpic. `one_subpic_per_pic_constraint_flag` equal to 0 imposes no such constraint. When `one_slice_per_pic_constraint_flag` equals 1, the value of `one_subpic_per_pic_constraint_flag` should be equal to 1.

[0113] A value of 1 for `no_qtbtt_dual_tree_intra_constraint_flag` specifies that `qtbtt_dual_tree_intra_flag` should be 0. A value of 0 for `no_qtbtt_dual_tree_intra_constraint_flag` does not impose such a constraint.

[0114] A value of 1 for `no_partition_constraints_override_constraint_flag` indicates that `partition_constraints_override_enabled_flag` should be 0. A value of 0 for `no_partition_constraints_override_constraint_flag` disables the imposition of such constraints.

[0115] A value of 1 for no_sao_constraint_flag indicates that sps_sao_enabled_flag should be 0. A value of 0 for no_sao_constraint_flag does not impose such a constraint.

[0116] A value of 1 for no_alf_constraint_flag specifies that sps_alf_enabled_flag should be 0. A value of 0 for no_alf_constraint_flag does not impose such a constraint.

[0117] A value of 1 for no_ccalf_constraint_flag indicates that sps_ccalf_enabled_flag should be 0. A value of 0 for no_ccalf_constraint_flag does not impose such a constraint.

[0118] A value of 1 for no_joint_cbcr_constraint_flag indicates that sps_joint_cbcr_enabled_flag should be 0, while a value of 0 for no_joint_cbcr_constraint_flag means that no such constraint is imposed.

[0119] A value of 1 for `no_ref_wraparound_constraint_flag` specifies that `sps_ref_wraparound_enabled_flag` should be 0. A value of 0 for `no_ref_wraparound_constraint_flag` disables this constraint.

[0120] A value of 1 for `no_temporal_mvp_constraint_flag` specifies that `sps_temporal_mvp_enabled_flag` should be 0. A value of 0 for `no_temporal_mvp_constraint_flag` does not impose this constraint.

[0121] A value of 1 for `no_sbtmvp_constraint_flag` specifies that `sps_sbtmvp_enabled_flag` should be 0. A value of 0 for `no_sbtmvp_constraint_flag` does not impose this constraint.

[0122] A value of 1 for no_amvr_constraint_flag indicates that sps_amvr_enabled_flag should be 0. A value of 0 for no_amvr_constraint_flag does not impose such a constraint.

[0123] A value of 1 for `no_bdof_constraint_flag` specifies that `sps_bdof_enabled_flag` should be 0. A value of 0 for `no_bdof_constraint_flag` does not impose such a constraint.

[0124] A value of 1 for `no_dmvr_constraint_flag` specifies that `sps_dmvr_enabled_flag` should be 0. A value of 0 for `no_dmvr_constraint_flag` does not impose this constraint.

[0125] A value of 1 for no_cclm_constraint_flag indicates that sps_cclm_enabled_flag should be 0. A value of 0 for no_cclm_constraint_flag does not impose such a constraint.

[0126] A value of 1 for `no_mts_constraint_flag` specifies that `sps_mts_enabled_flag` should be 0. A value of 0 for `no_mts_constraint_flag` does not impose this constraint.

[0127] A value of 1 for `no_sbt_constraint_flag` specifies that `sps_sbt_enabled_flag` should be 0. A value of 0 for `no_sbt_constraint_flag` does not impose such a constraint.

[0128] A value of 1 for `no_affine_motion_constraint_flag` specifies that `sps_affine_enabled_flag` should be 0. A value of 0 for `no_affine_motion_constraint_flag` disables this constraint.

[0129] A value of 1 for `no_bcw_constraint_flag` specifies that `sps_bcw_enabled_flag` should be 0. A value of 0 for `no_bcw_constraint_flag` does not impose this constraint.

[0130] A value of 1 for `no_ibc_constraint_flag` specifies that `sps_ibc_enabled_flag` should be 0. A value of 0 for `no_ibc_constraint_flag` does not impose this constraint.

[0131] A value of 1 for `no_ciip_constraint_flag` specifies that `sps_ciip_enabled_flag` should be 0. A value of 0 for `no_cipp_constraint_flag` does not impose such a constraint.

[0132] A value of 1 for `no_fpel_mmvd_constraint_flag` specifies that `sps_fpel_mmvd_enabled_flag` should be 0. A value of 0 for `no_fpel_mmvd_constraint_flag` does not impose such a constraint.

[0133] A value of 1 for no_gpm_constraint_flag indicates that sps_gpm_enabled_flag should be 0. A value of 0 for no_gpm_constraint_flag does not impose such a constraint.

[0134] A value of 1 for no_ladf_constraint_flag indicates that sps_ladf_enabled_flag should be 0. A value of 0 for no_ladf_constraint_flag does not impose such a constraint.

[0135] A value of 1 for `no_transform_skip_constraint_flag` specifies that `sps_transform_skip_enabled_flag` should be 0. A value of 0 for `no_transform_skip_constraint_flag` disables this constraint.

[0136] A value of 1 for `no_bdpcm_constraint_flag` specifies that `sps_bdpcm_enabled_flag` should be 0. A value of 0 for `no_bdpcm_constraint_flag` does not impose this constraint.

[0137] A value of 1 for no_qp_delta_constraint_flag indicates that bitstream consistency is required, and cu_qp_delta_enabled_flag should be 0. A value of 0 for no_qp_delta_constraint_flag does not impose such a constraint.

[0138] A value of 1 for no_dep_quant_constraint_flag specifies that bitstream consistency is required, and that sps_dep_quant_enabled_flag should be 0. A value of 0 for no_dep_quant_constraint_flag does not impose such a constraint.

[0139] A value of 1 for `no_sign_data_hiding_constraint_flag` specifies that the requirement for bitstream consistency is that `sps_sign_data_hiding_enabled_flag` should be 0. A value of 0 for `no_sign_data_hiding_constraint_flag` does not impose such a constraint.

[0140] A value of 1 for `no_mixed_nalu_types_in_pic_constraint_flag` specifies that bitstream consistency is required, and `mixed_nalu_types_in_pic_flag` should be 0. A value of 0 for `no_mixed_nalu_types_in_pic_constraint_flag` does not impose such a constraint.

[0141] A `no_trail_constraint_flag` value of 1 specifies that NAL units with `nuh_unit_type` equal to `TRAIL_NUT` should not exist in `OlsInScope`. A `no_trail_constraint_flag` value of 0 does not impose such a constraint.

[0142] A value of no_stsa_constraint_flag equal to 1 specifies that NAL units with nuh_unit_type equal to STSA_NUT should not exist in OlsInScope. A value of no_stsa_constraint_flag equal to 0 does not impose such a constraint.

[0143] A value of no_rasl_constraint_flag equal to 1 specifies that NAL units with nuh_unit_type equal to RASL_NUT should not exist in OlsInScope. A value of no_rasl_constraint_flag equal to 0 does not impose such a constraint.

[0144] A value of no_radl_constraint_flag equal to 1 specifies that NAL units with nuh_unit_type equal to RADL_NUT should not exist in OlsInScope. A value of no_radl_constraint_flag equal to 0 does not impose such a constraint.

[0145] A `no_idr_constraint_flag` value of 1 specifies that NAL units with `nuh_unit_type` equal to `IDR_W_RADL` or `IDR_N_LP` should not exist in OlsInScope. A `no_idr_constraint_flag` value of 0 does not impose such a constraint.

[0146] A no_cra_constraint_flag value of 1 specifies that NAL units with nuh_unit_type equal to CRA_NUT should not exist in OlsInScope. A no_cra_constraint_flag value of 0 does not impose such a constraint.

[0147] A value of 1 for `no_gdr_constraint_flag` specifies that NAL units with `nuh_unit_type` equal to `GDR_NUT` should not exist in `OlsInScope`. A value of 0 for `no_gdr_constraint_flag` does not impose such a constraint.

[0148] A value of 1 for `no_aps_constraint_flag` specifies that NAL units with `nuh_unit_type` equal to `PREFIX_APS_NUT` or `SUFFIX_APS_NUT` should not exist in `OlsInScope`. A value of 0 for `no_aps_constraint_flag` does not impose such a constraint.

[0149] gci_alignment_zero_bits should be equal to 0.

[0150] `num_reserved_constraint_bytes` specifies the number of bytes reserved for constraint. The value of `num_reserved_constraint_bytes` should be 0. Other values ​​of `num_reserved_constraint_bytes` are reserved for future use by ITU-T | ISO / IEC and should not exist in the bitstream conforming to this version of the specification.

[0151] The `gci_reserved_constraint_byte[i]` can have any value. Its presence and value do not affect the grade specified in this version of the specification for the decoder. Decoders conforming to this version of the specification should ignore the values ​​of all `gci_reserved_constraint_byte[i]` syntax elements.

[0152] 3.3. DCI Syntax and Semantics

[0153] In the latest VVC draft text, the DCI syntax and semantics are as follows:

[0154]

[0155] The DCI RBSP can be made available to the decoder by existing in the bitstream, being included in at least the first AU of the bitstream, or being provided by external means.

[0156] Note 1 – The information contained in the DCI RBSP is not required for the operation of the decoding process specified in Clauses 2 through 9 of this specification.

[0157] When present, all DCI NAL units in the bitstream should have the same content.

[0158] The increment of 1 in dci_max_sublayers_minus1 specifies the maximum number of temporal sublayers that can exist in each CVS of the bitstream. The value of dci_max_sublayers_minus1 should be in the range of 0 to 6 (inclusive).

[0159] The value of dci_reserved_zero_bit should be equal to 0 in the bitstream conforming to this version of the specification. The value 1 of dci_reserved_zero_bit is reserved for future use by ITU-T | ISO / IEC.

[0160] The increment of dci_num_ptls_minus1 by 1 specifies the number of profile_tier_level() syntax structures in the DCI NAL unit.

[0161] The requirement for bitstream consistency is that each OLS in the CVS of the bitstream should conform to at least one profile_tier_level() syntax structure in the DCI NAL unit.

[0162] Note 2 – DCI NAL units may include PTL information that is common to multiple OLS and may be carried in multiple profile_tier_level() syntax structures, and do not need to include PTL information for each OLS separately.

[0163] A value of 0 for dci_extension_flag indicates that no dci_extension_data_flag syntax element exists in the DCI RBSP syntax structure. A value of 1 for dci_extension_flag indicates that the dci_extension_data_flag syntax element exists in the DCI RBSP syntax structure.

[0164] The `dci_extension_data_flag` flag can have any value. Its presence and value do not affect the decoder's conformance to the grade specified in Appendix A. Decoders of this version that conform to this specification should ignore all `dci_extension_data_flag` syntax elements.

[0165] 3.4. VPS Syntax and Semantics

[0166] In the latest VVC draft text, the VPS syntax and semantics are as follows:

[0167]

[0168]

[0169]

[0170] The VPS RBSP should be available for the decoding process before being referenced, either in at least one AU with TemporalId equal to 0 or provided by external means.

[0171] All VPS NAL units in CVS that have a specific value for vps_video_parameter_set_id should have the same content.

[0172] The `vps_video_parameter_set_id` provides an identifier for the VPS, which is then referenced by other syntax elements. The value of `vps_video_parameter_set_id` should be greater than 0.

[0173] The increment of vps_max_layers_minus1 specifies the maximum allowed number of layers in each CVS of the reference VPS.

[0174] Increasing 1 in `vps_max_sublayers_minus1` specifies the maximum number of temporal sublayers that can exist in each CVS of the reference VPS. The value of `vps_max_sublayers_minus1` should be in the range of 0 to 6 (inclusive).

[0175] `vps_all_layers_same_num_sublayers_flag` equal to 1 specifies that the number of temporal sublayers is the same for all layers in each CVS of the reference VPS. `vps_all_layers_same_num_sublayers_flag` equal to 0 specifies that layers in each CVS of the reference VPS may or may not have the same number of temporal sublayers. When it does not exist, the value of `vps_all_layers_same_num_sublayers_flag` is inferred to be equal to 1.

[0176] A `vps_all_independent_layers_flag` value of 1 indicates that all layers in the CVS are encoded and decoded independently without using inter-frame layer prediction. A `vps_all_independent_layers_flag` value of 0 indicates that one or more layers in the CVS can use inter-frame layer prediction. When it does not exist, the value of `vps_all_independent_layers_flag` is inferred to be equal to 1.

[0177] vps_layer_id[i] specifies the nuh_layer_id value of the i-th layer. For any two non-negative integer values ​​m and n, when m is less than n, the value of vps_layer_id[m] should be less than vps_layer_id[n].

[0178] A value of 1 for `vps_independent_layer_flag[i]` indicates that the layer with index `i` does not use inter-layer prediction. A value of 0 for `vps_independent_layer_flag[i]` indicates that the layer with index `i` can use inter-layer prediction, and the syntax element `vps_direct_ref_layer_flag[i][j]` (where `j` is in the range 0 to `i - 1`, inclusive) exists in the VPS. When it does not exist, the value of `vps_independent_layer_flag[i]` is inferred to be 1.

[0179] `vps_direct_ref_layer_flag[i][j]` equal to 0 indicates that the layer with index `j` is not a direct reference layer to the layer with index `i`. `vps_direct_ref_layer_flag[i][j]` equal to 1 indicates that the layer with index `j` is a direct reference layer to the layer with index `i`. `vps_direct_ref_layer_flag[i][j]` is inferred to be equal to 0 when it does not exist for `i` and `j` in the range 0 to `vps_max_layers_minus1` (inclusive). When `vps_independent_layer_flag[i]` equals 0, there should be at least one value for `j` in the range 0 to `i - 1` (inclusive) such that the value of `vps_direct_ref_layer_flag[i][j]` is equal to 1.

[0180] The variables NumDirectRefLayers[i], DirectRefLayerIdx[i][d], NumRefLayers[i], RefLayerIdx[i][r], and LayerUsedAsRefLayerFlag[j] are derived as follows:

[0181] for( i = 0; i <= vps_max_layers_minus1; i++ ) { for( j = 0; j <=vps_max_layers_minus1; j++ ) { dependencyFlag[ i ][ j ] = vps_direct_ref_layer_flag[ i ][ j ]; for( k = 0; k < i; k++ ) if( vps_direct_ref_layer_flag[ i ][ k ] && dependencyFlag[ k ][ j ] ) dependencyFlag[ i ][ j ] = 1;} LayerUsedAsRefLayerFlag[ i ] = 0;} for( i = 0; i <= vps_max_layers_minus1; i++ ) { for( j = 0, d = 0, r = 0; j <= vps_max_layers_minus1; j++ ) { (37)if( vps_direct_ref_layer_flag[ i ][ j ] ) { DirectRefLayerIdx[ i ][ d++ ] =j; LayerUsedAsRefLayerFlag[ j ] = 1;} if( dependencyFlag[ i ][ j ] ) RefLayerIdx[ i ][ r++ ] = j;} NumDirectRefLayers[ i ] = d; NumRefLayers[ i ] =r;}

[0182] The variable GeneralLayerIdx[ i ] that specifies the layer index of the layer with nuh_layer_id equal to vps_layer_id[ i ] is derived as follows:

[0183] for( i = 0; i <= vps_max_layers_minus1; i++ ) (38)GeneralLayerIdx[ vps_layer_id[ i ] ] = i

[0184] For any two distinct values ​​i and j that are both in the range of 0 to vps_max_layers_minus1 (inclusive), when dependencyFlag[i][j] is equal to 1, the requirement for bitstream consistency is that the values ​​of chroma_format_idc and bit_depth_minus8 applicable to the i-th layer should be equal to the values ​​of chroma_format_idc and bit_depth_minus8 applicable to the j-th layer, respectively.

[0185] A value of 1 for `max_tid_ref_present_flag[i]` indicates that the syntax element `max_tid_il_ref_pics_plus1[i]` exists. A value of 0 for `max_tid_ref_present_flag[i]` indicates that the syntax element `max_tid_il_ref_pics_plus1[i]` does not exist.

[0186] A value of 0 for `max_tid_il_ref_pics_plus1[i]` indicates that the non-IRAP image of layer i is not used for inter-frame layer prediction. A value greater than 0 for `max_tid_il_ref_pics_plus1[i]` indicates that, for decoding the image of layer i, no image with a TemporalId greater than `max_tid_il_ref_pics_plus1[i] - 1` is used for ILRP. When no such image exists, the value of `max_tid_il_ref_pics_plus1[i]` is inferred to be equal to 7.

[0187] `each_layer_is_an_ols_flag` equal to 1 indicates that each OLS contains only one layer, and each layer in the reference VPS's CVS is itself an OLS, where the individually included layer is the only output layer. `each_layer_is_an_ols_flag` equal to 0 indicates that an OLS can contain more than one layer. If `vps_max_layers_minus1` equals 0, the value of `each_layer_is_an_ols_flag` is inferred to be equal to 1. Otherwise, when `vps_all_independent_layers_flag` equals 0, the value of `each_layer_is_an_ols_flag` is inferred to be equal to 0.

[0188] The value of ols_mode_idc equals 0, which means that the total number of OLS specified by the VPS is equal to vps_max_layers_minus1 + 1. The i-th OLS includes layers with layer indices from 0 to i (inclusive), and for each OLS, only the highest layer in the OLS is output.

[0189] The value of ols_mode_idc equals 1, which specifies that the total number of OLS specified by the VPS is equal to vps_max_layers_minus1 + 1. The i-th OLS includes layers with layer indices from 0 to i (inclusive), and for each OLS, all layers in the OLS are output.

[0190] The value of ols_mode_idc equal to 2 indicates that the total number of OLS specified by the VPS is explicitly signaled, and for each OLS, the output layer is explicitly signaled, and the other layers are layers that are direct or indirect reference layers to the output layer of the OLS.

[0191] The value of ols_mode_idc should be in the range of 0 to 2 (inclusive). The value of ols_mode_idc 3 is reserved for future use by ITU-T | ISO / IEC.

[0192] When vps_all_independent_layers_flag equals 1 and each_layer_is_an_ols_flag equals 0, the value of ols_mode_idc is inferred to be equal to 2.

[0193] The increment of 1 in num_output_layer_sets_minus1 specifies the total number of OLS specified by the VPS when ols_mode_idc equals 2.

[0194] The variable TotalNumOlss, which specifies the total number of OLS values ​​assigned by the VPS, is derived as follows:

[0195] if( vps_max_layers_minus1 = = 0 ) TotalNumOlss = 1else if( each_layer_is_an_ols_flag | | ols_mode_idc = = 0 | | ols_mode_idc = = 1 )TotalNumOlss = vps_max_layers_minus1 + 1 (39)else if( ols_mode_idc = = 2 ) TotalNumOlss = num_output_layer_sets_minus1 +1

[0196] `ols_output_layer_flag[i][j]` equal to 1 indicates that when `ols_mode_idc` equals 2, the layer whose `nuh_layer_id` equals `vps_layer_id[j]` is the output layer of the i-th OLS. `ols_output_layer_flag[i][j]` equal to 0 indicates that when `ols_mode_idc` equals 2, the layer whose `nuh_layer_id` equals `vps_layer_id[j]` is not the output layer of the i-th OLS.

[0197] The variables NumOutputLayersInOls[i] specifying the number of output layers in the i-th OLS, NumSubLayersInLayerInOLS[i][j] specifying the number of sublayers in the j-th layer of the i-th OLS, OutputLayerIdInOls[i][j] specifying the nuh_layer_id value of the j-th output layer in the i-th OLS, and LayerUsedAsOutputLayerFlag[k] specifying whether the k-th layer is used as an output layer in at least one OLS are derived as follows:

[0198] NumOutputLayersInOls[ 0 ] = 1OutputLayerIdInOls[ 0 ][ 0 ] = vps_layer_id[ 0 ]NumSubLayersInLayerInOLS[ 0 ][ 0 ] = vps_max_sub_layers_minus1 +1LayerUsedAsOutputLayerFlag[ 0 ] = 1for( i = 1, i <= vps_max_layers_minus1;i++ ) { if( each_layer_is_an_ols_flag | | ols_mode_idc < 2 )LayerUsedAsOutputLayerFlag[ i ] = 1 else / ( !each_layer_is_an_ols_flag &&ols_mode_idc == 2 ) / LayerUsedAsOutputLayerFlag[ i ] = 0}for( i = 1; i< TotalNumOlss; i++ ) if( each_layer_is_an_ols_flag | | ols_mode_idc = =0 ) { NumOutputLayersInOls[ i ] = 1 OutputLayerIdInOls[ i ][ 0 ] = vps_layer_id[ i ] for( j = 0; j < i && ( ols_mode_idc = = 0 ); j++ )NumSubLayersInLayerInOLS[ i ][ j ] = max_tid_il_ref_pics_plus1[ i ]NumSubLayersInLayerInOLS[ i ][ i ] = vps_max_sub_layers_minus1 + 1} else if( ols_mode_idc = = 1 ) { NumOutputLayersInOls[ i ] = i + 1 for( j = 0; j< NumOutputLayersInOls[ i ]; j++ ) { OutputLayerIdInOls[ i ][ j ] = vps_layer_id[ j ] NumSubLayersInLayerInOLS[ i ][ j ] = vps_max_sub_layers_minus1+ 1}} else if( ols_mode_idc = = 2 ) { for( j = 0; j <= vps_max_layers_minus1; j++ ) { layerIncludedInOlsFlag[ i ][ j ] = 0NumSubLayersInLayerInOLS[ i ][ j ] = 0} for( k = 0, j = 0; k <= vps_max_layers_minus1;k++ ) (40) if( ols_output_layer_flag[ i ][ k ] ) {layerIncludedInOlsFlag[ i ][ k ] = 1 LayerUsedAsOutputLayerFlag[ k ] = 1OutputLayerIdx[ i ][ j ] = k OutputLayerIdInOls[ i ][ j++ ] = vps_layer_id[k ] NumSubLayersInLayerInOLS[ i ][ j ] = vps_max_sub_layers_minus1 + 1}NumOutputLayersInOls[ i ] = j for( j = 0; j < NumOutputLayersInOls[ i ]; j++) { idx = OutputLayerIdx[ i ][ j ] for( k = 0; k < NumRefLayers[ idx ]; k++) { layerIncludedInOlsFlag[ i ][ RefLayerIdx[ idx ][ k ] ] = 1 if(NumSubLayersInLayerInOLS[ i ][ RefLayerIdx[ idx ][ k ] ] < max_tid_il_ref_pics_plus1[ OutputLayerIdInOls[ i ][ j ] ] ) NumSubLayersInLayerInOLS[ i ][RefLayerIdx[ idx ][ k ] ] = max_tid_il_ref_pics_plus1[ OutputLayerIdInOls[ i][ j ] ]}}};

[0199] For each value of i in the range from 0 to vps_max_layers_minus1 (inclusive), the values ​​of LayerUsedAsRefLayerFlag[i] and LayerUsedAsOutputLayerFlag[i] should not both be equal to 0. In other words, there should be no layer that is neither the output layer of at least one OLS nor a direct reference layer of any other layer.

[0200] For each OLS, there should be at least one layer as the output layer. In other words, for any value of i in the range of 0 to TotalNumOlss - 1 (inclusive), the value of NumOutputLayersInOls[i] should be greater than or equal to 1.

[0201] The variables NumLayersInOls[i], which specify the number of layers in the i-th OLS, and LayerIdInOls[i][j], which specify the nuh_layer_id value of the j-th layer in the i-th OLS, are derived as follows:

[0202] NumLayersInOls[ 0 ] = 1LayerIdInOls[ 0 ][ 0 ] = vps_layer_id[ 0 ]for( i = 1; i < TotalNumOlss; i++ ) { if( each_layer_is_an_ols_flag ) {NumLayersInOls[ i ] = 1 LayerIdInOls[ i ][ 0 ] = vps_layer_id[ i ] (41)}else if( ols_mode_idc = = 0 | | ols_mode_idc = = 1 ) { NumLayersInOls[ i ] = i + 1 for( j = 0; j < NumLayersInOls[ i ]; j++ ) LayerIdInOls[ i ][ j ] = vps_layer_id[ j ]} else if( ols_mode_idc = = 2 ) { for( k = 0, j= 0; k <= vps_max_layers_minus1; k++ ) if( layerIncludedInOlsFlag[ i ][ k] ) LayerIdInOls[ i ][ j++ ] = vps_layer_id[ k ] NumLayersInOls[ i ] = j}}

[0203] Note 1 – The 0th OLS contains only the lowest layer (i.e., the layer whose nuh_layer_id is equal to vps_layer_id[0]), and for the 0th OLS, the output only includes the layer.

[0204] The variable OlsLayerIdx[i][j], which specifies the OLS layer index of the layer whose nuh_layer_id is equal to LayerIdInOls[i][j], is derived as follows:

[0205] for( i = 0; i < TotalNumOlss; i++ ) for j = 0; j < NumLayersInOls[ i]; j++ ) (42) OlsLayerIdx[ i ][ LayerIdInOls[ i ][ j ] ] = j

[0206] The lowest layer of each OLS should be an independent layer. In other words, for each i in the range of 0 to TotalNumOlss - 1 (inclusive), the value of vps_independent_layer_flag[GeneralLayerIdx[LayerIdInOls[i][0]]] should be equal to 1.

[0207] Each layer should be included in at least one OLS specified by the VPS. In other words, for each layer for a specific value of nuh_layer_id, nuhLayerId equal to one of vps_layer_id[k] (k being in the range of 0 to vps_max_layers_minus1, inclusive), there should be at least one pair of values ​​i and j (where i is in the range of 0 to TotalNumOlss - 1, inclusive, and j is in the range of NumLayersInOls[i] - 1, inclusive) such that the value of LayerIdInOls[i][j] is equal to nuhLayerId.

[0208] Increasing `vps_num_ptls_minus1` by 1 specifies the number of `profile_tier_level()` syntax structures in the VPS. The value of `vps_num_ptls_minus1` should be less than `TotalNumOlss`.

[0209] `pt_present_flag[i]` equal to 1 indicates that the tier, level, and general constraint information exists in the i-th `profile_tier_level()` syntax structure in the VPS. `pt_present_flag[i]` equal to 0 indicates that the tier, level, and general constraint information does not exist in the i-th `profile_tier_level()` syntax structure in the VPS. The value of `pt_present_flag[0]` is inferred to be equal to 1. When `pt_present_flag[i]` equals 0, the tier, level, and general constraint information of the i-th `profile_tier_level()` syntax structure in the VPS is inferred to be the same as that of the (i-1)-th `profile_tier_level()` syntax structure in the VPS.

[0210] `ptl_max_temporal_id[i]` specifies the TemporalId of the highest sublayer representation in the `i`th `profile_tier_level()` syntax structure within the VPS where the level information resides. The value of `ptl_max_temporal_id[i]` should be in the range of 0 to `vps_max_sublayers_minus1` (inclusive). When `vps_max_sublayers_minus1` equals 0, the value of `ptl_max_temporal_id[i]` is inferred to be 0. When `vps_max_sublayers_minus1` is greater than 0 and `vps_all_layers_same_num_sublayers_flag` equals 1, the value of `ptl_max_temporal_id[i]` is inferred to be equal to `vps_max_sublayers_minus1`.

[0211] vps_ptl_alignment_zero_bit should be equal to 0.

[0212] `ols_ptl_idx[i]` specifies the index of the list of `profile_tier_level()` syntax structures in the VPS for the `profile_tier_level()` syntax structure applicable to the `i`-th OLS. When present, the value of `ols_ptl_idx[i]` should be in the range of 0 to `vps_num_ptls_minus1` (inclusive). When `vps_num_ptls_minus1` is equal to 0, the value of `ols_ptl_idx[i]` is inferred to be equal to 0.

[0213] When NumLayersInOls[i] equals 1, the profile_tier_level() syntax structure applicable to the i-th OLS also exists in the SPS referenced by the layer in the i-th OLS. The requirement for bitstream consistency is that when NumLayersInOls[i] equals 1, the profile_tier_level() syntax structure for signaling notification in the i-th OLS in the VPS and SPS should be the same.

[0214] `vps_num_dpb_params` specifies the number of `dpb_parameters()` syntax structures in the VPS. The value of `vps_num_dpb_params` should be in the range of 0 to 16 (inclusive). If it does not exist, the value of `vps_num_dpb_params` is inferred to be 0.

[0215] `vps_sublayer_dpb_params_present_flag` controls the presence of the syntax elements `max_dec_pic_buffering_minus1[]`, `max_num_reorder_pics[]`, and `max_latency_increase_plus1[]` in the `dpb_parameters()` syntax structure of the VPS. When these elements are not present, `vps_sub_dpb_params_info_present_flag` is inferred to be equal to 0.

[0216] `dpb_max_temporal_id[i]` specifies the TemporalId of the highest sublayer representation in the i-th `dpb_parameters()` syntax structure in the VPS that the DPB parameter can exist in. The value of `dpb_max_temporal_id[i]` should be in the range of 0 to `vps_max_sublayers_minus1` (inclusive). When `vps_max_sublayers_minus1` equals 0, the value of `dpb_max_temporal_id[i]` is inferred to be equal to 0. When `vps_max_sublayers_minus1` is greater than 0 and `vps_all_layers_same_num_sublayers_flag` equals 1, the value of `dpb_max_temporal_id[i]` is inferred to be equal to `vps_max_sublayers_minus1`.

[0217] ols_dpb_pic_width[i] specifies the width of the image storage buffer for the i-th OLS, in units of luminance samples.

[0218] ols_dpb_pic_height[i] specifies the height of each picture storage buffer in the i-th OLS, in units of luminance samples.

[0219] `ols_dpb_params_idx[i]` specifies the index of the list of `dpb_parameters()` syntax structures in the VPS for the `dpb_parameters()` syntax structure applicable to the `i`-th OLS when `NumLayersInOls[i]` is greater than 1. When present, the value of `ols_dpb_params_idx[i]` should be in the range of 0 to `vps_num_dpb_params - 1` (inclusive). When `ols_dpb_params_idx[i]` does not exist, its value is inferred to be 0.

[0220] When NumLayersInOls[i] equals 1, the dpb_parameters() syntax structure applicable to the i-th OLS exists in the SPS referenced by the layer in the i-th OLS.

[0221] A value of 1 for `vps_general_hrd_params_present_flag` indicates that the syntax structure `general_hrd_parameters()` and other HRD parameters exist in the VPS RBSP syntax structure. A value of 0 for `vps_general_hrd_params_present_flag` indicates that the syntax structure `general_hrd_parameters()` and other HRD parameters do not exist in the VPS RBSP syntax structure. When they do not exist, the value of `vps_general_hrd_params_present_flag` is inferred to be 0.

[0222] When NumLayersInOls[i] equals 1, the general_hrd_parameters() syntax structure applicable to the i-th OLS exists in the SPS referenced by the layer in the i-th OLS.

[0223] `vps_sublayer_cpb_params_present_flag` equal to 1 specifies that the `i`th `ols_hrd_parameters()` syntax structure in the VPS contains the HRD parameters of the sublayer representation whose TemporalId is in the range of 0 to `hrd_max_tid[i]` (inclusive). `vps_sublayer_cpb_params_present_flag` equal to 0 specifies that the `i`th `ols_hrd_parameters()` syntax structure in the VPS contains the HRD parameters of the sublayer representation whose TemporalId is only equal to `hrd_max_tid[i]`. When `vps_max_sublayers_minus1` equals 0, the value of `vps_sublayer_cpb_params_present_flag` is inferred to be 0.

[0224] When vps_sublayer_cpb_params_present_flag equals 0, the HRD parameters of the sublayer representation with TemporalId in the range of 0 to hrd_max_tid[i] - 1 (inclusive) are inferred to be the same as those of the sublayer representation with TemporalId equal to hrd_max_tid[i]. These include the HRD parameters from the fixed_pic_rate_general_flag[i] syntax element up to the sublayer_hrd_parameters(i) syntax structure immediately under the condition "if(general_vcl_hrd_params_present_flag)" in the ols_hrd_parameters syntax structure.

[0225] Increasing 1 to num_ols_hrd_params_minus1 specifies the number of ols_hrd_parameters() syntax structures present in the general_hrd_parameters() syntax structure when vps_general_hrd_params_present_flag equals 1. The value of num_ols_hrd_params_minus1 should be in the range of 0 to TotalNumOlss - 1 (inclusive).

[0226] `hrd_max_tid[i]` specifies the TemporalId of the highest sublayer representation of the HRD parameter included in the i-th `ols_hrd_parameters()` syntax structure. The value of `hrd_max_tid[i]` should be in the range of 0 to `vps_max_sublayers_minus1` (inclusive). When `vps_max_sublayers_minus1` equals 0, the value of `hrd_max_tid[i]` is inferred to be equal to 0. When `vps_max_sublayers_minus1` is greater than 0 and `vps_all_layers_same_num_sublayers_flag` equals 1, the value of `hrd_max_tid[i]` is inferred to be equal to `vps_max_sublayers_minus1`.

[0227] `ols_hrd_idx[i]` specifies the index of the list of `ols_hrd_parameters()` syntax structures in the VPS for the `ols_hrd_parameters()` syntax structure applicable to the `i`-th OLS when `NumLayersInOls[i]` is greater than 1. The value of `ols_hrd_idx[i]` should be in the range from 0 to `num_ols_hrd_params_minus1` (inclusive).

[0228] When NumLayersInOls[i] equals 1, the ols_hrd_parameters() syntax structure applicable to the i-th OLS exists in the SPS referenced by the layer in the i-th OLS.

[0229] If the value of num_ols_hrd_param_minus1 + 1 is equal to TotalNumOlss, then the value of ols_hrd_idx[i] is inferred to be equal to i. Otherwise, when NumLayersInOls[i] is greater than 1 and num_ols_hrd_params_minus1 is equal to 0, the value of ols_hrd_idx[i] is inferred to be equal to 0.

[0230] A value of 0 for `vps_extension_flag` indicates that no `vps_extension_data_flag` syntax element exists in the VPS RBSP syntax structure. A value of 1 for `vps_extension_flag` indicates that the `vps_extension_data_flag` syntax element exists in the VPS RBSP syntax structure.

[0231] The `vps_extension_data_flag` flag can have any value. Its presence and value do not affect the decoder's conformance to the tier specified in this version of the specification. Decoders conforming to this version of the specification should ignore all `vps_extension_data_flag` syntax elements.

[0232] 3.5. SPS Syntax and Semantics

[0233] In the latest VVC draft text, the SPS syntax and semantics are as follows:

[0234]

[0235]

[0236]

[0237]

[0238]

[0239]

[0240] The SPS RBSP should be available for the decoding process before being referenced, either in at least one AU where TemporalId equals 0 or through external means.

[0241] All SPS NAL cells in CVS that have a specific value of sps_seq_parameter_set_id should have the same content.

[0242] sps_seq_parameter_set_id provides an identifier for SPS for reference by other syntax elements.

[0243] Regardless of the nuh_layer_id value, SPS NAL cells share the same value space for sps_seq_parameter_set_id.

[0244] Let spsLayerId be the value of nuh_layer_id for a specific SPS NAL cell, and vclLayerId be the value of nuh_layer_id for a specific VCL NAL cell. A specific VCL NAL cell should not reference a specific SPS NAL cell unless spsLayerId is less than or equal to vclLayerId, and the layer whose nuh_layer_id is equal to spsLayerId is included in at least one OLS that includes a layer whose nuh_layer_id is equal to vclLayerId.

[0245] When sps_video_parameter_set_id is greater than 0, it specifies the value of vps_video_parameter_set_id of the VPS that SPS references.

[0246] When sps_video_parameter_set_id equals 0, the following applies:

[0247] SPS does not take into account VPS.

[0248] When decoding each CLVS of the reference SPS, the VPS is not referenced.

[0249] The value of vps_max_layers_minus1 is inferred to be equal to 0.

[0250] CVS should contain only one layer (i.e., all VCL NAL units in CVS should have the same nuh_layer_id value).

[0251] The value of GeneralLayerIdx[ nuh_layer_id ] is inferred to be equal to 0.

[0252] The value of vps_independent_layer_flag[ GeneralLayerIdx[ nuh_layer_id ] ] is inferred to be equal to 1.

[0253] When vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]] equals 1, the SPS referenced by the CLVS with a specific nuh_layer_id value nuhLayerId should have a nuh_layer_id equal to nuhLayerId.

[0254] The value of sps_video_parameter_set_id should be the same across all SPS referenced by CLVS in CVS.

[0255] Increasing 1 in sps_max_sublayers_minus1 specifies the maximum number of temporal sublayers that can exist in each CLVS of the reference SPS. The value of sps_max_sublayers_minus1 should be in the range of 0 to vps_max_sublayers_minus1 (inclusive).

[0256] sps_reserved_zero_4bits should be equal to 0 in the bitstream conforming to this version of the specification. Other values ​​for sps_reserved_zero_4bits are reserved for future use by ITU-T | ISO / IEC.

[0257] `sps_ptl_dpb_hrd_params_present_flag` equal to 1 indicates that the `profile_tier_level()` and `dpb_parameters()` syntax structures exist in SPS, and the `general_hrd_parameters()` and `ols_hrd_parameters()` syntax structures may also exist in SPS. `sps_ptl_dpb_hrd_params_present_flag` equal to 0 indicates that none of these four syntax structures exist in SPS. The value of `sps_ptl_dpb_hrd_params_present_flag` should be equal to `vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]]`.

[0258] A `gdr_enabled_flag` value of 1 indicates that GDR images can exist in the CLVS of the reference SPS. A `gdr_enabled_flag` value of 0 indicates that GDR images do not exist in the CLVS of the reference SPS.

[0259] chroma_format_idc specifies the chroma sampling relative to the luminance sampling, as specified in Clause 6.2.

[0260] `separate_colour_plane_flag` equal to 1 specifies that the three color components of the 4:4:4 chroma format are encoded and decoded separately. `separate_colour_plane_flag` equal to 0 specifies that the color components are not encoded and decoded separately. When `separate_colour_plane_flag` does not exist, it is inferred to be equal to 0. When `separate_colour_plane_flag` equals 1, the encoded image consists of three separate components, each composed of encoded samples of a color plane (Y, Cb, or Cr), and uses monochrome codec syntax. In this case, each color plane is associated with a specific `colour_plane_id` value.

[0261] Note 1 – The decoding process between color planes with different colour_plane_id values ​​is independent. For example, the decoding process of a monochrome image with one colour_plane_id value does not use any data from monochrome images with different colour_plane_id values ​​for inter-frame prediction.

[0262] Based on the value of separate_colour_plane_flag, the variable ChromaArrayType is assigned the following value:

[0263] If separate_colour_plane_flag equals 0, then ChromaArrayType is set to equal chroma_format_idc.

[0264] Otherwise (separate_colour_plane_flag equals 1), ChromaArrayType is set to 0.

[0265] `res_change_in_clvs_allowed_flag` equal to 1 indicates that the image spatial resolution can be changed within the CLVS of the reference SPS. `res_change_in_clvs_allowed_flag` equal to 0 indicates that the image spatial resolution cannot be changed within any CLVS of the reference SPS.

[0266] `pic_width_max_in_luma_samples` specifies the maximum width of each decoded image from the reference SPS, in luminance samples. `pic_width_max_in_luma_samples` should not be equal to 0 and should be an integer multiple of `Max(8, MinCbSizeY)`.

[0267] The requirement for bitstream consistency is that, for any OLS with an OLS index i that contains one or more layers of a reference SPS, the value of pic_width_max_in_luma_samples should be less than or equal to the value of ols_dpb_pic_width[i].

[0268] `pic_height_max_in_luma_samples` specifies the maximum height of each decoded image from the reference SPS, in luminance samples. `pic_height_max_in_luma_samples` should not be equal to 0 and should be an integer multiple of Max(8, MinCbSizeY).

[0269] The requirement for bitstream consistency is that, for any OLS with an OLS index i that contains one or more layers of a reference SPS, the value of pic_height_max_in_luma_samples should be less than or equal to the value of ols_dpb_pic_height[i].

[0270] `sps_conformance_window_flag` equal to 1 indicates that the consistency trimming window offset parameter follows the next one in SPS. `sps_conformance_window_flag` equal to 0 indicates that the consistency trimming window offset parameter does not exist in SPS.

[0271] `sps_conf_win_left_offset`, `sps_conf_win_right_offset`, `sps_conf_win_top_offset`, and `sps_conf_win_bottom_offset` specify the cropping window applied to images where `pic_width_in_luma_samples` equals `pic_width_max_in_luma_samples` and `pic_height_in_luma_samples` equals `pic_height_max_in_luma_samples`. When `sps_conformance_window_flag` equals 0, the values ​​of `sps_conf_win_left_offset`, `sps_conf_win_right_offset`, `sps_conf_win_top_offset`, and `sps_conf_win_bottom_offset` are inferred to be equal to 0.

[0272] The consistent cropping window contains horizontal image coordinates from SubWidthC sps_conf_win_left_offset to pic_width_max_in_luma_samples - ( SubWidthC sps_conf_win_right_offset + 1) (including SubWidthC sps_conf_win_left_offset and pic_width_max_in_luma_samples -( SubWidthC sps_conf_win_right_offset + 1) and the vertical image coordinates from SubHeightC sps_conf_win_top_offset to pic_height_max_in_luma_samples - ( SubHeightC sps_conf_win_bottom_offset + 1 ) (including SubHeightC sps_conf_win_top_offset and pic_height_max_in_luma_samples - ( SubHeightC The brightness sample points of sps_conf_win_bottom_offset + 1).

[0273] SubWidthC The value of (sps_conf_win_left_offset + sps_conf_win_right_offset) should be less than pic_width_max_in_luma_samples, and SubHeightC The value of (sps_conf_win_top_offset + sps_conf_win_bottom_offset) should be less than pic_height_max_in_luma_samples.

[0274] When ChromaArrayType is not equal to 0, the corresponding specified sample points of the two chroma arrays are sample points with picture coordinates (x / SubWidthC, y / SubHeightC), where (x, y) are the picture coordinates of the specified luminance sample point.

[0275] Note 2 – The consistent cropping window offset parameter is applied only to the output. All internal decoding processes are applied to the uncropped image size.

[0276] The value of sps_log2_ctu_size_minus5 plus 5 specifies the luminance codec tree block size for each CTU. The value of sps_log2_ctu_size_minus5 should be in the range of 0 to 2 (inclusive). The value of sps_log2_ctu_size_minus5 is reserved for future use by ITU-T | ISO / IEC.

[0277] The variables CtbLog2SizeY and CtbSizeY are derived as follows:

[0278] CtbLog2SizeY = sps_log2_ctu_size_minus5 + 5 (43)

[0279] CtbSizeY = 1 << CtbLog2SizeY (44)

[0280] A subpic_info_present_flag value of 1 indicates that subpick information exists for CLVS, and there can be one or more subpicks in each image of CLVS. A subpic_info_present_flag value of 0 indicates that subpick information does not exist for CLVS, and there is only one subpick in each image of CLVS.

[0281] When res_change_in_clvs_allowed_flag equals 1, the value of subpic_info_present_flag should be equal to 0.

[0282] Note 3 – When the bitstream is the result of a sub-bitstream extraction process and contains only a subset of subpictures of the input bitstream of the sub-bitstream extraction process, it may be necessary to set the value of subpic_info_present_flag to 1 in the RBSP of the SPS.

[0283] Incrementing `sps_num_subpics_minus1` by 1 specifies the number of subpicks for each image in CLVS. The value of `sps_num_subpics_minus1` should be between 0 and `Ceil(pic_width_max_in_luma_samples ÷ CtbSizeY)`. The range of Ceil(pic_height_max_in_luma_samples ÷ CtbSizeY) - 1 (inclusive) Ceil(pic_height_max_in_luma_samples ÷ CtbSizeY) - 1). When it does not exist, the value of sps_num_subpics_minus1 is inferred to be equal to 0.

[0284] A value of 1 for `sps_independent_subpics_flag` indicates that intra-frame prediction, inter-frame prediction, and loop filtering operations cannot be performed across any subpicture boundary in the CLVS. A value of 0 for `sps_independent_subpics_flag` indicates that inter-frame prediction or loop filtering operations are allowed across subpicture boundaries in the CLVS. When it does not exist, the value of `sps_independent_subpics_flag` is inferred to be 0.

[0285] `subpic_ctu_top_left_x[i]` specifies the horizontal position of the top-left corner CTU of the i-th subpicture, in units of `CtbSizeY`. The length of the syntax element is `Ceil(Log2((pic_width_max_in_luma_samples + `CtbSizeY` - 1) >> `CtbLog2SizeY`)` bits. When it does not exist, the value of `subpic_ctu_top_left_x[i]` is inferred to be equal to 0.

[0286] `subpic_ctu_top_left_y[i]` specifies the vertical position of the top-left corner CTU of the i-th subpicture, in units of `CtbSizeY`. The length of the syntax element is `Ceil(Log2((pic_height_max_in_luma_samples + `CtbSizeY` - 1) >> `CtbLog2SizeY`)` bits. If it does not exist, the value of `subpic_ctu_top_left_y[i]` is inferred to be equal to 0.

[0287] `subpic_width_minus1[i]` incremented by 1 specifies the width of the i-th subpicture, in units of `CtbSizeY`. The length of the syntax element is `Ceil(Log2((pic_width_max_in_luma_samples + CtbSizeY - 1) >> CtbLog2SizeY))` bits. When it does not exist, the value of `subpic_width_minus1[i]` is inferred to be equal to `((pic_width_max_in_luma_samples + CtbSizeY - 1) >> CtbLog2SizeY) - subpic_ctu_top_left_x[i] - 1`.

[0288] `subpic_height_minus1[i]` incremented by 1 specifies the height of the i-th subpicture, in units of `CtbSizeY`. The length of the syntax element is `Ceil(Log2((pic_height_max_in_luma_samples + CtbSizeY - 1)>>CtbLog2SizeY))` bits. When it does not exist, the value of `subpic_height_minus1[i]` is inferred to be equal to `((pic_height_max_in_luma_samples + CtbSizeY - 1)>>CtbLog2SizeY) -subpic_ctu_top_left_y[i] - 1`.

[0289] `subpic_treated_as_pic_flag[i]` equal to 1 indicates that the i-th subpic of each codec image in CLVS is considered as a picture in the decoding process excluding loop filtering operations. `subpic_treated_as_pic_flag[i]` equal to 0 indicates that the i-th subpic of each codec image in CLVS is not considered as a picture in the decoding process excluding loop filtering operations. When it does not exist, the value of `subpic_treated_as_pic_flag[i]` is inferred to be equal to `sps_independent_subpics_flag`.

[0290] When subpic_treated_as_pic_flag[i] equals 1, the bitstream consistency requirement is that for each output layer and its reference layer in an OLS that includes the layer containing the i-th subpicture as the output layer, all of the following conditions are true:

[0291] All images in the output layer and its reference layer should have the same value for pic_width_in_luma_samples and pic_height_in_luma_samples.

[0292] For each value of j in the range of 0 to sps_num_subpics_minus1 (inclusive), all SPS referenced by the output layer and its reference layer should have the same value of sps_num_subpics_minus1, and should have the same values ​​of subpic_ctu_top_left_x[j], subpic_ctu_top_left_y[j], subpic_width_minus1[j], subpic_height_minus1[j], and loop_filter_across_subpic_enabled_flag[j], respectively.

[0293] For each value of j in the range of 0 to sps_num_subpics_minus1 (inclusive), all pictures in each access unit of the output layer and its reference layer should have the same value of SubpicIdVal[j].

[0294] `loop_filter_across_subpic_enabled_flag[i]` equal to 1 indicates that loop filtering can be performed across the boundary of the i-th subpic in each codec image in CLVS. `loop_filter_across_subpic_enabled_flag[i]` equal to 0 indicates that loop filtering is not performed across the boundary of the i-th subpic in each codec image in CLVS. When it does not exist, the value of `loop_filter_across_subpic_enabled_flag[i]` is inferred to be equal to 1 - `sps_independent_subpics_flag`.

[0295] The requirement for bitstream consistency is that the shape of a sub-image should be such that, during decoding, the entire left and entire top boundaries of each sub-image should be composed of the image boundary or the boundaries of the previously decoded sub-images.

[0296] The increment of 1 in `sps_subpic_id_len_minus1` specifies the number of bits used to represent the syntax elements `sps_subpic_id[i]`, `pps_subpic_id[i]` (if present), and `slice_subpic_id` (if present). The value of `sps_subpic_id_len_minus1` should be in the range of 0 to 15 (inclusive). The value of `1 << (sps_subpic_id_len_minus1 + 1)` should be greater than or equal to `sps_num_subpics_minus1 + 1`.

[0297] A subpic_id_mapping_explicitly_signalled_flag value of 1 indicates that the subpicture ID mapping is explicitly signaled in the SPS or in the PPS referenced by the CLVS codec image. A subpic_id_mapping_explicitly_signalled_flag value of 0 indicates that the subpicture ID mapping is not explicitly signaled to CLVS. When it does not exist, the value of subpic_id_mapping_explicitly_signalled_flag is inferred to be 0.

[0298] When `subpic_id_mapping_in_sps_flag` equals 1, the subpic ID mapping is signaled in the SPS when `subpic_id_mapping_explicitly_signalled_flag` equals 1. When `subpic_id_mapping_in_sps_flag` equals 0, the subpic ID mapping is signaled in the PPS referenced by the CLVS encoder / decoder.

[0299] sps_subpic_id[i] specifies the subpick ID of the i-th subpick. The length of the sps_subpic_id[i] syntax element is sps_subpic_id_len_minus1 + 1 bits.

[0300] The values ​​of bit_depth_minus8 specify the bit depth BitDepth of the samples in the luma and chroma arrays, and the range offset QpBdOffset of the luma and chroma quantization parameters, as follows:

[0301] BitDepth = 8 + bit_depth_minus8 (45)

[0302] QpBdOffset = 6 bit_depth_minus8 (46)

[0303] bit_depth_minus8 should be in the range of 0 to 8 (inclusive).

[0304] `sps_entropy_coding_sync_enabled_flag` equal to 1 specifies that the context-specific synchronization procedure is called before the CTU of the first CTB in a row of CTBs in each slice of each picture including the reference SPS, and after the CTU of the first CTB in a row of CTBs in each slice of each picture including the reference SPS. `sps_entropy_coding_sync_enabled_flag` equal to 0 specifies that the context-specific synchronization procedure is not required before the CTU of the first CTB in a row of CTBs in each slice of each picture including the reference SPS, and after the CTU of the first CTB in a row of CTBs in each slice of each picture including the reference SPS.

[0305] `sps_wpp_entry_point_offsets_present_flag` equal to 1 indicates that signaling for the entry point offset of the CTU line can exist in the strip header of the reference SPS image when `sps_entropy_coding_sync_enabled_flag` equals 1. `sps_wpp_entry_point_offsets_present_flag` equal to 0 indicates that signaling for the entry point offset of the CTU line does not exist in the strip header of the reference SPS image. When it does not exist, the value of `sps_wpp_entry_point_offsets_present_flag` is inferred to be 0.

[0306] A value of 1 for `sps_weighted_pred_flag` indicates that weighted predictions can be applied to the P-strips of the reference SPS. A value of 0 for `sps_weighted_pred_flag` indicates that weighted predictions should not be applied to the P-strips of the reference SPS.

[0307] A value of 1 for `sps_weighted_bipred_flag` indicates that explicit weighted predictions can be applied to the B-bands of the reference SPS. A value of 0 for `sps_weighted_bipred_flag` indicates that explicit weighted predictions should not be applied to the B-bands of the reference SPS.

[0308] The value of the variable MaxPicOrderCntLsb, specified by log2_max_pic_order_cnt_lsb_minus4, used in the decoding process for image order counting is as follows:

[0309] MaxPicOrderCntLsb = 2 ( log2_max_pic_order_cnt_lsb_minus4 + 4 ) (47)

[0310] The value of log2_max_pic_order_cnt_lsb_minus4 should be in the range of 0 to 12 (inclusive).

[0311] A value of 1 for sps_poc_msb_flag indicates that the ph_poc_msb_present_flag syntax element exists in the PH of the reference SPS. A value of 0 for sps_poc_msb_flag indicates that the ph_poc_msb_present_flag syntax element does not exist in the PH of the reference SPS.

[0312] Incrementing 1 by 1 to poc_msb_len_minus1 specifies the length (in bits) of the poc_msb_val syntax element when it exists in the PH of the reference SPS. The value of poc_msb_len_minus1 should be in the range of 0 to 32 - log2_max_pic_order_cnt_lsb_minus4 - 5 (inclusive).

[0313] `num_extra_ph_bits_bytes` specifies the number of extra bits in the PH syntax structure of the SPS-compliant encoded / decoded image. The value of `num_extra_ph_bits_bytes` should be equal to 0 in this version of the specification. Although this version of the specification requires `num_extra_ph_bits_bytes` to be equal to 0, decoders conforming to this version of the specification should allow values ​​of 1 or 2 for `num_extra_ph_bits_bytes` in the syntax.

[0314] `num_extra_sh_bits_bytes` specifies the number of extra bits in the stripe header of the SPS-compliant encoded / decoded image. The value of `num_extra_sh_bits_bytes` should be equal to 0 in this version of the bitstream conforming to this specification. Although this version of the specification requires `num_extra_sh_bits_bytes` to be equal to 0, decoders conforming to this version of the specification should allow values ​​of 1 or 2 in the syntax.

[0315] `sps_sublayer_dpb_params_flag` controls the presence of the syntax elements `max_dec_pic_buffering_minus1[i]`, `max_num_reorder_pics[i]`, and `max_latency_increase_plus1[i]` in the `dpb_parameters()` syntax structure in SPS. When these elements are not present, the value of `sps_sub_dpb_params_info_present_flag` is inferred to be 0.

[0316] A long_term_ref_pics_flag value of 0 indicates that no LTRP is used for inter-frame prediction of any codec pictures in CLVS. A long_term_ref_pics_flag value of 1 indicates that LTRP can be used for inter-frame prediction of one or more codec pictures in CLVS.

[0317] `inter_layer_ref_pics_present_flag` equal to 0 indicates that no ILRP is used for inter-frame prediction of any codec images in CLVS. `inter_layer_ref_pic_flag` equal to 1 indicates that ILRP can be used for inter-frame prediction of one or more codec images in CLVS. When `sps_video_parameter_set_id` equals 0, the value of `inter_layer_ref_pics_present_flag` is inferred to be 0. When `vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]]` equals 1, the value of `inter_layer_ref_pics_present_flag` should be 0. [Ed. (YK): Check if there is a better name for this syntax element.]

[0318] `sps_idr_rpl_present_flag` equal to 1 indicates that the reference image list syntax element exists in the header of the IDR image. `sps_idr_rpl_present_flag` equal to 0 indicates that the reference image list syntax element does not exist in the header of the IDR image.

[0319] The fact that rpl1_same_as_rpl0_flag equals 1 indicates that the syntax element num_ref_pic_lists_in_sps[1] and the syntax structure ref_pic_list_struct(1, rplsIdx) do not exist, and the following applies:

[0320] The value of num_ref_pic_lists_in_sps[1] is inferred to be equal to the value of num_ref_pic_lists_in_sps[0].

[0321] The value of each syntax element in ref_pic_list_struct(1, rplsIdx) is inferred to be equal to the value of the corresponding syntax element in ref_pic_list_struct(0, rplsIdx), where rplsIdx ranges from 0 to num_ref_pic_lists_in_sps[0] - 1.

[0322] num_ref_pic_lists_in_sps[i] specifies the number of ref_pic_list_struct(listIdx, rplsIdx) syntax structures with listIdx equal to i included in the SPS. The value of num_ref_pic_lists_in_sps[i] should be in the range of 0 to 64 (inclusive).

[0323] Note 4 – For each value of listIdx (equal to 0 or 1), the decoder should allocate memory for a total of num_ref_pic_lists_in_sps[i] + 1 ref_pic_list_struct(listIdx, rplsIdx) syntax structures, since one ref_pic_list_struct(listIdx, rplsIdx) syntax structure can be signaled directly in the stripe header of the current picture.

[0324] `qtbtt_dual_tree_intra_flag` equal to 1 specifies that, for I-stripes, each CTU is divided into codec units with 64×64 luma samples using implicit quadtree partitioning, and these codec units are the roots of two separate `coding_tree` syntax structures for luma and chroma. `qtbtt_dual_tree_intra_flag` equal to 0 specifies that separate `coding_tree` syntax structures are not used for I-stripes. When `qtbtt_dual_tree_intra_flag` does not exist, it is inferred to be equal to 0.

[0325] The value of log2_min_luma_coding_block_size_minus2 plus 2 specifies the minimum luma codec block size. The value of log2_min_luma_coding_block_size_minus2 should be in the range of 0 to Min(4, sps_log2_ctu_size_minus5+3) (inclusive).

[0326] The variables MinCbLog2SizeY, MinCbSizeY, IbcBufWidthY, IbcBufWidthC, and Vsize are derived as follows:

[0327] MinCbLog2SizeY = log2_min_luma_coding_block_size_minus2 + 2 (48)

[0328] MinCbSizeY = 1 << MinCbLog2SizeY (49)

[0329] IbcBufWidthY = 256 128 / CtbSizeY (50)

[0330] IbcBufWidthC = IbcBufWidthY / SubWidthC (51)

[0331] VSize = Min( 64, CtbSizeY ) (52)

[0332] The value of MinCbSizeY should be less than or equal to VSize.

[0333] The variables CtbWidthC and CtbHeightC, which specify the width and height of the array for each chroma CTB, are derived as follows:

[0334] If chroma_format_idc equals 0 (monochrome) or separate_colour_plane_flag equals 1, then CtbWidthC and CtbHeightC both equal 0.

[0335] Otherwise, CtbWidthC and CtbHeightC are derived as follows:

[0336] CtbWidthC = CtbSizeY / SubWidthC (53)

[0337] CtbHeightC = CtbSizeY / SubHeightC (54)

[0338] For log2BlockWidth ranging from 0 to 4 and log2BlockHeight ranging from 0 to 4 (inclusive), the upper right diagonal scan order array initialization procedure as specified in Clause 6.5.2 is scheduled, with 1 << log2BlockWidth and 1 << log2BlockHeight as inputs, and the output is assigned to DiagScanOrder[ log2BlockWidth ][ log2BlockHeight ].

[0339] For log2BlockWidth ranging from 0 to 6 and log2BlockHeight ranging from 0 to 6 (inclusive), the horizontal and vertical traversal scan order array initialization procedures as specified in Clause 6.5.3 are invoked, with 1 << log2BlockWidth and 1 << log2BlockHeight as inputs, and the outputs are assigned to HorTravScanOrder[ log2BlockWidth ][ log2BlockHeight ] and VerTravScanOrder[log2BlockWidth ][ log2BlockHeight ].

[0340] A partition_constraints_override_enabled_flag value of 1 indicates the presence of partition_constraints_override_flag in the PH of the reference SPS. A partition_constraints_override_enabled_flag value of 0 indicates the absence of partition_constraints_override_flag in the PH of the reference SPS.

[0341] `sps_log2_diff_min_qt_min_cb_intra_slice_luma` specifies the default difference between the base-2 logarithm of the smallest size of the luminance samples in the luminance leaf blocks generated from the quadtree partitioning of the CTU and the base-2 logarithm of the smallest decoder block size in the luminance samples of the luminance CUs in the slices of the reference SPS with slice_type equal to 2(I). When `partition_constraints_override_enabled_flag` is equal to 1, the default difference can be overridden by `ph_log2_diff_min_qt_min_cb_luma` present in the PH of the reference SPS. The value of `sps_log2_diff_min_qt_min_cb_intra_slice_luma` should be in the range of 0 to `CtbLog2SizeY - MinCbLog2SizeY` (inclusive). The base-2 logarithm of the smallest size of the brightness samples in the brightness leaf blocks generated from the quadtree partitioning of CTU is derived as follows:

[0342] MinQtLog2SizeIntraY = sps_log2_diff_min_qt_min_cb_intra_slice_luma +MinCbLog2SizeY (55)

[0343] `sps_max_mtt_hierarchy_depth_intra_slice_luma` specifies the default maximum hierarchical depth of the codec unit generated from a multi-type tree partition of quad-leaf leaves in a slice with slice_type equal to 2(I) of the reference SPS. When `partition_constraints_override_enabled_flag` equals 1, the default maximum hierarchical depth can be overridden by `ph_max_mtt_hierarchy_depth_intra_slice_luma`, which exists in the PH of the reference SPS. The value of `sps_max_mtt_hierarchy_depth_intra_slice_luma` should be between 0 and 2. The range of (CtbLog2SizeY - MinCbLog2SizeY) (inclusive of 0 and 2) (CtbLog2SizeY - MinCbLog2SizeY)).

[0344] `sps_log2_diff_max_bt_min_qt_intra_slice_luma` specifies the base-2 logarithm of the maximum size (width or height) of the luminance samples in the luminance codec block that can be partitioned using binary partitioning, and the default difference between the minimum size (width or height) of the luminance samples in the luminance leaf block resulting from the quadtree partitioning of the CTU from a slice with slice_type equal to 2(I) of the reference SPS. When `partition_constraints_override_enabled_flag` is equal to 1, the default difference can be overridden by `ph_log2_diff_max_bt_min_qt_luma`, which exists in the PH of the reference SPS. The value of `sps_log2_diff_max_bt_min_qt_intra_slice_luma` should be in the range of 0 to `CtbLog2SizeY - MinQtLog2SizeIntraY` (inclusive). When sps_log2_diff_max_bt_min_qt_intra_slice_luma does not exist, the value of sps_log2_diff_max_bt_min_qt_intra_slice_luma is inferred to be equal to 0.

[0345] `sps_log2_diff_max_tt_min_qt_intra_slice_luma` specifies the default difference between the base-2 logarithm of the maximum size (width or height) of the luminance samples in the luminance codec block that can be partitioned using ternary partitioning and the minimum size (width or height) of the luminance samples in the luminance leaf block resulting from the quadtree partitioning of the CTU from a slice with slice_type equal to 2(I) of the reference SPS. When `partition_constraints_override_enabled_flag` is equal to 1, the default difference can be overridden by `by ph_log2_diff_max_tt_min_qt_luma` in the PH of the reference SPS. The value of `sps_log2_diff_max_tt_min_qt_intra_slice_luma` should be in the range of 0 to `CtbLog2SizeY - MinQtLog2SizeIntraY` (inclusive). When sps_log2_diff_max_tt_min_qt_intra_slice_luma does not exist, the value of sps_log2_diff_max_tt_min_qt_intra_slice_luma is inferred to be equal to 0.

[0346] `sps_log2_diff_min_qt_min_cb_inter_slice` specifies the default difference between the base-2 logarithm of the minimum size of the luminance samples in the luminance leaf blocks generated from the quadtree partitioning of the CTU and the base-2 logarithm of the minimum luminance codec block size in the luminance samples of the luminance CUs in the slices with slice_type equal to 0 (B) or 1 (P) of the reference SPS. When `partition_constraints_override_enabled_flag` is equal to 1, the default difference can be overridden by `ph_log2_diff_min_qt_min_cb_luma` present in the PH of the reference SPS. The value of `sps_log2_diff_min_qt_min_cb_inter_slice` should be in the range of 0 to `CtbLog2SizeY - MinCbLog2SizeY` (inclusive). The base-2 logarithm of the smallest size of the brightness samples in the brightness leaf blocks generated from the quadtree partitioning of CTU is derived as follows:

[0347] MinQtLog2SizeInterY = sps_log2_diff_min_qt_min_cb_inter_slice +MinCbLog2SizeY (56)

[0348] `sps_max_mtt_hierarchy_depth_inter_slice` specifies the default maximum hierarchical depth of the codec unit generated from a multi-type tree partition of quad-leaf trees in a slice with slice_type equal to 0 (B) or 1 (P) of the reference SPS. When `partition_constraints_override_enabled_flag` equals 1, the default maximum hierarchical depth can be overridden by `ph_max_mtt_hierarchy_depth_inter_slice`, which exists in the PH of the reference SPS. The value of `sps_max_mtt_hierarchy_depth_inter_slice` should be between 0 and 2. The range of (CtbLog2SizeY - MinCbLog2SizeY) (inclusive of 0 and 2) (CtbLog2SizeY - MinCbLog2SizeY)).

[0349] `sps_log2_diff_max_bt_min_qt_inter_slice` specifies the base-2 logarithm of the maximum size (width or height) of the luminance samples in the luminance codec block that can be partitioned using binary partitioning, and the default difference between the minimum size (width or height) of the luminance samples in the luminance leaf block resulting from the quadtree partitioning of the CTU from the slice of the reference SPS with slice_type equal to 0 (B) or 1 (P). When `partition_constraints_override_enabled_flag` is equal to 1, the default difference can be overridden by `ph_log2_diff_max_bt_min_qt_luma`, which exists in the PH of the reference SPS. The value of `sps_log2_diff_max_bt_min_qt_inter_slice` should be in the range of 0 to `CtbLog2SizeY - MinQtLog2SizeInterY` (inclusive). When sps_log2_diff_max_bt_min_qt_inter_slice does not exist, the value of sps_log2_diff_max_bt_min_qt_inter_slice is inferred to be equal to 0.

[0350] `sps_log2_diff_max_tt_min_qt_inter_slice` specifies the default difference between the base-2 logarithm of the maximum size (width or height) of the luminance samples in the luminance codec block that can be partitioned using ternary partitioning and the minimum size (width or height) of the luminance samples in the luminance leaf block resulting from the quadtree partitioning of the CTU from the slice of the reference SPS with slice_type equal to 0 (B) or 1 (P). When `partition_constraints_override_enabled_flag` is equal to 1, the default difference can be overridden by `ph_log2_diff_max_tt_min_qt_luma`, which exists in the PH of the reference SPS. The value of `sps_log2_diff_max_tt_min_qt_inter_slice` should be in the range of 0 to `CtbLog2SizeY - MinQtLog2SizeInterY` (inclusive). When sps_log2_diff_max_tt_min_qt_inter_slice does not exist, the value of sps_log2_diff_max_tt_min_qt_inter_slice is inferred to be equal to 0.

[0351] `sps_log2_diff_min_qt_min_cb_intra_slice_chroma` specifies the default difference between the base-2 logarithm of the smallest size of the luminance samples in the chrominance leaf blocks generated from the quadtree partitioning of the chrominance CTU with `treeType` equal to `DUAL_TREE_CHROMA`, and the base-2 logarithm of the smallest decoder block size in the luminance samples of the chrominance CU with `treeType` equal to `DUAL_TREE_CHROMA` in the slice with `slice_type` equal to 2(I) of the reference SPS. When `partition_constraints_override_enabled_flag` is equal to 1, the default difference can be overridden by `ph_log2_diff_min_qt_min_cb_chroma` present in the PH of the reference SPS. The value of sps_log2_diff_min_qt_min_cb_intra_slice_chroma should be in the range of 0 to CtbLog2SizeY - MinCbLog2SizeY (inclusive). When it does not exist, the value of sps_log2_diff_min_qt_min_cb_intra_slice_chroma is inferred to be equal to 0. The base-2 logarithm of the smallest size of the luminance samples in the chroma leaf blocks generated from the quadtree partitioning of CTU with treeType equal to DUAL_TREE_CHROMA is derived as follows:

[0352] MinQtLog2SizeIntraC = sps_log2_diff_min_qt_min_cb_intra_slice_chroma+ MinCbLog2SizeY (57)

[0353] `sps_max_mtt_hierarchy_depth_intra_slice_chroma` specifies the default maximum hierarchical depth of chroma codec units generated from multi-type tree partitioning of chroma quadtree leaves with `treeType` equal to `DUAL_TREE_CHROMA` from slices of reference SPS with `slice_type` equal to 2 (I). When `partition_constraints_override_enabled_flag` equals 1, the default maximum hierarchical depth can be overridden by `ph_max_mtt_hierarchy_depth_chroma`, which exists in the `PH` of the reference SPS. The value of `sps_max_mtt_hierarchy_depth_intra_slice_chroma` should be between 0 and 2. The range of (CtbLog2SizeY - MinCbLog2SizeY) (inclusive of 0 and 2) Within (CtbLog2SizeY -MinCbLog2SizeY). When it does not exist, the value of sps_max_mtt_hierarchy_depth_intra_slice_chroma is inferred to be equal to 0.

[0354] `sps_log2_diff_max_bt_min_qt_intra_slice_chroma` specifies the base-2 logarithm of the maximum size (width or height) of the luminance samples in a chroma codec block that can be partitioned using binary partitioning, and the default difference between the minimum size (width or height) of the luminance samples in a chroma leaf block resulting from a quadtree partition of a chroma CTU with `treeType` equal to `DUAL_TREE_CHROMA` from a slice with `slice_type` equal to 2(I) in the reference SPS. When `partition_constraints_override_enabled_flag` is equal to 1, the default difference can be overridden by `ph_log2_diff_max_bt_min_qt_chroma` present in the PH of the reference SPS. The value of sps_log2_diff_max_bt_min_qt_intra_slice_chroma should be within the range of 0 to CtbLog2SizeY - MinQtLog2SizeIntraC (inclusive). When sps_log2_diff_max_bt_min_qt_intra_slice_chroma does not exist, the value of sps_log2_diff_max_bt_min_qt_intra_slice_chroma is inferred to be equal to 0.

[0355] `sps_log2_diff_max_tt_min_qt_intra_slice_chroma` specifies the base-2 logarithm of the maximum size (width or height) of the luminance samples in a chroma codec block that can be partitioned using ternary partitioning, and the default difference between the minimum size (width or height) of the luminance samples in a chroma leaf block resulting from a quadtree partition of a chroma CTU with `treeType` equal to `DUAL_TREE_CHROMA` from a slice with `slice_type` equal to 2(I) in the reference SPS. When `partition_constraints_override_enabled_flag` is equal to 1, the default difference can be overridden by `ph_log2_diff_max_tt_min_qt_chroma` present in the PH of the reference SPS. The value of sps_log2_diff_max_tt_min_qt_intra_slice_chroma should be within the range of 0 to CtbLog2SizeY - MinQtLog2SizeIntraC (inclusive). When sps_log2_diff_max_tt_min_qt_intra_slice_chroma does not exist, the value of sps_log2_diff_max_tt_min_qt_intra_slice_chroma is inferred to be equal to 0.

[0356] A value of 1 for `sps_max_luma_transform_size_64_flag` specifies that the maximum transformation size in the luminance sample is 64. A value of 0 for `sps_max_luma_transform_size_64_flag` specifies that the maximum transformation size in the luminance sample is 32.

[0357] When CtbSizeY is less than 64, the value of sps_max_luma_transform_size_64_flag should be equal to 0.

[0358] The variables MinTbLog2SizeY, MaxTbLog2SizeY, MinTbSizeY, and MaxTbSizeY are derived as follows:

[0359] MinTbLog2SizeY = 2 (58)

[0360] MaxTbLog2SizeY = sps_max_luma_transform_size_64_flag ? 6 : 5 (59)

[0361] MinTbSizeY = 1 << MinTbLog2SizeY (60)

[0362] MaxTbSizeY = 1 << MaxTbLog2SizeY (61)

[0363] A value of 0 for `sps_joint_cbcr_enabled_flag` indicates that joint encoding / decoding of the chroma residuals is disabled. A value of 1 for `sps_joint_cbcr_enabled_flag` indicates that joint encoding / decoding of the chroma residuals is enabled. When it does not exist, the value of `sps_joint_cbcr_enabled_flag` is inferred to be 0.

[0364] `same_qp_table_for_chroma` equal to 1 specifies that only one chroma QP map table is signaled, and when `sps_joint_cbcr_enabled_flag` equals 1, this table applies to both Cb and Cr residuals and additionally to the joint Cb-Cr residual. `same_qp_table_for_chroma` equal to 0 specifies that the chroma QP map table is signaled in SPS; when `sps_joint_cbcr_enabled_flag` equals 1, two tables are used for Cb and Cr, and an additional table is used for the joint Cb-Cr. When `same_qp_table_for_chroma` is not present in the bitstream, its value is inferred to be 1.

[0365] `qp_table_start_minus26[i]` plus 26 specifies the starting luma and chromaticity QP used to describe the i-th chromaticity QP mapping table. The value of `qp_table_start_minus26[i]` should be in the range of -26 - QpBdOffset to 36 (inclusive). When `qp_table_start_minus26[i]` is not present in the bitstream, its value is inferred to be 0.

[0366] The increment of 1 in num_points_in_qp_table_minus1[i] specifies the number of points used to describe the i-th chroma QP map. The value of num_points_in_qp_table_minus1[i] should be in the range of 0 to 63 + QpBdOffset (inclusive). When num_points_in_qp_table_minus1[0] is not present in the bitstream, the value of num_points_in_qp_table_minus1[0] is inferred to be equal to 0.

[0367] delta_qp_in_val_minus1[i][j] specifies the increment (delta) value of the input coordinates used to derive the pivot point of the i-th chroma QP map. When delta_qp_in_val_minus1[0][j] is not present in the bitstream, the value of delta_qp_in_val_minus1[0][j] is inferred to be equal to 0.

[0368] delta_qp_diff_val[i][j] specifies the incremental value used to derive the output coordinates of the j-th pivot point of the i-th chromaticity QP mapping table.

[0369] The i-th chromaticity QP mapping table ChromaQpTable[i] (where i = 0..numQpTables - 1) is derived as follows:

[0370] qpInVal[ i ][ 0 ] = qp_table_start_minus26[ i ] + 26qpOutVal[ i ][ 0] = qpInVal[ i ][ 0 ]for( j = 0; j <= num_points_in_qp_table_minus1[ i ]; j++ ) { qpInVal[ i ][ j + 1 ] = qpInVal[ i ][ j ] + delta_qp_in_val_minus1[ i][ j ] + 1 qpOutVal[ i ][ j + 1 ] = qpOutVal[ i ][ j ] + ( delta_qp_in_val_minus1[ i ][ j ] ^ delta_qp_diff_val[ i ][ j ] )}ChromaQpTable[ i ][ qpInVal[ i ][ 0 ] ] = qpOutVal[ i ][ 0 ]for( k = qpInVal[ i ][ 0 ] - 1; k >= -QpBdOffset; k - - ) ChromaQpTable[ i ][ k ] = Clip3( -QpBdOffset, 63,ChromaQpTable[ i ][ k + 1 ] - 1 ) (62)for( j = 0; j <= num_points_in_qp_table_minus1[ i ]; j++ ) { sh = ( delta_qp_in_val_minus1[ i ][j ] + 1 ) >>1 for( k = qpInVal[ i ][ j ] + 1, m = 1; k <= qpInval[ i ][ j + 1 ]; k++, m++ ) ChromaQpTable[ i ][ k ] = ChromaQpTable[ i ][ qpInVal[ i ][ j ] ] + (( qpOutVal[ i ][j + 1] - qpOutVal[ i ][j ] ) m + sh ) / ( delta_qp_in_val_minus1[ i ][j] + 1 )}for( k = qpInVal[ i ][ num_points_in_qp_table_minus1[ i] + 1 ] + 1; k <= 63; k++ ) ChromaQpTable[ i ][ k ] = Clip3( -QpBdOffset,63, ChromaQpTable[ i ][ k - 1 ] + 1 )

[0371] When same_qp_table_for_chroma equals 1, ChromaQpTable[1][k] and ChromaQpTable[2][k] are set to equal ChromaQpTable[0][k], where k is in the range from -QpBdOffset to 63 (inclusive).

[0372] The requirement for bitstream consistency is that the values ​​of qpInVal[i][j] and qpOutVal[i][j] should be in the range of -QpBdOffset to 63 (inclusive), where i is in the range of 0 to numQpTables - 1 (inclusive), and j is in the range of 0 to num_points_in_qp_table_minus1[i] + 1 (inclusive).

[0373] `sps_sao_enabled_flag` equal to 1 indicates that the sample adaptive offset process is applied to the reconstructed image after the deblocking filtering process. `sps_sao_enabled_flag` equal to 0 indicates that the sample adaptive offset process is not applied to the reconstructed image after the deblocking filtering process.

[0374] A value of 0 for sps_alf_enabled_flag indicates that the adaptive loop filter is disabled. A value of 1 for sps_alf_enabled_flag indicates that the adaptive loop filter is enabled.

[0375] A value of 0 for sps_ccalf_enabled_flag indicates that the cross-component adaptive loop filter is disabled. A value of 1 for sps_ccalf_enabled_flag indicates that the cross-component adaptive loop filter can be enabled.

[0376] A value of 1 for `sps_transform_skip_enabled_flag` indicates that the `transform_skip_flag` can exist in the transform unit syntax. A value of 0 for `sps_transform_skip_enabled_flag` indicates that the `transform_skip_flag` does not exist in the transform unit syntax.

[0377] log2_transform_skip_max_size_minus2 specifies the maximum block size to be skipped during transformation and should be in the range of 0 to 3 (inclusive).

[0378] The variable MaxTsSize is set to equal 1 << (log2_transform_skip_max_size_minus2 + 2).

[0379] A value of 1 for `sps_bdpcm_enabled_flag` indicates that `intra_bdpcm_luma_flag` and `intra_bdpcm_chroma_flag` can exist in the codec unit syntax of the intra codec unit. A value of 0 for `sps_bdpcm_enabled_flag` indicates that `intra_bdpcm_luma_flag` and `intra_bdpcm_chroma_flag` do not exist in the codec unit syntax of the intra codec unit. When they do not exist, the value of `sps_bdpcm_enabled_flag` is inferred to be 0.

[0380] `sps_ref_wraparound_enabled_flag` equal to 1 specifies that horizontal wraparound motion compensation is applied in inter-frame prediction. `sps_ref_wraparound_enabled_flag` equal to 0 specifies that horizontal wraparound motion compensation is not applied. When the value of `(CtbSizeY / MinCbSizeY + 1)` is greater than `(pic_width_in_luma_samples / MinCbSizeY - 1)`, where `pic_width_in_luma_samples` is the value of `pic_width_in_luma_samples` in any PPS referencing SPS, the value of `sps_ref_wraparound_enabled_flag` should be equal to 0. [Ed. (YK): The semantics here still depend on the PPS syntax elements.]

[0381] A value of 1 for `sps_temporal_mvp_enabled_flag` indicates that temporal motion vector predictions can be used in CLVS. A value of 0 for `sps_temporal_mvp_enabled_flag` indicates that temporal motion vector predictions are not used in CLVS.

[0382] `sps_sbtmvp_enabled_flag` equal to 1 indicates that sub-block-based temporal motion vector predictions can be used to decode images in CLVS with slice_types not equal to i. `sps_sbtmvp_enabled_flag` equal to 0 indicates that sub-block-based temporal motion vector predictions are not used in CLVS. When `sps_sbtmvp_enabled_flag` does not exist, it is inferred to be equal to 0.

[0383] `sps_amvr_enabled_flag` equal to 1 specifies that adaptive motion vector differential resolution is used for motion vector encoding and decoding. `amvr_enabled_flag` equal to 0 specifies that adaptive motion vector differential resolution is not used for motion vector encoding and decoding.

[0384] A value of 0 for sps_bdof_enabled_flag indicates that bidirectional optical flow inter-frame prediction is disabled. A value of 1 for sps_bdof_enabled_flag indicates that bidirectional optical flow inter-frame prediction is enabled.

[0385] `sps_bdof_pic_present_flag` equal to 1 indicates that `ph_disable_bdof_flag` exists in the PH of the reference SPS. `sps_bdof_pic_present_flag` equal to 0 indicates that `ph_disable_bdof_flag` does not exist in the PH of the reference SPS. When `sps_bdof_pic_present_flag` does not exist, its value is inferred to be 0.

[0386] A value of 1 for sps_smvd_enabled_flag indicates that the symmetric motion vector difference can be used for motion vector decoding. A value of 0 for sps_smvd_enabled_flag indicates that the symmetric motion vector difference is not used for motion vector encoding and decoding.

[0387] A value of 1 for sps_dmvr_enabled_flag indicates that inter-frame bidirectional prediction based on decoder motion vector refinement is enabled. A value of 0 for sps_dmvr_enabled_flag indicates that inter-frame bidirectional prediction based on decoder motion vector refinement is disabled.

[0388] A value of 1 for `sps_dmvr_pic_present_flag` indicates that `ph_disable_dmvr_flag` exists in the PH of the reference SPS. A value of 0 for `sps_dmvr_pic_present_flag` indicates that `ph_disable_dmvr_flag` does not exist in the PH of the reference SPS. When `sps_dmvr_pic_present_flag` does not exist, its value is inferred to be 0.

[0389] A value of 1 for sps_mmvd_enabled_flag indicates that Merge mode utilizing motion vector differences is enabled. A value of 0 for sps_mmvd_enabled_flag indicates that Merge mode utilizing motion vector differences is disabled.

[0390] A value of 1 for sps_isp_enabled_flag indicates that intra-prediction utilizing sub-segmentation is enabled. A value of 0 for sps_isp_enabled_flag indicates that intra-prediction utilizing sub-segmentation is disabled.

[0391] A value of 1 for sps_mrl_enabled_flag indicates that intra-frame prediction using multiple reference lines is enabled. A value of 0 for sps_mrl_enabled_flag indicates that intra-frame prediction using multiple reference lines is disabled.

[0392] A value of 1 for sps_mip_enabled_flag indicates that matrix-based intra-prediction is enabled. A value of 0 for sps_mip_enabled_flag indicates that matrix-based intra-prediction is disabled.

[0393] A value of 0 for `sps_cclm_enabled_flag` indicates that intra-frame prediction of the cross-component linear model from the luma component to the chroma component is disabled. A value of 1 for `sps_cclm_enabled_flag` indicates that intra-frame prediction of the cross-component linear model from the luma component to the chroma component is enabled. When `sps_cclm_enabled_flag` does not exist, it is inferred to be equal to 0.

[0394] `sps_chroma_horizontal_collocated_flag` equal to 1 specifies that the prediction process is designed to operate for chroma sample positions that are not horizontally shifted relative to the corresponding luminance sample position. `sps_chroma_horizontal_collocated_flag` equal to 0 specifies that the prediction process is designed to operate for chroma sample positions that are shifted 0.5 units to the right relative to the corresponding luminance sample position. When `sps_chroma_horizontal_collocated_flag` does not exist, it is inferred to be equal to 1.

[0395] `sps_chroma_vertical_collocated_flag` equal to 1 specifies that the prediction process is designed to operate for chroma sample positions that are not vertically shifted relative to the corresponding luminance sample position. `sps_chroma_vertical_collocated_flag` equal to 0 specifies that the prediction process is designed to operate for chroma sample positions that are shifted down by 0.5 units relative to the corresponding luminance sample position. When `sps_chroma_vertical_collocated_flag` does not exist, it is inferred to be equal to 1.

[0396] A value of 1 for `sps_mts_enabled_flag` indicates that `sps_explicit_mts_intra_enabled_flag` exists in the Sequence Parameter Set (RBSP) syntax, and that `sps_explicit_mts_inter_enabled_flag` also exists in the Sequence Parameter Set (RBSP) syntax. A value of 0 for `sps_mts_enabled_flag` indicates that `sps_explicit_mts_intra_enabled_flag` does not exist in the Sequence Parameter Set (RBSP) syntax, and that `sps_explicit_mts_inter_enabled_flag` also does not exist in the Sequence Parameter Set (RBSP) syntax.

[0397] A value of 1 for `sps_explicit_mts_intra_enabled_flag` indicates that `mts_idx` can exist in the intra codec unit syntax. A value of 0 for `sps_explicit_mts_intra_enabled_flag` indicates that `mts_idx` does not exist in the intra codec unit syntax. When it does not exist, the value of `sps_explicit_mts_intra_enabled_flag` is inferred to be 0.

[0398] A value of 1 for `sps_explicit_mts_inter_enabled_flag` indicates that `mts_idx` can exist in the inter-frame codec unit syntax. A value of 0 for `sps_explicit_mts_inter_enabled_flag` indicates that `mts_idx` does not exist in the inter-frame codec unit syntax. When it does not exist, the value of `sps_explicit_mts_inter_enabled_flag` is inferred to be 0.

[0399] The `six_minus_max_num_merge_cand` parameter specifies the maximum number of Merge motion vector prediction (MVP) candidates supported from the SPS subtracted from 6. The value of `six_minus_max_num_merge_cand` should be in the range of 0 to 5 (inclusive).

[0400] The maximum number of MVP candidates, MaxNumMergeCand, is derived as follows:

[0401] MaxNumMergeCand = 6 - six_minus_max_num_merge_cand (63)

[0402] A value of 0 for sps_sbt_enabled_flag indicates that subblock transforms for inter-frame prediction CUs are disabled. A value of 1 for sps_sbt_enabled_flag indicates that subblock transforms for inter-frame prediction CUs are enabled.

[0403] `sps_affine_enabled_flag` specifies whether affine-based motion compensation can be used for inter-frame prediction. If `sps_affine_enabled_flag` equals 0, the syntax should be constrained so that no affine-based motion compensation is used in CLVS, and `inter_affine_flag` and `cu_affine_type_flag` are not present in the CLVS codec unit syntax. Otherwise (`sps_affine_enabled_flag` equals 1), affine-based motion compensation can be used in CLVS.

[0404] five_minus_max_num_subblock_merge_cand specifies the maximum number of subblock-based Merge motion vector prediction candidates supported from the SPS subtracted from 5.

[0405] `sps_affine_type_flag` specifies whether motion compensation based on a 6-parameter affine model can be used for inter-frame prediction. If `sps_affine_type_flag` equals 0, the syntax should be constrained such that no motion compensation based on a 6-parameter affine model is used in CLVS, and `cu_affine_type_flag` does not exist in the codec unit syntax of CLVS. Otherwise (`sps_affine_type_flag` equals 1), motion compensation based on a 6-parameter affine model can be used in CLVS. When it does not exist, the value of `sps_affine_type_flag` is inferred to be equal to 0.

[0406] `sps_affine_amvr_enabled_flag` equal to 1 specifies that adaptive motion vector differential resolution is used for motion vector encoding and decoding in affine inter-frame mode. `sps_affine_amvr_enabled_flag` equal to 0 specifies that adaptive motion vector differential resolution is not used for motion vector encoding and decoding in affine inter-frame mode. When it does not exist, the value of `sps_affine_amvr_enabled_flag` is inferred to be 0.

[0407] `sps_affine_prof_enabled_flag` specifies whether optical flow-based prediction refinement can be used for affine motion compensation. If `sps_affine_prof_enabled_flag` equals 0, affine motion compensation should not be refined using optical flow. Otherwise (`sps_affine_prof_enabled_flag` equals 1), affine motion compensation can be refined using optical flow. When it does not exist, the value of `sps_affine_prof_enabled_flag` is inferred to be 0.

[0408] `sps_prof_pic_present_flag` equal to 1 indicates that `ph_disable_prof_flag` exists in the PH of the reference SPS. `sps_prof_pic_present_flag` equal to 0 indicates that `ph_disable_prof_flag` does not exist in the PH of the reference SPS. When `sps_prof_pic_present_flag` does not exist, its value is inferred to be 0.

[0409] A value of 1 for `sps_palette_enabled_flag` indicates that `pred_mode_plt_flag` can exist in the codec unit syntax. A value of 0 for `sps_palette_enabled_flag` indicates that `pred_mode_plt_flag` does not exist in the codec unit syntax. When `sps_palette_enabled_flag` does not exist, it is inferred to be equal to 0.

[0410] A value of 1 for `sps_act_enabled_flag` indicates that adaptive color transformation can be used, and `cu_act_enabled_flag` can exist in the codec unit syntax. A value of 0 for `sps_act_enabled_flag` indicates that adaptive color transformation is not used, and `cu_act_enabled_flag` does not exist in the codec unit syntax. When `sps_act_enabled_flag` does not exist, it is inferred to be equal to 0.

[0411] min_qp_prime_ts_minus4 specifies the minimum allowed quantization parameters for the transform skip mode as follows:

[0412] QpPrimeTsMin = 4 + min_qp_prime_ts_minus4 (64)

[0413] The value of min_qp_prime_ts_minus4 should be in the range of 0 to 48 (inclusive).

[0414] `sps_bcw_enabled_flag` specifies whether bidirectional prediction with CU weights can be used for inter-frame prediction. If `sps_bcw_enabled_flag` equals 0, the syntax should be constrained so that bidirectional prediction with CU weights is not used in CLVS, and `bcw_idx` does not exist in the CLVS codec unit syntax. Otherwise (`sps_bcw_enabled_flag` equals 1), bidirectional prediction with CU weights can be used in CLVS.

[0415] `sps_ibc_enabled_flag` equal to 1 indicates that the IBC prediction mode can be used to decode images in CLVS. `sps_ibc_enabled_flag` equal to 0 indicates that the IBC prediction mode is not used in CLVS. When `sps_ibc_enabled_flag` does not exist, it is inferred to be equal to 0.

[0416] The `six_minus_max_num_ibc_merge_cand` parameter specifies the maximum number of IBC Merge Block Vector Prediction (BVP) candidates supported from the SPS subtracted from 6. The value of `six_minus_max_num_ibc_merge_cand` should be in the range of 0 to 5 (inclusive).

[0417] The maximum number of IBC Merge BVP candidates, MaxNumIbcMergeCand, is derived as follows:

[0418] if( sps_ibc_enabled_flag ) MaxNumIbcMergeCand = 6 - six_minus_max_num_ibc_merge_cand (65)else MaxNumIbcMergeCand = 0

[0419] `sps_ciip_enabled_flag` specifies that the `ciip_flag` can exist in the codec unit syntax of the inter-frame codec unit. `sps_ciip_enabled_flag` equal to 0 specifies that the `ciip_flag` does not exist in the codec unit syntax of the inter-frame codec unit.

[0420] A value of 1 for `sps_fpel_mmvd_enabled_flag` specifies that Merge mode utilizing motion vector differences uses integer sample precision. A value of 0 for `sps_fpel_mmvd_enabled_flag` specifies that Merge mode utilizing motion vector differences can use fractional sample precision.

[0421] `sps_gpm_enabled_flag` specifies whether geometry-based motion compensation can be used for inter-frame prediction. `sps_gpm_enabled_flag` equal to 0 indicates that the syntax should be constrained so that geometry-based motion compensation is not used in CLVS, and `merge_gpm_partition_idx`, `merge_gpm_idx0`, and `merge_gpm_idx1` do not exist in the CLVS codec unit syntax. `sps_gpm_enabled_flag` equal to 1 indicates that geometry-based motion compensation can be used in CLVS. When it does not exist, the value of `sps_gpm_enabled_flag` is inferred to be 0.

[0422] max_num_merge_cand_minus_max_num_gpm_cand specifies the maximum number of geometric segmentation merge pattern candidates supported from the SPS subtracted from MaxNumMergeCand.

[0423] The maximum number of candidate geometric segmentation Merge patterns, MaxNumGpmMergeCand, is derived as follows:

[0424] if( sps_gpm_enabled_flag && MaxNumMergeCand >= 3 )MaxNumGpmMergeCand = MaxNumMergeCand - max_num_merge_cand_minus_max_num_gpm_cand (66)else if( sps_gpm_enabled_flag && MaxNumMergeCand = = 2 )MaxNumMergeCand = 2else MaxNumGpmMergeCand = 0

[0425] The value of MaxNumGpmMergeCand should be in the range of 2 to MaxNumMergeCand (inclusive).

[0426] `sps_lmcs_enabled_flag` equal to 1 specifies that luma mapping and chroma scaling are used in CLVS. `sps_lmcs_enabled_flag` equal to 0 specifies that luma mapping and chroma scaling are not used in CLVS.

[0427] A value of 1 for sps_lfnst_enabled_flag indicates that lfnst_idx can exist in the intra-frame codec unit syntax. A value of 0 for sps_lfnst_enabled_flag indicates that lfnst_idx does not exist in the intra-frame codec unit syntax.

[0428] The value of sps_ladf_enabled_flag equal to 1 indicates that sps_num_ladf_intervals_minus2, sps_ladf_lowest_interval_qp_offset, sps_ladf_qp_offset[i] and sps_ladf_delta_threshold_minus1[i] exist in SPS.

[0429] The increment of sps_num_ladf_intervals_minus2 by 1 specifies the number of sps_ladf_delta_threshold_minus1[i] and sps_ladf_qp_offset[i] syntax elements present in SPS. The value of sps_num_ladf_intervals_minus2 should be in the range of 0 to 3 (inclusive).

[0430] sps_ladf_lowest_interval_qp_offset specifies the offset used to derive the variable qP, as specified in Clause 8.8.3.6.1. The value of sps_ladf_lowest_interval_qp_offset should be in the range of -63 to 63 (inclusive).

[0431] sps_ladf_qp_offset[i] specifies the offset array used to derive the variable qP, as specified in Clause 8.8.3.6.1. The value of sps_ladf_qp_offset[i] should be in the range of -63 to 63 (inclusive).

[0432] `sps_ladf_delta_threshold_minus1[i]` is used to calculate the value of `SpsLadfIntervalLowerBound[i]`, which specifies the lower limit of the i-th luminance intensity level interval. The value of `sps_ladf_delta_threshold_minus1[i]` should be between 0 and 2. BitDepth - The range of 3 (inclusive of 0 and 2) BitDepth - 3) Inside.

[0433] The value of SpsLadfIntervalLowerBound[0] is set to 0.

[0434] For each value of i in the range from 0 to sps_num_ladf_intervals_minus2 (inclusive), the variable SpsLadfIntervalLowerBound[i ​​+ 1] is derived as follows:

[0435] SpsLadfIntervalLowerBound[ i + 1 ] = SpsLadfIntervalLowerBound[ i ](67) + sps_ladf_delta_threshold_minus1[ i ] + 1

[0436] The value of the variable `Log2ParMrgLevel` is specified by incrementing `log2_parallel_merge_level_minus2` by 2. This value is used in the derivation of spatial merge candidates as specified in Clause 8.5.2.3, the derivation of motion vectors and reference indices in the sub-block merge patterns as specified in Clause 8.5.5.2, and controls the invocation of the update procedure for the historical motion vector prediction list in Clause 8.5.2.1. The value of `log2_parallel_merge_level_minus2` should be in the range of 0 to `CtbLog2SizeY - 2` (inclusive). The variable `Log2ParMrgLevel` is derived as follows:

[0437] Log2ParMrgLevel = log2_parallel_merge_level_minus2 + 2 (68)

[0438] A value of 1 for `sps_scaling_list_enabled_flag` specifies that the scaling list is used in the scaling process of the transformation coefficients. A value of 0 for `sps_scaling_list_enabled_flag` specifies that the scaling list is not used in the scaling process of the transformation coefficients.

[0439] A value of 0 for `sps_dep_quant_enabled_flag` disables dependency quantization for images from the reference SPS. A value of 1 for `sps_dep_quant_enabled_flag` enables dependency quantization for images from the reference SPS.

[0440] A value of 0 for `sps_sign_data_hiding_enabled_flag` indicates that symbol bit hiding is disabled for the reference SPS image. A value of 1 for `sps_sign_data_hiding_enabled_flag` indicates that symbol bit hiding is enabled for the reference SPS image. When `sps_sign_data_hiding_enabled_flag` does not exist, it is inferred to be equal to 0.

[0441] `sps_virtual_boundaries_enabled_flag` equal to 1 indicates that loop filtering across virtual boundaries can be disabled and applied to encoded / decoded images in CLVS. `sps_virtual_boundaries_enabled_flag` equal to 0 indicates that loop filtering across virtual boundaries is not applied to encoded / decoded images in CLVS. Loop filtering operations include deblocking filtering, sample adaptive offset filtering, and adaptive loop filtering operations.

[0442] `sps_virtual_boundaries_present_flag` equal to 1 specifies that information about virtual boundaries is signaled in the SPS. `sps_virtual_boundaries_present_flag` equal to 0 specifies that information about virtual boundaries is not signaled in the SPS. When one or more virtual boundaries are signaled in the SPS, loop filtering operations are disabled for virtual boundaries in images spanning the reference SPS. Loop filtering operations include deblocking filtering, sample adaptive offset filtering, and adaptive loop filtering operations.

[0443] The requirement for bitstream consistency is that when the value of res_change_in_clvs_allowed_flag is equal to 1, the value of sps_virtual_boundaries_present_flag should be equal to 0.

[0444] sps_num_ver_virtual_boundaries specifies the number of sps_virtual_boundaries_pos_x[i] syntax elements present in SPS. When sps_num_ver_virtual_boundaries does not exist, it is inferred to be equal to 0.

[0445] `sps_virtual_boundaries_pos_x[i]` specifies the position of the i-th vertical virtual boundary, in units of luminance samples divided by 8. The value of `sps_virtual_boundaries_pos_x[i]` should be in the range of 1 to Ceil(pic_width_in_luma_samples ÷ 8) - 1 (inclusive). [Ed. (VD): `pic_width_in_luma_samples` is in PPS, not SPS.]

[0446] sps_num_hor_virtual_boundaries specifies the number of sps_virtual_boundaries_pos_y[i] syntax elements present in SPS. When sps_num_hor_virtual_boundaries does not exist, it is inferred to be equal to 0.

[0447] When sps_virtual_boundaries_enabled_flag equals 1 and sps_virtual_boundaries_present_flag equals 1, the sum of sps_num_ver_virtual_boundaries and sps_num_hor_virtual_boundaries should be greater than 0.

[0448] `sps_virtual_boundaries_pos_y[i]` specifies the position of the i-th horizontal virtual boundary, in units of luminance samples divided by 8. The value of `sps_virtual_boundaries_pos_y[i]` should be in the range of 1 to Ceil(pic_height_in_luma_samples ÷ 8) - 1 (inclusive). [Ed. (VD): `pic_height_in_luma_samples` is in PPS, not SPS.]

[0449] A value of 1 for `sps_general_hrd_params_present_flag` indicates that the syntax structure `general_hrd_parameters()` exists in the SPS RBSP syntax structure. A value of 0 for `sps_general_hrd_params_present_flag` indicates that the syntax structure `general_hrd_parameters()` does not exist in the SPS RBSP syntax structure.

[0450] A value of 1 for `sps_sublayer_cpb_params_present_flag` indicates that the `old_hrd_parameters()` syntax structure in the SPS RBSP includes HRD parameters for the sublayer representation with a TemporalId ranging from 0 to `sps_max_sublayers_minus1` (inclusive). A value of 0 for `sps_sublayer_cpb_params_present_flag` indicates that the `old_hrd_parameters()` syntax structure in the SPS RBSP includes HRD parameters for the sublayer representation with a TemporalId equal to only `sps_max_sublayers_minus1`. When `sps_max_sublayers_minus1` is equal to 0, the value of `sps_sublayer_cpb_params_present_flag` is inferred to be 0.

[0451] When `sps_sublayer_cpb_params_present_flag` equals 0, the HRD parameters of the sublayer representation with TemporalId in the range of 0 to `sps_max_sublayers_minus1` (inclusive) are inferred to be the same as those of the sublayer representation with TemporalId equal to `sps_max_sublayers_minus1`. These include the HRD parameters from the `fixed_pic_rate_general_flag[i]` syntax element up to the `sublayer_hrd_parameters(i)` syntax structure immediately following the condition "if(general_vcl_hrd_params_present_flag)" in the `ols_hrd_parameters` syntax structure.

[0452] A field_seq_flag value of 1 indicates that CLVS transmits an image representing a field. A field_seq_flag value of 0 indicates that CLVS transmits an image representing a frame. When general_frame_only_constraint_flag is 1, the value of field_seq_flag should be 0.

[0453] When field_seq_flag equals 1, the Frame Field Information (SEI) message should exist for each codec image in CLVS.

[0454] Note 5 – The specified decoding process does not differentiate between images representing fields or frames. Therefore, a sequence of images representing fields will be encoded and decoded using the image dimensions of individual fields. For example, an image representing a 1080i field typically has a cropped output dimension of 1920x540, while the sequence image rate typically represents the rate of the source field (typically between 50 and 60 Hz), rather than the source frame rate (typically between 25 and 30 Hz).

[0455] A value of 1 for `vui_parameters_present_flag` indicates that the syntax structure `vui_parameters()` exists in the SPS RBSP syntax structure. A value of 0 for `vui_parameters_present_flag` indicates that the syntax structure `vui_parameters()` does not exist in the SPS RBSP syntax structure.

[0456] A value of 0 for `sps_extension_flag` indicates that no `sps_extension_data_flag` syntax element exists in the SPS RBSP syntax structure. A value of 1 for `sps_extension_flag` indicates that the `sps_extension_data_flag` syntax element exists in the SPS RBSP syntax structure.

[0457] The `sps_extension_data_flag` flag can have any value. Its presence and value do not affect the grade specified in this version of the specification for the decoder. Decoders conforming to this version of the specification should ignore all `sps_extension_data_flag` syntax elements.

[0458] 3.6. PPS Syntax and Semantics

[0459] In the latest VVC draft text, the PPS syntax and semantics are as follows:

[0460]

[0461]

[0462]

[0463]

[0464] The PPS RBSP should be available for the decoding process before being referenced, either in at least one AU with TemporalId less than or equal to the PPSNAL unit or provided by external means.

[0465] All PPS NAL cells within a PU that have a specific value of pps_pic_parameter_set_id should have the same content.

[0466] The pps_pic_parameter_set_id identifies the PPS referenced by other syntax elements. The value of pps_pic_parameter_set_id should be in the range of 0 to 63 (inclusive).

[0467] Regardless of the nuh_layer_id value, PPS NAL cells share the same value space for pps_pic_parameter_set_id.

[0468] Let ppsLayerId be the value of nuh_layer_id for a specific PPS NAL cell, and vclLayerId be the value of nuh_layer_id for a specific VCL NAL cell. A specific VCL NAL cell should not reference a specific PPS NAL cell unless ppsLayerId is less than or equal to vclLayerId, and the layer whose nuh_layer_id is equal to ppsLayerId is included in at least one OLS that includes a layer whose nuh_layer_id is equal to vclLayerId.

[0469] `pps_seq_parameter_set_id` specifies the value of `sps_seq_parameter_set_id` for the SPS. The value of `pps_seq_parameter_set_id` should be in the range of 0 to 15 (inclusive). The value of `pps_seq_parameter_set_id` should be the same across all PPS referenced by the encoder / decoder images in CLVS.

[0470] A mixed_nalu_types_in_pic_flag value of 1 indicates that each picture in the reference PPS has more than one VCLNAL unit, the VCL NAL units do not have the same value of nal_unit_type, and the picture is not an IRAP picture. A mixed_nalu_types_in_pic_flag value of 0 indicates that each picture in the reference PPS has one or more VCL NAL units, and the VCL NAL units of each picture in the reference PPS have the same value of nal_unit_type.

[0471] When no_mixed_nalu_types_in_pic_constraint_flag equals 1, the value of mixed_nalu_types_in_pic_flag should be equal to 0.

[0472] For each stripe in picture picA that also contains one or more stripes with another value of nal_unit_type (i.e., the value of mixed_nalu_types_in_pic_flag of picture picA is equal to 1) that has a nal_unit_type value nalUnitTypeA in the range from IDR_W_RADL to CRA_NUT (inclusive of IDR_W_RADL and CRA_NUT), the following applies:

[0473] The stripe should belong to the subpicA whose corresponding subpic_treated_as_pic_flag[i] value is 1.

[0474] A stripe should not belong to a subpicture of a picA containing a VCL NAL unit whose nal_unit_type is not equal to nalUnitTypeA.

[0475] If nalUnitTypeA equals CRA, then for all subsequent PUs following the current picture in CLVS in the order of decoding and output, neither RefPicList[0] nor RefPicList[1] of the stripes in subpicA of these PUs should include any picture in the active entry that precedes picA in the order of decoding.

[0476] Otherwise (i.e., nalUnitTypeA equals IDR_W_RADL or IDR_N_LP), for all PUs in the CLVS following the current picture in the decoding order, neither RefPicList[0] nor RefPicList[1] of the stripes in the subpicA of these PUs should include any picture in the active entry that precedes picA in the decoding order.

[0477] Note 1 – A mixed_nalu_types_in_pic_flag value of 1 indicates that the reference PPS image contains stripes with different NAL unit types. This is, for example, from codec images where the encoder must ensure further alignment of sub-picture bitstream merging operations with the parameters of the original bitstream and the matching bitstream structure. An example of such alignment is as follows: when sps_idr_rpl_flag is equal to 0 and mixed_nalu_types_in_pic_flag is equal to 1, the reference PPS image cannot have stripes with nal_unit_type equal to IDR_W_RADL or IDR_N_LP.

[0478] `pic_width_in_luma_samples` specifies the width of each decoded image in reference PPS, in luminance samples. `pic_width_in_luma_samples` should not be equal to 0, should be an integer multiple of `Max(8, MinCbSizeY)`, and should be less than or equal to `pic_width_max_in_luma_samples`.

[0479] When res_change_in_clvs_allowed_flag equals 0, the value of pic_width_in_luma_samples should be equal to pic_width_max_in_luma_samples.

[0480] `pic_height_in_luma_samples` specifies the height of each decoded image in the reference PPS, in luminance samples. `pic_height_in_luma_samples` should not be equal to 0, should be an integer multiple of Max(8, MinCbSizeY), and should be less than or equal to `pic_height_max_in_luma_samples`.

[0481] When res_change_in_clvs_allowed_flag equals 0, the value of pic_height_in_luma_samples should be equal to pic_height_max_in_luma_samples.

[0482] The variables PicWidthInCtbsY, PicHeightInCtbsY, PicSizeInCtbsY, PicWidthInMinCbsY, PicHeightInMinCbsY, PicSizeInMinCbsY, PicSizeInSamplesY, PicWidthInSamplesC, and PicHeightInSamplesC are derived as follows:

[0483] PicWidthInCtbsY = Ceil( pic_width_in_luma_samples ÷ CtbSizeY ) (69)

[0484] PicHeightInCtbsY = Ceil( pic_height_in_luma_samples ÷ CtbSizeY )(70)

[0485] PicSizeInCtbsY = PicWidthInCtbsY PicHeightInCtbsY (71)

[0486] PicWidthInMinCbsY = pic_width_in_luma_samples / MinCbSizeY (72)

[0487] PicHeightInMinCbsY = pic_height_in_luma_samples / MinCbSizeY (73)

[0488] PicSizeInMinCbsY = PicWidthInMinCbsY PicHeightInMinCbsY (74)

[0489] PicSizeInSamplesY = pic_width_in_luma_samples pic_height_in_luma_samples (75)

[0490] PicWidthInSamplesC = pic_width_in_luma_samples / SubWidthC (76)

[0491] PicHeightInSamplesC = pic_height_in_luma_samples / SubHeightC (77)

[0492] A pps_conformance_window_flag value of 1 indicates that the consistency trimming window offset parameter follows the next one in PPS. A pps_conformance_window_flag value of 0 indicates that the consistency trimming window offset parameter does not exist in PPS.

[0493] `pps_conf_win_left_offset`, `pps_conf_win_right_offset`, `pps_conf_win_top_offset`, and `pps_conf_win_bottom_offset` specify the sample points of the image in the CLVS output from the decoding process, according to the rectangular area specified in the coordinates used for the output image. When `pps_conformance_window_flag` equals 0, the values ​​of `pps_conf_win_left_offset`, `pps_conf_win_right_offset`, `pps_conf_win_top_offset`, and `pps_conf_win_bottom_offset` are inferred to be equal to 0.

[0494] The consistent cropping window contains horizontal image coordinates from SubWidthC pps_conf_win_left_offset to pic_width_in_luma_samples - ( SubWidthC pps_conf_win_right_offset + 1 ) (including SubWidthC pps_conf_win_left_offset and pic_width_in_luma_samples - (SubWidthC pps_conf_win_right_offset + 1) and the vertical image coordinates from SubHeightC pps_conf_win_top_offset to pic_height_in_luma_samples - ( SubHeightC pps_conf_win_bottom_offset + 1 ) (includes SubHeightC pps_conf_win_top_offset and pic_height_in_luma_samples - ( SubHeightC The brightness sample points of pps_conf_win_bottom_offset + 1).

[0495] SubWidthC The value of (pps_conf_win_left_offset + pps_conf_win_right_offset) should be less than pic_width_in_luma_samples, and SubHeightC The value of (pps_conf_win_top_offset + pps_conf_win_bottom_offset) should be less than pic_height_in_luma_samples.

[0496] When ChromaArrayType is not equal to 0, the corresponding specified sample points of the two chroma arrays are sample points with picture coordinates (x / SubWidthC, y / SubHeightC), where (x, y) are the picture coordinates of the specified luminance sample point.

[0497] Note 2 – The consistent cropping window offset parameter is applied only to the output. All internal decoding processes are applied to the uncropped image size.

[0498] Let ppsA and ppsB be any two PPSs referencing the same SPS. The requirement for bitstream consistency is that when ppsA and ppsB have the same values ​​for pic_width_in_luma_samples and pic_height_in_luma_samples, respectively, ppsA and ppsB should also have the same values ​​for pps_conf_win_left_offset, pps_conf_win_right_offset, pps_conf_win_top_offset, and pps_conf_win_bottom_offset, respectively.

[0499] When pic_width_in_luma_samples equals pic_width_max_in_luma_samples and pic_height_in_luma_samples equals pic_height_max_in_luma_samples, the bitstream consistency requirement is that pps_conf_win_left_offset, pps_conf_win_right_offset, pps_conf_win_top_offset, and pps_conf_win_bottom_offset are equal to sps_conf_win_left_offset, sps_conf_win_right_offset, sps_conf_win_top_offset, and sps_conf_win_bottom_offset, respectively.

[0500] A scaling_window_explicit_signalling_flag value of 1 indicates that the scaling window offset parameter exists in PPS. A scaling_window_explicit_signalling_flag value of 0 indicates that the scaling window offset parameter does not exist in PPS. When res_change_in_clvs_allowed_flag is equal to 0, the value of scaling_window_explicit_signalling_flag should be equal to 0.

[0501] `scaling_win_left_offset`, `scaling_win_right_offset`, `scaling_win_top_offset`, and `scaling_win_bottom_offset` specify the offsets applied to the image size for scaling calculations. When these offsets are not present, their values ​​are inferred to be equal to `pps_conf_win_left_offset`, `pps_conf_win_right_offset`, `pps_conf_win_top_offset`, and `pps_conf_win_bottom_offset`, respectively.

[0502] SubWidthC The value of (scaling_win_left_offset + scaling_win_right_offset) should be less than pic_width_in_luma_samples, and SubHeightC The value of (scaling_win_top_offset + scaling_win_bottom_offset) should be less than pic_height_in_luma_samples.

[0503] The variables PicOutputWidthL and PicOutputHeightL are derived as follows:

[0504] PicOutputWidthL = pic_width_in_luma_samples - (78) SubWidthC ( scaling_win_right_offset + scaling_win_left_offset )

[0505] PicOutputHeightL = pic_height_in_luma_samples - (79) SubWidthC ( scaling_win_bottom_offset + scaling_win_top_offset )

[0506] Let refPicOutputWidthL and refPicOutputHeightL be the PicOutputWidthL and PicOutputHeightL of the reference image that references the current image of this PPS, respectively. Bitstream consistency requires that all of the following conditions be met:

[0507] PicOutputWidthL 2 should be greater than or equal to refPicWidthInLumaSamples.

[0508] PicOutputHeightL 2 should be greater than or equal to refPicHeightInLumaSamples.

[0509] PicOutputWidthL should be less than or equal to refPicWidthInLumaSamples 8.

[0510] PicOutputHeightL should be less than or equal to refPicHeightInLumaSamples 8.

[0511] PicOutputWidthL pic_width_max_in_luma_samples should be greater than or equal to refPicOutputWidthL (pic_width_in_luma_samples - Max( 8, MinCbSizeY )).

[0512] PicOutputHeightL pic_height_max_in_luma_samples should be greater than or equal to refPicOutputHeightL (pic_height_in_luma_samples - Max( 8, MinCbSizeY )).

[0513] An output_flag_present_flag value of 1 indicates that the pic_output_flag syntax element exists in the header of the reference PPS. An output_flag_present_flag value of 0 indicates that the pic_output_flag syntax element does not exist in the header of the reference PPS.

[0514] `subpic_id_mapping_in_pps_flag` equal to 1 specifies that signaling notification of the subpicture ID mapping is performed in PPS. `subpic_id_mapping_in_pps_flag` equal to 0 specifies that signaling notification of the subpicture ID mapping is not performed in PPS. If `subpic_id_mapping_explicitly_signalled_flag` is 0 or `subpic_id_mapping_in_sps_flag` is 1, then the value of `subpic_id_mapping_in_pps_flag` should be 0. Otherwise (where `subpic_id_mapping_explicitly_signalled_flag` is 1 and `subpic_id_mapping_in_sps_flag` is 0), the value of `subpic_id_mapping_in_pps_flag` should be 1.

[0515] pps_num_subpics_minus1 should be equal to sps_num_subpics_minus1.

[0516] pps_subpic_id_len_minus1 should be equal to sps_subpic_id_len_minus1.

[0517] pps_subpic_id[i] specifies the subpick ID of the i-th subpick. The length of the pps_subpic_id[i] syntax element is pps_subpic_id_len_minus1 + 1 bits.

[0518] For each value of i in the range from 0 to sps_num_subpics_minus1 (inclusive), the variable SubpicIdVal[i] is derived as follows:

[0519] for( i = 0; i <= sps_num_subpics_minus1; i++ ) if( subpic_id_mapping_explicitly_signalled_flag ) SubpicIdVal[ i ] = subpic_id_mapping_in_pps_flag ? pps_subpic_id[ i ] : sps_subpic_id[ i ] (80) elseSubpicIdVal[ i ] = i

[0520] The requirement for bitstream consistency applies to the following two constraints:

[0521] For any two distinct values ​​i and j in the range from 0 to sps_num_subpics_minus1 (inclusive), SubpicIdVal[i] should not be equal to SubpicIdVal[j].

[0522] When the current image is not the first image of CLVS, for each value of i in the range from 0 to sps_num_subpics_minus1 (inclusive), if the value of SubpicIdVal[i] is not equal to the value of SubpicIdVal[i] of the previous image in the same layer in decoding order, then the nal_unit_type of all codec strip NAL units of the subpics in the current image with subpic index i should be equal to a specific value in the range from IDR_W_RADL to CRA_NUT (inclusive).

[0523] `no_pic_partition_flag` equal to 1 indicates that no image segmentation is applied to each image in the reference PPS. `no_pic_partition_flag` equal to 0 indicates that each image in the reference PPS can be segmented into more than one slice or strip.

[0524] The requirement for bitstream consistency is that the value of no_pic_partition_flag should be the same for all PPS referenced by the encoding and decoding images within CLVS.

[0525] The requirement for bitstream consistency is that when the value of sps_num_subpics_minus1 + 1 is greater than 1, the value of no_pic_partition_flag should not be equal to 1.

[0526] pps_log2_ctu_size_minus5 plus 5 specifies the luma codec tree block size for each CTU. pps_log2_ctu_size_minus5 should be equal to sps_log2_ctu_size_minus5.

[0527] The increment of 1 in `num_exp_tile_columns_minus1` specifies the number of tile column widths explicitly provided. The value of `num_exp_tile_columns_minus1` should be in the range of 0 to `PicWidthInCtbsY - 1` (inclusive). When `no_pic_partition_flag` equals 1, the value of `num_exp_tile_columns_minus1` is inferred to be 0.

[0528] `num_exp_tile_rows_minus1` plus 1 specifies the number of tile row heights explicitly provided. The value of `num_exp_tile_rows_minus1` should be in the range of 0 to `PicHeightInCtbsY - 1` (inclusive). When `no_pic_partition_flag` equals 1, the value of `num_tile_rows_minus1` is inferred to be 0.

[0529] `tile_column_width_minus1[i]` plus 1 specifies the width of the i-th tile column in CTB, where i is in the range of 0 to num_exp_tile_columns_minus1 - 1 (inclusive). `tile_column_width_minus1[num_exp_tile_columns_minus1]` is used to deduce the width of the tile column whose index is greater than or equal to num_exp_tile_columns_minus1, as specified in Clause 6.5.1. The value of `tile_column_width_minus1[i]` should be in the range of 0 to PicWidthInCtbsY - 1 (inclusive). When it does not exist, the value of `tile_column_width_minus1[0]` is deduced to be equal to PicWidthInCtbsY - 1.

[0530] `tile_row_height_minus1[i]` incremented by 1 specifies the height of the i-th slice row in CTB units, where i is in the range of 0 to num_exp_tile_rows_minus1 - 1 (inclusive). `tile_row_height_minus1[num_exp_tile_rows_minus1]` is used to deduce the height of slice rows whose index is greater than or equal to num_exp_tile_rows_minus1, as specified in Clause 6.5.1. The value of `tile_row_height_minus1[i]` should be in the range of 0 to PicHeightInCtbsY - 1 (inclusive). When it does not exist, the value of `tile_row_height_minus1[0]` is deduced to be equal to PicHeightInCtbsY - 1.

[0531] A `rect_slice_flag` value of 0 indicates that slices within each slice are arranged in raster scan order, and slice information is not signaled in the PPS. A `rect_slice_flag` value of 1 indicates that slices within each slice cover a rectangular area of ​​the image, and slice information is signaled in the PPS. When it does not exist, `rect_slice_flag` is inferred to be equal to 1. When `subpic_info_present_flag` is equal to 1, the value of `rect_slice_flag` should be equal to 1.

[0532] `single_slice_per_subpic_flag` equal to 1 indicates that each subpicture consists of one and only one rectangular stripe. `single_slice_per_subpic_flag` equal to 0 indicates that each subpicture may consist of one or more rectangular stripes. When `single_slice_per_subpic_flag` equals 1, `num_slices_in_pic_minus1` is inferred to be equal to `sps_num_subpics_minus1`. When it does not exist, the value of `single_slice_per_subpic_flag` is inferred to be 0.

[0533] `num_slices_in_pic_minus1` plus 1 specifies the number of rectangular stripes in each picture of the reference PPS. The value of `num_slices_in_pic_minus1` should be in the range of 0 to `MaxSlicesPerPicture - 1` (inclusive), where `MaxSlicesPerPicture` is specified in Appendix A. When `no_pic_partition_flag` equals 1, the value of `num_slices_in_pic_minus1` is inferred to be equal to 0.

[0534] A tile_idx_delta_present_flag value of 0 indicates that the tile_idx_delta value does not exist in the PPS, and all rectangular stripes in the image referencing the PPS are specified in raster order according to the procedure defined in Clause 6.5.1. A tile_idx_delta_present_flag value of 1 indicates that the tile_idx_delta value may exist in the PPS, and all rectangular stripes in the image referencing the PPS are specified in the order indicated by the tile_idx_delta value. When it does not exist, the value of tile_idx_delta_present_flag is inferred to be 0.

[0535] The value of slice_width_in_tiles_minus1[i] plus 1 specifies the width of the i-th rectangular strip, in units of slice columns. The value of slice_width_in_tiles_minus1[i] should be in the range of 0 to NumTileColumns - 1 (inclusive).

[0536] The following applies when slice_width_in_tiles_minus1[i] does not exist:

[0537] If NumTileColumns equals 1, then the value of slice_width_in_tiles_minus1[i] is inferred to be equal to 0.

[0538] Otherwise, the value of slice_width_in_tiles_minus1[i] is inferred as specified in Clause 6.5.1.

[0539] `slice_height_in_tiles_minus1[i]` incremented by 1 specifies the height of the i-th rectangular strip, in units of slices. The value of `slice_height_in_tiles_minus1[i]` should be in the range of 0 to NumTileRows - 1 (inclusive).

[0540] The following applies when slice_height_in_tiles_minus1[i] does not exist:

[0541] If NumTileRows equals 1, or tile_idx_delta_present_flag equals 0 and tileIdx%NumTileColumns is greater than 0, then the value of slice_height_in_tiles_minus1[i] is inferred to be equal to 0.

[0542] Otherwise (NumTileRows is not equal to 1, and tile_idx_delta_present_flag is equal to 1 or tileIdx%NumTileColumns is equal to 0), when tile_idx_delta_present_flag is equal to 1 or tileIdx%NumTileColumns is equal to 0, the value of slice_height_in_tiles_minus1[i] is inferred to be equal to slice_height_in_tiles_minus1[i-1].

[0543] `num_exp_slices_in_tile[i]` specifies the number of explicitly provided strip heights in the current stripe containing more than one rectangular stripe. The value of `num_exp_slices_in_tile[i]` should be in the range of 0 to `RowHeight[tileY] - 1` (inclusive), where `tileY` is the stripe row index containing the `i`-th stripe. When it does not exist, the value of `num_exp_slices_in_tile[i]` is inferred to be equal to 0. When `num_exp_slices_in_tile[i]` is equal to 0, the value of the variable `NumSlicesInTile[i]` is inferred to be equal to 1.

[0544] The increment of 1 in `exp_slice_height_in_ctus_minus1[j]` specifies the height of the j-th rectangular stripe in the current slice, in CTU rows. The value of `exp_slice_height_in_ctus_minus1[j]` should be in the range of 0 to RowHeight[tileY] - 1 (inclusive), where tileY is the slice row index of the current slice.

[0545] When num_exp_slices_in_tile[i] is greater than 0, the variables NumSlicesInTile[i] and SliceHeightInCtusMinus1[i + k] (where k is in the range from 0 to NumSlicesInTile[i] - 1) are derived as follows:

[0546] remainingHeightInCtbsY = RowHeight[ SliceTopLeftTileIdx[ i ] / NumTileColumns ]numExpSliceInTile = num_exp_slices_in_tile[ i ]for( j = 0; j< numExpSliceInTile - 1; j++ ) { SliceHeightInCtusMinus1[ i++ ] = exp_slice_height_in_ctu_minus1[ j ] remainingHeightInCtbsY -= SliceHeightInCtusMinus1[ j ]}uniformSliceHeightMinus1 = SliceHeightInCtusMinus1[ i - 1 ] (81)while( remainingHeightInCtbsY >= (uniformSliceHeightMinus1 + 1) ) {SliceHeightInCtusMinus1[ i++ ] = uniformSliceHeightMinus1remainingHeightInCtbsY -= (uniformSliceHeightMinus1 + 1) j++}if(remainingHeightInCtbsY > 0 ) { SliceHeightInCtusMinus1[ i++ ] =remainingHeightInCtbsY j++}NumSlicesInTile[ i ] = j

[0547] `tile_idx_delta[i]` specifies the difference between the tile index of the first tile in the i-th rectangular stripe and the tile index of the first tile in the (i+1)-th rectangular stripe. The value of `tile_idx_delta[i]` should be in the range of -NumTilesInPic + 1 to NumTilesInPic - 1 (inclusive). When it does not exist, the value of `tile_idx_delta[i]` is inferred to be equal to 0. When it exists, the value of `tile_idx_delta[i]` should not be equal to 0.

[0548] A `loop_filter_across_tiles_enabled_flag` value of 1 indicates that loop filtering can be performed across tile boundaries in the reference PPS image. A `loop_filter_across_tiles_enabled_flag` value of 0 indicates that loop filtering is not performed across tile boundaries in the reference PPS image. Loop filtering operations include deblocking filtering, sample adaptive offset filtering, and adaptive loop filtering. When not present, the value of `loop_filter_across_tiles_enabled_flag` is inferred to be 1.

[0549] A `loop_filter_across_slices_enabled_flag` value of 1 indicates that loop filtering can be performed across slice boundaries in the reference PPS image. A `loop_filter_across_slice_enabled_flag` value of 0 indicates that loop filtering is not performed across slice boundaries in the reference PPS image. Loop filtering operations include deblocking filtering, sample adaptive offset filtering, and adaptive loop filtering. When it does not exist, the value of `loop_filter_across_slices_enabled_flag` is inferred to be 0.

[0550] A cabac_init_present_flag value of 1 indicates that the cabac_init_flag exists in the header of the reference PPS. A cabac_init_present_flag value of 0 indicates that the cabac_init_flag does not exist in the header of the reference PPS.

[0551] The increment of 1 in num_ref_idx_default_active_minus1[i] specifies the inferred value of the variable NumRefIdxActive[0] for P or B stripes where num_ref_idx_active_override_flag is equal to 0 when i equals 0, and specifies the inferred value of NumRefIdxActive[1] for B stripes where num_ref_idx_active_override_flag is equal to 0 when i equals 1. The value of num_ref_idx_default_active_minus1[i] should be in the range of 0 to 14 (inclusive).

[0552] If rpl1_idx_present_flag equals 0, it means that ref_pic_list_sps_flag[1] and ref_pic_list_idx[1] do not exist in the PH syntax structure or the strip header of the picture reference PPS. If rpl1_idx_present_flag equals 1, it means that ref_pic_list_sps_flag[1] and ref_pic_list_idx[1] can exist in the PH syntax structure or the strip header of the picture reference PPS.

[0553] init_qp_minus26 plus 26 specifies the SliceQp for each slice of the reference PPS. Y The initial value. When a non-zero value of ph_qp_delta is decoded, SliceQp Y The initial value of SliceQp is modified at the image level, or when a non-zero value of slice_qp_delta is decoded. Y The initial value is modified at the stripe level. The value of init_qp_minus26 should be in the range of -(26 + QpBdOffset) to +37 (inclusive).

[0554] A flag of 1 for `cu_qp_delta_enabled_flag` indicates that the syntax elements `ph_cu_qp_delta_subdiv_intra_slice` and `ph_cu_qp_delta_subdiv_inter_slice` exist in the reference PPS's PH, and `cu_qp_delta_abs` can exist in the transformation unit syntax. A flag of 0 for `cu_qp_delta_enabled_flag` indicates that the syntax elements `ph_cu_qp_delta_subdiv_intra_slice` and `ph_cu_qp_delta_subdiv_inter_slice` do not exist in the reference PPS's PH, and `cu_qp_delta_abs` does not exist in the transformation unit syntax.

[0555] A value of 1 for `pps_chroma_tool_offsets_present_flag` indicates that chroma tool offset related syntax elements exist in the PPS RBSP syntax structure. A value of 0 for `pps_chroma_tool_offsets_present_flag` indicates that chroma tool offset related syntax elements do not exist in the PPS RBSP syntax structure. When `ChromaArrayType` equals 0, the value of `pps_chroma_tool_offsets_present_flag` should be 0.

[0556] pps_cb_qp_offset and pps_cr_qp_offset are respectively specified for deriving Qp′. Cb and Qp′ Cr Brightness quantization parameter Qp′ Y The values ​​of pps_cb_qp_offset and pps_cr_qp_offset should be in the range of -12 to +12 (inclusive). When ChromaArrayType equals 0, pps_cb_qp_offset and pps_cr_qp_offset are not used in the decoding process, and the decoder should ignore their values. When they do not exist, the values ​​of pps_cb_qp_offset and pps_cr_qp_offset are inferred to be equal to 0.

[0557] A value of 1 for `pps_joint_cbcr_qp_offset_present_flag` indicates that `pps_joint_cbcr_qp_offset_value` and `joint_cbcr_qp_offset_list[i]` exist in the PPS RBSP syntax structure. A value of 0 for `pps_joint_cbcr_qp_offset_present_flag` indicates that `pps_joint_cbcr_qp_offset_value` and `joint_cbcr_qp_offset_list[i]` do not exist in the PPS RBSP syntax structure. When `ChromaArrayType` equals 0 or `sps_joint_cbcr_enabled_flag` equals 0, the value of `pps_joint_cbcr_qp_offset_present_flag` should be 0. When it does not exist, the value of `pps_joint_cbcr_qp_offset_present_flag` is inferred to be 0.

[0558] pps_joint_cbcr_qp_offset_value specifies the value used to derive Qp′. CbCr Brightness quantization parameter Qp′ Y The offset. The value of pps_joint_cbcr_qp_offset_value should be in the range of -12 to +12 (inclusive). When ChromaArrayType equals 0 or sps_joint_cbcr_enabled_flag equals 0, pps_joint_cbcr_qp_offset_value is not used in the decoding process, and the decoder should ignore its value. When pps_joint_cbcr_qp_offset_present_flag equals 0, pps_joint_cbcr_qp_offset_value does not exist and is inferred to be equal to 0.

[0559] A value of 1 for `pps_slice_chroma_qp_offsets_present_flag` indicates that the `slice_cb_qp_offset` and `slice_cr_qp_offset` syntax elements exist in the associated slice header. A value of 0 for `pps_slice_chroma_qp_offsets_present_flag` indicates that the `slice_cb_qp_offset` and `slice_cr_qp_offset` syntax elements do not exist in the associated slice header. When they do not exist, the value of `pps_slice_chroma_qp_offsets_present_flag` is inferred to be 0.

[0560] A value of 1 for `pps_cu_chroma_qp_offset_list_enabled_flag` indicates that the syntax elements `ph_cu_chroma_qp_offset_subdiv_intra_slice` and `ph_cu_chroma_qp_offset_subdiv_inter_slice` exist in the reference PPS's PH, and `cu_chroma_qp_offset_flag` can exist in both the Transform Unit syntax and the Palette Encoding / Decoding syntax. A value of 0 for `pps_cu_chroma_qp_offset_list_enabled_flag` indicates that the syntax elements `ph_cu_chroma_qp_offset_subdiv_intra_slice` and `ph_cu_chroma_qp_offset_subdiv_inter_slice` do not exist in the reference PPS's PH, and `cu_chroma_qp_offset_flag` does not exist in either the Transform Unit syntax or the Palette Encoding / Decoding syntax. When it does not exist, the value of `pps_cu_chroma_qp_offset_list_enabled_flag` is inferred to be 0.

[0561] The increment of 1 in `chroma_qp_offset_list_len_minus1` specifies the number of syntax elements in `cb_qp_offset_list[i]`, `cr_qp_offset_list[i]`, and `joint_cbcr_qp_offset_list[i]` that exist in the PPS RBSP syntax structure. The value of `chroma_qp_offset_list_len_minus1` should be in the range of 0 to 5 (inclusive).

[0562] cb_qp_offset_list[i], cr_qp_offset_list[i], and joint_cbcr_qp_offset_list[i] respectively specify Qp′ Cb Qp′ Cr and Qp′ CbCrThe offsets used in the derivation. The values ​​of cb_qp_offset_list[i], cr_qp_offset_list[i], and joint_cbcr_qp_offset_list[i] should be in the range of -12 to +12 (inclusive). When pps_joint_cbcr_qp_offset_present_flag equals 0, joint_cbcr_qp_offset_list[i] does not exist and is inferred to be equal to 0.

[0563] A value of 0 for pps_weighted_pred_flag indicates that weighted predictions are not applied to the P-strips of the reference PPS. A value of 1 for pps_weighted_pred_flag indicates that weighted predictions are applied to the P-strips of the reference PPS. When sps_weighted_pred_flag is 0, the value of pps_weighted_pred_flag should be 0.

[0564] A value of 0 for pps_weighted_bipred_flag indicates that explicit weighted predictions are not applied to the B-strips of the reference PPS. A value of 1 for pps_weighted_bipred_flag indicates that explicit weighted predictions are applied to the B-strips of the reference PPS. When pps_weighted_bipred_flag is 0, the value of pps_weighted_bipred_flag should be 0.

[0565] A deblocking_filter_control_present_flag value of 1 indicates the presence of the deblocking filter control syntax element in PPS. A deblocking_filter_control_present_flag value of 0 indicates the absence of the deblocking filter control syntax element in PPS.

[0566] A value of 1 for `deblocking_filter_override_enabled_flag` indicates the presence of `ph_deblocking_filter_override_flag` in the PH of the reference PPS or `slice_deblocking_filter_override_flag` in the slice header of the reference PPS. A value of 0 for `deblocking_filter_override_enabled_flag` indicates the absence of `ph_deblocking_filter_override_flag` in the PH of the reference PPS or `slice_deblocking_filter_override_flag` in the slice header of the reference PPS. When it does not exist, the value of `deblocking_filter_override_enabled_flag` is inferred to be 0.

[0567] A value of 1 for `pps_deblocking_filter_disabled_flag` indicates that the deblocking filter operation should not be applied to slices of PPS that reference the `slice_deblocking_filter_disabled_flag`. A value of 0 for `pps_deblocking_filter_disabled_flag` indicates that the deblocking filter operation is applied to slices of PPS that reference the `slice_deblocking_filter_disabled_flag`. When the `slice_deblocking_filter_disabled_flag` does not exist, its value is inferred to be 0.

[0568] `pps_beta_offset_div2` and `pps_tc_offset_div2` specify the default deblocking parameter offsets for the β and tC (divided by 2) of the luminance components applied to the reference PPS strip, unless the default deblocking parameter offsets are overridden by deblocking parameter offsets present in the image header or the strip header of the reference PPS strip. The values ​​of `pps_beta_offset_div2` and `pps_tc_offset_div2` should both be in the range of -12 to 12 (inclusive). When not present, the values ​​of `pps_beta_offset_div2` and `pps_tc_offset_div2` are inferred to be equal to 0.

[0569] `pps_cb_beta_offset_div2` and `pps_cb_tc_offset_div2` specify the default deblocking parameter offsets for the β and tC (divided by 2) of the Cb component applied to the reference PPS strip, unless the default deblocking parameter offsets are overridden by deblocking parameter offsets existing in the image header or the strip header of the reference PPS strip. The values ​​of `pps_cb_beta_offset_div2` and `pps_cb_tc_offset_div2` should both be in the range of -12 to 12 (inclusive). When not present, the values ​​of `pps_cb_beta_offset_div2` and `pps_cb_tc_offset_div2` are inferred to be equal to 0.

[0570] `pps_cr_beta_offset_div2` and `pps_cr_tc_offset_div2` specify the default deblocking parameter offsets for the β and tC (divided by 2) of the Cr component applied to the reference PPS strip, unless the default deblocking parameter offsets are overridden by deblocking parameter offsets existing in the image header or the strip header of the reference PPS strip. The values ​​of `pps_cr_beta_offset_div2` and `pps_cr_tc_offset_div2` should both be in the range of -12 to 12 (inclusive). When not present, the values ​​of `pps_cr_beta_offset_div2` and `pps_cr_tc_offset_div2` are inferred to be equal to 0.

[0571] `rpl_info_in_ph_flag` equal to 1 indicates that the reference image list information exists in the PH syntax structure and not in the header of a reference PPS that does not contain a PH syntax structure. `rpl_info_in_ph_flag` equal to 0 indicates that the reference image list information does not exist in the PH syntax structure, but may exist in the header of a reference PPS that does not contain a PH syntax structure.

[0572] A value of 1 for `dbf_info_in_ph_flag` indicates that the deblocking filter information exists in the PH syntax structure and not in the slice header of a reference PPS that does not contain a PH syntax structure. A value of 0 for `dbf_info_in_ph_flag` indicates that the deblocking filter information does not exist in the PH syntax structure and may exist in the slice header of a reference PPS that does not contain a PH syntax structure. When it does not exist, the value of `dbf_info_in_ph_flag` is inferred to be 0.

[0573] A `sao_info_in_ph_flag` value of 1 indicates that the SAO filter information exists in the PH syntax structure and not in the strip header of a reference PPS that does not contain a PH syntax structure. A `sao_info_in_ph_flag` value of 0 indicates that the SAO filter information does not exist in the PH syntax structure and may exist in the strip header of a reference PPS that does not contain a PH syntax structure.

[0574] `alf_info_in_ph_flag` equal to 1 indicates that the ALF information exists in the PH syntax structure and not in the strip header of a reference PPS that does not contain a PH syntax structure. `alf_info_in_ph_flag` equal to 0 indicates that the ALF information does not exist in the PH syntax structure and may exist in the strip header of a reference PPS that does not contain a PH syntax structure.

[0575] A value of 1 for `wp_info_in_ph_flag` indicates that the weighted prediction information can exist in the PH syntax structure but not in the strip header of a reference PPS that does not contain a PH syntax structure. A value of 0 for `wp_info_in_ph_flag` indicates that the weighted prediction information does not exist in the PH syntax structure but can exist in the strip header of a reference PPS that does not contain a PH syntax structure. When it does not exist, the value of `wp_info_in_ph_flag` is inferred to be 0.

[0576] A value of 1 for `qp_delta_info_in_ph_flag` indicates that the QP increment information exists within the PH syntax structure and not within the strip header of a reference PPS that does not contain a PH syntax structure. A value of 0 for `qp_delta_info_in_ph_flag` indicates that the QP increment information does not exist within the PH syntax structure and may exist within the strip header of a reference PPS that does not contain a PH syntax structure.

[0577] `pps_ref_wraparound_enabled_flag` equal to 1 specifies that horizontal wraparound motion compensation is applied in inter-frame prediction. `pps_ref_wraparound_enabled_flag` equal to 0 specifies that horizontal wraparound motion compensation is not applied. When the value of `CtbSizeY / MinCbSizeY + 1` is greater than `pic_width_in_luma_samples / MinCbSizeY - 1`, the value of `pps_ref_wraparound_enabled_flag` should be equal to 0. When `sps_ref_wraparound_enabled_flag` is equal to 0, the value of `pps_ref_wraparound_enabled_flag` should also be equal to 0.

[0578] `pps_ref_wraparound_offset` plus `(CtbSizeY / MinCbSizeY) + 2` specifies the offset used to calculate the horizontal wraparound position, in `MinCbSizeY` luminance samples. The value of `pps_ref_wraparound_offset` should be in the range of 0 to `(pic_width_in_luma_samples / MinCbSizeY) - (CtbSizeY / MinCbSizeY) - 2` (inclusive).

[0579] The variable PpsRefWraparoundOffset is set to equal pps_ref_wraparound_offset + (CtbSizeY / MinCbSizeY) + 2.

[0580] A picture_header_extension_present_flag value of 0 indicates that no PH extension syntax element exists in the reference PPS PH. A picture_header_extension_present_flag value of 1 indicates that the PH extension syntax element exists in the reference PPS PH. In a bitstream conforming to this version of the specification, picture_header_extension_present_flag should be equal to 0.

[0581] A slice_header_extension_present_flag value of 0 indicates that no slice header extension syntax element exists in the slice header of the reference PPS codec image. A slice_header_extension_present_flag value of 1 indicates that the slice header extension syntax element exists in the slice header of the reference PPS codec image. slice_header_extension_present_flag should be equal to 0 in bitstreams conforming to this version of the specification.

[0582] A value of 0 for pps_extension_flag indicates that no pps_extension_data_flag syntax element exists in the PPS RBSP syntax structure. A value of 1 for pps_extension_flag indicates that the pps_extension_data_flag syntax element exists in the PPS RBSP syntax structure.

[0583] The `pps_extension_data_flag` flag can have any value. Its presence and value do not affect the decoder's conformance to the grade specified in this version of the specification. Decoders conforming to this version of the specification should ignore all `pps_extension_data_flag` syntax elements.

[0584] 3.7. APS Syntax and Semantics

[0585] In the latest VVC draft text, the APS syntax and semantics are as follows:

[0586]

[0587] APS RBSP contains the ALF syntax structure, namely alf_data().

[0588]

[0589]

[0590] APS RBSP contains the LMCS syntax structure, namely lmcs_data().

[0591]

[0592] APS RBSP contains the scaling list data syntax structure, namely scaling_list_data().

[0593]

[0594] Each APS RBSP should be available for the decoding process before being referenced, either in at least one AU whose TemporalId is less than or equal to the TemporalId of the NAL unit of the codec strip that references it, or provided by external means.

[0595] All APS NAL cells within a PU that have specific values ​​for adaptation_parameter_set_id and aps_params_type should have the same content, regardless of whether they are prefix or suffix APS NAL cells.

[0596] The adaptation_parameter_set_id provides an identifier for the AP for reference by other syntax elements.

[0597] When aps_params_type is equal to ALF_APS or SCALING_APS, the value of adaptation_parameter_set_id should be in the range of 0 to 7 (inclusive).

[0598] When aps_params_type equals LMCS_APS, the value of adaptation_parameter_set_id should be in the range of 0 to 3 (inclusive).

[0599] Let apsLayerId be the value of nuh_layer_id for a specific APS NAL cell, and vclLayerId be the value of nuh_layer_id for a specific VCL NAL cell. A specific VCL NAL cell should not reference a specific APS NAL cell unless apsLayerId is less than or equal to vclLayerId, and the layer whose nuh_layer_id is equal to apsLayerId is included in at least one OLS that includes a layer whose nuh_layer_id is equal to vclLayerId.

[0600] aps_params_type specifies the type of APS parameters carried in APS, as specified in Table 6.

[0601] Table 6 – APS Parameter Type Codes and Types of APS Parameters

[0602]

[0603] Regardless of the nuh_layer_id value, all APS NAL cells with a specific value of aps_params_type share the same value space for adaptation_parameter_set_id. APS NAL cells with different values ​​of aps_params_type use a separate value space for adaptation_parameter_set_id.

[0604] Note 1 – APS NAL units (with specific values ​​for adaptation_parameter_set_id and aps_params_type) can be shared across images, and different stripes within an image can reference different ALF APSs.

[0605] Note 2 – The suffix APS NAL unit associated with a specific VCL NAL unit (which precedes the suffix APS NAL unit in the decoding order) is not used by the specific VCL NAL unit, but by the VCL NAL unit that follows the suffix APS NAL unit in the decoding order.

[0606] A value of 0 for `aps_extension_flag` indicates that no `aps_extension_data_flag` syntax element exists in the APS RBSP syntax structure. A value of 1 for `aps_extension_flag` indicates that the `aps_extension_data_flag` syntax element exists in the APS RBSP syntax structure.

[0607] The `aps_extension_data_flag` can have any value. Its presence and value do not affect the decoder's conformance to the grade specified in this version of the specification. Decoders conforming to this version of the specification should ignore all `aps_extension_data_flag` syntax elements.

[0608] `alf_luma_filter_signal_flag` equal to 1 specifies the signaling notification luminance filter set. `alf_luma_filter_signal_flag` equal to 0 specifies the no-signaling notification luminance filter set.

[0609] `alf_chroma_filter_signal_flag` equal to 1 specifies that the chroma filter is signaled. `alf_chroma_filter_signal_flag` equal to 0 specifies that the chroma filter is not signaled. When `ChromaArrayType` equals 0, `alf_chroma_filter_signal_flag` should be equal to 0.

[0610] At least one of the values ​​of alf_luma_filter_signal_flag, alf_chroma_filter_signal_flag, alf_cc_cb_filter_signal_flag, and alf_cc_cr_filter_signal_flag should be equal to 1.

[0611] The variable NumAlfFilters, which specifies the number of different adaptive loop filters, is set to 25.

[0612] A value of 0 for `alf_luma_clip_flag` specifies that a linear adaptive loop filter is applied to the luminance component. A value of 1 for `alf_luma_clip_flag` specifies that a nonlinear adaptive loop filter can be applied to the luminance component.

[0613] The increment of 1 in alf_luma_num_filters_signalled_minus1 specifies the number of adaptive loop filter classes whose luminance coefficients can be signaled. The value of alf_luma_num_filters_signalled_minus1 should be in the range of 0 to NumAlfFilters - 1 (inclusive).

[0614] `alf_luma_coeff_delta_idx[filtIdx]` specifies the index of the adaptive loop filter luminance coefficient increment, indicated by the signaling of the filter class, ranging from 0 to `filtIdx` (in the range `NumAlfFilters - 1`). If `alf_luma_coeff_delta_idx[filtIdx]` does not exist, it is inferred to be equal to 0. The length of `alf_luma_coeff_delta_idx[filtIdx]` is Ceil(Log2(alf_luma_num_filters_signalled_minus1 + 1)) bits. The value of `alf_luma_coeff_delta_idx[filtIdx]` should be in the range from 0 to `alf_luma_num_filters_signalled_minus1` (inclusive).

[0615] `alf_luma_coeff_abs[ sfIdx ][ j ]` specifies the absolute value of the j-th coefficient of the luminance filter notified by the signaling indicated by `sfIdx`. If `alf_luma_coeff_abs[ sfIdx ][ j ]` does not exist, it is inferred to be equal to 0. The value of `alf_luma_coeff_abs[ sfIdx ][ j ]` should be in the range of 0 to 128 (inclusive).

[0616] alf_luma_coeff_sign[ sfIdx ][ j ] specifies the sign of the j-th luminance coefficient of the filter indicated by sfIdx as follows:

[0617] If alf_luma_coeff_sign[ sfIdx ][ j ] equals 0, then the corresponding luminance filter coefficient has a positive value.

[0618] Otherwise (alf_luma_coeff_sign[ sfIdx ][ j ] equals 1), the corresponding luminance filter coefficient has a negative value.

[0619] When alf_luma_coeff_sign[ sfIdx ][ j ] does not exist, it is inferred to be equal to 0.

[0620] The variable filtCoeff[ sfIdx ][ j ] (where sfIdx = 0..alf_luma_num_filters_signalled_minus1, j = 0..11) is initialized as follows:

[0621] filtCoeff[ sfIdx ][ j ] = alf_luma_coeff_abs[ sfIdx ][ j ] (93)( 1 - 2 alf_luma_coeff_sign[ sfIdx ][ j ] )

[0622] Having element AlfCoeff L The luminance filter coefficients AlfCoeff are calculated as follows: [adaptation_parameter_set_id][filtIdx][j] (where filtIdx = 0..NumAlfFilters - 1 and j = 0..11). L [adaptation_parameter_set_id] is deduced as follows:

[0623] AlfCoeff L [ adaptation_parameter_set_id ][ filtIdx ][ j ] = filtCoeff[ alf_luma_coeff_delta_idx[ filtIdx ] ][ j ] (94)

[0624] The fixed filter coefficients AlfFixFiltCoeff[i][j] (where i = 0..64, j = 0..11) and the filter map class AlfClassToFiltMap[m][n] (where m = 0..15 and n = 0..24) are derived as follows:

[0625] AlfFixFiltCoeff = (95)

[0626] {

[0627] { 0, 0, 2, -3, 1, -4, 1, 7, -1, 1, -1, 5}

[0628] { 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, -1, 2}

[0629] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}

[0630] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1}

[0631] { 2, 2, -7, -3, 0, -5, 13, 22, 12, -3, -3, 17}

[0632] {-1, 0, 6, -8, 1, -5, 1, 23, 0, 2, -5, 10}

[0633] { 0, 0, -1, -1, 0, -1, 2, 1, 0, 0, -1, 4}

[0634] { 0, 0, 3, -11, 1, 0, -1, 35, 5, 2, -9, 9}

[0635] { 0, 0, 8, -8, -2, -7, 4, 4, 2, 1, -1, 25}

[0636] { 0, 0, 1, -1, 0, -3, 1, 3, -1, 1, -1, 3}

[0637] { 0, 0, 3, -3, 0, -6, 5, -1, 2, 1, -4, 21}

[0638] {-7, 1, 5, 4, -3, 5, 11, 13, 12, -8, 11, 12}

[0639] {-5, -3, 6, -2, -3, 8, 14, 15, 2, -7, 11, 16}

[0640] { 2, -1, -6, -5, -2, -2, 20, 14, -4, 0, -3, 25}

[0641] { 3, 1, -8, -4, 0, -8, 22, 5, -3, 2, -10, 29}

[0642] { 2, 1, -7, -1, 2, -11, 23, -5, 0, 2, -10, 29}

[0643] {-6, -3, 8, 9, -4, 8, 9, 7, 14, -2, 8, 9}

[0644] { 2, 1, -4, -7, 0, -8, 17, 22, 1, -1, -4, 23}

[0645] { 3, 0, -5, -7, 0, -7, 15, 18, -5, 0, -5, 27}

[0646] { 2, 0, 0, -7, 1, -10, 13, 13, -4, 2, -7, 24}

[0647] { 3, 3, -13, 4, -2, -5, 9, 21, 25, -2, -3, 12}

[0648] {-5, -2, 7, -3, -7, 9, 8, 9, 16, -2, 15, 12}

[0649] { 0, -1, 0, -7, -5, 4, 11, 11, 8, -6, 12, 21}

[0650] { 3, -2, -3, -8, -4, -1, 16, 15, -2, -3, 3, 26}

[0651] { 2, 1, -5, -4, -1, -8, 16, 4, -2, 1, -7, 33}

[0652] { 2, 1, -4, -2, 1, -10, 17, -2, 0, 2, -11, 33}

[0653] { 1, -2, 7, -15, -16, 10, 8, 8, 20, 11, 14, 11}

[0654] { 2, 2, 3, -13, -13, 4, 8, 12, 2, -3, 16, 24}

[0655] { 1, 4, 0, -7, -8, -4, 9, 9, -2, -2, 8, 29}

[0656] { 1, 1, 2, -4, -1, -6, 6, 3, -1, -1, -3, 30}

[0657] {-7, 3, 2, 10, -2, 3, 7, 11, 19, -7, 8, 10}

[0658] { 0, -2, -5, -3, -2, 4, 20, 15, -1, -3, -1, 22}

[0659] { 3, -1, -8, -4, -1, -4, 22, 8, -4, 2, -8, 28}

[0660] { 0, 3, -14, 3, 0, 1, 19, 17, 8, -3, -7, 20}

[0661] { 0, 2, -1, -8, 3, -6, 5, 21, 1, 1, -9, 13}

[0662] {-4, -2, 8, 20, -2, 2, 3, 5, 21, 4, 6, 1}

[0663] { 2, -2, -3, -9, -4, 2, 14, 16, 3, -6, 8, 24}

[0664] { 2, 1, 5, -16, -7, 2, 3, 11, 15, -3, 11, 22}

[0665] { 1, 2, 3, -11, -2, -5, 4, 8, 9, -3, -2, 26}

[0666] { 0, -1, 10, -9, -1, -8, 2, 3, 4, 0, 0, 29}

[0667] { 1, 2, 0, -5, 1, -9, 9, 3, 0, 1, -7, 20}

[0668] {-2, 8, -6, -4, 3, -9, -8, 45, 14, 2, -13, 7}

[0669] { 1, -1, 16, -19, -8, -4, -3, 2, 19, 0, 4, 30}

[0670] { 1, 1, -3, 0, 2, -11, 15, -5, 1, 2, -9, 24}

[0671] { 0, 1, -2, 0, 1, -4, 4, 0, 0, 1, -4, 7}

[0672] { 0, 1, 2, -5, 1, -6, 4, 10, -2, 1, -4, 10}

[0673] { 3, 0, -3, -6, -2, -6, 14, 8, -1, -1, -3, 31}

[0674] { 0, 1, 0, -2, 1, -6, 5, 1, 0, 1, -5, 13}

[0675] { 3, 1, 9, -19, -21, 9, 7, 6, 13, 5, 15, 21}

[0676] { 2, 4, 3, -12, -13, 1, 7, 8, 3, 0, 12, 26}

[0677] { 3, 1, -8, -2, 0, -6, 18, 2, -2, 3, -10, 23}

[0678] { 1, 1, -4, -1, 1, -5, 8, 1, -1, 2, -5, 10}

[0679] { 0, 1, -1, 0, 0, -2, 2, 0, 0, 1, -2, 3}

[0680] { 1, 1, -2, -7, 1, -7, 14, 18, 0, 0, -7, 21}

[0681] { 0, 1, 0, -2, 0, -7, 8, 1, -2, 0, -3, 24}

[0682] { 0, 1, 1, -2, 2, -10, 10, 0, -2, 1, -7, 23}

[0683] { 0, 2, 2, -11, 2, -4, -3, 39, 7, 1, -10, 9}

[0684] { 1, 0, 13, -16, -5, -6, -1, 8, 6, 0, 6, 29}

[0685] { 1, 3, 1, -6, -4, -7, 9, 6, -3, -2, 3, 33}

[0686] { 4, 0, -17, -1, -1, 5, 26, 8, -2, 3, -15, 30}

[0687] { 0, 1, -2, 0, 2, -8, 12, -6, 1, 1, -6, 16}

[0688] { 0, 0, 0, -1, 1, -4, 4, 0, 0, 0, -3, 11}

[0689] { 0, 1, 2, -8, 2, -6, 5, 15, 0, 2, -7, 9}

[0690] { 1, -1, 12, -15, -7, -2, 3, 6, 6, -1, 7, 30}

[0691] },

[0692] AlfClassToFiltMap = (96)

[0693] {

[0694] { 8, 2, 2, 2, 3, 4, 53, 9, 9, 52, 4, 4, 5, 9, 2, 8,10, 9, 1, 3, 39, 39, 10, 9, 52}

[0695] { 11, 12, 13, 14, 15, 30, 11, 17, 18, 19, 16, 20, 20, 4, 53, 21,22, 23, 14, 25, 26, 26, 27, 28, 10}

[0696] { 16, 12, 31, 32, 14, 16, 30, 33, 53, 34, 35, 16, 20, 4, 7, 16,21, 36, 18, 19, 21, 26, 37, 38, 39}

[0697] { 35, 11, 13, 14, 43, 35, 16, 4, 34, 62, 35, 35, 30, 56, 7, 35,21, 38, 24, 40, 16, 21, 48, 57, 39}

[0698] { 11, 31, 32, 43, 44, 16, 4, 17, 34, 45, 30, 20, 20, 7, 5, 21,22, 46, 40, 47, 26, 48, 63, 58, 10}

[0699] { 12, 13, 50, 51, 52, 11, 17, 53, 45, 9, 30, 4, 53, 19, 0, 22,23, 25, 43, 44, 37, 27, 28, 10, 55}

[0700] { 30, 33, 62, 51, 44, 20, 41, 56, 34, 45, 20, 41, 41, 56, 5, 30,56, 38, 40, 47, 11, 37, 42, 57, 8}

[0701] { 35, 11, 23, 32, 14, 35, 20, 4, 17, 18, 21, 20, 20, 20, 4, 16,21, 36, 46, 25, 41, 26, 48, 49, 58}

[0702] { 12, 31, 59, 59, 3, 33, 33, 59, 59, 52, 4, 33, 17, 59, 55, 22,36, 59, 59, 60, 22, 36, 59, 25, 55}

[0703] { 31, 25, 15, 60, 60, 22, 17, 19, 55, 55, 20, 20, 53, 19, 55, 22,46, 25, 43, 60, 37, 28, 10, 55, 52}

[0704] { 12, 31, 32, 50, 51, 11, 33, 53, 19, 45, 16, 4, 4, 53, 5, 22,36, 18, 25, 43, 26, 27, 27, 28, 10}

[0705] { 5, 2, 44, 52, 3, 4, 53, 45, 9, 3, 4, 56, 5, 0, 2, 5,10, 47, 52, 3, 63, 39, 10, 9, 52}

[0706] { 12, 34, 44, 44, 3, 56, 56, 62, 45, 9, 56, 56, 7, 5, 0, 22,38, 40, 47, 52, 48, 57, 39, 10, 9}

[0707] { 35, 11, 23, 14, 51, 35, 20, 41, 56, 62, 16, 20, 41, 56, 7, 16,21, 38, 24, 40, 26, 26, 42, 57, 39}

[0708] { 33, 34, 51, 51, 52, 41, 41, 34, 62, 0, 41, 41, 56, 7, 5, 56, 38, 38, 40, 44, 37, 42, 57, 39, 10}

[0709] { 16, 31, 32, 15, 60, 30, 4, 17, 19, 25, 22, 20, 4, 53, 19, 21,22, 46, 25, 55, 26, 48, 63, 58, 55}

[0710] },

[0711] The requirement for bitstream consistency is AlfCoeff L The value of [adaptation_parameter_set_id][filtIdx][j] (where filtIdx = 0..NumAlfFilters - 1, j = 0..11) should be in the range of -2. 7 to 2 7 -1 range (inclusive of -2) 7 and 2 7 - 1) Inside.

[0712] `alf_luma_clip_idx[ sfIdx ][ j ]` specifies the clipping index of the clipping value to be used before multiplying by the j-th coefficient of the luminance filter notified by the signaling indicated by `sfIdx`. For bitstream consistency, the value of `alf_luma_clip_idx[ sfIdx ][ j ]` (where `sfIdx = 0..alf_luma_num_filters_signalled_minus1` and `j = 0..11`) should be in the range of 0 to 3 (inclusive).

[0713] Having element AlfClip L The luminance filter clipping value AlfClip is calculated as follows: [adaptation_parameter_set_id][filtIdx][j] (where filtIdx = 0..NumAlfFilters - 1 and j = 0..11). L [adaptation_parameter_set_id] is derived from BitDepth and clipIdx set to equal alf_luma_clip_idx[alf_luma_coeff_delta_idx[filtIdx]][j] as specified in Table 8.

[0714] A value of 0 for `alf_chroma_clip_flag` specifies that a linear adaptive loop filter is applied to the chroma components; a value of 1 for `alf_chroma_clip_flag` specifies that a nonlinear adaptive loop filter is applied to the chroma components. When `alf_chroma_clip_flag` does not exist, it is inferred to be equal to 0.

[0715] The increment of alf_chroma_num_alt_filters_minus1 by 1 specifies the number of alternative filters for the chroma components. The value of alf_chroma_num_alt_filters_minus1 should be in the range of 0 to 7 (inclusive).

[0716] `alf_chroma_coeff_abs[ altIdx ][ j ]` specifies the absolute value of the j-th chroma filter coefficient of the alternative chroma filter with index `altIdx`. If `alf_chroma_coeff_abs[ altIdx ][ j ]` does not exist, it is inferred to be equal to 0. The value of `alf_chroma_coeff_abs[ sfIdx ][ j ]` should be in the range of 0 to 128 (inclusive).

[0717] alf_chroma_coeff_sign[ altIdx ][ j ] specifies the sign of the j-th chroma filter coefficient of the alternative chroma filter with index altIdx as follows:

[0718] If alf_chroma_coeff_sign[ altIdx ][ j ] equals 0, then the corresponding chroma filter coefficient has a positive value.

[0719] Otherwise (alf_chroma_coeff_sign[ altIdx ][ j ] equals 1), the corresponding chroma filter coefficients have negative values.

[0720] When alf_chroma_coeff_sign[ altIdx ][ j ] does not exist, it is inferred to be equal to 0.

[0721] Having element AlfCoeff C The chroma filter coefficients AlfCoeff are defined as follows: [adaptation_parameter_set_id][altIdx][j] (where altIdx = 0..alf_chroma_num_alt_filters_minus1, j = 0..5). C [adaptation_parameter_set_id][altIdx] is deduced as follows:

[0722] AlfCoeff C [ adaptation_parameter_set_id ][ altIdx ][ j ] = alf_chroma_coeff_abs[ altIdx ][ j ] (97) (1 - 2) alf_chroma_coeff_sign[ altIdx ][ j ] )

[0723] The requirement for bitstream consistency is AlfCoeff C The value of [adaptation_parameter_set_id][altIdx][j] (where altIdx = 0..alf_chroma_num_alt_filters_minus1, j = 0..5) should be in the range of -2. 7 to 2 7 -1 range (inclusive of -2) 7 and 27 - 1) Inside.

[0724] `alf_cc_cb_filter_signal_flag` equal to 1 specifies that the cross-component filter signals the Cb color components. `alf_cc_cb_filter_signal_flag` equal to 0 specifies that the cross-component filter does not signal the Cb color components. When `ChromaArrayType` equals 0, `alf_cc_cb_filter_signal_flag` should be equal to 0.

[0725] The increment of 1 in `alf_cc_cb_filters_signalled_minus1` specifies the number of cross-component filters for the Cb color components signaled in the current ALF APS. The value of `alf_cc_cb_filters_signalled_minus1` should be in the range of 0 to 3 (inclusive).

[0726] alf_cc_cb_mapped_coeff_abs[k][j] specifies the absolute value of the j-th mapping coefficient of the k-th cross-component filter for the signaling notification of the Cb color component. When alf_cc_cb_mapped_coeff_abs[k][j] does not exist, it is inferred to be equal to 0.

[0727] alf_cc_cb_coeff_sign[k][j] specifies the sign of the j-th coefficient of the k-th cross-component filter for the signaling notification of the Cb color component, as follows:

[0728] If alf_cc_cb_coeff_sign[k][j] equals 0, then the corresponding cross-component filter coefficients have positive values.

[0729] Otherwise (alf_cc_cb_sign[k][j] equals 1), the corresponding cross-component filter coefficients have negative values.

[0730] When alf_cc_cb_coeff_sign[k][j] does not exist, it is inferred to be equal to 0.

[0731] The signaling notification of the k-th cross-component filter coefficient CcAlfApsCoeff for the Cb color component Cb [adaptation_parameter_set_id][k][j] (where j = 0..6) is derived as follows:

[0732] If alf_cc_cb_mapped_coeff_abs[k][j] equals 0, then CcAlfApsCoeff Cb [adaptation_parameter_set_id][k][j] is set to 0.

[0733] Otherwise, CcAlfApsCoeff Cb [adaptation_parameter_set_id][k][j] is set to equal to (1 - 2). alf_cc_cb_coeff_sign[ k ][ j ] ) 2 alf _cc_cb_mapped_coeff_abs[ k ][ j ] - 1 .

[0734] `alf_cc_cr_filter_signal_flag` equal to 1 specifies that the cross-component filter signals the Cr color component. `alf_cc_cr_filter_signal_flag` equal to 0 specifies that the cross-component filter does not signal the Cr color component. When `ChromaArrayType` equals 0, `alf_cc_cr_filter_signal_flag` should be equal to 0.

[0735] The increment of 1 in `alf_cc_cr_filters_signalled_minus1` specifies the number of cross-component filters for the Cr color component signaled in the current ALF APS. The value of `alf_cc_cr_filters_signalled_minus1` should be in the range of 0 to 3 (inclusive).

[0736] alf_cc_cr_mapped coeff_abs[k][j] specifies the absolute value of the j-th mapping coefficient of the k-th cross-component filter for the signaling notification of the Cr color component. When alf_cc_cr_mapped coeff_abs[k][j] does not exist, it is inferred to be equal to 0.

[0737] alf_cc_cr_coeff_sign[k][j] specifies the sign of the j-th coefficient of the k-th cross-component filter for the signaling notification of the Cr color component, as follows:

[0738] If alf_cc_cr_coeff_sign[k][j] equals 0, then the corresponding cross-component filter coefficients have positive values.

[0739] Otherwise (alf_cc_cr_sign[k][j] equals 1), the corresponding cross-component filter coefficients have negative values.

[0740] When alf_cc_cr_coeff_sign[k][j] does not exist, it is inferred to be equal to 0.

[0741] The signaling notification of the k-th cross-component filter coefficient CcAlfApsCoeff for the Cr color component Cr [adaptation_parameter_set_id][k][j] (where j = 0..6) is derived as follows:

[0742] If alf_cc_cr_mapped_coeff_abs[k][j] equals 0, then CcAlfApsCoeff Cr [adaptation_parameter_set_id][k][j] is set to 0.

[0743] Otherwise, CcAlfApsCoeff Cr [adaptation_parameter_set_id][k][j] is set to equal to (1 - 2). alf_cc_cr_coeff_sign[ k ][ j ] ) 2 alf _cc_cr_mapped_coeff_abs[ k ][ j ] - 1 .

[0744] `alf_chroma_clip_idx[altIdx][j]` specifies the clipping index to be used before the j-th coefficient of the alternative chroma filter with index `altIdx`. For bitstream consistency, the value of `alf_chroma_clip_idx[altIdx][j]` (where `altIdx = 0..alf_chroma_num_alt_filters_minus1`, `j = 0..5`) should be in the range of 0 to 3 (inclusive).

[0745] Having element AlfClip C The chroma filter clipping value AlfClip of [adaptation_parameter_set_id][altIdx][j] (where altIdx = 0..alf_chroma_num_alt_filters_minus1, j = 0..5). C[adaptation_parameter_set_id][altIdx] is derived from BitDepth and clipIdx set to be equal to alf_chroma_clip_idx[altIdx][j] as specified in Table 8.

[0746] Table 8 – AlfClip according to the specifications of BitDepth and clipIdx

[0747]

[0748] `lmcs_min_bin_idx` specifies the minimum binary index used during the luma mapping and chroma scaling construction process. The value of `lmcs_min_bin_idx` should be in the range of 0 to 15 (inclusive).

[0749] `lmcs_delta_max_bin_idx` specifies the increment between 15 and the maximum binary index `LmcsMaxBinIdx` used during luma mapping and chroma scaling. The value of `lmcs_delta_max_bin_idx` should be in the range of 0 to 15 (inclusive). The value of `LmcsMaxBinIdx` is set to equal to 15 - `lmcs_delta_max_bin_idx`. The value of `LmcsMaxBinIdx` should be greater than or equal to `lmcs_min_bin_idx`.

[0750] The increment of 1 in lmcs_delta_cw_prec_minus1 specifies the number of bits used for the representation of the syntax lmcs_delta_abs_cw[i]. The value of lmcs_delta_cw_prec_minus1 should be in the range of 0 to BitDepth - 2 (inclusive).

[0751] lmcs_delta_abs_cw[i] specifies the absolute increment codeword value of the i-th binary bit.

[0752] The symbol for the variable lmcsDeltaCW[i] is specified by lmcs_delta_sign_cw_flag[i] as follows:

[0753] If mcs_delta_sign_cw_flag[i] equals 0, then lmcsDeltaCW[i] is a positive value.

[0754] Otherwise (mcs_delta_sign_cw_flag[i] is not equal to 0), lmcsDeltaCW[i] is negative.

[0755] When mcs_delta_sign_cw_flag[i] does not exist, it is inferred to be equal to 0.

[0756] The variable OrgCW is derived as follows:

[0757] OrgCW = ( 1 << BitDepth ) / 16 (98)

[0758] The variable lmcsDeltaCW[i] (where i = lmcs_min_bin_idx..LmcsMaxBinIdx) is derived as follows:

[0759] lmcsDeltaCW[i] = (1 - 2i) lmcs_delta_sign_cw_flag[ i ] ) lmcs_delta_abs_cw[i] (99)

[0760] The variable lmcsCW[i] is derived as follows:

[0761] For i = 0.. lmcs_min_bin_idx - 1, lmcsCW[i] is set to equal to 0.

[0762] For i = lmcs_min_bin_idx..LmcsMaxBinIdx, the following applies:

[0763] lmcsCW[ i ] = OrgCW + lmcsDeltaCW[ i ] (100)

[0764] The value of lmcsCW[i] should be in the range of (OrgCW >> 3) to (OrgCW << 3 - 1) ((OrgCW >> 3) and (OrgCW << 3 - 1)).

[0765] For i = LmcsMaxBinIdx + 1..15, lmcsCW[i] is set to equal to 0.

[0766] Bitstream consistency requires the following condition to be true:

[0767] <= ( 1 << BitDepth ) - 1 (101)

[0768] The variable InputPivot[i] (where i = 0..16) is derived as follows:

[0769] InputPivot[i] = i OrgCW (102)

[0770] The variables LmcsPivot[i] (where i = 0..16), ScaleCoeff[i], and InvScaleCoeff[i] (where i = 0..15) are derived as follows:

[0771] LmcsPivot[ 0 ] = 0;for( i = 0; i <= 15; i++ ) { LmcsPivot[ i + 1 ]= LmcsPivot[ i ] + lmcsCW[ i ] ScaleCoeff[ i ] = ( lmcsCW[ i ] (1 << 11) + ( 1 << ( Log2( OrgCW ) - 1 ) ) ) >> ( Log2( OrgCW ) ) if( lmcsCW[ i] = = 0 ) (103) InvScaleCoeff[ i ] = 0 else InvScaleCoeff[ i ] = OrgCW ( 1 << 11 ) / lmcsCW[ i ]}

[0772] The requirement for bitstream consistency is that, for i = lmcs_min_bin_idx..LmcsMaxBinIdx, when the value of LmcsPivot[i] is not a multiple of 1 << (BitDepth - 5), the value of (LmcsPivot[i] >> (BitDepth - 5)) should not be equal to the value of (LmcsPivot[i + 1] >> (BitDepth - 5)).

[0773] `lmcs_delta_abs_crs` specifies the absolute codeword value of the variable `lmcsDeltaCrs`. The value of `lmcs_delta_abs_crs` should be in the range of 0 and 7 (inclusive). If it does not exist, `lmcs_delta_abs_crs` is inferred to be equal to 0.

[0774] lmcs_delta_sign_crs_flag specifies the sign of the variable lmcsDeltaCrs. When it does not exist, lmcs_delta_sign_crs_flag is inferred to be equal to 0.

[0775] The variable lmcsDeltaCrs is derived as follows:

[0776] lmcsDeltaCrs = (1 - 2) lmcs_delta_sign_crs_flag ) lmcs_delta_abs_crs (104)

[0777] The requirement for bitstream consistency is that when lmcsCW[i] is not equal to 0, (lmcsCW[i] + lmcsDeltaCrs) should be within the range of (OrgCW >> 3) to ((OrgCW << 3) - 1) (inclusive of (OrgCW >> 3) and ((OrgCW << 3) - 1)).

[0778] The variable ChromaScaleCoeff[i] (where i = 0…15) is derived as follows:

[0779] if( lmcsCW[ i ] = = 0 ) ChromaScaleCoeff[ i ] = ( 1 << 11 )else

[0780] ChromaScaleCoeff[i] = OrgCW ( 1 << 11 ) / ( lmcsCW[ i ] +lmcsDeltaCrs )

[0781] A scaling_matrix_for_lfnst_disabled_flag value of 1 specifies that the scaling matrix should not be applied to blocks encoded or decoded using LFNST. A scaling_matrix_for_lfnst_disabled_flag value of 0 specifies that the scaling matrix can be applied to blocks encoded or decoded using LFNST.

[0782] A `scaling_list_chroma_present_flag` value of 1 indicates that the chroma scaling list exists in `scaling_list_data()`. A `scaling_list_chroma_present_flag` value of 0 indicates that the chroma scaling list does not exist in `scaling_list_data()`. For bitstream consistency, `scaling_list_chroma_present_flag` should be 0 when `ChromaArrayType` is 0, and should be 1 when `ChromaArrayType` is not 0.

[0783] A scaling_list_copy_mode_flag[id] equal to 1 indicates that the value of the scaling list is the same as the value of the reference scaling list. The reference scaling list is specified by scaling_list_pred_id_delta[id]. A scaling_list_copy_mode_flag[id] equal to 0 indicates that scaling_list_pred_mode_flag exists.

[0784] A scaling_list_pred_mode_flag[id] equal to 1 indicates that the value of the scaling list can be predicted from a reference scaling list. The reference scaling list is specified by scaling_list_pred_id_delta[id]. A scaling_list_pred_mode_flag[id] equal to 0 indicates that the value of the scaling list is explicitly signaled. When it does not exist, the value of scaling_list_pred_mode_flag[id] is inferred to be 0.

[0785] `scaling_list_pred_id_delta[id]` specifies the reference scaling list used to derive the predicted scaling matrix `ScalingMatrixPred[id]`. If it does not exist, the value of `scaling_list_pred_id_delta[id]` is inferred to be 0. The value of `scaling_list_pred_id_delta[id]` should be in the range of 0 to `maxIdDelta`, where `maxIdDelta` is inferred from `id` as follows:

[0786] maxIdDelta=(id < 2 ) ? id : ( ( id < 8 ) ? ( id - 2 ) : ( id - 8 ) )(106)

[0787] The variables refId and matrixSize are derived as follows:

[0788] refId = id - scaling_list_pred_id_delta[ id ] (107)

[0789] matrixSize = ( id < 2 ) ? 2 : ( ( id < 8 ) ? 4 : 8 ) (108)

[0790] The array ScalingMatrixPred[x][y] (where x = 0..matrixSize - 1, y = 0..matrixSize - 1) and the variable ScalingMatrixDCPred are derived as follows:

[0791] When both scaling_list_copy_mode_flag[id] and scaling_list_pred_mode_flag[id] are equal to 0, all elements of ScalingMatrixPred are set to equal to 8, and the value of ScalingMatrixDCPred is set to equal to 8.

[0792] Otherwise, when scaling_list_pred_id_delta[id] equals 0, all elements of ScalingMatrixPred are set to 16, and ScalingMatrixDCPred is set to 16.

[0793] Otherwise (if scaling_list_copy_mode_flag[id] or scaling_list_pred_mode_flag[id] equals 1, and scaling_list_pred_id_delta[id] is greater than 0), ScalingMatrixPred is set to equal ScalingMatrixRec[refId], and the following applies to ScalingMatrixDCPred:

[0794] If refId is greater than 13, then ScalingMatrixDCPred is set to equal ScalingMatrixDCRec[refId - 14].

[0795] Otherwise (refId is less than or equal to 13), ScalingMatrixDCPred is set to equal ScalingMatrixPred[0][0].

[0796] When id is greater than 13, scaling_list_dc_coef[id - 14] is used to deduce the value of the variable ScalingMatrixDC[id - 14] as follows:

[0797] ScalingMatrixDCRec[ id - 14 ] = ( ScalingMatrixDCPred + scaling_list_dc_coef[ id - 14 ] ) & 255 (109)

[0798] When it does not exist, the value of scaling_list_dc_coef[id - 14] is inferred to be equal to 0. The value of scaling_list_dc_coef[id - 14] should be in the range of -128 to 127 (inclusive). The value of ScalingMatrixDCRec[id - 14] should be greater than 0.

[0799] `scaling_list_delta_coef[id][i]` specifies the difference between the current matrix coefficients `ScalingList[id][i]` and the previous matrix coefficients `ScalingList[id][i-1]` when `scaling_list_copy_mode_flag[id]` is equal to 0. The value of `scaling_list_delta_coef[id][i]` should be in the range of -128 to 127 (inclusive). When `scaling_list_copy_mode_flag[id]` is equal to 1, all elements of `ScalingList[id]` are set to 0.

[0800] The (matrixSize)x(matrixSize) array ScalingMatrixRec[id] is derived as follows:

[0801] ScalingMatrixRec[ id ][ x ][ y ] = ( ScalingMatrixPred[ x ][ y ] +ScalingList[ id ][ k ] ) & 255 (110)where k = 0..( matrixSize matrixSize - 1 ), x = DiagScanOrder[ Log2(matrixSize ) ][ Log2( matrixSize ) ][ k ][ 0 ], and y = DiagScanOrder[ Log2( matrixSize ) ][ Log2( matrixSize ) ][ k ][ 1 ]

[0802] The value of ScalingMatrixRec[id][x][y] should be greater than 0.

[0803] 3.8. Phonics Syntax and Semantics

[0804] In the latest VVC draft text, the PH syntax and semantics are as follows:

[0805]

[0806] PH RBSP contains PH syntax structures, namely picture_header_structure().

[0807]

[0808]

[0809]

[0810]

[0811] The PH syntax structure contains common information for all stripes of the encoded / decoded image associated with the PH syntax structure.

[0812] A value of 1 for `gdr_or_irap_pic_flag` indicates that the current image is a GDR or IRAP image. A value of 0 for `gdr_or_irap_pic_flag` indicates that the current image may or may not be a GDR or IRAP image.

[0813] A `gdr_pic_flag` value of 1 indicates that the image associated with the PH is a GDR image. A `gdr_pic_flag` value of 0 indicates that the image associated with the PH is not a GDR image. When it does not exist, the value of `gdr_pic_flag` is inferred to be 0. When `gdr_enabled_flag` is 0, the value of `gdr_pic_flag` should be 0.

[0814] A value of 0 for ph_inter_slice_allowed_flag indicates that all codec slices of the image have a slice_type of 2. A value of ph_inter_slice_allowed_flag of 1 indicates that the image may or may not have one or more codec slices with a slice_type of 0 or 1.

[0815] A value of 0 for `ph_intra_slice_allowed_flag` indicates that all codec slices in the image have a slice_type of 0 or 1. A value of 1 for `ph_intra_slice_allowed_flag` indicates that the image may or may not have one or more codec slices with a slice_type of 2. When none exist, the value of `ph_intra_slice_allowed_flag` is inferred to be 1.

[0816] Note 1 – For bitstreams that should be merged based on sub-pictures without changing the PH NAL units, the encoder is expected to set the values ​​of ph_inter_slice_allowed_flag and ph_intra_slice_allowed_flag to 1.

[0817] A non_reference_picture_flag value of 1 indicates that the picture associated with the PH is never used as a reference picture. A non_reference_picture_flag value of 0 indicates that the picture associated with the PH may or may not be used as a reference picture.

[0818] ph_pic_parameter_set_id specifies the value of pps_pic_parameter_set_id for the PPS being used. The value of ph_pic_parameter_set_id should be in the range of 0 to 63 (inclusive).

[0819] The requirement for bitstream consistency is that the value of the TemporalId of PH should be greater than or equal to the value of the TemporalId of PPS, which has the same value as the value of ph_pic_parameter_set_id and the value of pps_pic_parameter_set_id.

[0820] `ph_pic_order_cnt_lsb` specifies the image order count modulo `MaxPicOrderCntLsb` for the current image. The length of the `ph_pic_order_cnt_lsb` syntax element is `log2_max_pic_order_cnt_lsb_minus4 + 4 bits`. The value of `ph_pic_order_cnt_lsb` should be in the range of 0 to `MaxPicOrderCntLsb - 1` (inclusive).

[0821] The `no_output_of_prior_pics_flag` flag affects the output of previously decoded pictures in the DPB after decoding a CLVSS picture that is not the first picture in the bitstream specified in Appendix C.

[0822] `recovery_poc_cnt` specifies the recovery point of the decoded images according to the output order. If the current image is a GDR image associated with the PH, and there is an image `picA` in the CLVS of `PicOrderCntVal` that is equal to the current GDR image's `PicOrderCntVal` plus `recovery_poc_cnt`, then image `picA` is called the recovery point image. Otherwise, the first image in the output order of `PicOrderCntVal` that is greater than the current image's `PicOrderCntVal` plus `recovery_poc_cnt` is called the recovery point image. The recovery point image should not precede the current GDR image according to the decoding order. The value of `recovery_poc_cnt` should be in the range of 0 to `MaxPicOrderCntLsb - 1` (inclusive).

[0823] When the current image is a GDR image, the variable RpPicOrderCntVal is derived as follows:

[0824] RpPicOrderCntVal = PicOrderCntVal + recovery_poc_cnt (82)

[0825] Note 2 – When gdr_enabled_flag equals 1 and the current image’s PicOrderCntVal is greater than or equal to the associated GDR image’s RpPicOrderCntVal, the current decoded image and subsequent decoded images in the output order are completely matched with the corresponding images generated by starting the decoding process from the previous IRAP image (if present) that precedes the associated GDR image in the decoding order.

[0826] ph_extra_bit[i] can be equal to 1 or 0. Decoders conforming to this specification for this version should ignore the value of ph_extra_bit[i]. Its value does not affect the level specified in this version of the decoder conforming to the specification.

[0827] `ph_poc_msb_present_flag` equal to 1 indicates that the syntax element `poc_msb_val` exists in `ph`. `ph_poc_msb_present_flag` equal to 0 indicates that the syntax element `poc_msb_val` does not exist in `ph`. The value of `ph_poc_msb_present_flag` should be 0 when `vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]]` equals 0 and there is an image in the current AU of the current layer's reference layer.

[0828] poc_msb_val specifies the POC MSB value of the current image. The length of the syntax element poc_msb_val is poc_msb_len_minus1 + 1 bits.

[0829] `ph_alf_enabled_flag` equal to 1 specifies that the adaptive loop filter is enabled for all stripes associated with `PH`, and can be applied to the Y, Cb, or Cr color components in the stripes. `ph_alf_enabled_flag` equal to 0 specifies that the adaptive loop filter can be disabled for one, several, or all stripes associated with `PH`. When it does not exist, `ph_alf_enabled_flag` is inferred to be equal to 0.

[0830] ph_num_alf_aps_ids_luma specifies the number of ALF APSs associated with the PH band reference.

[0831] ph_alf_aps_id_luma[i] specifies the adaptation_parameter_set_id of the i-th ALFAPS referenced by the luminance component of the strip associated with PH.

[0832] The value of alf_luma_filter_signal_flag of the APS NAL cell that has aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to ph_alf_aps_id_luma[i] should be equal to 1.

[0833] The TemporalId of an APS NAL cell having an aps_params_type equal to ALF_APS and an adaptation_parameter_set_id equal to ph_alf_aps_id_luma[i] should be less than or equal to the TemporalId of the image associated with PH.

[0834] `ph_alf_chroma_idc` equal to 0 specifies that the adaptive loop filter is not applied to the Cb and Cr color components. `ph_alf_chroma_idc` equal to 1 specifies that the adaptive loop filter is applied to the Cb color component. `ph_alf_chroma_idc` equal to 2 specifies that the adaptive loop filter is applied to the Cr color component. `ph_alf_chroma_idc` equal to 3 specifies that the adaptive loop filter is applied to both the Cb and Cr color components. When `ph_alf_chroma_idc` does not exist, it is inferred to be equal to 0.

[0835] ph_alf_aps_id_chroma specifies the adaptation_parameter_set_id of the ALF APS referenced for the chromaticity components of the strip associated with PH.

[0836] The value of alf_chroma_filter_signal_flag for an APS NAL cell that has aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to ph_alf_aps_id_chroma should be equal to 1.

[0837] The TemporalId of an APS NAL cell with aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to ph_alf_aps_id_chroma should be less than or equal to the TemporalId of the image associated with PH.

[0838] `ph_cc_alf_cb_enabled_flag` equal to 1 specifies a cross-component filter that enables the Cb color components for all stripes associated with `PH`, and can be applied to the Cb color components within a stripe. `ph_cc_alf_cb_enabled_flag` equal to 0 specifies a cross-component filter that can disable the Cb color components for one, several, or all stripes associated with `PH`. When it does not exist, `ph_cc_alf_cb_enabled_flag` is inferred to be equal to 0.

[0839] ph_cc_alf_cb_aps_id specifies the adaptation_parameter_set_id of the ALF APS referenced for the Cb color component of the strip associated with PH.

[0840] The value of alf_cc_cb_filter_signal_flag for an APS NAL cell that has aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to ph_cc_alf_cb_aps_id should be equal to 1.

[0841] The TemporalId of an APS NAL cell with aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to ph_cc_alf_cb_aps_id should be less than or equal to the TemporalId of the image associated with PH.

[0842] `ph_cc_alf_cr_enabled_flag` equal to 1 specifies a cross-component filter that enables the Cr color component for all stripes associated with `PH`, and can be applied to the Cr color component within a stripe. `ph_cc_alf_cr_enabled_flag` equal to 0 specifies a cross-component filter that can disable the Cr color component for one, several, or all stripes associated with `PH`. When it does not exist, `ph_cc_alf_cr_enabled_flag` is inferred to be equal to 0.

[0843] ph_cc_alf_cr_aps_id specifies the adaptation_parameter_set_id of the ALF APS referenced for the Cr color component of the strip associated with PH.

[0844] The value of alf_cc_cr_filter_signal_flag for an APS NAL cell that has aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to ph_cc_alf_cr_aps_id should be equal to 1.

[0845] The TemporalId of an APS NAL cell with aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to ph_cc_alf_cr_aps_id should be less than or equal to the TemporalId of the image associated with PH.

[0846] A value of 1 for ph_lmcs_enabled_flag indicates that luma mapping and chroma scaling are enabled for all stripes associated with PH. A value of 0 for ph_lmcs_enabled_flag indicates that luma mapping and chroma scaling are disabled for one, more, or all stripes associated with PH. When ph_lmcs_enabled_flag does not exist, its value is inferred to be 0.

[0847] `ph_lmcs_aps_id` specifies the `adaptation_parameter_set_id` of the LMCS APS associated with the PH. The TemporalId of the APS NAL cell having an `aps_params_type` equal to `LMCS_APS` and an `adaptation_parameter_set_id` equal to `ph_lmcs_aps_id` should be less than or equal to the TemporalId of the image associated with the PH.

[0848] A value of 1 for ph_chroma_residual_scale_flag indicates that chroma residual scaling is enabled for all stripes associated with PH. A value of 0 for ph_chroma_residual_scale_flag indicates that chroma residual scaling can be disabled for one, more, or all stripes associated with PH. When ph_chroma_residual_scale_flag does not exist, it is inferred to be equal to 0.

[0849] `ph_scaling_list_present_flag` equal to 1 specifies that the scaling list data used for the stripes associated with the PH is derived based on the scaling list data contained in the reference scaling list APS. `ph_scaling_list_present_flag` equal to 0 specifies that the scaling list data used for the stripes associated with the PH is set to 16. When it does not exist, the value of `ph_scaling_list_present_flag` is inferred to be 0.

[0850] `ph_scaling_list_aps_id` specifies the `adaptation_parameter_set_id` of the scaling list APS. The `TemporalId` of the APS NAL cell, which has `aps_params_type` equal to `SCALING_APS` and `adaptation_parameter_set_id` equal to `ph_scaling_list_aps_id`, should be less than or equal to the `TemporalId` of the image associated with the `PH`.

[0851] `ph_virtual_boundaries_present_flag` equal to 1 specifies that information about virtual boundaries is signaled in the PH (Picture View). `ph_virtual_boundaries_present_flag` equal to 0 specifies that information about virtual boundaries is not signaled in the PH. When one or more virtual boundaries are signaled in the PH, loop filtering operations are disabled across virtual boundaries in the image. Loop filtering operations include deblocking filtering, sample adaptive offset filtering, and adaptive loop filtering operations. When not present, the value of `ph_virtual_boundaries_present_flag` is inferred to be 0.

[0852] The requirement for bitstream consistency is that when subpic_info_present_flag equals 1, the value of ph_virtual_boundaries_present_flag should be equal to 0.

[0853] The variable VirtualBoundariesPresentFlag is derived as follows:

[0854] VirtualBoundariesPresentFlag = 0if( sps_virtual_boundaries_enabled_flag ) VirtualBoundariesPresentFlag = sps_virtual_boundaries_present_flag || ph_virtual_boundaries_present_flag (83)

[0855] ph_num_ver_virtual_boundaries specifies the number of ph_virtual_boundaries_pos_x[i] syntax elements present in PH. When ph_num_ver_virtual_boundaries does not exist, it is inferred to be equal to 0.

[0856] The variable NumVerVirtualBoundaries is derived as follows:

[0857] NumVerVirtualBoundaries = 0if( sps_virtual_boundaries_enabled_flag )NumVerVirtualBoundaries = sps_virtual_boundaries_present_flag ? sps_num_ver_virtual_boundaries : ph_num_ver_virtual_boundaries (84)

[0858] ph_virtual_boundaries_pos_x[i] specifies the position of the i-th vertical virtual boundary, in units of luminance samples divided by 8. The value of ph_virtual_boundaries_pos_x[i] should be in the range of 1 to Ceil(pic_width_in_luma_samples ÷ 8) - 1 (inclusive).

[0859] The list VirtualBoundariesPosX[i] (where i ranges from 0 to NumVerVirtualBoundaries - 1, inclusive), specifying the locations of vertical virtual boundaries, is derived in luminance samples as follows:

[0860] for( i = 0; i < NumVerVirtualBoundaries; i++) VirtualBoundariesPosX[i ] = ( sps_virtual_boundaries_present_flag ? sps_virtual_boundaries_pos_x[ i] :ph_virtual_boundaries_pos_x[ i ] ) 8 (85)

[0861] The distance between any two vertical virtual boundaries should be greater than or equal to CtbSizeY luminance samples.

[0862] `ph_num_hor_virtual_boundaries` specifies the number of `ph_virtual_boundaries_pos_y[i]` syntax elements present in `PH`. When `ph_num_hor_virtual_boundaries` does not exist, it is inferred to be equal to 0.

[0863] The parameter NumHorVirtualBoundaries is derived as follows:

[0864] NumHorVirtualBoundaries = 0if( sps_virtual_boundaries_enabled_flag )NumHorVirtualBoundaries = sps_virtual_boundaries_present_flag ? sps_num_hor_virtual_boundaries :ph_num_hor_virtual_boundaries (86)

[0865] When sps_virtual_boundaries_enabled_flag equals 1 and ph_virtual_boundaries_present_flag equals 1, the sum of ph_num_ver_virtual_boundaries and ph_num_hor_virtual_boundaries should be greater than 0.

[0866] ph_virtual_boundaries_pos_y[i] specifies the position of the i-th horizontal virtual boundary, in units of luminance samples divided by 8. The value of ph_virtual_boundaries_pos_y[i] should be in the range of 1 to Ceil(pic_height_in_luma_samples ÷ 8) - 1 (inclusive).

[0867] The list of locations of the specified horizontal virtual boundaries, VirtualBoundariesPosY[i] (where i ranges from 0 to NumHorVirtualBoundaries - 1 (inclusive)), in units of luminance samples, is derived as follows:

[0868] for( i = 0; i < NumHorVirtualBoundaries; i++) VirtualBoundariesPosY[i ] = ( sps_virtual_boundaries_present_flag ? sps_virtual_boundaries_pos_y[ i] :ph_virtual_boundaries_pos_y[ i ] ) 8 (87)

[0869] The distance between any two horizontal virtual boundaries should be greater than or equal to CtbSizeY luminance samples.

[0870] The `pic_output_flag` affects the decoded image output and removal process, as specified in Appendix C. When `pic_output_flag` is not present, it is inferred to be equal to 1.

[0871] A partition_constraints_override_flag value of 1 indicates that the partition constraint parameters exist in the partition property (PH). A partition_constraints_override_flag value of 0 indicates that the partition constraint parameters do not exist in the PH. When the parameter does not exist, the value of partition_constraints_override_flag is inferred to be 0.

[0872] `ph_log2_diff_min_qt_min_cb_intra_slice_luma` specifies the base-2 logarithm of the smallest size of the luminance samples in the luminance leaf blocks generated from the quadtree partitioning of the CTU, and the base-2 logarithm of the smallest decoder block size in the luminance samples of the luminance CUs in the slices with a slice_type equal to 2(I) associated with the PH. The value of `ph_log2_diff_min_qt_min_cb_intra_slice_luma` should be in the range of 0 to `CtbLog2SizeY - MinCbLog2SizeY` (inclusive). When it does not exist, the value of `ph_log2_diff_min_qt_min_cb_luma` is inferred to be equal to `sps_log2_diff_min_qt_min_cb_intra_slice_luma`.

[0873] `ph_max_mtt_hierarchy_depth_intra_slice_luma` specifies the maximum hierarchical depth of the codec unit generated from the multi-type tree partitioning of quad-leaf trees in stripes with a slice_type of 2 (I) associated with `PH`. The value of `ph_max_mtt_hierarchy_depth_intra_slice_luma` should be between 0 and 2. The range of (CtbLog2SizeY - MinCbLog2SizeY) (inclusive of 0 and 2) (CtbLog2SizeY - MinCbLog2SizeY)). When it does not exist, the value of ph_max_mtt_hierarchy_depth_intra_slice_luma is inferred to be equal to sps_max_mtt_hierarchy_depth_intra_slice_luma.

[0874] `ph_log2_diff_max_bt_min_qt_intra_slice_luma` specifies the difference between the base-2 logarithm of the maximum size (width or height) of the luminance samples in the luminance codec block that can be divided using binary partitioning, and the minimum size (width or height) of the luminance samples in the luminance leaf block resulting from the quadtree partitioning of the CTU from a strip with slice_type equal to 2(I) associated with PH. The value of `ph_log2_diff_max_bt_min_qt_intra_slice_luma` should be in the range of 0 to `CtbLog2SizeY - MinQtLog2SizeIntraY` (inclusive). When it does not exist, the value of ph_log2_diff_max_bt_min_qt_intra_slice_luma is inferred to be equal to sps_log2_diff_max_bt_min_qt_intra_slice_luma.

[0875] `ph_log2_diff_max_tt_min_qt_intra_slice_luma` specifies the difference between the base-2 logarithm of the maximum size (width or height) of the luminance samples in the luminance codec block that can be divided using ternary partitioning, and the minimum size (width or height) of the luminance samples in the luminance leaf block resulting from the quadtree partitioning of the CTU from a slice with slice_type equal to 2(I) associated with PH. The value of `ph_log2_diff_max_tt_min_qt_intra_slice_luma` should be in the range of 0 to `CtbLog2SizeY - MinQtLog2SizeIntraY` (inclusive). When it does not exist, the value of ph_log2_diff_max_tt_min_qt_intra_slice_luma is inferred to be equal to sps_log2_diff_max_tt_min_qt_intra_slice_luma.

[0876] `ph_log2_diff_min_qt_min_cb_intra_slice_chroma` specifies the base-2 logarithm of the smallest size of the luminance samples in the chrominance leaf blocks generated from the quadtree partitioning of the chrominance CTU with `treeType` equal to `DUAL_TREE_CHROMA`, and the base-2 logarithm of the smallest decoder block size in the luminance samples of the chrominance CU with `treeType` equal to `DUAL_TREE_CHROMA` in the slice with `slice_type` equal to 2(I) associated with `PH`. The value of `ph_log2_diff_min_qt_min_cb_intra_slice_chroma` should be in the range of 0 to `CtbLog2SizeY - MinCbLog2SizeY` (inclusive). When it does not exist, the value of ph_log2_diff_min_qt_min_cb_intra_slice_chroma is inferred to be equal to sps_log2_diff_min_qt_min_cb_intra_slice_chroma.

[0877] `ph_max_mtt_hierarchy_depth_intra_slice_chroma` specifies the maximum hierarchical depth of the chroma codec unit generated from a multi-type tree partition of chroma quadtree leaves with `treeType` equal to `DUAL_TREE_CHROMA` from a slice with `slice_type` equal to 2 (I) associated with `PH`. The value of `ph_max_mtt_hierarchy_depth_intra_slice_chroma` should be between 0 and 2. The range of (CtbLog2SizeY - MinCbLog2SizeY) (inclusive of 0 and 2) (CtbLog2SizeY - MinCbLog2SizeY)). When it does not exist, the value of ph_max_mtt_hierarchy_depth_intra_slice_chroma is inferred to be equal to sps_max_mtt_hierarchy_depth_intra_slice_chroma.

[0878] `ph_log2_diff_max_bt_min_qt_intra_slice_chroma` specifies the difference between the base-2 logarithm of the maximum size (width or height) of the luminance samples in a chroma codec block that can be divided using binary partitioning, and the minimum size (width or height) of the luminance samples in a chroma leaf block resulting from a quadtree partition of a chroma CTU with a `treeType` equal to `DUAL_TREE_CHROMA` from a strip with `slice_type` equal to 2(I) associated with `PH`. The value of `ph_log2_diff_max_bt_min_qt_intra_slice_chroma` should be in the range of 0 to `CtbLog2SizeY - MinQtLog2SizeIntraC` (inclusive). When it does not exist, the value of ph_log2_diff_max_bt_min_qt_intra_slice_chroma is inferred to be equal to sps_log2_diff_max_bt_min_qt_intra_slice_chroma.

[0879] `ph_log2_diff_max_tt_min_qt_intra_slice_chroma` specifies the difference between the base-2 logarithm of the maximum size (width or height) of the luminance samples in a chroma codec block that can be divided using ternary partitioning, and the minimum size (width or height) of the luminance samples in a chroma leaf block resulting from a quadtree partition of a chroma CTU with a `treeType` equal to `DUAL_TREE_CHROMA` from a strip with `slice_type` equal to 2(I) associated with `PH`. The value of `ph_log2_diff_max_tt_min_qt_intra_slice_chroma` should be in the range of 0 to `CtbLog2SizeY - MinQtLog2SizeIntraC` (inclusive). When it does not exist, the value of ph_log2_diff_max_tt_min_qt_intra_slice_chroma is inferred to be equal to sps_log2_diff_max_tt_min_qt_intra_slice_chroma.

[0880] `ph_cu_qp_delta_subdiv_intra_slice` specifies the maximum `cbSubdiv` value of the codec unit in the intra-slice transmitting `cu_qp_delta_abs` and `cu_qp_delta_sign_flag`. The value of `ph_cu_qp_delta_subdiv_intra_slice` should be between 0 and 2. The range of (CtbLog2SizeY - MinQtLog2SizeIntraY + ph_max_mtt_hierarchy_depth_intra_slice_luma) (inclusive of 0 and 2) (CtbLog2SizeY -MinQtLog2SizeIntraY + ph_max_mtt_hierarchy_depth_intra_slice_luma)).

[0881] When it does not exist, the value of ph_cu_qp_delta_subdiv_intra_slice is inferred to be equal to 0.

[0882] `ph_cu_chroma_qp_offset_subdiv_intra_slice` specifies the maximum `cbSubdiv` value of the codec unit in the intra-slice transmitting `cu_chroma_qp_offset_flag`. The value of `ph_cu_chroma_qp_offset_subdiv_intra_slice` should be between 0 and 2. The range of (CtbLog2SizeY - MinQtLog2SizeIntraY + ph_max_mtt_hierarchy_depth_intra_slice_luma) (inclusive of 0 and 2) (CtbLog2SizeY -MinQtLog2SizeIntraY + ph_max_mtt_hierarchy_depth_intra_slice_luma)).

[0883] When it does not exist, the value of ph_cu_chroma_qp_offset_subdiv_intra_slice is inferred to be equal to 0.

[0884] `ph_log2_diff_min_qt_min_cb_inter_slice` specifies the base-2 logarithm of the minimum size of the luminance samples in the luminance leaf blocks generated from the quadtree partitioning of the CTU, and the base-2 logarithm of the minimum luminance codec block size in the luminance samples of the luminance CUs in the strips with slice_type equal to 0 (B) or 1 (P) associated with PH. The value of `ph_log2_diff_min_qt_min_cb_inter_slice` should be in the range of 0 to `CtbLog2SizeY - MinCbLog2SizeY` (inclusive). When it does not exist, the value of `ph_log2_diff_min_qt_min_cb_luma` is inferred to be equal to `sps_log2_diff_min_qt_min_cb_inter_slice`.

[0885] `ph_max_mtt_hierarchy_depth_inter_slice` specifies the maximum hierarchical depth of the encoding / decoding unit generated from the multi-type tree partitioning of quad-leaf trees in stripes with a slice_type of 0 (B) or 1 (P) associated with `PH`. The value of `ph_max_mtt_hierarchy_depth_inter_slice` should be between 0 and 2. The range of (CtbLog2SizeY - MinCbLog2SizeY) (inclusive of 0 and 2) (CtbLog2SizeY - MinCbLog2SizeY)). When it does not exist, the value of ph_max_mtt_hierarchy_depth_inter_slice is inferred to be equal to sps_max_mtt_hierarchy_depth_inter_slice.

[0886] `ph_log2_diff_max_bt_min_qt_inter_slice` specifies the base-2 logarithm of the maximum size (width or height) of the luminance samples in a luminance codec block that can be divided using binary partitioning, and the minimum size (width or height) of the luminance samples in a luminance leaf block resulting from a quadtree partition of the CTU from a stripe with a slice_type equal to 0 (B) or 1 (P) associated with the PH. The value of `ph_log2_diff_max_bt_min_qt_inter_slice` should be in the range of 0 to `CtbLog2SizeY - MinQtLog2SizeInterY` (inclusive). When it does not exist, the value of `ph_log2_diff_max_bt_min_qt_inter_slice` is inferred to be equal to `sps_log2_diff_max_bt_min_qt_inter_slice`.

[0887] `ph_log2_diff_max_tt_min_qt_inter_slice` specifies the base-2 logarithm of the maximum size (width or height) of the luminance samples in a luminance codec block that can be divided using ternary partitioning, and the minimum size (width or height) of the luminance samples in a luminance leaf block resulting from a quadtree partition of a CTU from a stripe with a slice_type equal to 0 (B) or 1 (P) associated with the PH. The value of `ph_log2_diff_max_tt_min_qt_inter_slice` should be in the range of 0 to `CtbLog2SizeY - MinQtLog2SizeInterY` (inclusive). When it does not exist, the value of `ph_log2_diff_max_tt_min_qt_inter_slice` is inferred to be equal to `sps_log2_diff_max_tt_min_qt_inter_slice`.

[0888] `ph_cu_qp_delta_subdiv_inter_slice` specifies the maximum `cbSubdiv` value of the codec unit in the inter-frame slice transmitting `cu_qp_delta_abs` and `cu_qp_delta_sign_flag`. The value of `ph_cu_qp_delta_subdiv_inter_slice` should be between 0 and 2. The range of (CtbLog2SizeY - MinQtLog2SizeInterY + ph_max_mtt_hierarchy_depth_inter_slice) (inclusive of 0 and 2) (CtbLog2SizeY -MinQtLog2SizeInterY + ph_max_mtt_hierarchy_depth_inter_slice)).

[0889] When it does not exist, the value of ph_cu_qp_delta_subdiv_inter_slice is inferred to be equal to 0.

[0890] `ph_cu_chroma_qp_offset_subdiv_inter_slice` specifies the maximum `cbSubdiv` value of the codec unit in the inter-frame slice transmitting `cu_chroma_qp_offset_flag`. The value of `ph_cu_chroma_qp_offset_subdiv_inter_slice` should be between 0 and 2. The range of (CtbLog2SizeY - MinQtLog2SizeInterY + ph_max_mtt_hierarchy_depth_inter_slice) (inclusive of 0 and 2) (CtbLog2SizeY -MinQtLog2SizeInterY + ph_max_mtt_hierarchy_depth_inter_slice)).

[0891] When it does not exist, the value of ph_cu_chroma_qp_offset_subdiv_inter_slice is inferred to be equal to 0.

[0892] `ph_temporal_mvp_enabled_flag` specifies whether temporal motion vector prediction values ​​can be used for inter-frame prediction of the slice associated with the PH. If `ph_temporal_mvp_enabled_flag` equals 0, the syntax elements of the slice associated with the PH should be constrained such that no temporal motion vector prediction values ​​are used in the decoding of the slice. Otherwise (if `ph_temporal_mvp_enabled_flag` equals 1), temporal motion vector prediction values ​​can be used in the decoding of the slice associated with the PH. When it does not exist, the value of `ph_temporal_mvp_enabled_flag` is inferred to be equal to 0. The value of `ph_temporal_mvp_enabled_flag` should be equal to 0 when there is no reference image in the DPB with the same spatial resolution as the current image.

[0893] The maximum number of MVP candidates based on sub-blocks, MaxNumSubblockMergeCand, is derived as follows:

[0894] if( sps_affine_enabled_flag ) MaxNumSubblockMergeCand = 5 - five_minus_max_num_subblock_merge_cand (88)else MaxNumSubblockMergeCand =sps_sbtmvp_enabled_flag && ph_temporal_mvp_enable_flag

[0895] The value of MaxNumSubblockMergeCand should be in the range of 0 to 5 (inclusive).

[0896] A value of 1 for ph_collocated_from_l0_flag indicates that the co-located image used for temporal motion vector prediction is derived from reference image list 0. A value of 0 for ph_collocated_from_l0_flag indicates that the co-located image used for temporal motion vector prediction is derived from reference image list 1.

[0897] ph_collocated_ref_idx specifies the reference index of the co-located image used for temporal motion vector prediction.

[0898] When ph_collocated_from_l0_flag equals 1, ph_collocated_ref_idx refers to the entry in reference image list 0, and the value of ph_collocated_ref_idx should be in the range of 0 to num_ref_entries[0][RplsIdx[0]] - 1 (inclusive of 0 and num_ref_entries[0][RplsIdx[0]] - 1).

[0899] When ph_collocated_from_l0_flag equals 0, ph_collocated_ref_idx refers to the entry in reference image list 1, and the value of ph_collocated_ref_idx should be in the range of 0 to num_ref_entries[1][RplsIdx[1]] - 1 (inclusive of 0 and num_ref_entries[1][RplsIdx[1]] - 1).

[0900] When it does not exist, the value of ph_collocated_ref_idx is inferred to be equal to 0.

[0901] A `mvd_l1_zero_flag` of 1 indicates that the `mvd_coding(x0, y0, 1)` syntax structure is not parsed, and for `compIdx = 0..1` and `cpIdx = 0..2`, `MvdL1[x0][y0][compIdx]` and `MvdCpL1[x0][y0][cpIdx][compIdx]` are set to 0. A `mvd_l1_zero_flag` of 0 indicates that the `mvd_coding(x0, y0, 1)` syntax structure is parsed.

[0902] `ph_fpel_mmvd_enabled_flag` equal to 1 specifies that the Merge mode with motion vector difference uses integer sample precision in the strips associated with the PH. `ph_fpel_mmvd_enabled_flag` equal to 0 specifies that the Merge mode with motion vector difference can use fractional sample precision in the strips associated with the PH. When it does not exist, the value of `ph_fpel_mmvd_enabled_flag` is inferred to be 0.

[0903] A value of 1 for ph_disable_bdof_flag indicates that inter-frame bidirectional prediction based on bidirectional optical flow is disabled in the stripe associated with PH. A value of 0 for ph_disable_bdof_flag indicates that inter-frame bidirectional prediction based on bidirectional optical flow can be enabled or disabled in the stripe associated with PH.

[0904] The following applies when ph_disable_bdof_flag is not present:

[0905] – If sps_bdof_enabled_flag equals 1, then the value of ph_disable_bdof_flag is inferred to be equal to 0.

[0906] Otherwise (if sps_bdof_enabled_flag equals 0), the value of ph_disable_bdof_flag is inferred to be equal to 1.

[0907] A value of 1 for ph_disable_dmvr_flag indicates that inter-frame bidirectional prediction based on decoder motion vector refinement is disabled in the slice associated with the PH. A value of 0 for ph_disable_dmvr_flag indicates that inter-frame bidirectional prediction based on decoder motion vector refinement can be enabled or disabled in the slice associated with the PH.

[0908] The following applies when ph_disable_dmvr_flag is not present:

[0909] – If sps_dmvr_enabled_flag equals 1, then the value of ph_disable_dmvr_flag is inferred to be equal to 0.

[0910] Otherwise (sps_dmvr_enabled_flag equals 0), the value of ph_disable_dmvr_flag is inferred to be equal to 1.

[0911] A value of 1 for ph_disable_prof_flag indicates that prediction refinement using optical flow is disabled in the stripe associated with PH. A value of 0 for ph_disable_prof_flag indicates that prediction refinement using optical flow can be enabled or disabled in the stripe associated with PH.

[0912] The following applies when ph_disable_prof_flag is not present:

[0913] – If sps_affine_prof_enabled_flag equals 1, then the value of ph_disable_prof_flag is inferred to be equal to 0.

[0914] Otherwise (sps_affine_prof_enabled_flag equals 0), the value of ph_disable_prof_flag is inferred to be equal to 1.

[0915] ph_qp_delta specifies the Qp to be used for codec blocks in the image until the value of CuQpDeltaVal in the codec unit layer is modified. Y The initial value.

[0916] When qp_delta_info_in_ph_flag equals 1, the Qp of all bands in the image Y Initial value of quantization parameter SliceQp Y The derivation is as follows:

[0917] SliceQp Y = 26 + init_qp_minus26 + ph_qp_delta (89)

[0918] SliceQp Y The value should be in the range of -QpBdOffset to +63 (inclusive).

[0919] `ph_joint_cbcr_sign_flag` specifies whether the co-occurrence residual samples of the two chromaticity components have inverted signs in a transform unit where `tu_joint_cbcr_residual_flag[x0][y0]` equals 1. When `tu_joint_cbcr_residual_flag[x0][y0]` equals 1, `ph_joint_cbcr_sign_flag` equals 0, indicating that the sign of each residual sample of the Cr (or Cb) component is the same as the sign of the co-occurrence Cb (or Cr) residual sample, and `ph_joint_cbcr_sign_flag` equals 1, indicating that the sign of each residual sample of the Cr (or Cb) component is given by the inverted sign of the co-occurrence Cb (or Cr) residual sample.

[0920] A value of 1 for ph_sao_luma_enabled_flag indicates that SAO is enabled for the luminance component in all stripes associated with PH; a value of 0 for ph_sao_luma_enabled_flag indicates that SAO for the luminance component can be disabled for one, several, or all stripes associated with PH. When ph_sao_luma_enabled_flag does not exist, it is inferred to be equal to 0.

[0921] A value of 1 for ph_sao_chroma_enabled_flag indicates that SAO is enabled for the chroma components in all stripes associated with PH; a value of 0 for ph_sao_chroma_enabled_flag indicates that SAO for the chroma components can be disabled for one, several, or all stripes associated with PH. When ph_sao_chroma_enabled_flag does not exist, it is inferred to be equal to 0.

[0922] A value of 0 for `ph_dep_quant_enabled_flag` disables dependency quantization for the current image. A value of 1 for `ph_dep_quant_enabled_flag` enables dependency quantization for the current image. When `ph_dep_quant_enabled_flag` does not exist, it is inferred to be equal to 0.

[0923] A value of 0 for `pic_sign_data_hiding_enabled_flag` disables symbol bit hiding for the current image. A value of 1 for `pic_sign_data_hiding_enabled_flag` enables symbol bit hiding for the current image. When `pic_sign_data_hiding_enabled_flag` does not exist, it is inferred to be equal to 0.

[0924] A value of 1 for `ph_deblocking_filter_override_flag` indicates that the deblocking parameter exists in `PH`. A value of 0 for `ph_deblocking_filter_override_flag` indicates that the deblocking parameter does not exist in `PH`. When it does not exist, the value of `ph_deblocking_filter_override_flag` is inferred to be 0.

[0925] A value of 1 for `ph_deblocking_filter_disabled_flag` indicates that the deblocking filter operation is not applied to the stripes associated with `PH`. A value of 0 for `ph_deblocking_filter_disabled_flag` indicates that the deblocking filter operation is applied to the stripes associated with `PH`. When `ph_deblocking_filter_disabled_flag` does not exist, it is inferred to be equal to `pps_deblocking_filter_disabled_flag`.

[0926] `ph_beta_offset_div2` and `ph_tc_offset_div2` specify the deblocking parameter offsets (divided by 2) applied to the luminance components of the strip associated with PH for the β and tC. The values ​​of `ph_beta_offset_div2` and `ph_tc_offset_div2` should be in the range of -12 to 12 (inclusive). When not present, the values ​​of `ph_beta_offset_div2` and `ph_tc_offset_div2` are inferred to be equal to `pps_beta_offset_div2` and `pps_tc_offset_div2`, respectively.

[0927] `ph_cb_beta_offset_div2` and `ph_cb_tc_offset_div2` specify the deblocking parameter offsets (divided by 2) applied to the Cb components of the strip associated with `PH`. The values ​​of `ph_cb_beta_offset_div2` and `ph_cb_tc_offset_div2` should be in the range of -12 to 12 (inclusive). When not present, the values ​​of `ph_cb_beta_offset_div2` and `ph_cb_tc_offset_div2` are inferred to be equal to `pps_cb_beta_offset_div2` and `pps_cb_tc_offset_div2`, respectively.

[0928] `ph_cr_beta_offset_div2` and `ph_cr_tc_offset_div2` specify the deblocking parameter offsets (divided by 2) applied to the β and tC of the Cr component in the strip associated with PH. The values ​​of `ph_cr_beta_offset_div2` and `ph_cr_tc_offset_div2` should both be in the range of -12 to 12 (inclusive). When not present, the values ​​of `ph_cr_beta_offset_div2` and `ph_cr_tc_offset_div2` are inferred to be equal to `pps_cr_beta_offset_div2` and `pps_cr_tc_offset_div2`, respectively.

[0929] `ph_extension_length` specifies the length of the PH extension data in bytes, excluding the bits used for its own signaling notification `ph_extension_length`. The value of `ph_extension_length` should be in the range of 0 to 256 (inclusive). If it does not exist, the value of `ph_extension_length` is inferred to be equal to 0.

[0930] `ph_extension_data_byte` can have any value. Decoders conforming to this specification for this version should ignore the value of `ph_extension_data_byte`. Its value does not affect the grade specified in this version of the specification for which the decoder conforms.

[0931] 3.9. SH Syntax and Semantics

[0932] In the latest VVC draft text, the SH syntax and semantics are as follows:

[0933]

[0934]

[0935]

[0936] The variable CuQpDeltaVal, which specifies the difference between the luminance quantization parameter and its prediction for the codec unit containing cu_qp_delta_abs, is set to 0. This specifies the Qp′ to be used in determining the codec unit containing cu_chroma_qp_offset_flag. Cb Qp′ Cr and Qp′ CbCr The variable CuQpOffset is used to quantize the corresponding value of the parameter. Cb CuQpOffset Crand CuQpOffset CbCr All of them were set to 0.

[0937] A picture_header_in_slice_header_flag value of 1 indicates that the PH syntax structure exists in the slice header. A picture_header_in_slice_header_flag value of 0 indicates that the PH syntax structure does not exist in the slice header.

[0938] The requirement for bitstream consistency is that the value of picture_header_in_slice_header_flag should be the same in all codec slices in CLVS.

[0939] When the picture_header_in_slice_header_flag of the codec slice is equal to 1, the requirement for bitstream consistency is that there should be no VCL NAL unit in CLVS with nal_unit_type equal to PH_NUT.

[0940] When picture_header_in_slice_header_flag equals 0, all codec stripes in the current picture should have picture_header_in_slice_header_flag equal to 0, and the current PU should have PH NAL units.

[0941] `slice_subpic_id` specifies the subpick ID of the subpick containing the slice. If `slice_subpic_id` exists, the value of the variable `CurrSubpicIdx` is deduced to make `SubpicIdVal[CurrSubpicIdx]` equal to `slice_subpic_id`. Otherwise (if `slice_subpic_id` does not exist), `CurrSubpicIdx` is deduced to be equal to 0. The length of `slice_subpic_id` is `sps_subpic_id_len_minus1 + 1 bits`.

[0942] `slice_address` specifies the address of the slice. When it does not exist, the value of `slice_address` is inferred to be 0. When `rect_slice_flag` is equal to 1 and `NumSlicesInSubpic[CurSubpicIdx]` is equal to 1, the value of `slice_address` is inferred to be 0.

[0943] If rect_slice_flag equals 0, then the following applies:

[0944] The strip address is the raster scan chip index.

[0945] The length of slice_address is Ceil(Log2(NumTilesInPic)) bits.

[0946] The value of slice_address should be in the range of 0 to NumTilesInPic - 1 (inclusive).

[0947] Otherwise (rect_slice_flag equals 1), the following applies:

[0948] The stripe address is the sub-image level stripe index of the stripe.

[0949] The length of slice_address is Ceil( Log2( NumSlicesInSubpic[ CurrSubpicIdx ] )) bits.

[0950] The value of slice_address should be in the range of 0 to NumSlicesInSubpic[CurrSubpicIdx] - 1 (inclusive).

[0951] The requirement for bitstream consistency applies to the following constraints:

[0952] If rect_slice_flag is equal to 0 or subpic_info_present_flag is equal to 0, then the value of slice_address should not be equal to the value of slice_address of any other codec strip NAL unit of the same codec image.

[0953] Otherwise, a pair of slice_subpic_id and slice_address values ​​should not be equal to a pair of slice_subpic_id and slice_address values ​​for any other codec strip NAL unit of the same codec image.

[0954] The shape of the image stripes should be such that each CTU, when decoded, should have its entire left and entire top boundaries consisting of the image boundaries or the boundaries of (multiple) previously decoded CTUs.

[0955] sh_extra_bit[i] can be equal to 1 or 0. Decoders conforming to this specification for this version should ignore the value of sh_extra_bit[i]. Its value does not affect the level specified in this version of the decoder conforming to the specification.

[0956] The increment of 1 in num_tiles_in_slice_minus1 (if present) specifies the number of slices in the strip. The value of num_tiles_in_slice_minus1 should be in the range of 0 to NumTilesInPic - 1 (inclusive).

[0957] The variable NumCtusInCurrSlice, which specifies the number of CTUs in the current slice, and the list CtbAddrInCurrSlice[i] (where i ranges from 0 to NumCtusInCurrSlice-1, inclusive) of the image raster scan addresses of the i-th CTU within the slice, are derived as follows:

[0958] if( rect_slice_flag ) { picLevelSliceIdx = slice_address; for( j = 0; j < CurrSubpicIdx; j++ ) picLevelSliceIdx += NumSlicesInSubpic[ j ]; NumCtusInCurrSlice = NumCtusInSlice[ picLevelSliceIdx ]; for( i = 0; i < NumCtusInCurrSlice; i++ ) CtbAddrInCurrSlice[ i ] = CtbAddrInSlice[ picLevelSliceIdx ][ i ];} else { NumCtusInCurrSlice = 0; for( tileIdx = slice_address; tileIdx <= slice_address + num_tiles_in_slice_minus1; tileIdx++ ) { tileX = tileIdx % NumTileColumns; tileY = tileIdx / NumTileColumns; for( ctbY = tileRowBd[ tileY ]; ctbY < tileRowBd[ tileY + 1 ]; ctbY++ ) { for( ctbX = tileColBd[ tileX ]; ctbX < tileColBd[ tileX + 1 ]; ctbX++ ) { CtbAddrInCurrSlice[ NumCtusInCurrSlice ] = ctbY * PicWidthInCtb + ctbX; NumCtusInCurrSlice++;}}}} PicWidthInCtb + ctbX; NumCtusInCurrSlice++;}}}

[0959] The variables SubpicLeftBoundaryPos, SubpicTopBoundaryPos, SubpicRightBoundaryPos, and SubpicBotBoundaryPos are derived as follows:

[0960] if( subpic_treated_as_pic_flag[ CurrSubpicIdx ] ) {SubpicLeftBoundaryPos = subpic_ctu_top_left_x[ CurrSubpicIdx ] CtbSizeYSubpicRightBoundaryPos = Min( pic_width_max_in_luma_samples - 1, ( subpic_ctu_top_left_x[ CurrSubpicIdx ] + subpic_width_minus1[ CurrSubpicIdx ] + 1 ) CtbSizeY - 1) SubpicTopBoundaryPos = subpic_ctu_top_left_y[CurrSubpicIdx] CtbSizeY (118) SubpicBotBoundaryPos = Min( pic_height_max_in_luma_samples- 1, ( subpic_ctu_top_left_y[ CurrSubpicIdx ] + subpic_height_minus1[CurrSubpicIdx ] + 1 ) CtbSizeY - 1 )}

[0961] slice_type specifies the encoding / decoding type of the slice according to Table 9.

[0962] Table 9 – Name association with slice_type

[0963]

[0964] When it does not exist, the value of slice_type is inferred to be equal to 2.

[0965] When ph_intra_slice_allowed_flag equals 0, the value of slice_type should be 0 or 1. When nal_unit_type is within the range of IDR_W_RADL to CRA_NUT (inclusive of IDR_W_RADL and CRA_NUT), and vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]] equals 1, slice_type should be 2.

[0966] The variables MinQtLog2SizeY, MinQtLog2SizeC, MinQtSizeY, MinQtSizeC, MaxBtSizeY, MaxBtSizeC, MinBtSizeY, MaxTtSizeY, MaxTtSizeC, MinTtSizeY, MaxMttDepthY, and MaxMttDepthC are derived as follows:

[0967] If slice_type is equal to 2 (I), then the following applies:

[0968] MinQtLog2SizeY = MinCbLog2SizeY + ph_log2_diff_min_qt_min_cb_intra_slice_luma (119)

[0969] MinQtLog2SizeC = MinCbLog2SizeY + ph_log2_diff_min_qt_min_cb_intra_slice_chroma (120)

[0970] MaxBtSizeY = 1 << ( MinQtLog2SizeY + ph_log2_diff_max_bt_min_qt_intra_slice_luma ) (121)

[0971] MaxBtSizeC = 1 << ( MinQtLog2SizeC + ph_log2_diff_max_bt_min_qt_intra_slice_chroma ) (122)

[0972] MaxTtSizeY = 1 << ( MinQtLog2SizeY + ph_log2_diff_max_tt_min_qt_intra_slice_luma ) (123)

[0973] MaxTtSizeC = 1 << ( MinQtLog2SizeC + ph_log2_diff_max_tt_min_qt_intra_slice_chroma ) (124)

[0974] MaxMttDepthY = ph_max_mtt_hierarchy_depth_intra_slice_luma (125)

[0975] MaxMttDepthC = ph_max_mtt_hierarchy_depth_intra_slice_chroma(126)

[0976] CuQpDeltaSubdiv = ph_cu_qp_delta_subdiv_intra_slice (127)

[0977] CuChromaQpOffsetSubdiv = ph_cu_chroma_qp_offset_subdiv_intra_slice(128)

[0978] Otherwise (slice_type equals 0 (B) or 1 (P)), the following applies:

[0979] MinQtLog2SizeY = MinCbLog2SizeY + ph_log2_diff_min_qt_min_cb_inter_slice (129)

[0980] MinQtLog2SizeC = MinCbLog2SizeY + ph_log2_diff_min_qt_min_cb_inter_slice (130)

[0981] MaxBtSizeY = 1 << ( MinQtLog2SizeY + ph_log2_diff_max_bt_min_qt_inter_slice) (131)

[0982] MaxBtSizeC = 1 << ( MinQtLog2SizeC + ph_log2_diff_max_bt_min_qt_inter_slice) (132)

[0983] MaxTtSizeY = 1 << ( MinQtLog2SizeY + ph_log2_diff_max_tt_min_qt_inter_slice) (133)

[0984] MaxTtSizeC = 1 << ( MinQtLog2SizeC + ph_log2_diff_max_tt_min_qt_inter_slice) (134)

[0985] MaxMttDepthY = ph_max_mtt_hierarchy_depth_inter_slice (135)

[0986] MaxMttDepthC = ph_max_mtt_hierarchy_depth_inter_slice (136)

[0987] CuQpDeltaSubdiv = ph_cu_qp_delta_subdiv_inter_slice (137)

[0988] CuChromaQpOffsetSubdiv = ph_cu_chroma_qp_offset_subdiv_inter_slice(138)

[0989] The following applies:

[0990] MinQtSizeY = 1 << MinQtLog2SizeY (139)

[0991] MinQtSizeC = 1 << MinQtLog2SizeC (140)

[0992] MinBtSizeY = 1 << MinCbLog2SizeY (141)

[0993] MinTtSizeY = 1 << MinCbLog2SizeY (142)

[0994] A slice_alf_enabled_flag value of 1 indicates that the adaptive loop filter is enabled and can be applied to the Y, Cb, or Cr color components in the slice. A slice_alf_enabled_flag value of 0 indicates that the adaptive loop filter is disabled for all color components in the slice. When it does not exist, the value of slice_alf_enabled_flag is inferred to be equal to ph_alf_enabled_flag.

[0995] `slice_num_alf_aps_ids_luma` specifies the number of ALF APS referenced by the slice. When `slice_alf_enabled_flag` is equal to 1 and `slice_num_alf_aps_ids_luma` does not exist, the value of `slice_num_alf_aps_ids_luma` is inferred to be equal to the value of `ph_num_alf_aps_ids_luma`.

[0996] `slice_alf_aps_id_luma[i]` specifies the `adaptation_parameter_set_id` of the i-th ALF APS referenced by the luminance component of the slice. The `TemporalId` of the APS NAL cell, which has `aps_params_type` equal to `ALF_APS` and `adaptation_parameter_set_id` equal to `slice_alf_aps_id_luma[i]`, should be less than or equal to the `TemporalId` of the NAL cell in the codec slice. When `slice_alf_enabled_flag` is equal to 1 and `slice_alf_aps_id_luma[i]` does not exist, the value of `slice_alf_aps_id_luma[i]` is inferred to be equal to the value of `ph_alf_aps_id_luma[i]`.

[0997] The value of alf_luma_filter_signal_flag of the APS NAL cell that has aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to slice_alf_aps_id_luma[i] should be equal to 1.

[0998] A slice_alf_chroma_idc equal to 0 indicates that the adaptive loop filter is not applied to the Cb and Cr color components. A slice_alf_chroma_idc equal to 1 indicates that the adaptive loop filter is applied to the Cb color component. A slice_alf_chroma_idc equal to 2 indicates that the adaptive loop filter is applied to the Cr color component. A slice_alf_chroma_idc equal to 3 indicates that the adaptive loop filter is applied to both the Cb and Cr color components. When slice_alf_chroma_idc does not exist, it is inferred to be equal to ph_alf_chroma_idc.

[0999] `slice_alf_aps_id_chroma` specifies the `adaptation_parameter_set_id` of the ALF APS referenced for the chroma components of the slice. The `TemporalId` of the APS NAL unit, which has `aps_params_type` equal to `ALF_APS` and `adaptation_parameter_set_id` equal to `slice_alf_aps_id_chroma`, should be less than or equal to the `TemporalId` of the codec slice NAL unit. When `slice_alf_enabled_flag` is equal to 1 and `slice_alf_aps_id_chroma` does not exist, the value of `slice_alf_aps_id_chroma` is inferred to be equal to the value of `ph_alf_aps_id_chroma`.

[1000] The value of alf_chroma_filter_signal_flag for an APS NAL cell that has aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to slice_alf_aps_id_chroma should be equal to 1.

[1001] A slice_cc_alf_cb_enabled_flag value of 0 indicates that the cross-component filter is not applied to the Cb color component. A slice_cc_alf_cb_enabled_flag value of 1 indicates that the cross-component filter is enabled and can be applied to the Cb color component. When slice_cc_alf_cb_enabled_flag does not exist, it is inferred to be equal to ph_cc_alf_cb_enabled_flag.

[1002] slice_cc_alf_cb_aps_id specifies the adaptation_parameter_set_id of the Cb color component reference for the strip.

[1003] The TemporalId of an APS NAL unit having an aps_params_type equal to ALF_APS and an adaptation_parameter_set_id equal to slice_cc_alf_cb_aps_id should be less than or equal to the TemporalId of the codec slice NAL unit. When slice_cc_alf_cb_enabled_flag equals 1 and slice_cc_alf_cb_aps_id does not exist, the value of slice_cc_alf_cb_aps_id is inferred to be equal to the value of ph_cc_alf_cb_aps_id.

[1004] The value of alf_cc_cb_filter_signal_flag for an APS NAL cell that has aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to slice_cc_alf_cb_aps_id should be equal to 1.

[1005] A slice_cc_alf_cr_enabled_flag value of 0 indicates that the cross-component filter is not applied to the Cr color component. A slice_cc_alf_cb_enabled_flag value of 1 indicates that the cross-component adaptive loop filter is enabled and can be applied to the Cr color component. When slice_cc_alf_cr_enabled_flag does not exist, it is inferred to be equal to ph_cc_alf_cr_enabled_flag.

[1006] `slice_cc_alf_cr_aps_id` specifies the `adaptation_parameter_set_id` of the Cr color component reference for the slice. The TemporalId of the APS NAL unit, which has `aps_params_type` equal to `ALF_APS` and `adaptation_parameter_set_id` equal to `slice_cc_alf_cr_aps_id`, should be less than or equal to the TemporalId of the codec slice NAL unit. When `slice_cc_alf_cr_enabled_flag` is equal to 1 and `slice_cc_alf_cr_aps_id` does not exist, the value of `slice_cc_alf_cr_aps_id` is inferred to be equal to the value of `ph_cc_alf_cr_aps_id`.

[1007] The value of alf_cc_cr_filter_signal_flag for an APS NAL cell that has aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to slice_cc_alf_cr_aps_id should be equal to 1.

[1008] When separate_colour_plane_flag equals 1, colour_plane_id identifies the color plane associated with the current stripe. The value of colour_plane_id should be in the range of 0 to 2 (inclusive). colour_plane_id values ​​0, 1, and 2 correspond to the Y, Cb, and Cr planes, respectively. The value of colour_plane_id 3 is reserved for future use by ITU-T | ISO / IEC.

[1009] Note 1 – There is no dependency between the decoding processes of different color planes of the image.

[1010] A value of 1 for num_ref_idx_active_override_flag indicates that the syntax element num_ref_idx_active_minus1[0] exists for both P and B stripes, and that the syntax element num_ref_idx_active_minus1[1] exists for B stripes. A value of 0 for num_ref_idx_active_override_flag indicates that neither syntax element num_ref_idx_active_minus1[0] nor num_ref_idx_active_minus1[1] exists. When neither exists, the value of num_ref_idx_active_override_flag is inferred to be 1.

[1011] num_ref_idx_active_minus1[i] is used to derive the variable NumRefIdxActive[i], as specified in Equation 143. The value of num_ref_idx_active_minus1[i] should be in the range of 0 to 14 (inclusive).

[1012] For i equal to 0 or 1, when the current stripe is a B stripe, num_ref_idx_active_override_flag equals 1, and num_ref_idx_active_minus1[i] does not exist, num_ref_idx_active_minus1[i] is inferred to be equal to 0.

[1013] When the current stripe is a P stripe, num_ref_idx_active_override_flag is equal to 1, and num_ref_idx_active_minus1[0] does not exist, num_ref_idx_active_minus1[0] is inferred to be equal to 0.

[1014] The variable NumRefIdxActive[i] is derived as follows:

[1015] for( i = 0; i < 2; i++ ) { if( slice_type == B | | ( slice_type= = P && i == 0 ) ) { if( num_ref_idx_active_override_flag )NumRefIdxActive[ i ] = num_ref_idx_active_minus1[ i ] + 1(143) else { if(num_ref_entries[ i ][ RplsIdx[ i ] ] >= num_ref_idx_default_active_minus1[i ] + 1 ) NumRefIdxActive[ i ] = num_ref_idx_default_active_minus1[ i ] + 1else NumRefIdxActive[ i ] = num_ref_entries[ i ][ RplsIdx[ i ] ]}} else / slice_type = = I | | ( slice_type = = P && i = = 1 ) / NumRefIdxActive[i] = 0}

[1016] The value of NumRefIdxActive[i] - 1 specifies the maximum reference index of the reference image list i that can be used to decode the strip. When the value of NumRefIdxActive[i] is equal to 0, no reference index of the reference image list i can be used to decode the strip.

[1017] When the current stripe is a P stripe, the value of NumRefIdxActive[0] should be greater than 0.

[1018] When the current stripe is a B stripe, both NumRefIdxActive[0] and NumRefIdxActive[1] should be greater than 0.

[1019] `cabac_init_flag` specifies the method used to determine the initialization table during the initialization of context variables. If `cabac_init_flag` does not exist, it is assumed to be equal to 0.

[1020] A slice_collocated_from_l0_flag value of 1 indicates that the co-located image used for temporal motion vector prediction is derived from reference image list 0. A slice_collocated_from_l0_flag value of 0 indicates that the co-located image used for temporal motion vector prediction is derived from reference image list 1.

[1021] When slice_type equals B or P, ph_temporal_mvp_enabled_flag equals 1, and slice_collocated_from_l0_flag does not exist, the following applies:

[1022] If rpl_info_in_ph_flag is equal to 1, then slice_collocated_from_l0_flag is inferred to be equal to ph_collocated_from_l0_flag.

[1023] Otherwise (rpl_info_in_ph_flag equals 0 and slice_type equals P), the value of slice_collocated_from_l0_flag is inferred to be equal to 1.

[1024] The slice_collocated_ref_idx specifies the reference index of the co-located image used for temporal motion vector prediction.

[1025] When slice_type equals P or when slice_type equals B and slice_collocated_from_l0_flag equals 1, slice_collocated_ref_idx refers to the entry in reference image list 0, and the value of slice_collocated_ref_idx should be in the range of 0 to NumRefIdxActive[0] - 1 (inclusive).

[1026] When slice_type equals B and slice_collocated_from_l0_flag equals 0, slice_collocated_ref_idx refers to the entry in reference image list 1, and the value of slice_collocated_ref_idx should be in the range of 0 to NumRefIdxActive[1]-1 (inclusive of 0 and NumRefIdxActive[1]-1).

[1027] The following applies when slice_collocated_ref_idx does not exist:

[1028] If rpl_info_in_ph_flag equals 1, then the value of slice_collocated_ref_idx is inferred to be equal to ph_collocated_ref_idx.

[1029] Otherwise (rpl_info_in_ph_flag equals 0), the value of slice_collocated_ref_idx is inferred to be equal to 0.

[1030] The requirement for bitstream consistency is that the image referenced by slice_collocated_ref_idx should be identical across all slices of the encoded / decoded image.

[1031] The requirement for bitstream consistency is that the values ​​of pic_width_in_luma_samples and pic_height_in_luma_samples of the reference image referenced by slice_collocated_ref_idx should be equal to the values ​​of pic_width_in_luma_samples and pic_height_in_luma_samples of the current image, respectively, and RprConstraintsActive[ slice_collocated_from_l0_flag ? 0 : 1 ][ slice_collocated_ref_idx ] should be equal to 0.

[1032] `slice_qp_delta` specifies the Qp to be used for codec blocks in a slice until the value of `CuQpDeltaVal` in the codec unit layer is modified. Y The initial value.

[1033] When qp_delta_info_in_ph_flag equals 0, the Qp of the stripe Y Initial value of quantization parameter SliceQpY The derivation is as follows:

[1034] SliceQp Y = 26 + init_qp_minus26 + slice_qp_delta (144)

[1035] SliceQp Y The value should be in the range of -QpBdOffset to +63 (inclusive).

[1036] When any one of the following conditions is true:

[1037] The values ​​of wp_info_in_ph_flag, pps_weighted_pred_flag, and slice_type are all equal to 1.

[1038] The values ​​of wp_info_in_ph_flag, pps_weighted_bipred_flag, and slice_type are all equal to 1 and B, respectively.

[1039] The following applies:

[1040] The value of NumRefIdxActive[0] should be less than or equal to the value of NumWeightsL0.

[1041] For each reference image index RefPicList[0][i] (i is in the range of 0 to NumRefIdxActive[0]-1 (inclusive), the luminance weight, Cb weight and Cr weight applied to the reference image index are LumaWeightL0[i], ChromaWeightL0[0][i] and ChromaWeightL0[1][i], respectively.

[1042] When wp_info_in_ph_flag equals 1, pps_weighted_bipred_flag equals 1, and slice_type equals B, the following applies:

[1043] The value of NumRefIdxActive[1] should be less than or equal to the value of NumWeightsL1.

[1044] For each reference image index RefPicList[1][i] (i is in the range of 0 to NumRefIdxActive[1]-1 (inclusive), the luminance weight, Cb weight and Cr weight applied to the reference image index are LumaWeightL1[i], ChromaWeightL1[0][i] and ChromaWeightL1[1][i], respectively.

[1045] slice_cb_qp_offset specifies the offset when determining Qp′ Cb The difference between the quantization parameter value and the value of pps_cb_qp_offset should be added when quantizing the parameter. The value of slice_cb_qp_offset should be in the range of -12 to +12 (inclusive). If slice_cb_qp_offset does not exist, it is inferred to be equal to 0. The value of pps_cb_qp_offset + slice_cb_qp_offset should be in the range of -12 to +12 (inclusive).

[1046] slice_cr_qp_offset specifies the offset when determining Qp′ Cr When quantizing the parameter value, add the difference between the values ​​of `pps_cr_qp_offset` and `slice_cr_qp_offset`. The value of `slice_cr_qp_offset` should be in the range of -12 to +12 (inclusive). If `slice_cr_qp_offset` does not exist, it is inferred to be equal to 0. The value of `pps_cr_qp_offset + slice_cr_qp_offset` should be in the range of -12 to +12 (inclusive).

[1047] slice_joint_cbcr_qp_offset specifies the offset when determining Qp′ CbCr The value to be added is the difference between the value of `pps_joint_cbcr_qp_offset_value`. The value of `slice_joint_cbcr_qp_offset` should be in the range of -12 to +12 (inclusive). When `slice_joint_cbcr_qp_offset` does not exist, it is inferred to be equal to 0. The value of `pps_joint_cbcr_qp_offset_value + slice_joint_cbcr_qp_offset` should be in the range of -12 to +12 (inclusive).

[1048] A value of 1 for `cu_chroma_qp_offset_enabled_flag` indicates that `cu_chroma_qp_offset_flag` can exist in the transform unit and palette codec syntax. A value of 0 for `cu_chroma_qp_offset_enabled_flag` indicates that `cu_chroma_qp_offset_flag` does not exist in either the transform unit or the palette codec syntax. When it does not exist, the value of `cu_chroma_qp_offset_enabled_flag` is inferred to be 0.

[1049] A slice_sao_luma_flag value of 1 indicates that SAO is enabled for the luminance component in the current slice; a slice_sao_luma_flag value of 0 indicates that SAO is disabled for the luminance component in the current slice. When slice_sao_luma_flag does not exist, it is inferred to be equal to ph_sao_luma_enabled_flag.

[1050] A slice_sao_chroma_flag value of 1 indicates that SAO is enabled for the chroma components in the current slice; a slice_sao_chroma_flag value of 0 indicates that SAO is disabled for the chroma components in the current slice. When slice_sao_chroma_flag does not exist, it is inferred to be equal to ph_sao_chroma_enabled_flag.

[1051] A slice_deblocking_filter_override_flag value of 1 indicates that the deblocking parameter exists in the slice header. A slice_deblocking_filter_override_flag value of 0 indicates that the deblocking parameter does not exist in the slice header. When it does not exist, the value of slice_deblocking_filter_override_flag is inferred to be equal to ph_deblocking_filter_override_flag.

[1052] A slice_deblocking_filter_disabled_flag value of 1 indicates that the deblocking filter operation is not applied to the current slice. A slice_deblocking_filter_disabled_flag value of 0 indicates that the deblocking filter operation is applied to the current slice. When slice_deblocking_filter_disabled_flag does not exist, it is inferred to be equal to ph_deblocking_filter_disabled_flag.

[1053] `slice_beta_offset_div2` and `slice_tc_offset_div2` specify the deblocking parameter offsets (divided by 2) of β and tC applied to the luminance components of the current slice. The values ​​of `slice_beta_offset_div2` and `slice_tc_offset_div2` should both be in the range of -12 to 12 (inclusive). When not present, the values ​​of `slice_beta_offset_div2` and `slice_tc_offset_div2` are inferred to be equal to `ph_beta_offset_div2` and `ph_tc_offset_div2`, respectively.

[1054] `slice_cb_beta_offset_div2` and `slice_cb_tc_offset_div2` specify the deblocking parameter offsets (divided by 2) of β and tC applied to the Cb components of the current slice. The values ​​of `slice_cb_beta_offset_div2` and `slice_cb_tc_offset_div2` should both be in the range of -12 to 12 (inclusive). When not present, the values ​​of `slice_cb_beta_offset_div2` and `slice_cb_tc_offset_div2` are inferred to be equal to `ph_cb_beta_offset_div2` and `ph_cb_tc_offset_div2`, respectively.

[1055] `slice_cb_beta_offset_div2` and `slice_cb_tc_offset_div2` specify the deblocking parameter offsets (divided by 2) of β and tC applied to the Cr component of the current slice. The values ​​of `slice_cr_beta_offset_div2` and `slice_cr_tc_offset_div2` should both be in the range of -12 to 12 (inclusive). When not present, the values ​​of `slice_cr_beta_offset_div2` and `slice_cr_tc_offset_div2` are inferred to be equal to `ph_cr_beta_offset_div2` and `ph_cr_tc_offset_div2`, respectively.

[1056] A slice_ts_residual_coding_disabled_flag value of 1 specifies that the residual_coding() syntax structure is used to parse the residual samples of the transform skipped blocks of the current slice. A slice_ts_residual_coding_disabled_flag value of 0 specifies that the residual_ts_coding() syntax structure is used to parse the residual samples of the transform skipped blocks of the current slice. When slice_ts_residual_coding_disabled_flag does not exist, it is inferred to be equal to 0.

[1057] A slice_lmcs_enabled_flag value of 1 indicates that luma mapping and chroma scaling are enabled for the current slice. A slice_lmcs_enabled_flag value of 0 indicates that luma mapping and chroma scaling are not enabled for the current slice. When slice_lmcs_enabled_flag does not exist, it is inferred to be equal to 0.

[1058] A slice_scaling_list_present_flag value of 1 indicates that the scaling list data used for the current slice is inferred from the scaling list data contained in a reference scaling list APS where aps_params_type equals SCALING_APS and adaptation_parameter_set_id equals ph_scaling_list_aps_id. A slice_scaling_list_present_flag value of 0 indicates that the scaling list data used for the current image is the default scaling list data inferred as specified in Clause 7.4.3.21. When it does not exist, the value of slice_scaling_list_present_flag is inferred to be 0.

[1059] The variable NumEntryPoints, which specifies the number of entry points in the current strip, is derived as follows:

[1060] NumEntryPoints = 0for( i = 1; i < NumCtusInCurrSlice; i++ ) {ctbAddrX = CtbAddrInCurrSlice[ i ] % PicWidthInCtbsY ctbAddrY =CtbAddrInCurrSlice[ i ] / PicWidthInCtbsY (145) prevCtbAddrX =CtbAddrInCurrSlice[ i - 1 ] % PicWidthInCtbsY prevCtbAddrY =CtbAddrInCurrSlice[ i - 1 ] / PicWidthInCtbsY if( CtbToTileRowBd[ ctbAddrY ]!= CtbToTileRowBd[ prevCtbAddrY ] | | CtbToTileColBd[ctbAddrX] !=CtbToTileColBd[ prevCtbAddrX ] | | ( ctbAddrY != prevCtbAddrY && sps_wpp_entry_point_offsets_present_flag ) ) NumEntryPoints++}

[1061] Increasing 1 to offset_len_minus1 specifies the length of the entry_point_offset_minus1[i] syntax element in bits. The value of offset_len_minus1 should be in the range of 0 to 31 (inclusive).

[1062] `entry_point_offset_minus1[i]` incremented by 1 specifies the offset of the i-th entry point in bytes, and is represented by `offset_len_minus1` incremented by 1 bit. The stripe data following the stripe header consists of subsets of `NumEntryPoints + 1`, where the subset index values ​​range from 0 to `NumEntryPoints` (inclusive). The first byte of the stripe data is treated as byte 0. When present, emulation in the stripe data portion of the NAL unit of the codec stripe prevents bytes from being counted as part of the stripe data for subset identification purposes. Subset 0 consists of bytes 0 to entry_point_offset_minus1[0] (inclusive) of the encoded / decoded stripe data, and subset k (k is in the range of 1 to NumEntryPoints - 1 (inclusive)) consists of bytes firstByte[k] to lastByte[k] (inclusive) of the encoded / decoded stripe data, where firstByte[k] and lastByte[k] are defined as:

[1063] (146)

[1064] lastByte[ k ] = firstByte[ k ] + entry_point_offset_minus1[ k ](147)

[1065] The last subset (with a subset index equal to NumEntryPoints) consists of the remaining bytes of the encoded and decoded stripe data.

[1066] When sps_entropy_coding_sync_enabled_flag equals 0 and the stripe contains one or more complete slices, each subset should consist of all the codec bits of all CTUs within the same slice in the stripe, and the number of subsets (i.e., the value of NumEntryPoints + 1) should be equal to the number of slices in the stripe.

[1067] When `sps_entropy_coding_sync_enabled_flag` equals 0 and the stripe contains a subset of CTU rows from a single slice, `NumEntryPoints` should be 0, and the number of subsets should be 1. The subset should consist of all the codec bits from all CTUs in the stripe.

[1068] When sps_entropy_coding_sync_enabled_flag equals 1, each subset k (k is in the range of 0 to NumEntryPoints (inclusive)) should consist of all the code-decode bits of all CTUs in the CTU line within the slice, and the number of subsets (i.e., the value of NumEntryPoints + 1) should be equal to the total number of slice-specific CTU lines in the stripe.

[1069] `slice_header_extension_length` specifies the length of the slice header extension data in bytes, excluding the bits used for its own signaling notification `slice_header_extension_length`. The value of `slice_header_extension_length` should be in the range of 0 to 256 (inclusive). If it does not exist, the value of `slice_header_extension_length` is inferred to be equal to 0.

[1070] The slice_header_extension_data_byte[i] can have any value. Decoders conforming to this specification for this version should ignore the values ​​of all slice_header_extension_data_byte[i] syntax elements. Its value does not affect the grade specified in this version of the decoder conforming to the specification.

[1071] 3.10. Reference Image List Syntax

[1072] In the latest VVC draft text, the syntax structure ref_pic_lists() and its semantics are as follows:

[1073]

[1074] The ref_pic_lists() syntax structure can exist in the PH syntax structure or in the strip header.

[1075] `rpl_sps_flag[i]` equal to 1 specifies the list of reference images `i` in `ref_pic_lists()`, which is derived based on one of the syntax structures of `ref_pic_list_struct(listIdx, rplsIdx)` in SPS where `listIdx` equals `i`. `rpl_sps_flag[i]` equal to 0 specifies the list of reference images `i` in the image, which is derived based on the syntax structure of `ref_pic_list_struct(listIdx, rplsIdx)` directly included in `ref_pic_lists()` where `listIdx` equals `i`.

[1076] The following applies when rpl_sps_flag[i] does not exist:

[1077] If num_ref_pic_lists_in_sps[i] equals 0, then the value of rpl_sps_flag[i] is inferred to be equal to 0.

[1078] Otherwise (num_ref_pic_lists_in_sps[i] is greater than 0), when rpl1_idx_present_flag is equal to 0 and i is equal to 1, the value of rpl_sps_flag[1] is inferred to be equal to rpl_sps_flag[0].

[1079] `rpl_idx[i]` specifies the index of the `ref_pic_list_struct(listIdx, rplsIdx)` syntax structure in the list of reference picture lists `i` included in the SPS, where `listIdx` equals `i`. The `rpl_idx[i]` syntax element is represented by Ceil(Log2(num_ref_pic_lists_in_sps[i])) bits. If it does not exist, the value of `rpl_idx[i]` is inferred to be 0. The value of `rpl_idx[i]` should be in the range of 0 to num_ref_pic_lists_in_sps[i] - 1 (inclusive). When rpl_sps_flag[i] equals 1 and num_ref_pic_lists_in_sps[i] equals 1, the value of rpl_idx[i] is inferred to be equal to 0. When rpl_sps_flag[i] equals 1 and rpl1_idx_present_flag equals 0, the value of rpl_idx[1] is inferred to be equal to rpl_idx[0].

[1080] The variable RplsIdx[i] is derived as follows:

[1081] RplsIdx[ i ] = rpl_sps_flag[ i ] ? rpl_idx[ i ] : num_ref_pic_lists_in_sps[ i ] (149)

[1082] `poc_lsb_lt[i][j]` specifies the image order count modulo `MaxPicOrderCntLsb` for the j-th LTRP entry in the i-th reference image list within the `ref_pic_lists()` syntax structure. The length of the `poc_lsb_lt[i][j]` syntax element is `log2_max_pic_order_cnt_lsb_minus4 + 4 bits`.

[1083] The variable PocLsbLt[i][j] is derived as follows:

[1084] PocLsbLt[ i ][ j ] = ltrp_in_header_flag[ i ][ RplsIdx[ i ] ] ? (150)poc_lsb_lt[ i ][ j ] : rpls_poc_lsb_lt[ listIdx ][ RplsIdx[ i ] ][ j ]

[1085] A value of 1 for delta_poc_msb_present_flag[i][j] indicates the existence of delta_poc_msb_cycle_lt[i][j]. A value of 0 for delta_poc_msb_present_flag[i][j] indicates the non-existence of delta_poc_msb_cycle_lt[i][j].

[1086] Let `prevTid0Pic` be the previous image in the decoding order, whose `nuh_layer_id` is the same as the stripe or image header of the reference `ref_pic_lists()` syntax structure, whose `TemporalId` is equal to 0, and which is not a RASL or RADL image. Let `setOfPrevPocVals` be a set consisting of the following:

[1087] prevTid0Pic's PicOrderCntVal

[1088] The PicOrderCntVal of each image whose nuh_layer_id is the same as the current image and is referenced by an entry in RefPicList[0] or RefPicList[1] of prevTid0Pic.

[1089] The PicOrderCntVal of each image that follows prevTid0Pic in the decoding order, has the same nuh_layer_id as the current image, and is in the decoding order preceding the current image.

[1090] When there is more than one value in setOfPrevPocVals modulo MaxPicOrderCntLsb equal to PocLsbLt[i][j], the value of delta_poc_msb_present_flag[i][j] should be equal to 1.

[1091] delta_poc_msb_cycle_lt[i][j] specifies the value of the variable FullPocLt[i][j] as follows:

[1092] if( j = = 0 ) deltaPocMsbCycleLt[ i ][ j ] = delta_poc_msb_cycle_lt[ i ][ j ]else (151) deltaPocMsbCycleLt[ i ][ j ] = delta_poc_msb_cycle_lt[ i ][ j ] +deltaPocMsbCycleLt[ i ][ j - 1 ]FullPocLt[ i ][ j ] = PicOrderCntVal –deltaPocMsbCycleLt[ i ][ j ] MaxPicOrderCntLsb - ( PicOrderCntVal & (MaxPicOrderCntLsb - 1 ) ) + PocLsbLt[ i ][ j ]

[1093] The value of delta_poc_msb_cycle_lt[i][j] should be between 0 and 2. (32 - log2_max_pic_order_cnt_lsb_minus4 - 4 ) The range (including 0 and 2) (32 - log2_max_pic_order_cnt_lsb_minus4 - 4 ) Within ), when it does not exist, the value of delta_poc_msb_cycle_lt[i][j] is inferred to be equal to 0.

[1094] 3.11. Refer to the syntax of the image list structure

[1095] In the latest VVC draft text, the syntax structure ref_pic_lists() and its semantics are as follows:

[1096]

[1097] The `ref_pic_list_struct(listIdx, rplsIdx)` syntax structure can exist in an SPS, PH syntax structure, or stripe header. Depending on whether the syntax structure is included in an SPS, PH syntax structure, or stripe header, the following applies:

[1098] If present in a PH syntax structure or a stripe header, the ref_pic_list_struct(listIdx, rplsIdx) syntax structure specifies a list of reference images, listIdx, for the current image (the image containing the stripes).

[1099] Otherwise (in the SPS), the ref_pic_list_struct(listIdx, rplsIdx) syntax structure specifies a candidate for the reference picture list listIdx, and the term "current picture" in the semantics specified in the remainder of this clause means 1) having a PH syntax structure containing a ph_rpl_idx[listIdx] of an index equal to that in the list of ref_pic_list_struct(listIdx, rplsIdx) syntax structures included in the SPS, or having a slice_rpl_idx[listIdx] of an index equal to that in the list of ref_pic_list_struct(listIdx, rplsIdx) syntax structures included in the SPS, and 2) each picture in the CVS of the reference SPS.

[1100] `num_ref_entries[ listIdx ][ rplsIdx ]` specifies the number of entries in the `ref_pic_list_struct(listIdx, rplsIdx )` syntax structure. The value of `num_ref_entries[ listIdx ][ rplsIdx]` should be in the range of 0 to `MaxDpbSize + 13` (inclusive), where `MaxDpbSize` is specified as in Clause A.4.2.

[1101] `ltrp_in_header_flag[listIdx][rplsIdx]` equal to 0 indicates that the Proof-of-Concept (POC) LSB for the LTRP entry in the `ref_pic_list_struct(listIdx, rplsIdx)` syntax structure exists within the `ref_pic_list_struct(listIdx, rplsIdx)` syntax structure. `ltrp_in_header_flag[listIdx][rplsIdx]` equal to 1 indicates that the POC LSB for the LTRP entry in the `ref_pic_list_struct(listIdx, rplsIdx)` syntax structure does not exist within the `ref_pic_list_struct(listIdx, rplsIdx)` syntax structure.

[1102] `inter_layer_ref_pic_flag[listIdx][rplsIdx][i]` equal to 1 indicates that the i-th entry in the `ref_pic_list_struct(listIdx, rplsIdx)` syntax structure is an ILRP entry. `inter_layer_ref_pic_flag[listIdx][rplsIdx][i]` equal to 0 indicates that the i-th entry in the `ref_pic_list_struct(listIdx, rplsIdx)` syntax structure is not an ILRP entry. When it does not exist, the value of `inter_layer_ref_pic_flag[listIdx][rplsIdx][i]` is inferred to be 0.

[1103] `st_ref_pic_flag[listIdx][rplsIdx][i]` equal to 1 indicates that the i-th entry in the `ref_pic_list_struct(listIdx, rplsIdx)` syntax structure is a STRP entry. `st_ref_pic_flag[listIdx][rplsIdx][i]` equal to 0 indicates that the i-th entry in the `ref_pic_list_struct(listIdx, rplsIdx)` syntax structure is an LTRP entry. When `inter_layer_ref_pic_flag[listIdx][rplsIdx][i]` equals 0 and `st_ref_pic_flag[listIdx][rplsIdx][i]` does not exist, the value of `st_ref_pic_flag[listIdx][rplsIdx][i]` is inferred to be equal to 1.

[1104] The variable NumLtrpEntries[ listIdx ][ rplsIdx ] is deduced as follows:

[1105] for( i = 0, NumLtrpEntries[ listIdx ][ rplsIdx ] = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ ) if( !inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] && !st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) (152)NumLtrpEntries[ listIdx ][ rplsIdx ]++

[1106] The variable AbsDeltaPocSt[listIdx][rplsIdx][i] is specified by abs_delta_poc_st[listIdx][rplsIdx][i] and its value is as follows:

[1107] if( (sps_weighted_pred_flag | ][ i ] = abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] + 1

[1108] The value of abs_delta_poc_st[listIdx][rplsIdx][i] should be between 0 and 2. 15 - The range of 1 (inclusive of 0 and 2) 15 - 1) Inside.

[1109] The value of `strp_entry_sign_flag[listIdx][rplsIdx][i]` equal to 1 indicates that the i-th entry in the syntax structure `ref_pic_list_struct(listIdx, rplsIdx)` has a value greater than or equal to 0. The value of `strp_entry_sign_flag[listIdx][rplsIdx][i]` equal to 0 indicates that the i-th entry in the syntax structure `ref_pic_list_struct(listIdx, rplsIdx)` has a value less than 0. When `strp_entry_sign_flag[listIdx][rplsIdx][i]` does not exist, the value of `strp_entry_sign_flag[listIdx][rplsIdx][i]` is inferred to be equal to 1.

[1110] The list DeltaPocValSt[listIdx][rplsIdx] is derived as follows:

[1111] for( i = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ ) if( !inter_layer_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] && st_ref_pic_flag[listIdx ][ rplsIdx ][ i ] ) (154) DeltaPocValSt[ listIdx ][ rplsIdx ][ i ]= ( strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ] ) ? AbsDeltaPocSt[listIdx ][ rplsIdx ][ i ] : 0 - AbsDeltaPocSt[ listIdx ][ rplsIdx ][ i ]

[1112] `rpls_poc_lsb_lt[listIdx][rplsIdx][i]` specifies the image order count, modulo `MaxPicOrderCntLsb`, of the image referenced by the i-th entry in the `ref_pic_list_struct(listIdx, rplsIdx)` syntax structure. The length of the `rpls_poc_lsb_lt[listIdx][rplsIdx][i]` syntax element is `log2_max_pic_order_cnt_lsb_minus4 + 4 bits`.

[1113] `ilrp_idx[listIdx][rplsIdx][i]` specifies the index of the ILRP for the list of direct reference layers in the `ref_pic_list_struct(listIdx,rplsIdx)` syntax structure for the `i`th entry. The value of `ilrp_idx[listIdx][rplsIdx][i]` should be in the range of 0 to 1 (inclusive) of `NumDirectRefLayers[GeneralLayerIdx[nuh_layer_id]] - 1`.

[1114] 4. Examples of technical problems solved by the disclosed technology

[1115] The existing design of constraint signs has the following problems:

[1116] 1) Currently, whenever a PTL syntax structure exists where profileTierPresentFlag equals 1, all general constraint flags / fields are signaled in that PTL syntax structure (SS). Considering that PTL syntax structures can be included in the DCI (once or multiple times, each time profileTierPresentFlag equals 1), the VPS (once or multiple times, the first time profileTierPresentFlag equals 1, subsequent times profileTierPresentFlag equals 0 or 1), and the SPS (zero or one time, profileTierPresentFlag equals 1), there may be redundant signaling notifications of many general constraint flags / fields. Furthermore, it is possible that no general constraints apply, and in this case, at least one set of general constraint flags / fields is still signaled in the bitstream for each OLS.

[1117] 2) In the latest VVC draft text, general constraint flags are used to constrain the values ​​of some SPS / PH / SH syntax elements (SEs) or combinations thereof via bitstream constraints in semantics. However, they can also be used to influence the presence of such related SPS / PH / SH SEs, which would allow signaling notifications for bits whose values ​​are known to be skipped, thus avoiding bit waste.

[1118] a. In the general_constraint_info() syntax in the latest VVC draft text, syntax elements such as no_aps_constraint_flag affect a set of techniques such as ALF, CCALF, LMCS, scaling lists, etc. However, the current design does not cover all cases (e.g., aspects that specify constraints on the values ​​of related syntax elements or affect the existence of related syntax elements).

[1119] 3) In the latest VVC draft text, some PPS SEs related to general constraint flags can only have certain values ​​depending on the value of a specific general constraint flag. However, some semantic constraints are lacking to prohibit such illegal values ​​of PPS SEs.

[1120] 4) In the general_constraint_info() syntax in the latest VVC draft text, a set of general constraint flags are interactive, meaning that some values ​​of general constraint flags depend on the values ​​of other general constraint flags. However, there is a lack of constraints to prohibit illegal values ​​of such general constraint flags through bitstream constraints or syntax conditions.

[1121] 5) Some syntax elements can be added to SPS and / or PPS to affect the presence of some SPS / PPS / PH / SH syntax elements, thereby saving bits.

[1122] 6) The general_constraint_info() syntax in the latest VVC draft text includes constraint flags for a subset of codec tools and features. However, there are other codec tools (e.g., WPP, entropy codec synchronization, weighted prediction, weighted bidirectional prediction, SMVD, MMVD, ISP, MRL, MIP, LFNST, palette, ACT, scaling list, etc.) and features (e.g., single layer only, only one subpicture, no inter-frame layer prediction, no virtual boundary, no long-term reference, no 32×32 maximum luma transform size, no MER, etc.) that do not have corresponding constraint flags.

[1123] 7) In the latest VVC draft text, APS does not refer to PPS, SPS, or VPS. However, some APS SE semantics depend on the SE value of VPS, SPS, or PPS. All such dependencies should be removed, or the ID of PPS, SPS, or VPS should be added to the APS syntax to allow reference to PPS, SPS, or VPS, thus enabling such semantic dependencies.

[1124] 8) Once the associated information of a feature can be signaled in either the PH or SH, a signaling flag (named X_info_in_ph_flag) may be signaled in the PPS to specify whether it should be signaled in the PH or SH. Currently, in the VVC specification, the X_info_in_ph_flag is always signaled in the PPS without any conditions. However, if there is only one stripe in the picture, it is not necessary to signal the X_info_in_ph_flag in the PPS. A proposal has been made to conditionally signal the PPS flag X_info_in_ph_flag (any existing feature or potential future feature) based on known picture partitioning flags in the bitstream (e.g., no_pic_partition_flag in the PPS).

[1125] 9) Currently, some APS syntax elements' values ​​are constrained based on the ChromaArrayType derived from the SPS syntax elements chroma_format_idc and separate_colour_plane_flag. However, this leads to semantic dependencies because there is no PPS / SPS ID in the APS syntax structure. Therefore, this semantic dependency of APS on SPS should not exist.

[1126] 5. Example embodiments and techniques

[1127] To address the above-mentioned problems and some other issues not mentioned, the following summarized methods are disclosed. This invention should be considered as an example of explaining general concepts and not interpreted in a narrow sense. Furthermore, these inventions can be applied individually or in any combination.

[1128] 1. Regarding signaling notifications for general constraint flags / fields typically used to resolve the first problem, one or more of the following methods are disclosed:

[1129] 1) An existence flag can be added to the PTL syntax structure to specify whether the general_constraint_info() syntax structure exists in the PTL syntax structure.

[1130] a. In one example, when the general_constraint_info() syntax structure does not exist for OLS, infer the default value for each of the general constraint flags / fields.

[1131] i. In one example, when the general_constraint_info() syntax structure does not exist for OLS, each of the general constraint flags / fields is inferred to be a value that specifies that no particular constraint is imposed on the bitstream of OLS. For example, the values ​​of intra_only_constraint_flag, no_res_change_in_clvs_constraint_flag, and one_tile_per_pic_constraint_flag are all inferred to be equal to 0.

[1132] b. In one example, in DCI, when there are more than one PTL syntax structure, it is possible to require that at most one of these PTL syntax structures contains a general_constraint_info() syntax structure, and when it exists, the general_constraint_info() syntax structure applies to the entire bitstream.

[1133] i. In addition, it may be required that only the first PTL syntax structure in the DCI may contain the general_constraint_info() syntax structure, and the general constraint information associated with the first DCI PTL syntax structure in the DCI (explicitly signaled or inferred) is considered to be the general constraint information associated with the DCI, which applies to the entire bitstream.

[1134] c. In one example, when a DCI is present in the bitstream, it can be required that the PTL syntax structure not present in the VPS or SPS should contain the general_constraint_info() syntax structure, and that the general constraint information associated with the DCI (explicitly signaled or inferred) applies to each OLS in each CVS in the bitstream.

[1135] i. Alternatively, when the DCI is present in the bitstream, it can be required that the PTL syntax structure not present in the VPS should contain the general_constraint_info() syntax structure, and that the general constraint information associated with the DCI (explicitly signaled or inferred) applies to each OLS containing more than one layer in each CVS in the bitstream.

[1136] d. In one example, in a VPS, when there is more than one PTL syntax structure, it can be required that only one of these PTL syntax structures can contain a general_constraint_info() syntax structure, and that general_constraint_info() syntax structure applies to each OLS of each CVS in the bitstream.

[1137] i. Alternatively, in a VPS, when there is more than one PTL syntax structure, it may be required that only the first PTL syntax structure in the VPS can contain a general_constraint_info() syntax structure, and the general constraint information associated with the first PTL syntax structure (explicitly signaled or inferred) applies to each OLS of each CVS in the bitstream.

[1138] e. In one example, when there are more than one PTL (and / or general_constraint_info()) syntax structures in the DCI and / or SPS and / or VPS, these PTL (and / or general_constraint_info()) syntax structures must have the same content in the consistent bitstream.

[1139] i. In one example, when there are more than one PTL (and / or general_constraint_info()) syntax structures for OLS signaling notification, these PTL (and / or general_constraint_info()) syntax structures must have the same content in the consistent bitstream.

[1140] ii. In one example, when there is more than one PTL (and / or general_constraint_info()) syntax structure for CVS signaling notification, these PTL (and / or general_constraint_info()) syntax structures must have the same content in the consistent bitstream.

[1141] f. In one example, signaling notifications in the DCI and / or SPS and / or VPS of the consistent bitstream are allowed to be at most one PTL (and / or general_constraint_info()) syntax structure.

[1142] i. In one example, at most one PTL (and / or general_constraint_info()) syntax structure is allowed for OLS signaling notification in the consistency bitstream.

[1143] ii. In one example, at most one PTL (and / or general_constraint_info()) syntax structure is allowed for CVS signaling notification in the consistent bitstream.

[1144] g. In one example, when signaling multiple PTL syntax structures in a DCI targeting multiple OLSs, syntax elements can be added to the DCI syntax structure to specify the index of the list of PLT syntax structures in the DCI for the PTL syntax structure applicable to the i-th OLS.

[1145] i. Additionally, if there is only one OLS in the bitstream, the signaling notification of the above syntax element can be skipped and / or the value of the syntax element can be inferred to be a value (such as 0).

[1146] h. In one example, when there are multiple general_constraint_info() syntax structures in DCI and / or SPS and / or VPS, and the values ​​of a particular general constraint flag / field are different for the OLS, then the particular constraint will be applied to the OLS as long as any of the general constraint flags applies the particular constraint.

[1147] i. In one example, when any general constraint flag in the VPS / SPS specifies that a particular constraint is imposed on the OLS, while the corresponding general constraint flag in the DCI specifies that no particular constraint is imposed on the OLS, the OLS may conform to a more stringent constraint (e.g., such a specific constraint is imposed on the OLS as indicated by the VPS / SPS).

[1148] 1. Alternatively, when any general constraint flag in the VPS / SPS specifies that no specific constraint is imposed on the OLS, but the corresponding general constraint flag in the DCI specifies that a specific constraint is imposed on the OLS, the OLS may be subject to a more stringent constraint (e.g., such a specific constraint is imposed on the OLS as indicated by the DCI).

[1149] ii. In one example, for any particular aspect associated with a general constraint syntax element that imposes a constraint on OLS, the corresponding general constraint syntax element carried in the DCI must have a value that indicates a looser but not stricter constraint on that aspect than the value indicated in the VPS / SPS.

[1150] 1. In one example, if any generic constraint flag / field in the VPS / SPS specifies that no specific constraint is imposed on the OLS, bitstream consistency can be added to require that the value of the corresponding generic constraint flag in the DCI be equal to 0 for that OLS (in this case, the value of the corresponding generic constraint flag in the DCI cannot be equal to 1).

[1151] 2. In one example, if any generic constraint flag / field in the VPS / SPS specifies that a particular constraint is imposed on the OLS, the value of the corresponding generic constraint flag in the DCI can be equal to 0 or 1 for that OLS.

[1152] iii. Alternatively, conversely, for any particular aspect associated with a general constraint syntax element that imposes a constraint on the OLS, the corresponding general constraint syntax element carried in the DCI must have a value that indicates a stricter but not more lenient constraint on that aspect than the value indicated in the VPS / SPS.

[1153] 1. In one example, if any generic constraint flag / field in the VPS / SPS specifies a particular constraint to be imposed on the OLS, bitstream consistency can be added to require the value of the corresponding generic constraint flag in the DCI to be equal to 1 for that OLS (in this case, the value of the corresponding generic constraint flag in the DCI cannot be equal to 0).

[1154] 2. In one example, if any generic constraint flag / field in the VPS / SPS specifies that no particular constraint is imposed on the OLS, the value of the corresponding generic constraint flag in the DCI can be equal to 0 or 1 for that OLS.

[1155] i. In one example, multiple sets of different default values ​​for general constraint flags / fields can be predefined.

[1156] i. Alternatively, the signaling can be used in DCI / VPS / SPS to notify one of the multiple sets of an instruction.

[1157] ii. Alternatively, only one set may be predefined.

[1158] 1. Alternatively, a flag may exist in DCI / VPS / SPS to specify whether a set is used.

[1159] iii. In one example, for one of multiple sets, each of the general constraint flags / fields is inferred to be a value that specifies no particular constraint is imposed on the bitstream of the OLS. For example, the values ​​of intra_only_constraint_flag, no_res_change_in_clvs_constraint_flag, and one_tile_per_pic_constraint_flag are all inferred to be equal to 0.

[1160] iv. In one example, for one or some of multiple sets, the value of max_bitdepth_constraint_idc can be inferred to be equal to a specific value, such as 2.

[1161] 2. Signaling notification regarding the SPS / PH / SH syntax elements based on general constraint flags used to resolve the second problem:

[1162] 1) Signaling notifications for the corresponding syntax elements in SPS / PH / SH can be skipped depending on the value of the general constraint flag, for example, as in the first embodiment.

[1163] a. In one example, signaling notifications for some SPS syntax elements can be skipped based on some general constraint flags.

[1164] i. For example, if the value of the general constraint field max_chroma_format_constraint_idc is equal to 0, the signaling notification for the corresponding SPS syntax element chroma_format_idc can be skipped.

[1165] a) Additionally, when max_chroma_format_constraint_idc is equal to 0, the value of chroma_format_idc is inferred to be equal to 0.

[1166] ii. For example, if the value of the general constraint field max_bitdepth_constraint_idc is equal to 0, the signaling notification of the corresponding SPS syntax element bit_depth_minus8 can be skipped.

[1167] a) Additionally, when max_bitdepth_constraint_idc equals 0, the value of bit_depth_minus8 is inferred to be equal to 0.

[1168] iii. For example, when the value of the general constraint flag no_aps_constraint_flag is equal to 1, signaling notifications for APS-related SPS syntax elements (such as sps_lmcs_enabled_flag, sps_scaling_list_enabled_flag, sps_alf_enabled_flag, sps_ccalf_enabled_flag, etc.) can be skipped.

[1169] a) Alternatively, when no_aps_constraint_flag is equal to 1, the value of each of the above APS-related SPS syntax elements is inferred to be equal to 0.

[1170] b) Alternatively, if the value of the general constraint flag no_aps_constraint_flag is equal to 1, the NAL cell type is not allowed to be PREFIX_APS_NUT or SUFFIX_APS_NUT.

[1171] iv. For example, if the general constraint flag intra_only_constraint_flag is equal to 1, one or more inter-frame related SPS syntax elements (such as sps_weighted_pred_flag, sps_weighted_bipred_flag, long_term_ref_pics_flag, sps_idr_rpl_present_flag, rpl1_same_as_rpl0_flag, gdr_enabled_flag, res_change_in_clvs_allowed_flag, sps_ref_wraparound_enabled_flag) can be skipped. flag, sps_temporal_mvp_enabled_flag, sps_sbtmvp_enabled_flag, sps_amvr_enabled_flag, sps_bdof_enabled_flag, sps_dmvr_enabled_flag, sps_sbt_e nabled_flag, sps_affine_enabled_flag, sps_bcw_enabled_flag, sps_ciip_enabled_flag, sps_fpel_mmvd_enabled_flag, sps_gpm_enabled_flag, etc.) signaling notification.

[1172] a) Alternatively, when intra_only_constraint_flag is equal to 1, the value of each of the above inter-frame related SPS syntax elements is inferred to be equal to 0.

[1173] v. For example, if the value of the general constraint flag Y2 is equal to 1, the signaling notification corresponding to the SPS syntax element Y1 can be skipped.

[1174] a) Alternatively, when the general constraint flag Y2 is not present (in the case that Y2 is equal to 1), the value of the corresponding SPS syntax element Y1 is inferred to be equal to 0.

[1175] b) For example, Y1 is sps_ladf_enabled_flag and Y2 is no_ladf_constraint_flag.

[1176] c) For example, Y1 is gdr_enabled_flag and Y2 is no_gdr_constraint_flag.

[1177] d) For example, Y1 is res_change_in_clvs_allowed_flag and Y2 is no_res_change_in_clvs_constraint_flag.

[1178] e) For example, Y1 is qtbtt_dual_tree_intra_flag, and Y2 is no_qtbtt_dual_tree_intra_constraint_flag.

[1179] f) For example, Y1 is partition_constraints_override_enabled_flag and Y2 is no_partition_constraints_override_constraint_flag.

[1180] g) For example, Y1 is sps_joint_cbcr_enabled_flag and Y2 is no_joint_cbcr_constraint_flag.

[1181] h) For example, Y1 is sps_sao_enabled_flag and Y2 is no_sao_constraint_flag.

[1182] i) For example, Y1 is sps_alf_enabled_flag and Y2 is no_alf_constraint_flag.

[1183] j) For example, Y1 = sps_ccalf_enabled_flag and Y2 = no_ccalf_constraint_flag.

[1184] k) For example, Y1 is sps_transform_skip_enabled_flag and Y2 is no_transform_skip_constraint_flag.

[1185] l) For example, Y1 is sps_bdpcm_enabled_flag and Y2 is no_bdpcm_constraint_flag.

[1186] m) For example, Y1 is sps_ref_wraparound_enabled_flag and Y2 is no_ref_wraparound_constraint_flag.

[1187] n) For example, Y1 = sps_temporal_mvp_enabled_flag, and Y2 = no_temporal_mvp_constraint_flag.

[1188] o) For example, Y1 is sps_sbtmvp_enabled_flag and Y2 is no_sbtmvp_constraint_flag.

[1189] p) For example, Y1 is sps_amvr_enabled_flag and Y2 is no_amvr_constraint_flag.

[1190] q) For example, Y1 is sps_bdof_enabled_flag and Y2 is no_bdof_constraint_flag.

[1191] r) For example, Y1 is sps_dmvr_enabled_flag and Y2 is no_dmvr_constraint_flag.

[1192] s) For example, Y1 is sps_cclm_enabled_flag and Y2 is no_cclm_constraint_flag.

[1193] For example, Y1 is sps_mts_enabled_flag and Y2 is no_mts_constraint_flag.

[1194] u) For example, Y1 is sps_sbt_enabled_flag and Y2 is no_sbt_constraint_flag.

[1195] v) For example, Y1 is sps_affine_enabled_flag and Y2 is no_affine_motion_constraint_flag.

[1196] w) For example, Y1 is sps_bcw_enabled_flag and Y2 is no_bcw_constraint_flag.

[1197] x) For example, Y1 is sps_ibc_enabled_flag and Y2 is no_ibc_constraint_flag.

[1198] For example, Y1 is sps_ciip_enabled_flag and Y2 is no_ciip_constraint_flag.

[1199] z) For example, Y1 is sps_fpel_mmvd_enabled_flag and Y2 is no_fpel_mmvd_constraint_flag.

[1200] aa) For example, Y1 is sps_dep_quant_enabled_flag and Y2 is no_dep_quant_constraint_flag.

[1201] For example, Y1 is sps_sign_data_hiding_enabled_flag and Y2 is no_sign_data_hiding_constraint_flag.

[1202] For example, Y1 is sps_gpm_enabled_flag and Y2 is no_gpm_constraint_flag.

[1203] vi. Alternatively, bitstream constraints can be added to require that the value of the relevant syntax element in the SPS be equal to a certain value based on the value of the corresponding general constraint flag.

[1204] a) In one example (in which case the above SPS syntax element Y1 is signaled or inferred), a bitstream constraint can be added such that when the general constraint flag Y2 is equal to 1, the value of the corresponding SPS syntax element Y1 is required to be equal to 0.

[1205] b) In one example (in which case the APS-related SPS syntax elements are signaled or inferred), a bitstream constraint can be added such that when no_aps_constraint_flag is equal to 1, the value of each APS-related SPS syntax element (such as sps_lmcs_enabled_flag, sps_scaling_list_enabled_flag, sps_alf_enabled_flag, sps_ccalf_enabled_flag, etc.) is required to be equal to 0.

[1206] c) In one example (where the inter-frame related SPS syntax elements are signaled or inferred), a bitstream constraint can be added such that when intra_only_constraint_flag equals 1, the aforementioned inter-frame related SPS syntax elements (such as sps_weighted_pred_flag, sps_weighted_bipred_flag, long_term_ref_pics_flag, sps_idr_rpl_present_flag, rpl1_same_as_rpl0_flag, gdr_enabled_flag, res_change_in_clvs_allowed_flag, sps_ref_wraparou) are required to be present. nd_enabled_flag, sps_temporal_mvp_enabled_flag, sps_sbtmvp_enabled_flag, sps_amvr_enabled_flag, sps_bdof_enabled_flag, sps_dmvr_enabled_flag, sps_sb The value of each of t_enabled_flag, sps_affine_enabled_flag, sps_bcw_enabled_flag, sps_ciip_enabled_flag, sps_fpel_mmvd_enabled_flag, sps_gpm_enabled_flag, etc.) is equal to 0.

[1207] b. In one example, signaling notifications for one or more PH syntax elements can be skipped based on the values ​​of some general constraint flags.

[1208] i. For example, when intra_only_constraint_flag equals 1, signaling notifications for inter-frame related PH syntax elements such as ph_inter_slice_allowed_flag can be skipped.

[1209] a) Alternatively, when intra_only_constraint_flag is equal to 1, the value of each of the inter-frame related PH syntax elements such as ph_inter_slice_allowed_flag is inferred to be equal to 0.

[1210] ii. For example, when the intra_only_constraint flag is equal to 1, signaling notifications for PH syntax elements in the syntax structures ref_pic_lists() and ref_pic_list_struct(listIdx, rplsIdx) included in the PH can be skipped.

[1211] a) For example, when intra_only_constraint_flag equals 1, syntax elements in the syntax structure ref_pic_lists() included in PH can be skipped, such as rpl_sps_flag[], rpl_idx[], poc_lsb_lt[][], delta_poc_msb_present_flag[][], and delta_poc_msb_cycle_lt[][].

[1212] b) For example, when intra_only_constraint_flag equals 1, syntax elements in the syntax structure ref_pic_list_struct(listIdx, rplsIdx) included in PH can be skipped, such as num_ref_entries[][], ltrp_in_header_flag[][], inter_layer_ref_pic_flag[][][], st_ref_pic_flag[][][], abs_delta_poc_st[][][][], strp_entry_sign_flag[][][][], rpls_poc_lsb_lt[][][][], and ilrp_idx[][][][].

[1213] iii. Alternatively (in which case the corresponding syntax element in the PH is not conditionally signaled or skipped based on the value of the relevant general constraint flag / field), in one example, a bitstream constraint can be added to require that the value of the relevant syntax element in the PH be equal to a certain value based on the value of the corresponding general constraint flag.

[1214] a) In one example (in which case the PH syntax element ph_inter_slice_allowed_flag is signaled or inferred), when intra_only_constraint_flag is equal to 1, a bitstream constraint can be added such that the value of each of the inter-frame related PH syntax elements such as ph_inter_slice_allowed_flag is required to be equal to 0.

[1215] b) In one example (in which syntax elements in ref_pic_lists() and ref_pic_list_struct(listIdx, rplsIdx) included in PH are signaled or inferred), a bitstream constraint can be added that requires syntax elements from the list of reference pictures included in PH to never be used.

[1216] c. In one example, signaling notifications for one or more SH syntax elements can be skipped based on the values ​​of some general constraint flags.

[1217] i. For example, if the value of intra_only_constraint_flag is equal to 1, the signaling notification of the RPL-related SH syntax element num_ref_idx_active_override_flag can be skipped.

[1218] a) Alternatively, when intra_only_constraint_flag equals 1, the value of num_ref_idx_active_override_flag is inferred to be equal to 0.

[1219] ii. For example, when intra_only_constraint_flag equals 1, signaling notifications for RPL-related syntax elements in the syntax structures ref_pic_lists() and ref_pic_list_struct(listIdx, rplsIdx) included in SH can be skipped.

[1220] a) For example, when intra_only_constraint_flag equals 1, syntax elements in the syntax structure ref_pic_lists() included in SH can be skipped, such as rpl_sps_flag[], rpl_idx[], poc_lsb_lt[][], delta_poc_msb_present_flag[][], delta_poc_msb_cycle_lt[][].

[1221] b) For example, when intra_only_constraint_flag equals 1, syntax elements in the syntax structure ref_pic_list_struct(listIdx, rplsIdx) included in SH can be skipped, such as num_ref_entries[][], ltrp_in_header_flag[][], inter_layer_ref_pic_flag[][][], st_ref_pic_flag[][][], abs_delta_poc_st[][][][], strp_entry_sign_flag[][][][], rpls_poc_lsb_lt[][][][], and ilrp_idx[][][][].

[1222] iii. Alternatively (in which case the corresponding syntax element in the SH is not conditionally signaled or skipped based on the value of the relevant general constraint flag / field), in one example, a bitstream constraint can be added to require that the value of each of the relevant syntax elements in the SH is equal to a certain value based on the value of the corresponding general constraint flag.

[1223] a) In one example (in which the SH syntax element num_ref_idx_active_override_flag is signaled or inferred), when intra_only_constraint_flag is equal to 1, a bitstream constraint can be added such that the syntax element num_ref_idx_active_override_flag in the SH is required to be equal to 0.

[1224] b) In one example (in which case the SH syntax elements in ref_pic_lists() and ref_pic_list_struct(listIdx, rplsIdx) included in SH are signaled or inferred), a bitstream constraint can be added when intra_only_constraint_flag equals 1, requiring that syntax elements in the reference picture list included in SH are never used.

[1225] d. In the above example, the general constraint flag / field used to determine whether to skip one or more SH syntax elements in signaling notification can be replaced by the new syntax element in SPS / PPS / PH / SH.

[1226] e. In the example above, the general constraint flags / fields used to determine whether to skip one or more PH syntax elements in signaling notifications can be replaced by new syntax elements in SPS / PPS / PH.

[1227] f. In the example above, the general constraint flags / fields used to determine whether to skip one or more SPS syntax elements in signaling notifications can be replaced by new syntax elements in SPS.

[1228] 3. Constraints on PPS syntax elements based on general constraint flags used to solve the third problem:

[1229] 1) The value of the corresponding syntax element in PPS can be constrained based on the value of the general constraint flag, for example, as in the second embodiment.

[1230] a. In one example, bitstream constraints can be added based on the value of the general constraint flag, requiring the value of a syntax element in the PPS to be equal to a certain value.

[1231] i. For example, when one_tile_per_pic_constraint_flag is equal to 1, the values ​​of num_exp_tile_columns_minus1 and / or num_exp_tile_rows_minus1 and / or rect_slice_flag are required to be equal to 0.

[1232] ii. For example, when one_slice_per_pic_constraint_flag is equal to 1, the value of rect_slice_flag is required to be equal to 1.

[1233] iii. For example, when both one_tile_per_pic_constraint_flag and one_slice_per_pic_constraint_flag are equal to 1, the value of no_pic_partition_flag is required to be equal to 1.

[1234] iv. For example, when the intra_only_constraint flag is equal to 1, the values ​​of rpl1_idx_present_flag and num_ref_idx_default_active_minus1[] are required to be equal to 0.

[1235] 4. Constraints on general constraint flags regarding illegal values ​​used to resolve the fourth problem:

[1236] 1) In the syntax general_constraint_info(), the value of one general constraint flag can depend on the value of another general constraint flag, for example, as in the third embodiment.

[1237] a. In one example, signaling notifications for some general constraint flags in the syntax general_constraint_info() can be skipped based on the value of the general constraint flags in an earlier signaling notification.

[1238] i. In one example, if the value of one_slice_per_pic_constraint_flag is equal to 1, the signaling notification of the syntax element one_subpic_per_pic_constraint_flag in the syntax general_constraint_info() can be skipped.

[1239] 1. Alternatively, when one_slice_per_pic_constraint_flag is equal to 1, the value of one_subpic_per_pic_constraint_flag is inferred to be equal to 1.

[1240] ii. In one example, when the value of no_transform_skip_constraint_flag is equal to 1, the signaling notification of the syntax element no_bdpcm_constraint_flag in the syntax general_constraint_info() can be skipped.

[1241] 1. Alternatively, when no_transform_skip_constraint_flag is equal to 1, the value of no_bdpcm_constraint_flag is inferred to be equal to 1.

[1242] iii. For example, when the value of intra_only_constraint_flag is equal to 1, signaling notifications for inter-frame related syntax elements (such as no_res_change_in_clvs_constraint_flag, no_ref_wraparound_constraint_flag, no_temporal_mvp_constraint_flag, no_sbtmvp_constraint_flag, no_amvr_constraint_flag, no_bdof_constraint_flag, no_dmvr_constraint_flag, no_sbt_constraint_flag, no_affine_motion_constraint_flag, no_bcw_constraint_flag, no_ciip_constraint_flag, no_fpel_mmvd_constraint_flag, no_gpm_constraint_flag) in the general_constraint_info() syntax structure can be skipped.

[1243] 2. Alternatively, when intra_only_constraint_flag is equal to 1, the value of each of the above inter-frame related syntax elements in the general_constraint_info() syntax structure is inferred to be equal to 1.

[1244] b. In one example, alternatively (in which case the general constraint flag is not conditionally signaled or skipped based on the value of the earlier general constraint flag), a bitstream constraint can be added such that the value of a general constraint flag is required to be equal to a certain value based on the values ​​of (multiple) related earlier general constraint flags.

[1245] i. In one example, when intra_only_constraint_flag is equal to 1, it requires that the value of each of the inter-frame related general constraint flags mentioned in the bullet points above be equal to 1.

[1246] ii. In one example, when intra_only_constraint_flag is equal to 1, at least one of the values ​​of no_idr_constraint_flag and no_cra_constraint_flag is required to be equal to 0.

[1247] iii. In one example, when no_transform_skip_constraint_flag is equal to 1, the value of no_bdpcm_constraint_flag is required to be equal to 1.

[1248] iv. In one example, when no_aps_constraint_flag is equal to 1, the value of no_alf_constraint_flag is required to be equal to 1.

[1249] c. In one example, bitstream constraints may be added to require that the values ​​of some general constraint flags be equal to certain values, and, if necessary, equal to certain values ​​under certain conditions.

[1250] i. In one example, bitstream constraints can be added to constrain the values ​​of a combination of multiple general constraint flags, such as requiring at least one of the values ​​of no_gdr_constraint_flag, no_idr_constraint_flag, and no_cra_constraint_flag to be equal to 0.

[1251] ii. In one example, bitstream constraints can be added to constrain the range of a general constraint field.

[1252] 1. For example, it is required that max_bitdepth_constraint_idc be in the range of 0 to X (such as X = 8) (inclusive).

[1253] 2. For example, when general_profile_idc is equal to A (such as A = 1), max_bitdepth_constraint_idc is required to be in the range of 0 to B (such as B = 2) (inclusive).

[1254] 5. Regarding the addition of a new SPS / PPS syntax element to address the fifth question:

[1255] 1) New SPS and / or PPS syntax elements can be added to affect the relevant syntax elements in SPS / PPS / PH / SH, for example, as in the fourth embodiment.

[1256] a. In one example, new SPS syntax elements (e.g., sps_intra_only_flag) and / or new PPS syntax elements (e.g., pps_intra_only_flag) can be added to affect inter-frame prediction-related syntax elements in SPS / PPS / PH / SH.

[1257] i. In one example, when the general constraint flag intra_only_constraint_flag is equal to 1, signaling notifications for the new SPS syntax element sps_intra_only_flag and / or the new PPS syntax element pps_intra_only_flag can be skipped.

[1258] 1. Alternatively, when intra_only_constraint_flag equals 1, the value of the new SPS syntax element sps_intra_only_flag is inferred to be equal to 1, and / or, the value of the new PPS syntax element pps_intra_only_flag is inferred to be equal to 1.

[1259] ii. In one example, if the value of a new SPS syntax element (e.g., sps_intra_only_flag) is equal to 1, inter-frame related SPS syntax elements (such as sps_weighted_pred_flag, sps_weighted_bipred_flag, long_term_ref_pics_flag, sps_idr_rpl_present_flag, rpl1_same_as_rpl0_flag, gdr_enabled_flag, res_change_in_clvs_allowed_flag, sps_ref_wraparound_enabled_flag) can be skipped. flag, sps_temporal_mvp_enabled_flag, sps_sbtmvp_enabled_flag, sps_amvr_enabled_flag, sps_bdof_enabled_flag, sps_dmvr_enabled_flag, sps_sbt_e nabled_flag, sps_affine_enabled_flag, sps_bcw_enabled_flag, sps_ciip_enabled_flag, sps_fpel_mmvd_enabled_flag, sps_gpm_enabled_flag, etc.) signaling notification.

[1260] 2. Alternatively, when the new SPS syntax element sps_intra_only_flag is equal to 1, the value of each of the inter-frame related SPS syntax elements is inferred to be equal to some value (such as 0 or 1).

[1261] iii. In one example, when the value of a new SPS / PPS syntax element (e.g., sps_intra_only_flag and / or pps_intra_only_flag) is equal to 1, signaling notifications for the corresponding inter-frame related and RPL related syntax elements included in the PH and / or SH can be skipped.

[1262] 1. In one example, the above inter-frame related PH syntax element can be ph_inter_slice_allowed_flag.

[1263] 2. In one example, the RPL-related SH syntax element mentioned above can be num_ref_idx_active_override_flag.

[1264] 3. In one example, the corresponding RPL-related syntax elements mentioned above can be syntax elements in the syntax structures ref_pic_lists() and ref_pic_list_struct(listIdx, rplsIdx) included in PH and / or SH.

[1265] 4. Alternatively, when the new syntax elements sps_intra_only_flag and / or pps_intra_only_flag are equal to 1, the value of each of the corresponding inter-frame correlation and RPL correlation syntax elements in PH and / or SH is inferred to be equal to a certain value (such as 0 or 1).

[1266] iv. In one example, if the value of a new PPS syntax element (e.g., pps_intra_only_flag) is equal to 1, the signaling notification for the corresponding PPS syntax element can be skipped.

[1267] 1. For example, the corresponding PPS syntax element mentioned above could be rpl1_idx_present_flag.

[1268] 2. For example, the corresponding PPS syntax element mentioned above can be num_ref_idx_default_active_minus1[ ].

[1269] 3. Alternatively, when the new PPS syntax element pps_intra_only_flag is equal to 1, the value of the corresponding PPS syntax element is inferred to be equal to a certain value (such as 0 or 1).

[1270] v. Alternatively (in which case, depending on the value of intra_only_constraint_flag, the new SPS and / or PPS syntax elements sps_intra_only_flag and / or pps_intra_only_flag are conditionally signaled or skipped), in one example, when intra_only_constraint_flag equals 1, a bitstream constraint can be added to require the value of the new SPS and / or PPS syntax elements sps_intra_only_flag and / or pps_intra_only_flag to be equal to 1.

[1271] vi. Alternatively (in which case, the SPS / PPS / PH / SH syntax elements associated with the new SPS / PPS syntax element are not conditionally signaled or skipped based on the value of the new SPS / PPS syntax eleme...

Claims

1. A video processing method, comprising: According to format rules, a conversion is performed between a video containing one or more images and the bitstream of that video. The formatting rules specify that a first syntax element must be included in the general constraint syntax structure. This first syntax element indicates whether each image includes only one stripe and whether an image header syntax structure exists in the stripe header. The formatting rules stipulate that, when the first syntax element has a specific value that specifies the application of corresponding constraints, each image includes only one stripe, and the image header syntax structure exists in the stripe header.

2. The method according to claim 1, wherein, The formatting rules stipulate that, when the first syntax element has the specific value, the second syntax element is equal to 1, to indicate that the image header syntax structure exists in the strip header.

3. The method according to claim 1, wherein, The specific value is 1.

4. The method according to claim 1, wherein, The format rules specify that whether specific encoding / decoding information exists in the image parameter set depends on the value of a third syntax element in the image header syntax structure or the stripe header. This fourth syntax element specifies the image partitioning characteristics referenced in the image parameter set. The specific encoding / decoding information includes reference image list information, deblocking filter information, sample adaptive offset (SAO) filter information, adaptive loop filter (ALF) information, weighted prediction information, or quantization parameter QP increment information.

5. The method according to claim 4, wherein, The format rules also stipulate that, in the absence of the third syntax element, the value of the third syntax element is inferred to be equal to 0, to indicate that the specific encoding / decoding information does not exist in the image header syntax structure and is allowed to exist in the strip header.

6. The method according to claim 1, wherein, The format rules specify that a fifth syntax element exists in the adaptive parameter set (APS) referenced by the video units of the one or more images, wherein the fifth syntax element specifies whether a chroma-related APS syntax element exists in the APS.

7. The method according to claim 6, wherein, The formatting rules also stipulate that: When the field indicates a monochrome chroma format, the value of the fifth syntax element of the APS network abstraction layer NAL unit, which has an APS parameter type equal to Adaptive Loop Filtering ALF APS and an APS identifier equal to the image header-level ALF APS identifier referenced by the luminance components of the stripes in the image, must be equal to 0, or When the field indicates a monochrome chroma format, the value of the fifth syntax element of the APS NAL unit, which has an APS parameter type equal to ALF APS and an APS identifier equal to the ALF APS identifier of the strip header level referenced by the luminance component of the strip, must be equal to 0.

8. The method according to any one of claims 1-7, wherein, The conversion includes encoding the video into the bitstream.

9. The method according to any one of claims 1-7, wherein, The conversion includes decoding the video from the bitstream.

10. A video data processing apparatus, comprising a processor and a non-transitory memory having instructions thereon, wherein, When the instruction is executed by the processor, the processor: According to format rules, a conversion is performed between a video containing one or more images and the bitstream of that video. The formatting rules specify that a first syntax element must be included in the general constraint syntax structure. This first syntax element indicates whether each image includes only one stripe and whether an image header syntax structure exists in the stripe header. The formatting rules stipulate that, when the first syntax element has a specific value that specifies the application of corresponding constraints, each image includes only one stripe, and the image header syntax structure exists in the stripe header.

11. The apparatus according to claim 10, wherein, The formatting rules stipulate that, when the first syntax element has the specific value, the second syntax element is equal to 1, to indicate that the image header syntax structure exists in the strip header; The specific value is 1.

12. The apparatus according to claim 10, wherein, The format rules specify that whether specific encoding / decoding information exists in the image header syntax structure or the strip header depends on the value of the fourth syntax element in the image parameter set. The fourth syntax element specifies the partitioning characteristics of the image referenced in the image parameter set. The format rules also stipulate that, in the absence of the third syntax element, the value of the third syntax element is inferred to be equal to 0, to indicate that the specific encoding / decoding information does not exist in the image header syntax structure and is allowed to exist in the strip header; The specific encoding / decoding information includes reference image list information, deblocking filter information, sample adaptive offset (SAO) filter information, adaptive loop filter (ALF) information, weighted prediction information, or quantization parameter QP increment information.

13. The apparatus according to claim 10, wherein, The format rules specify that a fifth syntax element exists in the adaptive parameter set (APS) referenced by the video units of the one or more images, wherein the fifth syntax element specifies whether a chroma-related APS syntax element exists in the APS; The format rules also specify: When the field indicates a monochrome chroma format, the value of the fifth syntax element of the APS network abstraction layer NAL unit, which has an APS parameter type equal to Adaptive Loop Filtering ALF APS and an APS identifier equal to the image header-level ALF APS identifier referenced by the luminance components of the stripes in the image, must be equal to 0, or When the field indicates a monochrome chroma format, the value of the fifth syntax element of the APS NAL unit, which has an APS parameter type equal to ALF APS and an APS identifier equal to the ALF APS identifier of the strip header level referenced by the luminance component of the strip, must be equal to 0.

14. A non-transitory computer-readable storage medium storing instructions that cause a processor to: According to format rules, a conversion is performed between a video containing one or more images and the bitstream of that video. in, The formatting rules stipulate that a first syntax element must be included in the general constraint syntax structure. This first syntax element indicates whether each image includes only one stripe and whether the image header syntax structure exists in the stripe header. The formatting rules stipulate that, when the first syntax element has a specific value that specifies the application of corresponding constraints, each image includes only one stripe, and the image header syntax structure exists in the stripe header.

15. The non-transitory computer-readable storage medium according to claim 14, wherein, The formatting rules stipulate that, when the first syntax element has the specific value, the second syntax element is equal to 1, to indicate that the image header syntax structure exists in the strip header; The specific value is 1.

16. The non-transitory computer-readable storage medium according to claim 14, wherein, The format rules specify that whether specific encoding / decoding information exists in the image header syntax structure or the strip header depends on the value of the fourth syntax element in the image parameter set. The fourth syntax element specifies the partitioning characteristics of the image referenced in the image parameter set. The format rules also stipulate that, in the absence of the third syntax element, the value of the third syntax element is inferred to be equal to 0, to indicate that the specific encoding / decoding information does not exist in the image header syntax structure and is allowed to exist in the strip header; The specific encoding / decoding information includes reference image list information, deblocking filter information, sample adaptive offset (SAO) filter information, adaptive loop filter (ALF) information, weighted prediction information, or quantization parameter QP increment information.

17. A non-transitory computer-readable recording medium storing a bitstream of video, further storing a computer program thereon, characterized in that, The computer program is executed by the processor to achieve the following: According to the format rules, generate a bitstream of the video that includes one or more images. The formatting rules specify that a first syntax element must be included in the general constraint syntax structure. This first syntax element indicates whether each image includes only one stripe and whether an image header syntax structure exists in the stripe header. The formatting rules stipulate that, when the first syntax element has a specific value that specifies the application of corresponding constraints, each image includes only one stripe, and the image header syntax structure exists in the stripe header.

18. The non-transitory computer-readable recording medium according to claim 17, wherein, The formatting rules stipulate that, when the first syntax element has the specific value, the second syntax element is equal to 1, to indicate that the image header syntax structure exists in the strip header; The specific value is 1.

19. A method for storing a video bitstream, comprising: According to the format rules, generate a bitstream of the video including one or more images, and The bitstream is stored in a non-transitory computer-readable recording medium. The formatting rules specify that a first syntax element must be included in the general constraint syntax structure. This first syntax element indicates whether each image includes only one stripe and whether an image header syntax structure exists in the stripe header. The formatting rules stipulate that, when the first syntax element has a specific value that specifies the application of corresponding constraints, each image includes only one stripe, and the image header syntax structure exists in the stripe header.

Citation Information

Patent Citations

  • Video processing apparatus and method for processing video data

    CN101572111A