Palette mode with local double tree mode type definition
Patent Information
- Application Number
- KR1020227045226
- Authority / Receiving Office
- KR · KR
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2020-05-31
- Filing Date
- 2021-05-28
- Publication Date
- 2026-09-16
- Estimated Expiration
- 2041-05-28
Smart Images

Figure 112022138504267-PCT00067_ABST
Abstract
Description
Technology Field
[0001] This patent document relates to image and video coding and decoding.
[0002] This application is based on International Patent Application No. PCT / CN2021 / 096707 filed on May 28, 2021, claiming priority and benefits of International Patent Application No. PCT / CN2020 / 093641 filed on May 31, 2020. All of the aforementioned patent applications are incorporated herein by reference in their entirety. Background Technology
[0003] Digital video consumes the most bandwidth on the Internet and other digital communication networks. As the number of connected user devices capable of receiving and displaying video increases, the demand for bandwidth for digital video usage is expected to continue rising. means of solving the problem
[0004] This document discloses a technique that can be used by a video encoder and a decoder to process a coded representation of a video using control information useful for decoding the coded representation.
[0005] In one exemplary aspect, a video processing method is disclosed. The method comprises the step of performing a conversion between a video containing one or more video pictures and a bitstream of the video according to a rule, wherein the rule specifies that a first syntax element of a general constraint information syntax structure controls one or more values of one or more syntax elements or the existence of one or more syntax elements in a parameter set or header.
[0006] In another exemplary aspect, a video processing method is disclosed. The method comprises the step of performing a conversion between a video containing a video block and a bitstream of the video according to a rule, wherein the video block is a coding tree node containing one or more coding units, and the rule specifies that the coded information of the video block indicates whether a coding mode is enabled for one or more coding units of the video block.
[0007] In another exemplary aspect, a video processing method is disclosed. The method comprises the step of performing a conversion between a video containing a video picture containing a video block according to a rule and a bitstream of the video, wherein the rule specifies that the video block is optionally partitioned into coding blocks using a partition process using a coding mode type indicating that a palette coding mode is enabled for the video block.
[0008] In another exemplary aspect, a video processing method is disclosed. The method comprises the step of performing a conversion between a video region of a video and a coded representation of the video; wherein the coded representation follows a format rule; and wherein the format rule specifies a flag indicating whether a scaling list for the color components of the video is included in an adaptive parameter set independently of the syntax field value of a sequence parameter set.
[0009] In another exemplary aspect, another video processing method is disclosed. The method performs a transformation between a video region of a video and a coded representation of the video region; wherein the coded representation follows a format rule; wherein the format rule specifies that one or more sets of adaptive parameters are included in the coded representation and that for each set of adaptive parameters, chroma-related syntax elements are omitted due to chroma constraints for the video.
[0010] In another exemplary aspect, a different video processing method is disclosed. The method performs a transformation between a video and a coded representation of the video, wherein the coded representation follows a format rule; wherein the format rule specifies whether a first transform coding syntax field is included in the coded representation at the level of the video unit of the video region and / or that its value depends on the value of a second transform coding syntax field at the level of the video region.
[0011] In another exemplary aspect, a different video processing method is disclosed. The method performs a conversion between a video comprising one or more video regions—each video region comprising one or more video units—and a coded representation of the video; wherein the coded representation follows a format rule; wherein the format rule specifies that a flag at the video unit level controls whether differential signaling of quantization parameters is enabled for the conversion.
[0012] In another exemplary aspect, a different video processing method is disclosed. The method performs a conversion between a video comprising one or more video regions—each video region comprising one or more video units—and a coded representation of the video; wherein the coded representation follows a format rule; wherein the format rule specifies an interpretation of a first flag at the picture level indicating the number of subpictures and a second flag at the subpicture level indicating the number of slices of the subpictures.
[0013] In another exemplary aspect, a different video processing method is disclosed. The method performs a conversion between a video comprising one or more video pictures—each video picture comprising one or more slices and / or one or more tiles—and a coded representation of the video; wherein the coded representation follows a format rule; wherein the format rule specifies that a field of a set of picture parameters associated with the video picture indicates whether the video picture is divided into a number of rows or columns of different heights or widths.
[0014] In another exemplary aspect, a different video processing method is disclosed. The method performs a conversion between a video comprising one or more video pictures—each video picture comprising one or more slices and / or one or more tiles—and a coded representation of the video; wherein the coded representation follows a format rule; wherein the format rule specifies that the applicability of adaptive loop filtering to a video region is based on a second rule when an adaptive parameter set excludes indication of adaptive loop filtering.
[0015] In another exemplary aspect, a different video processing method is disclosed. The method performs a conversion between a video comprising one or more video pictures—each video picture comprising one or more slices and / or one or more tiles—and a coded representation of the video; wherein the coded representation follows a format rule; wherein the format rule specifies that for a picture in which the width and height of the video are maximum width and maximum height, the explicit signaling of a conformity window parameter in a set of picture parameters is skipped.
[0016] In another exemplary aspect, a different video processing method is disclosed. The method comprises the step of performing a conversion between a video and a coded representation of the video, each comprising one or more video pictures, each comprising one or more slices and / or one or more tiles; the coded representation follows a format rule that specifies that a syntax field of a General Constraint Information (GCI) syntax structure controls one or more constraints on the values of one or more syntax elements in a parameter set or header of the coded representation.
[0017] In another exemplary aspect, a different video processing method is disclosed. The method comprises the step of performing a conversion between a video and a coded representation of the video, wherein the coded representation follows a formal rule that specifies that for a coding tree node of the video, the decoded information corresponding to the video unit controls the value of a variable that can be derived according to a rule.
[0018] In another exemplary aspect, a different video processing method is disclosed. The method comprises the step of performing a conversion between a video and a coded representation of the video, each comprising one or more video pictures, each comprising one or more slices and / or one or more tiles; wherein the coded representation follows a format rule specifying that the coded representation includes a syntax element for a coding tree node that indicates whether any of three prediction modes are allowed for the representation of the video unit at the coding tree node.
[0019] In another exemplary aspect, a video encoder device is disclosed. The video encoder includes a processor configured to implement the methods described above.
[0020] In another exemplary aspect, a video decoder device is disclosed. The video decoder includes a processor configured to implement the methods described above.
[0021] In another exemplary aspect, a computer-readable medium storing code is disclosed. The code implements one of the methods described herein in the form of processor-executable code.
[0022] These and other functions are described throughout this document. Brief explanation of the drawing
[0023] Figure 1 is a block diagram of an exemplary video processing system. Figure 2 is a block diagram of a video processing device. Figure 3 is a flowchart of one example of a video processing method. FIG. 4 is a block diagram illustrating a video coding system according to some embodiments of the present disclosure. FIG. 5 is a block diagram illustrating an encoder according to some embodiments of the present disclosure. FIG. 6 is a block diagram illustrating a decoder according to some embodiments of the present disclosure. Figures 7 to 9 are flowcharts of, for example, video processing methods. Specific details for implementing the invention
[0024] Section titles are used in this document for convenience of understanding and do not limit the applicability of the technologies and embodiments disclosed in each section to that section alone. Additionally, H.266 terminology is used solely for convenience of description and does not limit the scope of the disclosed technology. As such, the technology described herein may be applied to other video codec protocols and designs.
[0025] 1. Introduction
[0026] This document relates to video coding technologies. In particular, it concerns the design of SH, PPS, APS, and GCI syntax elements in video coding. These ideas can be applied individually or in various combinations to any video coding standard or non-standard video codec that supports multi-layer video coding, for example, Versatile Video Coding (VVC) currently under development.
[0027] 2. Abbreviations
[0028] APS Adaptation Parameter Set
[0029] AU Access Unit
[0030] AUD Access Unit Delimiter
[0031] AVC Advanced Video Coding
[0032] CLVS Coded Layer Video Sequence
[0033] CPB Coded Picture Buffer()
[0034] CRA Clean Random Access
[0035] CTU Coding Tree Unit
[0036] CVS Coded Video Sequence
[0037] DPB Decoded Picture Buffer
[0038] DPS Decoding Parameter Set
[0039] EOB End Of Bitstream
[0040] End of Sequence
[0041] GCI General Constraint Information
[0042] GDR Gradual Decoding Refresh
[0043] HEVC High Efficiency Video Coding
[0044] HRD Virtual Reference Decoder (Hypothetical Reference Decoder)
[0045] IDR Instantaneous Decoding Refresh
[0046] JEM Joint Exploration Model
[0047] MCTS Motion-Constrained Tile Set
[0048] NAL Network Abstraction Layer
[0049] OLS Output Layer Set
[0050] PH Picture Header
[0051] PPS Picture Parameter Set
[0052] PTL Profile, Tier and Level
[0053] PU Picture Unit
[0054] RBSP Raw Byte Sequence Payload
[0055] SEI Supplemental Enhancement Information
[0056] SH Slice Header (Slice header)
[0057] SPS Sequence Parameter Set
[0058] SVC Scalable Video Coding
[0059] VCL Video Coding Layer
[0060] VPS Video Parameter Set
[0061] VTM VVC Test Model
[0062] VUI Video Usability Information
[0063] VVC Versatile Video Coding
[0064] 3. Initial Discussion
[0065] Video coding standards have primarily evolved through the development of well-known ITU-T and ISO / IEC standards. ITU-T produced H.261 and H.263, while ISO / IEC produced 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 coding standards have been based on a hybrid video coding architecture that utilizes temporal prediction and transform coding. To research future video coding technologies beyond HEVC, the Joint Video Exploration Team (JVET) was established jointly by VCEG and MPEG in 2015. Since then, many new methods have been adopted by the JVET and applied to reference software called the Joint Exploration Model (JEM). JVET meetings are held concurrently once every quarter, and the new coding standard aims for a 50% reduction in bitrate compared to HEVC. The new video coding standard was officially named Versatile Video Coding (VVC) at the JVET meeting in April 2018, at which time the first version of the VVC Test Model (VTM) was released. Due to continuous efforts contributing to VVC standardization, new coding technologies are adopted into the VVC standard at every JVET meeting. The VVC working draft and the VVC Test Model (VTM) are updated after every meeting. The VVC project is currently aiming for Technical Finalization (FDIS) at the July 2020 meeting.
[0066] 3.1 GCI Syntax and Semantics
[0067] In the latest VVC draft text, the GCI syntax and semantics are as follows:
[0068]
[0069]
[0070]
[0071] general_progressive_source_flag and general_interlaced_source_flag are interpreted as follows:
[0072] - If general_progressive_source_flag is 1 and general_interlaced_source_flag is 0, the source scan type of the picture in OlsInScope must be interpreted as progressive only.
[0073] - Otherwise, if general_progressive_source_flag is 0 and general_interlaced_source_flag is 1, the source scan type of the picture in OlsInScope must be interpreted as interlaced only.
[0074] - Otherwise, if general_progressive_source_flag is 0 and general_interlaced_source_flag is 0, the source scan type of the picture in OlsInScope should be interpreted as unknown or unspecified.
[0075] - Otherwise (general_progressive_source_flag is 1 and general_interlaced_source_flag is 1), the source scan type of each picture in OlsInScope is indicated at the picture level using the syntax element source_scan_type in the frame-field information SEI message. When general_progressive_source_flag is 1 and general_interlaced_source_flag is 1, the presence of a frame-field information SEI message in each AU is a requirement of bitstream conformance.
[0076] Note 1 - The decoder may ignore the values of general_progressive_source_flag and general_interlaced_source_flag. Additionally, the actual source scan type of the picture 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.
[0077] If general_non_packed_constraint_flag is equal to 1, it specifies that there should be no frame packing arrangement SEI messages in the bitstream of OlsInScope.
[0078] general_non_packed_constraint_flag, which is equal to 0, does not impose such constraints.
[0079] Note 2 - The decoder can ignore the value of general_non_packed_constraint_flag because there are no decoding process requirements associated with the existence or interpretation of frame packing arrangement SEI messages.
[0080] Same as 1 general_frame_only_constraint_flag specifies that OlsInScope passes a picture representing a frame.
[0081] general_frame_only_constraint_flag equal to 0 specifies that OlsInScope should pass a picture that may or may not display a frame.
[0082] Note 3 - The decoder can ignore the value of general_frame_only_constraint_flag because it has no associated decoding process requirements.
[0083] Same as 1 general_non_projected_constraint_flag Specifies that there should be no square projection SEI messages or generalized cubemap projection SEI messages in the bitstream of OlsInScope.
[0084] The general_non_projected_constraint_flag, which is equal to 0, does not impose such constraints.
[0085] Note 4 - Since there are no decoding process requirements associated with the existence or interpretation of isotropic projection SEI messages and generalized cubemap projection SEI messages, the decoder can ignore the value of general_non_projected_constraint_flag.
[0086] An intra_only_constraint_flag equal to 1 specifies that slice_type must be the same as I. An intra_only_constraint_flag equal to 0 does not impose such a constraint.
[0087] max_bitdepth_constraint_idc specifies that bit_depth_minus8 must be in the range from 0 to max_bitdepth_constraint_idc.
[0088] max_chroma_format_constraint_idc specifies that chroma_format_idc must be in a range from 0 to max_chroma_format_constraint_idc.
[0089] no_res_change_in_clvs_constraint_flag equal to 1 specifies that res_change_in_clvs_allowed_flag must be equal to 0. no_res_change_in_clvs_constraint_flag equal to 0 does not impose these constraints.
[0090] one_tile_per_pic_constraint_flag, equivalent to 1, specifies that each picture must contain only one tile. one_tile_per_pic_constraint_flag, equivalent to 0, does not impose such a constraint.
[0091] one_slice_per_pic_constraint_flag, which is equal to 1, specifies that each picture must contain only one slice. one_slice_per_pic_constraint_flag, which is equal to 0, does not impose such a constraint.
[0092] one_subpic_per_pic_constraint_flag equal to 1 specifies that each picture must contain only one subpicture. one_subpic_per_pic_constraint_flag equal to 0 does not impose such a constraint. When one_slice_per_pic_constraint_flag is equal to 1, the value of one_subpic_per_pic_constraint_flag must be equal to 1.
[0093] no_qtbtt_dual_tree_intra_constraint_flag equal to 1 specifies that qtbtt_dual_tree_intra_flag must be equal to 0. no_qtbtt_dual_tree_intra_constraint_flag equal to 0 does not impose these constraints.
[0094] no_partition_constraints_override_constraint_flag equal to 1 specifies that partition_constraints_override_enabled_flag must be equal to 0. no_partition_constraints_override_constraint_flag equal to 0 does not impose these constraints.
[0095] no_sao_constraint_flag equal to 1 specifies that sps_sao_enabled_flag must be equal to 0.
[0096] no_sao_constraint_flag, which is equal to 0, does not impose these constraints.
[0097] no_alf_constraint_flag equal to 1 specifies that sps_alf_enabled_flag must be equal to 0. no_alf_constraint_flag equal to 0 does not impose these constraints.
[0098] no_ccalf_constraint_flag equal to 1 specifies that sps_ccalf_enabled_flag must be equal to 0. no_ccalf_constraint_flag equal to 0 does not impose these constraints.
[0099] no_joint_cbcr_constraint_flag equal to 1 specifies that sps_joint_cbcr_enabled_flag must be equal to 0. no_joint_cbcr_constraint_flag equal to 0 does not impose these constraints.
[0100] no_ref_wraparound_constraint_flag equal to 1 specifies that sps_ref_wraparound_enabled_flag must be equal to 0. no_ref_wraparound_constraint_flag equal to 0 does not impose these constraints.
[0101] no_temporal_mvp_constraint_flag equal to 1 specifies that sps_temporal_mvp_enabled_flag must be equal to 0. no_temporal_mvp_constraint_flag equal to 0 does not impose these constraints.
[0102] no_sbtmvp_constraint_flag equal to 1 specifies that sps_sbtmvp_enabled_flag must be equal to 0.
[0103] no_sbtmvp_constraint_flag, which is equal to 0, does not impose such a constraint.
[0104] no_amvr_constraint_flag equal to 1 specifies that sps_amvr_enabled_flag must be equal to 0. no_amvr_constraint_flag equal to 0 does not impose these constraints.
[0105] no_bdof_constraint_flag equal to 1 specifies that sps_bdof_enabled_flag must be equal to 0. no_bdof_constraint_flag equal to 0 does not impose these constraints.
[0106] no_dmvr_constraint_flag equal to 1 specifies that sps_dmvr_enabled_flag must be equal to 0. no_dmvr_constraint_flag equal to 0 does not impose these constraints.
[0107] no_cclm_constraint_flag equal to 1 specifies that sps_cclm_enabled_flag must be equal to 0. no_cclm_constraint_flag equal to 0 does not impose these constraints.
[0108] no_mts_constraint_flag equal to 1 specifies that sps_mts_enabled_flag must be equal to 0. no_mts_constraint_flag equal to 0 does not impose these constraints.
[0109] no_sbt_constraint_flag equal to 1 specifies that sps_sbt_enabled_flag must be equal to 0. no_sbt_constraint_flag equal to 0 does not impose these constraints.
[0110] no_affine_motion_constraint_flag equal to 1 specifies that sps_affine_enabled_flag must be equal to 0. no_affine_motion_constraint_flag equal to 0 does not impose these constraints.
[0111] no_bcw_constraint_flag equal to 1 specifies that sps_bcw_enabled_flag must be equal to 0. no_bcw_constraint_flag equal to 0 does not impose these constraints.
[0112] no_ibc_constraint_flag equal to 1 specifies that sps_ibc_enabled_flag must be equal to 0. no_ibc_constraint_flag equal to 0 does not impose these constraints.
[0113] no_ciip_constraint_flag equal to 1 specifies that sps_ciip_enabled_flag must be equal to 0. no_ciip_constraint_flag equal to 0 does not impose these constraints.
[0114] no_fpel_mmvd_constraint_flag equal to 1 specifies that sps_fpel_mmvd_enabled_flag must be equal to 0. no_fpel_mmvd_constraint_flag equal to 0 does not impose these constraints.
[0115] no_gpm_constraint_flag equal to 1 specifies that sps_gpm_enabled_flag must be equal to 0. no_gpm_constraint_flag equal to 0 does not impose these constraints.
[0116] no_ladf_constraint_flag equal to 1 specifies that sps_ladf_enabled_flag must be equal to 0. no_ladf_constraint_flag equal to 0 does not impose these constraints.
[0117] no_transform_skip_constraint_flag equal to 1 specifies that sps_transfrom_skip_enabled_flag must be equal to 0. no_transform_skip_constraint_flag equal to 0 does not impose these constraints.
[0118] no_bdpcm_constraint_flag equal to 1 specifies that sps_bdpcm_enabled_flag must be equal to 0. no_bdpcm_constraint_flag equal to 0 does not impose these constraints.
[0119] no_qp_delta_constraint_flag equal to 1 specifies that cu_qp_delta_enabled_flag is a bitstream conformance requirement that must be equal to 0. no_qp_delta_constraint_flag equal to 0 does not impose such a constraint.
[0120] no_dep_quant_constraint_flag equal to 1 specifies the bitstream conformance requirement that sps_dep_quant_enabled_flag must be equal to 0. no_dep_quant_constraint_flag equal to 0 does not impose these constraints.
[0121] no_sign_data_hiding_constraint_flag equal to 1 specifies that sps_sign_data_hiding_enabled_flag is a bitstream conformance requirement that must be equal to 0. no_sign_data_hiding_constraint_flag equal to 0 does not impose this constraint.
[0122] no_mixed_nalu_types_in_pic_constraint_flag equal to 1 specifies that mixed_nalu_types_in_pic_flag is a bitstream conformance requirement that must be equal to 0. no_mixed_nalu_types_in_pic_constraint_flag equal to 0 does not impose this constraint.
[0123] no_trail_constraint_flag equal to 1 specifies that there are no NAL units with the same nuh_unit_type as TRAIL_NUT present in OlsInScope. no_trail_constraint_flag equal to 0 does not impose such a constraint.
[0124] no_stsa_constraint_flag equal to 1 specifies that there must not be any NAL units with the same nuh_unit_type as STSA_NUT existing in OlsInScope. no_stsa_constraint_flag equal to 0 does not impose such a constraint.
[0125] no_rasl_constraint_flag equal to 1 specifies that there are no NAL units with nuh_unit_type identical to RASL_NUT present in OlsInScope. no_rasl_constraint_flag equal to 0 does not impose such a constraint.
[0126] no_radl_constraint_flag equal to 1 specifies that there are no NAL units with nuh_unit_type identical to RADL_NUT present in OlsInScope. no_radl_constraint_flag equal to 0 does not impose such a constraint.
[0127] no_idr_constraint_flag equal to 1 specifies that there must not be any NAL units with the same nuh_unit_type as IDR_W_RADL or IDR_N_LP existing in OlsInScope. no_idr_constraint_flag equal to 0 does not impose such a constraint.
[0128] no_cra_constraint_flag equal to 1 specifies that there must not be any NAL units with the same nuh_unit_type as CRA_NUT existing in OlsInScope. no_cra_constraint_flag equal to 0 does not impose such a constraint.
[0129] no_gdr_constraint_flag equal to 1 specifies that there are no NAL units with nuh_unit_type identical to GDR_NUT present in OlsInScope. no_gdr_constraint_flag equal to 0 does not impose such a constraint.
[0130] no_aps_constraint_flag equal to 1 specifies that there must not be any NAL units with nuh_unit_type identical to PREFIX_APS_NUT or SUFFIX_APS_NUT present in OlsInScope. no_aps_constraint_flag equal to 0 does not impose such a constraint.
[0131] gci_alignment_zero_bits must be equal to 0.
[0132] num_reserved_constraint_bytes specifies the number of reserved constraint bytes. The value of num_reserved_constraint_bytes must be 0. Any other value of num_reserved_constraint_bytes must not exist in a bitstream that is reserved for future use by ITU-T|ISO / IEC and complies with this version of this specification.
[0133] gci_reserved_constraint_byte[ i ] can have any value. Its presence and value do not affect decoder suitability for the profile specified in this version of this specification. Decoders conforming to this version of this specification must ignore the values of all gci_reserved_constraint_byte[ i ] syntax elements.
[0134] 3.2. SPS Syntax and Semantics
[0135] In the latest VVC draft text, the SPS syntax and semantics are as follows:
[0136]
[0137]
[0138]
[0139]
[0140]
[0141]
[0142]
[0143]
[0144]
[0145]
[0146]
[0147] The SPS RBSP must be available in the decoding process before being referenced, and is included in at least one AU with TemporalId 0 or provided through external means.
[0148] In CVS, all SPS NAL units with a specific value of sps_seq_parameter_set_id must have the same content.
[0149] sps_seq_parameter_set_id provides an identifier for the APS so that other syntax elements can reference it.
[0150] SPS NAL units share the same value space of sps_seq_parameter_set_id regardless of the nuh_layer_id value.
[0151] Let spsLayerId be the nuh_layer_id value of a specific SPS NAL unit, and let vclLayerId be the nuh_layer_id value of a specific VCL NAL unit. A specific VCL NAL unit must not reference a specific SPS NAL unit unless spsLayerId is less than or equal to vclLayerId and a layer with a nuh_layer_id equal to spsLayerId is included in at least one OLS that contains a layer with a nuh_layer_id equal to vclLayerId.
[0152] sps_video_parameter_set_id specifies the value of vps_video_parameter_set_id for the VPS referenced by SPS when it is greater than 0.
[0153] If sps_video_parameter_set_id is 0, the following applies:
[0154] - SPS does not refer to VPS.
[0155] - When decoding each CLVS that references SPS, VPS is not referenced.
[0156] - The value of vps_max_layers_minus1 is inferred to be equal to 0.
[0157] - CVS must contain only one layer (i.e., all VCL NAL units in CVS must have the same value for nuh_layer_id).
[0158] - The value of GeneralLayerIdx[nuh_layer_id] is inferred to be equal to 0.
[0159] - The value of vps_independent_layer_flag [GeneralLayerIdx [nuh_layer_id] ] is inferred to be the same as 1.
[0160] When vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]] is equal to 1, the SPS referenced by the CLVS having a specific nuh_layer_id value nuhLayerId must have the same nuh_layer_id as nuhLayerId.
[0161] The value of sps_video_parameter_set_id must be the same in all SPS referenced by CLVS in CVS.
[0162] sps_max_sublayers_minus1 plus 1 specifies the maximum number of temporal sublayers that can exist for each CLVS referencing an SPS. The value of sps_max_sublayers_minus1 must be in a range including 0 to vps_max_sublayers_minus1.
[0163] sps_reserved_zero_4bits must be equal to 0 in bitstreams that follow this version of this specification. Other values for sps_reserved_zero_4bits are reserved for future use by ITU-T ISO / IEC.
[0164] sps_ptl_dpb_hrd_params_present_flag, equivalent to 1, specifies that the profile_tier_level() syntax structure and the dpb_parameters() syntax structure exist in the SPS, and that the general_hrd_parameters() syntax structure and the ols_hrd_parameters() syntax structure may also exist in the SPS. sps_ptl_dpb_hrd_params_present_flag, equivalent to 0, specifies that none of these four syntax structures exist in the SPS. The value of sps_ptl_dpb_hrd_params_present_flag must be equal to vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]].
[0165] gdr_enabled_flag equal to 1 specifies that a GDR picture may exist in a CLVS that references an SPS. gdr_enabled_flag equal to 0 specifies that a GDR picture does not exist in a CLVS that references an SPS.
[0166] chroma_format_idc specifies chroma sampling relative to the luminance sampling specified in Section 6.2.
[0167] Same as 1 split_colour_plane_flagspecifies that the three color components of the 4:4:4 chroma format are coded separately. A separator_colour_plane_flag equal to 0 specifies that the color components are not coded separately. If Separate_colour_plane_flag does not exist, it is inferred to be equal to 0. When Separate_colour_plane_flag is equal to 1, the coded picture consists of three separate components, each composed of coded samples from a single color plane (Y, Cb, or Cr) and using monochrome coding syntax. In this case, each color plane is associated with a specific color_plane_id value.
[0168] Note 1 - There is no dependency in the decoding process between color planes with different color_plane_id values. For example, the decoding process of a monochrome picture with one color_plane_id value does not use any data from a monochrome picture with a different color_plane_id value for inter-prediction.
[0169] Depending on the value of Separate_colour_plane_flag, the value of the ChromaArrayType variable is assigned as follows:
[0170] - If separate_colour_plane_flag is 0, ChromaArrayType is set to be the same as chroma_format_idc.
[0171] - Otherwise (separate_colour_plane_flag is equal to 1), ChromaArrayType is set to 0.
[0172] res_change_in_clvs_allowed_flag, equivalent to 1, specifies that picture space resolution can be changed within CLVS that reference SPS. res_change_in_clvs_allowed_flag, equivalent to 0, specifies that picture space resolution cannot be changed within any CLVS that reference SPS.
[0173] pic_width_max_in_luma_samples specifies the maximum width in luma sample units for each decoded picture referencing the SPS. pic_width_max_in_luma_samples must not be 0 and must be an integer multiple of Max(8, MinCbSizeY).
[0174] For all OLS with OLS index i containing one or more layers referencing SPS, the bitstream conformance requirement is that the pic_width_max_in_luma_samples value must be less than or equal to the ols_dpb_pic_width[ i ] value.
[0175] pic_height_max_in_luma_samples specifies the maximum height in luma sample units for each decoded picture referencing the SPS. pic_height_max_in_luma_samples must not be 0 and must be an integer multiple of Max(8, MinCbSizeY).
[0176] For all OLS with OLS index i that include one or more layers referencing SPS, the bitstream conformance requirement is that the pic_height_max_in_luma_samples value must be less than or equal to the ols_dpb_pic_height[ i ] value.
[0177] sps_conformance_window_flag equal to 1 indicates that the conformance cropping window offset parameter in SPS is as follows. sps_conformance_window_flag equal to 0 indicates that the conformance cropping window offset parameter does not exist.
[0178] 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 pictures where pic_width_in_luma_samples is equal to pic_width_max_in_luma_samples and pic_height_in_luma_samples is equal to pic_height_max_in_luma_samples. When sps_conformance_window_flag is 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.
[0179] The conformity cropping window includes luminar samples having horizontal picture coordinates that include SubWidthC*sps_conf_win_left_offset to pic_width_max_in_luma_samples- (SubWidthC*sps_conf_win_right_offset+1) and vertical picture coordinates from SubHeightC*sps_conf_win_top_offset to pic_height_max_in_luma_samples- (SubHeightC*sps_conf_win_bottom_offset+1).
[0180] The value of SubWidthC* (sps_conf_win_left_offset+sps_conf_win_right_offset) must be less than pic_width_max_in_luma_samples, and the value of SubHeightC* (sps_conf_win_top_offset+ sps_conf_win_bottom_offset) must be less than pic_height_max_in_luma_samples.
[0181] When ChromaArrayType is not 0, the corresponding specified sample of the two chroma arrays is a sample with picture coordinates (x / SubWidthC, y / SubHeightC), where (x, y) are the picture coordinates of the specified chroma sample.
[0182] Note 2 - The fit cropping window offset parameter applies only to the output. All internal decoding processes are applied to the uncropped picture size.
[0183] sps_log2_ctu_size_minus5 plus 5 specifies the luminal coding tree block size for each CTU. The value of sps_log2_ctu_size_minus5 must be in the range from 0 to 2. The value of sps_log2_ctu_size_minus5, 3, is reserved for later use by ITU-T|ISO / IEC.
[0184] The variables CtbLog2SizeY and CtbSizeY are derived as follows:
[0185] CtbLog2SizeY = sps_log2_ctu_size_minus5 + 5 (43)
[0186] CtbSizeY = 1 << CtbLog2SizeY (44)
[0187] A subpic_info_present_flag equal to 1 specifies that subpic information exists for CLVS and that each picture in CLVS may have one or more subpices. A subpic_info_present_flag equal to 0 specifies that subpic information does not exist for CLVS and that each picture in CLVS has only one subpice.
[0188] When res_change_in_clvs_allowed_flag is equal to 1, the value of subpic_info_present_flag must be equal to 0.
[0189] Note 3 - If the bitstream is the result of a sub-bitstream extraction process and contains only a subset of subpictures of the input bitstream for the sub-bitstream extraction process, you may need to set the value of subpic_info_present_flag in the RBSP of the SPS to 1.
[0190] sps_num_subpics_minus1 plus 1 specifies the number of subpics in each picture of CLVS. The value of sps_num_subpics_minus1 must be in the range from 0 to Ceil(pic_width_max_in_luma_samplesχCtbSizeY) * Ceil(pic_height_max_in_luma_samplesχCtbSizeY) - 1. If it does not exist, the value of sps_num_subpics_minus1 is inferred to be equal to 0.
[0191] sps_independent_subpics_flag equal to 1 specifies that intra-predict, inter-predict, and in-loop filtering operations may not be performed across any sub-picture boundary of CLVS. sps_independent_subpics_flag equal to 0 specifies that inter-predict or in-loop filtering operations across sub-picture boundary of CLVS may be allowed. If not present, the value of sps_independent_subpics_flag is inferred to be equal to 0.
[0192] subpic_ctu_top_left_x[ i ] specifies the horizontal position of the top-left CTU of the i-th subpicture in CtbSizeY units. The length of the syntax element is Ceil (Log2 ( (pic_width_max_in_luma_samples+CtbSizeY-1) >>CtbLog2SizeY) ) bits. If not present, the value of subpic_ctu_top_left_x[ i ] is inferred to be equal to 0.
[0193] subpic_ctu_top_left_y[ i ] specifies the vertical position of the top-left CTU of the i-th subpicture in CtbSizeY units. The length of the syntax element is Ceil (Log2 ( (pic_height_max_in_luma_samples+CtbSizeY-1) >>CtbLog2SizeY) ) bits. If not present, the value of subpic_ctu_top_left_y[ i ] is inferred to be equal to 0.
[0194] subpic_width_minus1[ i ] plus 1 specifies the width of the i-th subpicture in CtbSizeY units. The length of the syntax element is Ceil (Log2 ( (pic_width_max_in_luma_samples+CtbSizeY-1) >>CtbLog2SizeY) ) bits. When not present, 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_le ft_x[ i ] -1.
[0195] subpic_height_minus1[ i ] plus 1 specifies the height of the i-th subpicture in CtbSizeY units. The length of the syntax element is Ceil (Log2 ( (pic_height_max_in_luma_samples+CtbSizeY-1) >>CtbLog2SizeY) ) bits. When not present, 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_l eft_y[ i ] - 1.
[0196] subpic_treated_as_pic_flag[ i ], equivalent to 1, specifies that the i-th subpicture of each coded picture in CLVS is treated as a picture in the decoding process, excluding in-loop filtering. subpic_treated_as_pic_flag[ i ], equivalent to 0, specifies that the i-th subpicture of each coded picture in CLVS is not treated as a picture in the decoding process, excluding in-loop filtering. When not present, the value of subpic_treated_as_pic_flag[ i ] is inferred to be the same as sps_independent_subpics_flag.
[0197] When subpic_treated_as_pic_flag[ i ] is equal to 1, the following are bitstream conformance requirements that must be true for each output layer and reference layer of the OLS, including the layer containing the i-th subpicture as the output layer:
[0198] - All pictures in the output layer and its reference layer must have the same values for pic_width_in_luma_samples and pic_height_in_luma_samples.
[0199] - For each value of j in the range from 0 to sps_num_subpics_minus1, all SPS referenced by the output layer and its reference layer must have the same value as sps_num_subpics_minus1 and the same value as each of subpic_ctu_top_left_x[j], subpic_ctu_top_left_y[j], subpic_width_minus1[j], subpic_flag_minus1[j], and subpic_height_cross1[j].
[0200] - All pictures in each access unit of the output layer and its reference layer must have the same SubpicIdVal[j] value for each value of j in the range including 0 to sps_num_subpics_minus1.
[0201] loop_filter_across_subpic_enabled_flag[ i ], equivalent to 1, specifies that in-loop filtering can be performed across the boundary of the i-th subpic in each coded picture of the CLVS. loop_filter_across_subpic_enabled_flag[ i ], equivalent to 0, specifies that in-loop filtering is not performed across the boundary of the i-th subpic in each coded picture of the CLVS. When not present, the value of loop_filter_across_subpic_enabled_pic_flag[ i ] is inferred to be 1 - sps_independent_subpics_flag.
[0202] The bitstream conformity requirement is that when each subpicture is decoded, the shape of the subpicture must be such that the entire left boundary and the entire top boundary constitute the picture boundary or the boundary of the previously decoded subpicture.
[0203] sps_subpic_id_len_minus1 plus 1 specifies the number of bits used to represent the syntax element sps_subpic_id[ i ], the syntax element pps_subpic_id[ i ] (if present), and the syntax element slice_subpic_id (if present). The value of sps_subpic_id_len_minus1 must be in the range from 0 to 15. The value of 1<<(sps_subpic_id_len_minus1+1) must be greater than or equal to sps_num_subpics_minus1+1.
[0204] subpic_id_mapping_explicitly_signalled_flag, which is equal to 1, specifies that the subpic ID mapping is explicitly signaled in the PPS or SPS referenced by the coded picture in the CLVS. subpic_id_mapping_explicitly_signalled_flag, which is equal to 0, specifies that the subpic ID mapping is not explicitly signaled for the CLVS. If it does not exist, the value of subpic_id_mapping_explicitly_signalled_flag is inferred to be equal to 0.
[0205] If subpic_id_mapping_in_sps_flag is 1, it specifies that the subpicture ID mapping is signaled in the SPS when subpic_id_mapping_explicitly_signalled_flag is equal to 1. If subpic_id_mapping_in_sps_flag is equal to 0, it specifies that the subpicture ID mapping is signaled in the PPS when subpic_id_mapping_explicitly_signalled_flag is equal to 1, the coded picture of the CLVS.
[0206] sps_subpic_id[ i ] specifies the subpicture ID of the i-th subpicture. The length of the sps_subpic_id[ i ] syntax element is sps_subpic_id_len_minus1+1 bits.
[0207] bit_depth_minus8 specifies the values for the bit depth BitDepth of the luminance and chroma array samples and the range offset QpBdOffset of the luminance and chroma quantization parameters as follows:
[0208] BitDepth = 8 + bit_depth_minus8 (45)
[0209] QpBdOffset = 6 * bit_depth_minus8 (46)
[0210] bit_depth_minus8 must be in a range including 0 to 8.
[0211] sps_entropy_coding_sync_enabled_flag, identical to 1, specifies that a specific synchronization process for context variables is called before decoding the CTU containing the first CTB of the CTB row in each tile of each picture referencing SPS, and a specific saving process for context variables is called after decoding the CTU containing the first CTB of the CTB row in each tile of each picture referencing SPS.
[0212] sps_entropy_coding_sync_enabled_flag equal to 0 specifies that a specific synchronization process for context variables does not need to be called before decoding the CTU containing the first CTB of the CTB row in each tile of each picture referencing SPS, and a specific saving process for context variables does not need to be called after decoding the CTU containing the first CTB of the CTB row in each tile of each picture referencing SPS.
[0213] sps_wpp_entry_point_offsets_present_flag, which is equal to 1, specifies that if sps_entropy_coding_sync_enabled_flag is equal to 1, signaling for the entry point offset for the CTU row may exist in the slice header of the picture referencing the SPS.
[0214] sps_wpp_entry_point_offsets_present_flag, which is equal to 0, specifies that signaling for the entry point offset for a CTU row does not exist in the slice header of the picture referencing the SPS. If it does not exist, the value of sps_wpp_entry_point_offsets_present_flag is inferred to be equal to 0.
[0215] sps_weighted_pred_flag equal to 1 specifies that weighted predictions can be applied to P slices referencing SPS. sps_weighted_pred_flag equal to 0 specifies that weighted predictions are not applied to P slices referencing SPS.
[0216] Same as 1 sps_weighted_bipred_flag Specifies that explicit weighted predictions can be applied to B slices referencing the SPS. sps_weighted_bipred_flag, which is equal to 0, specifies that explicit weighted predictions are not applied to B slices referencing the SPS.
[0217] log2_max_pic_order_cnt_lsb_minus4 sets the value of the variable MaxPicOrderCntLsb, used in the decoding process for the picture order count, as follows:
[0218] MaxPicOrderCntLsb = 2 ( log2_max_pic_order_cnt_lsb_minus4 + 4 ) (47)
[0219] The value of log2_max_pic_order_cnt_lsb_minus4 must be in the range from 0 to 12.
[0220] sps_poc_msb_flag identical to 1 specifies that the ph_poc_msb_present_flag syntax element exists in the PH that references the SPS.
[0221] sps_poc_msb_flag equal to 0 specifies that the ph_poc_msb_present_flag syntax element does not exist in the PH referencing the SPS.
[0222] poc_msb_len_minus1 plus 1 specifies the length of the poc_msb_val syntax element in bit units when present in a PH that references an SPS. The value of poc_msb_len_minus1 must be in the range from 0 to 32 - log2_max_pic_order_cnt_lsb_minus4 - 5.
[0223] num_extra_ph_bits_bytes specifies the number of bytes of additional bits in the PH syntax structure for a coded picture referencing an SPS. The value of num_extra_ph_bits_bytes must be equal to 0 in a bitstream conforming to this version of this specification. Although the value of num_extra_ph_bits_bytes must be equal to 0 in this version of this specification, a decoder conforming to this version of this specification must allow num_extra_ph_bits_bytes values equal to 1 or 2 to appear in the syntax.
[0224] num_extra_sh_bits_bytes specifies the number of bytes of extra bits in the slice header for a coded picture referencing an SPS. The value of num_extra_sh_bits_bytes must be equal to 0 in a bitstream conforming to this version of this specification. Although the value of num_extra_sh_bits_bytes must be equal to 0 in this version of this specification, decoders conforming to this version of this specification must allow num_extra_sh_bits_bytes values equal to 1 or 2 to appear in the syntax.
[0225] sps_sublayer_dpb_params_flag is used to control the presence of the max_dec_pic_buffering_minus1[ i ], max_num_reorder_pics[ i ], and max_latency_increase_plus1[ i ] syntax elements in the dpb_parameters() syntax structure of SPS. If they do not exist, the value of sps_sub_dpb_params_info_present_flag is inferred to be equal to 0.
[0226] long_term_ref_pics_flag equal to 0 specifies that LTRP is not used for inter prediction of coded pictures in CLVS. long_term_ref_pics_flag equal to 1 specifies that LTRP may be used for inter prediction of one or more coded pictures in CLVS.
[0227] An inter_layer_ref_pics_present_flag equal to 0 specifies that ILRP is not used for inter prediction of coded pictures in CLVS. An inter_layer_ref_pic_flag equal to 1 specifies that ILRP may be used for inter prediction of one or more coded pictures in CLVS. When sps_video_parameter_set_id is equal to 0, the value of inter_layer_ref_pics_present_flag is inferred to be equal to 0. When vps_independent_layer_flag[ GeneralLayerIdx[ nuh_layer_id ] ] is equal to 1, the value of inter_layer_ref_pics_present_flag must be equal to 0. [Ed. (YK): Please check if there is a better name for this syntax element.]
[0228] sps_idr_rpl_present_flag, equivalent to 1, specifies that reference picture list syntax elements exist in the slice header of an IDR picture. sps_idr_rpl_present_flag, equivalent to 0, specifies that reference picture list syntax elements do not exist in the slice header of an IDR picture.
[0229] rpl1_same_as_rpl0_flag identical to 1 specifies that the syntax element num_ref_pic_lists_in_sps[1] and syntax structure ref_pic_list_struct(1, rplsIdx) do not exist and the following applies:
[0230] - The value of num_ref_pic_lists_in_sps[1] is inferred to be the same as the value of num_ref_pic_lists_in_sps[0].
[0231] - The value of each syntax element in ref_pic_list_struct(1, rplsIdx) is inferred to be the same as the value of the corresponding syntax element in ref_pic_list_struct(0, rplsIdx) for rplsIdx between 0 and num_ref_pic_lists_in_sps[0] - 1.
[0232] num_ref_pic_lists_in_sps[ i ] specifies the number of ref_pic_list_struct(listIdx, rplsIdx) syntax structures in the SPS that have listIdx equal to i. The value of num_ref_pic_lists_in_sps[ i ] must be in the range from 0 to 64.
[0233] Note 4 - For each value of listIdx (equivalent to 0 or 1), the decoder must allocate memory for a total of num_ref_pic_lists_in_sps[ i ] + 1 ref_pic_list_struct(listIdx, rplsIdx) syntax structures because there may be one ref_pic_list_struct(listIdx, rplsIdx) syntax structure signaled directly from the slice header of the current picture.
[0234] qtbtt_dual_tree_intra_flag, equivalent to 1, specifies that for slice I, each CTU is split into coding units with 64x64 luminance samples using implicit quadtree splitting, and that these coding units are the roots of two separate coding_tree syntax structures for luminance and chroma. qtbtt_dual_tree_intra_flag, equivalent to 0, specifies that no separate coding_tree syntax structures are used for slice I. When qtbtt_dual_tree_intra_flag does not exist, it is inferred to be equivalent to 0.
[0235] log2_min_luma_coding_block_size_minus2 plus 2 specifies the minimum luma coding block size. The value range of log2_min_luma_coding_block_size_minus2 must be within the range from 0 to Min(4, sps_log2_ctu_size_minus5+3).
[0236] The variables MinCbLog2SizeY, MinCbSizeY, IbcBufWidthY, IbcBufWidthC, and Vsize are derived as follows:
[0237] MinCbLog2SizeY = log2_min_luma_coding_block_size_minus2 + 2 (48)
[0238] MinCbSizeY = 1 << MinCbLog2SizeY (49)
[0239] IbcBufWidthY = 256 * 128 / CtbSizeY (50)
[0240] IbcBufWidthC = IbcBufWidthY / SubWidthC (51)
[0241] VSize = Min(64, CtbSizeY) (52)
[0242] The value of MinCbSizeY must be less than or equal to VSize.
[0243] The variables CtbWidthC and CtbHeightC, which specify the width and height of the array for each chroma CTB respectively, are derived as follows:
[0244] - If chroma_format_idc is equal to 0 (black and white) or separator_colour_plane_flag is 1, CtbWidthC and CtbHeightC are both 0.
[0245] - Otherwise, CtbWidthC and CtbHeightC are derived as follows:
[0246] CtbWidthC = CtbSizeY / SubWidthC (53)
[0247] CtbHeightC = CtbSizeY / SubHeightC (54)
[0248] For log2BlockWidth in the range of 0 to 4 and log2BlockHeight in the range of 0 to 4, the top-right diagonal scan order array initialization process as specified in Section 6.5.2 is 1< <log2BlockWidth 및 1<<log2BlockHeight를 입력으로 호출되고, 출력은 DiagScanOrder [log2BlockWidth] [log2BlockHeight] 에 할당된다.
[0249] For log2BlockWidth in the range of 0 to 6 and log2BlockHeight in the range of 0 to 6, the horizontal and vertical transverse scan order array initialization process specified in Section 6.5.3 is 1< <log2BlockWidth 및 1<<log2BlockHeight를 입력으로 호출되고, 출력은 HorTravScanOrder [log2BlockWidth] [log2BlockHeight] 및 VerTravScanOrder [log2BlockWidth] [log2BlockHeight] 에 할당된다.
[0250] partition_constraints_override_enabled_flag, identical to 1, specifies the presence of partition_constraints_override_flag in PHs that reference SPS.
[0251] partition_constraints_override_enabled_flag equal to 0 specifies the absence of partition_constraints_override_flag in PHs referencing SPS.
[0252] sps_log2_diff_min_qt_min_cb_intra_slice_lumaSpecifies that the default difference between the minimum base 2 log of the luminal samples of the luminal leaf blocks resulting from quadtree splitting of the CTU and the minimum coding block size base 2 log of the luminal samples for the luminal CUs of the slice with slice_type is equal to 2(I), which represents the SPS. When partition_constraints_override_enabled_flag is equal to 1, the default difference can be ignored by ph_log2_diff_min_qt_min_cb_luma in the PH referencing the SPS. The value of sps_log2_diff_min_qt_min_cb_intra_slice_luma must be in the range including 0 to CtbLog2SizeY-MinCbLog2SizeY. The minimum base 2 log of the luminal samples of the luminal leaf blocks resulting from quadtree splitting of the CTU is derived as follows:
[0253] MinQtLog2SizeIntraY = sps_log2_diff_min_qt_min_cb_intra_slice_luma + MinCbLog2SizeY (55)
[0254] sps_max_mtt_hierarchy_depth_intra_slice_luma specifies the default maximum hierarchy depth for coding units resulting from multi-type tree splitting of quadtree leaves in a slice of slice_type 2(I) referencing an SPS. When partition_constraints_override_enabled_flag is equal to 1, the default maximum hierarchy depth may be overridden by ph_max_mtt_hierarchy_depth_intra_slice_luma in the PH referencing the SPS. The value of sps_max_mtt_hierarchy_depth_intra_slice_luma must be in a range including 0 to 2*(CtbLog2SizeY-MinCbLog2SizeY).
[0255] sps_log2_diff_max_bt_min_qt_intra_slice_lumaSpecifies the default difference between the base 2 log of the maximum size (width or height) of the luminance samples of a luminance coding block that can be partitioned using binary partitioning, and the minimum size (width or height) of the luminance samples of a luminance leaf block resulting from the quadtree partitioning of a CTU in a slice of slice_type 2(I) referencing the SPS. When partition_constraints_override_enabled_flag is equal to 1, the default difference may be ignored by ph_log2_diff_max_bt_min_qt_luma in the PH referencing the SPS. The value of sps_log2_diff_max_bt_min_qt_intra_slice_luma must be in the range from 0 to CtbLog2SizeY - MinQtLog2SizeIntraY. If 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.
[0256] sps_log2_diff_max_tt_min_qt_intra_slice_lumaSpecifies the default difference between the base 2 log of the maximum size (width or height) of the luminance samples of a luminance coding block that can be partitioned using a ternary split, and the minimum size (width or height) of the luminance samples of a luminance leaf block resulting from the quadtree split of the CTU in a slice of slice_type 2(I) referencing the SPS. When partition_constraints_override_enabled_flag is equal to 1, the default difference may be ignored by ph_log2_diff_max_tt_min_qt_luma in the PH referencing the SPS. The value of sps_log2_diff_max_tt_min_qt_intra_slice_luma must be in the range from 0 to CtbLog2SizeY-MinQtLog2SizeIntraY. If 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.
[0257] sps_log2_diff_min_qt_min_cb_inter_slice specifies the default difference between the base 2 log of the minimum size of the luminal samples of the luminal leaf blocks resulting from the quadtree splitting of the CTU and the base 2 log of the minimum luminal coding block size of the luminal samples of the luminal CUs of the slices referencing the SPS with slice_type 0 (B) or 1 (P). When partition_constraints_override_enabled_flag is equal to 1, the default difference may be ignored by ph_log2_diff_min_qt_min_cb_luma in the PH referencing the SPS. The value of sps_log2_diff_min_qt_min_cb_inter_slice must be in the range from 0 to CtbLog2SizeY - MinCbLog2SizeY. The minimum size base 2 logarithm from the luminal samples of the luminal leaf blocks resulting from the quadtree splitting of the CTU is derived as follows:
[0258] MinQtLog2SizeInterY = sps_log2_diff_min_qt_min_cb_inter_slice + MinCbLog2SizeY (56)
[0259] sps_max_mtt_hierarchy_depth_inter_slice specifies the default maximum hierarchy depth for coding units resulting from multi-type tree splitting of quadtree leaves in slices where slice_type is 0 (B) or 1 (P) referencing an SPS. When partition_constraints_override_enabled_flag is equal to 1, the default maximum hierarchy depth may be overridden by ph_max_mtt_hierarchy_depth_inter_slice in the PH referencing the SPS. The value of sps_max_mtt_hierarchy_depth_inter_slice must be in a range including 0 to 2*(CtbLog2SizeY-MinCbLog2SizeY).
[0260] sps_log2_diff_max_bt_min_qt_inter_slice specifies the default difference between the base 2 log of the maximum size (width or height) of the luminal samples of a luminal coding block that can be partitioned using binary partitioning, and the minimum size (width or height) of the luminal samples of a luminal leaf block resulting from the quadtree partitioning of a CTU in a slice where slice_type referencing the SPS is 0 (B) or 1 (P). When partition_constraints_override_enabled_flag is equal to 1, the default difference may be ignored by ph_log2_diff_max_bt_min_qt_luma in the PH referencing the SPS. The value of sps_log2_diff_max_bt_min_qt_inter_slice must be in the range from 0 to CtbLog2SizeY - MinQtLog2SizeInterY. If sps_log2_diff_max_bt_min_qt_inter_slice is not present, the value of sps_log2_diff_max_bt_min_qt_inter_slice is inferred to be equal to 0.
[0261] sps_log2_diff_max_tt_min_qt_inter_slice specifies the default difference between the base 2 log of the maximum size (width or height) of the luminal samples of a luminal coding block that can be partitioned using ternary partitioning, and the minimum size (width or height) of the luminal samples of a luminal leaf block resulting from the quadtree partitioning of a CTU in a slice where slice_type referencing the SPS is 0 (B) or 1 (P). When partition_constraints_override_enabled_flag is equal to 1, the default difference may be ignored by ph_log2_diff_max_tt_min_qt_luma in the PH referencing the SPS. The value of sps_log2_diff_max_tt_min_qt_inter_slice must be in the range from 0 to CtbLog2SizeY - MinQtLog2SizeInterY. If sps_log2_diff_max_tt_min_qt_inter_slice is not present, the value of sps_log2_diff_max_tt_min_qt_inter_slice is inferred to be equal to 0.
[0262] sps_log2_diff_min_qt_min_cb_intra_slice_chromaSpecifies the default difference between the minimum base 2 log of luminance samples in chroma leaf blocks resulting from quadtree splitting of chroma CTUs with the same treeType as DUAL_TREE_CHROMA and the minimum base 2 log of luminance samples for chroma CUs with the same treeType as DUAL_TREE_CHROMA in slices with slice_type 2(I) referencing SPS. When partition_constraints_override_enabled_flag is equal to 1, the default difference may be ignored by ph_log2_diff_min_qt_min_cb_chroma present in PHs referencing SPS. The value of sps_log2_diff_min_qt_min_cb_intra_slice_chroma must be in the range including 0 to CtbLog2SizeY-MinCbLog2SizeY. If 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 minimum size base 2 log of the luminance samples of the chroma leaf blocks resulting from quadtree splitting of CTUs with the same treeType as DUAL_TREE_CHROMA is derived as follows:
[0263] MinQtLog2SizeIntraC = sps_log2_diff_min_qt_min_cb_intra_slice_chroma + MinCbLog2SizeY (57)
[0264] sps_max_mtt_hierarchy_depth_intra_slice_chroma specifies the default maximum hierarchy depth for chroma coding units resulting from multi-type tree splitting of chroma quadtree leaves with the same treeType as DUAL_TREE_CHROMA in a slice of slice_type 2(I) referencing an SPS. When partition_constraints_override_enabled_flag is equal to 1, the default maximum hierarchy depth may be overridden by ph_max_mtt_hierarchy_depth_chroma present in the PH referencing the SPS. The value of sps_max_mtt_hierarchy_depth_intra_slice_chroma must be in the range from 0 to 2*(CtbLog2SizeY-MinCbLog2SizeY). If it does not exist, the value of sps_max_mtt_hierarchy_depth_intra_slice_chroma is inferred to be equal to 0.
[0265] sps_log2_diff_max_bt_min_qt_intra_slice_chroma specifies the default difference between the base 2 log of the maximum size (width or height) of the luminance samples in the chroma coding blocks that can be split using binary splitting, and the minimum size (width or height) of the luminance samples in the chroma leaf blocks resulting from quadtree splitting of the chroma CTU with treeType DUAL_TREE_CHROMA in the slice with slice_type 2(I) referencing the SPS. When partition_constraints_override_enabled_flag is equal to 1, the default difference can be ignored by ph_log2_diff_max_bt_min_qt_chroma present in the PH referencing the SPS. The value of sps_log2_diff_max_bt_min_qt_intra_slice_chroma must be in the range from 0 to CtbLog2SizeY-MinQtLog2SizeIntraC. 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.
[0266] sps_log2_diff_max_tt_min_qt_intra_slice_chromaSpecifies the default difference between the base 2 log of the maximum size (width or height) of the luminance samples in a chroma coding block that can be partitioned using ternary partitioning, and the minimum size (width or height) of the luminance samples in a chroma leaf block resulting from quadtree partitioning of a chroma CTU with treeType DUAL_TREE_CHROMA in a slice with slice_type 2(I) referencing the SPS. When partition_constraints_override_enabled_flag is equal to 1, the default difference may be ignored by ph_log2_diff_max_tt_min_qt_chroma present in the PH referencing the SPS. The value of sps_log2_diff_max_tt_min_qt_intra_slice_chroma must be in the range including 0 to CtbLog2SizeY-MinQtLog2SizeIntraC. 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.
[0267] sps_max_luma_transform_size_64_flag, equivalent to 1, specifies that the maximum transform size of the lumina samples is equal to 64. sps_max_luma_transform_size_64_flag, equivalent to 0, specifies that the maximum transform size of the lumina samples is equal to 32.
[0268] If CtbSizeY is less than 64, the value of sps_max_luma_transform_size_64_flag must be equal to 0.
[0269] The variables MinTbLog2SizeY, MaxTbLog2SizeY, MinTbSizeY, and MaxTbSizeY are derived as follows:
[0270] MinTbLog2SizeY = 2 (58)
[0271] MaxTbLog2SizeY = sps_max_luma_transform_size_64_flag ? 6:5 (59)
[0272] MinTbSizeY = 1 << MinTbLog2SizeY (60)
[0273] MaxTbSizeY = 1 << MaxTbLog2SizeY (61)
[0274] sps_joint_cbcr_enabled_flag equal to 0 specifies that joint coding of chroma residuals is disabled. sps_joint_cbcr_enabled_flag equal to 1 specifies that joint coding of chroma residuals is enabled. If not present, the value of sps_joint_cbcr_enabled_flag is inferred to be equal to 0.
[0275] same_qp_table_for_chroma equal to 1 specifies that only one chroma QP mapping table is signaled, and this table is applied to Cb and Cr residuals and joint Cb-Cr residuals when sps_joint_cbcr_enabled_flag is equal to 1. same_qp_table_for_chroma equal to 0 specifies that one additional chroma QP mapping table is signaled in the SPS for Cb and Cr and joint Cb-Cr when sps_joint_cbcr_enabled_flag is equal to 1. If same_qp_table_for_chroma is not present in the bitstream, the value of same_qp_table_for_chroma is inferred to be equal to 1.
[0276] qp_table_start_minus26[ i ] plus 26 specifies the starting Luma and Chroma QP used to describe the i-th Chroma QP mapping table. The value of qp_table_start_minus26[ i ] must be in the range from -26 to QpBdOffset up to 36. When qp_table_start_minus26[ i ] does not exist in the bitstream, the value of qp_table_start_minus26[ i ] is inferred to be equal to 0.
[0277] num_points_in_qp_table_minus1[ i ] plus 1 specifies the number of points used to describe the i-th chroma QP mapping table. The value of num_points_in_qp_table_minus1[ i ] must be in the range from 0 to 63+QpBdOffset. When num_points_in_qp_table_minus1[0] does not exist in the bitstream, the value of num_points_in_qp_table_minus1[0] is inferred to be equal to 0.
[0278] delta_qp_in_val_minus1[ i ][j] specifies the delta value used to derive the input coordinates of the j-th pivot point of the i-th chroma QP mapping table. When delta_qp_in_val_minus1[0][j] does not exist in the bitstream, the value of delta_qp_in_val_minus1[0][j] is inferred to be equal to 0.
[0279] delta_qp_diff_val[ i ][j] specifies the delta value used to derive the output coordinates of the j-th pivot point of the i-th chroma QP mapping table.
[0280] The i-th chroma QP mapping table ChromaQpTable[ i ] for i = 0..numQpTables-1 is derived as follows:
[0281] qpInVal[ i ][ 0 ] = qp_table_start_minus26[ i ] + 26
[0282] qpOutVal[ i ][ 0 ] = qpInVal[ i ][ 0 ]
[0283] for( j = 0; j <= num_points_in_qp_table_minus1[ i ]; j++ ) {
[0284] qpInVal[ i ][ j + 1 ] = qpInVal[ i ][ j ] + delta_qp_in_val_minus1[ i ][ j ] + 1
[0285] qpOutVal[ i ][ j + 1 ] = qpOutVal[ i ][ j ] + ( delta_qp_in_val_minus1[ i ][ j ] ^ delta_qp_diff_val[ i ][ j ] )
[0286] }
[0287] ChromaQpTable[ i ][ qpInVal[ i ][ 0 ] ] = qpOutVal[ i ][ 0 ]
[0288] for( k = qpInVal[ i ][ 0 ] - 1; k >= - QpBdOffset; k - - )
[0289] ChromaQpTable[ i ][ k ] = Clip3( -QpBdOffset, 63, ChromaQpTable[ i ][ k + 1 ] -1 ) (62)
[0290] for( j = 0; j <= num_points_in_qp_table_minus1[ i ]; j++ ) {
[0291] sh = ( delta_qp_in_val_minus1[ i ][j ] + 1 ) >> 1
[0292] for( k = qpInVal[ i ][ j ] + 1, m = 1; k <= qpInval[ i ][ j + 1 ]; k++, m++ )
[0293] ChromaQpTable[ i ][ k ] = ChromaQpTable[ i ][ qpInVal[ i ][ j ] ] +
[0294] ( ( qpOutVal[ i ][j + 1] - qpOutVal[ i ][j ] ) * m + sh ) / ( delta_qp_in_val_minus1[ i ][j] + 1 )
[0295] }
[0296] for( k = qpInVal[ i ][ num_points_in_qp_table_minus1[ i ] + 1 ] + 1; k <= 63; k++ )
[0297] ChromaQpTable[ i ][ k ] = Clip3( -QpBdOffset, 63, ChromaQpTable[ i ][ k - 1 ] + 1 )
[0298] When same_qp_table_for_chroma is 1, ChromaQpTable[1][k] and ChromaQpTable[2][k] are set to be the same as ChromaQpTable[0][k] for k in the range including -QpBdOffset to 63.
[0299] The bitstream conformance requirement is that the values of qpInVal[ i ] [j] and qpOutVal[ i ] [j] must be in the range from -QpBdOffset to 63, with i ranging from 0 to numQpTables-1 and j ranging from 0 to num_points_in_qp_table_minus1[ i ] + 1.
[0300] sps_sao_enabled_flag equal to 1 specifies that the sample adaptive offset process is applied to the reconstructed picture after the deblocking filter process. sps_sao_enabled_flag equal to 0 specifies that the sample adaptive offset process is not applied to the reconstructed picture after the deblocking filter process.
[0301] If sps_alf_enabled_flag is 0, it specifies that the adaptive loop filter is disabled. If sps_alf_enabled_flag is 1, it specifies that the adaptive loop filter is enabled.
[0302] If sps_ccalf_enabled_flag is 0, it specifies that the cross-component adaptive loop filter is disabled. If sps_ccalf_enabled_flag is 1, it specifies that the cross-component adaptive loop filter can be enabled.
[0303] sps_transform_skip_enabled_flag, equivalent to 1, specifies that transform_skip_flag can exist in the transform unit syntax. sps_transform_skip_enabled_flag, equivalent to 0, specifies that transform_skip_flag does not exist in the transform unit syntax.
[0304] log2_transform_skip_max_size_minus2 specifies the maximum block size used for transform skips and must be in the range from 0 to 3.
[0305] The MaxTsSize variable is set to 1<< (log2_transform_skip_max_size_minus2+2).
[0306] sps_bdpcm_enabled_flag, identical to 1, specifies that intra_bdpcm_luma_flag and intra_bdpcm_chroma_flag may exist in the coding unit syntax for intra-coding units.
[0307] sps_bdpcm_enabled_flag equal to 0 specifies that intra_bdpcm_luma_flag and intra_bdpcm_chroma_flag do not exist in the coding unit syntax for intra-coding units. If they do not exist, the value of sps_bdpcm_enabled_flag is inferred to be equal to 0.
[0308] sps_ref_wraparound_enabled_flag equal to 1 specifies that horizontal wrap-around motion compensation is applied to inter prediction. sps_ref_wraparound_enabled_flag equal to 0 specifies that horizontal wrap-around 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 pic_width_in_luma_samples value of all PPS referencing the SPS, the sps_ref_wraparound_enabled_flag value must be equal to 0.
[0309] [Edit (Ed.)(YK): Here, semantics still depend on PPS syntax elements. ]
[0310] sps_temporal_mvp_enabled_flag, equivalent to 1, specifies that the temporal motion vector predictor can be used in CLVS. sps_temporal_mvp_enabled_flag, equivalent to 0, specifies that the temporal motion vector predictor is not used in CLVS.
[0311] sps_sbtmvp_enabled_flag = 1 specifies that sub-block-based temporal motion vector predictors can be used for decoding pictures in CVS that have all slices where slice_type is not equal to I. sps_sbtmvp_enabled_flag = 0 specifies that sub-block-based temporal motion vector predictors are not used in CVS. If sps_sbtmvp_enabled_flag is missing, it is inferred to be equal to 0.
[0312] sps_amvr_enabled_flag equal to 1 specifies that adaptive motion vector difference resolution is used in motion vector coding. amvr_enabled_flag equal to 0 specifies that adaptive motion vector difference resolution is not used in motion vector coding.
[0313] sps_bdof_enabled_flag equal to 0 specifies that bidirectional optical flow inter-prediction is disabled. sps_bdof_enabled_flag equal to 1 specifies that bidirectional optical flow inter-prediction is enabled.
[0314] sps_bdof_pic_present_flag, identical to 1, specifies that ph_disable_bdof_flag exists in PH that references SPS.
[0315] sps_bdof_pic_present_flag equal to 0 specifies that ph_disable_bdof_flag does not exist in the PH that references the SPS. When sps_bdof_pic_present_flag does not exist, the value of sps_bdof_pic_present_flag is inferred to be equal to 0.
[0316] sps_smvd_enabled_flag equal to 1 specifies that the symmetric motion vector difference can be used for motion vector decoding. sps_smvd_enabled_flag equal to 0 specifies that the symmetric motion vector difference is not used for motion vector coding.
[0317] sps_dmvr_enabled_flag equal to 1 specifies that bidirectional prediction-based decoder motion vector refinement is enabled. sps_dmvr_enabled_flag equal to 0 specifies that inter-pair prediction-based decoder motion vector refinement is disabled.
[0318] sps_dmvr_pic_present_flag, identical to 1, specifies that ph_disable_dmvr_flag exists in PH that references SPS.
[0319] sps_dmvr_pic_present_flag equal to 0 specifies that ph_disable_dmvr_flag does not exist in the PH that references the SPS. When sps_dmvr_pic_present_flag does not exist, the value of sps_dmvr_pic_present_flag is inferred to be equal to 0.
[0320] sps_mmvd_enabled_flag equal to 1 specifies that merge mode with motion vector difference is enabled. sps_mmvd_enabled_flag equal to 0 specifies that merge mode with motion vector difference is disabled.
[0321] If sps_isp_enabled_flag is 1, it specifies that intra prediction with subpartitions is enabled. If sps_isp_enabled_flag is 0, it specifies that intra prediction with subpartitions is disabled.
[0322] sps_mrl_enabled_flag equal to 1 specifies that intra prediction with multiple reference lines is enabled. sps_mrl_enabled_flag equal to 0 specifies that intra prediction with multiple reference lines is disabled.
[0323] sps_mip_enabled_flag equal to 1 specifies that matrix-based intra prediction is enabled. sps_mip_enabled_flag equal to 0 specifies that matrix-based intra prediction is disabled.
[0324] sps_cclm_enabled_flag, equivalent to 0, specifies that cross-component linear model intra-prediction from the luminal component to the chroma component is disabled. sps_cclm_enabled_flag, equivalent to 1, specifies that cross-component linear model intra-prediction from the luminal component to the chroma component is enabled. If sps_sbtmvp_enabled_flag is missing, it is inferred to be equivalent to 0.
[0325] sps_chroma_horizontal_collocated_flag, identical to 1, specifies that the prediction process operates in a manner designed for chroma sample positions that are not horizontally shifted relative to the corresponding luminar sample positions.
[0326] sps_chroma_horizontal_collocated_flag, which is equal to 0, specifies that the prediction process operates in a manner designed for chroma sample positions that are shifted to the right by 0.5 lumina sample units for the corresponding lumina sample position. If sps_chroma_horizontal_collocated_flag does not exist, it is inferred to be equal to 1.
[0327] sps_chroma_vertical_collocated_flag, identical to 1, specifies that the prediction process operates in a manner designed for chroma sample positions that are not vertically shifted relative to the corresponding luminar sample positions.
[0328] sps_chroma_vertical_collocated_flag, which is equal to 0, specifies that the prediction process operates in a manner designed for chroma sample positions that are shifted down by 0.5 lumina sample units for the corresponding lumina sample position. If sps_chroma_vertical_collocated_flag does not exist, it is inferred to be equal to 1.
[0329] sps_mts_enabled_flag identical to 1 specifies that sps_explicit_mts_intra_enabled_flag exists in the sequence parameter set RBSP syntax and sps_explicit_mts_inter_enabled_flag exists in the sequence parameter set RBSP syntax.
[0330] sps_mts_enabled_flag equal to 0 specifies that sps_explicit_mts_intra_enabled_flag does not exist in the sequence parameter set RBSP syntax and sps_explicit_mts_inter_enabled_flag does not exist in the sequence parameter set RBSP syntax.
[0331] sps_explicit_mts_intra_enabled_flag, which is equal to 1, specifies that mts_idx may exist in intra-coding unit syntax. sps_explicit_mts_intra_enabled_flag, which is equal to 0, specifies that mts_idx does not exist in intra-coding unit syntax. If it does not exist, the value of sps_explicit_mts_intra_enabled_flag is inferred to be equal to 0.
[0332] sps_explicit_mts_inter_enabled_flag equal to 1 specifies that mts_idx may exist in the intercoding unit syntax. sps_explicit_mts_inter_enabled_flag equal to 0 specifies that mts_idx does not exist in the intercoding unit syntax. If it does not exist, the value of sps_explicit_mts_inter_enabled_flag is inferred to be equal to 0.
[0333] Six_minus_max_num_merge_cand specifies the maximum number of merged motion vector prediction (MVP) candidates supported in SPS minus 6. The value of Six_minus_max_num_merge_cand must be in the range from 0 to 5.
[0334] MaxNumMergeCand, the maximum number of merge MVP candidates, is derived as follows:
[0335] MaxNumMergeCand = 6 - six_minus_max_num_merge_cand (63)
[0336] sps_sbt_enabled_flag equal to 0 specifies that subblock transforms for mutually predicted CUs are disabled. sps_sbt_enabled_flag equal to 1 specifies that subblock transforms for mutually predicted CUs are enabled.
[0337] sps_affine_enabled_flag specifies whether affine model-based motion compensation can be used for inter prediction. If sps_affine_enabled_flag is equal to 0, affine model-based motion compensation is not used in CLVS, and the syntax is restricted so that inter_affine_flag and cu_affine_type_flag do not exist in the coding unit syntax of CLVS. Otherwise (sps_affine_enabled_flag is equal to 1), affine model-based motion compensation can be used in CLVS.
[0338] five_minus_max_num_subblock_merge_cand specifies the maximum number of subblock-based merge motion vector prediction candidates supported in SPS minus 5.
[0339] sps_affine_type_flag specifies whether 6-parameter affine model-based motion compensation can be used for inter prediction. If sps_affine_type_flag is equal to 0, the syntax must be restricted so that 6-parameter affine model-based motion compensation is not used in CLVS and cu_affine_type_flag does not exist in the CLVS coding unit syntax. Otherwise (sps_affine_type_flag is equal to 1), 6-parameter affine model-based motion compensation can be used in CLVS. If it does not exist, the value of sps_affine_type_flag is inferred to be equal to 0.
[0340] sps_affine_amvr_enabled_flag, which is equal to 1, specifies that adaptive motion vector difference resolution is used for motion vector coding in affine inter mode. sps_affine_amvr_enabled_flag, which is equal to 0, specifies that adaptive motion vector difference resolution is not used for motion vector coding in affine inter mode. If not present, the value of sps_affine_amvr_enabled_flag is inferred to be equal to 0.
[0341] sps_affine_prof_enabled_flag specifies whether prediction enhancement using optical flow can be used for affine motion compensation. If sps_affine_prof_enabled_flag is equal to 0, affine motion compensation is not enhanced by optical flow. Otherwise (sps_affine_prof_enabled_flag is equal to 1), affine motion compensation can be enhanced by optical flow. If not present, the value of sps_affine_prof_enabled_flag is inferred to be equal to 0.
[0342] sps_prof_pic_present_flag, identical to 1, specifies that ph_disable_prof_flag exists in PH that references SPS.
[0343] sps_prof_pic_present_flag equal to 0 specifies that ph_disable_prof_flag does not exist in the PH that references the SPS. When sps_prof_pic_present_flag does not exist, the value of sps_prof_pic_present_flag is inferred to be equal to 0.
[0344] sps_palette_enabled_flag equal to 1 specifies that pred_mode_plt_flag may exist in coding unit syntax. sps_palette_enabled_flag equal to 0 specifies that pred_mode_plt_flag does not exist in coding unit syntax. If sps_sbtmvp_enabled_flag is missing, it is inferred to be equal to 0.
[0345] Same as 1 sps_act_enabled_flag Specifies that adaptive color transforms can be used and that cu_act_enabled_flag may exist in the coding unit syntax. sps_act_enabled_flag, which is equal to 0, specifies that adaptive color transforms are not used and that cu_act_enabled_flag does not exist in the coding unit syntax. If sps_sbtmvp_enabled_flag is not present, it is inferred to be equal to 0.
[0346] min_qp_prime_ts_minus4 specifies the minimum allowed quantization parameter for transform skip mode as follows:
[0347] QpPrimeTsMin = 4 + min_qp_prime_ts_minus4 (64)
[0348] The value of min_qp_prime_ts_minus4 must be in the range from 0 to 48.
[0349] sps_bcw_enabled_flag specifies whether bidirectional prediction with CU weights can be used for inter-prediction. If sps_bcw_enabled_flag is equal to 0, bidirectional prediction with CU weights is not used in CLVS, and syntax is restricted so that bcw_idx does not exist in the coding unit syntax of CLVS. Otherwise (sps_bcw_enabled_flag is equal to 1), bidirectional prediction with CU weights can be used in CLVS.
[0350] sps_ibc_enabled_flag, equivalent to 1, specifies that IBC prediction mode can be used for decoding pictures in CLVS. sps_ibc_enabled_flag, equivalent to 0, specifies that IBC prediction mode is not used in CLVS. If sps_ibc_enabled_flag is missing, it is inferred to be equivalent to 0.
[0351] Six_minus_max_num_ibc_merge_cand specifies the maximum number of IBC merged block vector prediction (BVP) candidates supported in SPS minus 6. The value of six_minus_max_num_ibc_merge_cand must be in the range from 0 to 5.
[0352] MaxNumIbcMergeCand, the maximum number of IBC merge BVP candidates, is derived as follows:
[0353] if( sps_ibc_enabled_flag )
[0354] MaxNumIbcMergeCand = 6 - six_minus_max_num_ibc_merge_cand (65)
[0355] else
[0356] MaxNumIbcMergeCand = 0
[0357] sps_ciip_enabled_flag specifies that ciip_flag may exist in the coding unit syntax for an intercoding unit. sps_ciip_enabled_flag equal to 0 specifies that ciip_flag does not exist in the coding unit syntax for an intercoding unit.
[0358] sps_fpel_mmvd_enabled_flag equal to 1 specifies that the merge mode with motion vector difference uses integer sample precision. If sps_fpel_mmvd_enabled_flag is 0, it specifies that the merge mode with motion vector difference can use fractional sample precision.
[0359] sps_gpm_enabled_flag specifies whether geometric partitioning-based motion compensation can be used for inter-prediction.
[0360] sps_gpm_enabled_flag equal to 0 specifies that geometric partition-based motion compensation is not used in CLVS and that syntax must be restricted so that merge_gpm_partition_idx, merge_gpm_idx0 and merge_gpm_idx1 do not exist in the coding unit syntax of CLVS.
[0361] sps_gpm_enabled_flag equal to 1 specifies that geometric partition-based motion compensation can be used in CLVS. If not present, the value of sps_gpm_enabled_flag is inferred to be equal to 0.
[0362] max_num_merge_cand_minus_max_num_gpm_cand specifies the maximum number of geometric partitioning merge mode candidates supported in SPS minus MaxNumMergeCand.
[0363] MaxNumGpmMergeCand, the maximum number of geometric partitioning merge mode candidates, is derived as follows:
[0364] if( sps_gpm_enabled_flag && MaxNumMergeCand >= 3 )
[0365] MaxNumGpmMergeCand = MaxNumMergeCand -
[0366] max_num_merge_cand_minus_max_num_gpm_cand (66)
[0367] else if( sps_gpm_enabled_flag && MaxNumMergeCand = = 2 )
[0368] MaxNumMergeCand = 2
[0369] else
[0370] MaxNumGpmMergeCand = 0
[0371] The value of MaxNumGpmMergeCand must be in a range including 2 to MaxNumMergeCand.
[0372] sps_lmcs_enabled_flag equal to 1 specifies that luminance mapping with chroma scaling is used in CLVS. sps_lmcs_enabled_flag equal to 0 specifies that luminance mapping with chroma scaling is not used in CLVS.
[0373] sps_lfnst_enabled_flag equal to 1 specifies that lfnst_idx may exist in intra-coding unit syntax. sps_lfnst_enabled_flag equal to 0 specifies that lfnst_idx does not exist in intra-coding unit syntax.
[0374] sps_ladf_enabled_flag equal to 1 specifies 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.
[0375] sps_num_ladf_intervals_minus2 plus 1 specifies the number of syntax elements sps_ladf_delta_threshold_minus1[ i ] and sps_ladf_qp_offset[ i ] in SPS. The value of sps_num_ladf_intervals_minus2 must be in the range from 0 to 3.
[0376] sps_ladf_lowest_interval_qp_offset specifies the offset used to derive the variable qP as specified in Section 8.8.3.6.1. The value of sps_ladf_lowest_interval_qp_offset must be in the range from -63 to 63.
[0377] sps_ladf_qp_offset[ i ] specifies the offset array used to derive the variable qP as specified in Section 8.8.3.6.1. The value of sps_ladf_qp_offset[ i ] must be in the range from -63 to 63.
[0378] sps_ladf_delta_threshold_minus1[ i ] is used to calculate the value of SpsLadfIntervalLowerBound[ i ], which specifies the lower bound of the i-th luma intensity level interval. The value of sps_ladf_delta_threshold_minus1[ i ] must be in the range from 0 to 2BitDepth-3.
[0379] The value of SpsLadfIntervalLowerBound[0] is set to 0.
[0380] For each value of i in the range from 0 to sps_num_ladf_intervals_minus2, the variable SpsLadfIntervalLowerBound[i+1] is derived as follows:
[0381] SpsLadfIntervalLowerBound[ i + 1 ] = SpsLadfIntervalLowerBound[ i ] (67)
[0382] + sps_ladf_delta_threshold_minus1[ i ] + 1
[0383] log2_parallel_merge_level_minus2 + 2 specifies the value of the variable Log2ParMrgLevel, which is used in the derivation process for spatial merge candidates as specified in Section 8.5.2.3, in the derivation process for motion vectors and reference indices of subblock merge mode as specified in Section 8.5.5.2, and to control the invocation of the update process for the history-based motion vector predictor list of Section 8.5.2.1. The value of log2_parallel_merge_level_minus2 must be in the range from 0 to CtbLog2SizeY-2. The variable Log2ParMrgLevel is derived as follows:
[0384] Log2ParMrgLevel = log2_parallel_merge_level_minus2 + 2 (68)
[0385] sps_scaling_list_enabled_flag equal to 1 specifies that a scaling list is used for the scaling process for transform factors. If sps_scaling_list_enabled_flag is 0, it specifies that a scaling list is not used for the scaling process for transform factors.
[0386] sps_dep_quant_enabled_flag equal to 0 specifies that dependent quantization is disabled for pictures referencing the SPS. sps_dep_quant_enabled_flag equal to 1 specifies that dependent quantization can be enabled for pictures referencing the SPS.
[0387] sps_sign_data_hiding_enabled_flag, which is equal to 0, specifies that sign bit hiding is disabled for the picture referencing the SPS. sps_sign_data_hiding_enabled_flag, which is equal to 1, specifies that sign bit hiding can be enabled for the picture referencing the SPS. If sps_sbtmvp_enabled_flag is missing, it is inferred to be equal to 0.
[0388] sps_virtual_boundaries_enabled_flag, equivalent to 1, specifies that disabling in-loop filtering across virtual boundaries can be applied to coded pictures in CLVS. sps_virtual_boundaries_enabled_flag, equivalent to 0, specifies that disabling in-loop filtering through virtual boundaries does not apply to coded pictures in CLVS. In-loop filtering behaviors include deblocking filters, sample-adaptive offset filters, and adaptive loop filter behaviors.
[0389] sps_virtual_boundaries_present_flag, equivalent to 1, specifies that virtual boundary information is signaled in the SPS. sps_virtual_boundaries_present_flag, equivalent to 0, specifies that virtual boundary information is not signaled in the SPS. If there are one or more virtual boundaries signaled in the SPS, in-loop filtering behavior is disabled across the virtual boundaries of the picture referencing the SPS. In-loop filtering behavior includes deblocking filter, sample adaptive offset filter, and adaptive loop filter behavior.
[0390] It is a requirement for bitstream conformity that when the value of res_change_in_clvs_allowed_flag is equal to 1, the value of sps_virtual_boundaries_present_flag must be equal to 0.
[0391] sps_num_ver_virtual_boundaries specifies the number of sps_virtual_boundaries_pos_x[ i ] syntax elements in SPS. If sps_num_ver_virtual_boundaries is not present, it is inferred to be equal to 0.
[0392] sps_virtual_boundaries_pos_x[ i ] specifies the location of the i-th vertical virtual boundary in luminance sample units divided by 8. The value of sps_virtual_boundaries_pos_x[i] must be in the range from 1 to Ceil(pic_width_in_luma_samplesχ8) - 1.
[0393] [Edit(Ed.)(VD): pic_width_in_luma_samples is in PPS, not SPS. ]
[0394] sps_num_hor_virtual_boundaries specifies the number of sps_virtual_boundaries_pos_y[ i ] syntax elements in SPS. If sps_num_hor_virtual_boundaries is not present, it is inferred to be equal to 0.
[0395] If sps_virtual_boundaries_enabled_flag is 1 and sps_virtual_boundaries_present_flag is 1, the sum of sps_num_ver_virtual_boundaries and sps_num_hor_virtual_boundaries must be greater than 0.
[0396] sps_virtual_boundaries_pos_y[ i ] specifies the location of the i-th horizontal virtual boundary in luminance sample units divided by 8. The value of sps_virtual_boundaries_pos_y[i] must be in the range from 1 to Ceil(pic_height_in_luma_samplesχ8) - 1.
[0397] [Edit(Ed.)(VD): pic_height_in_luma_samples is in PPS, not SPS. ]
[0398] sps_general_hrd_params_present_flag, which is the same as 1, specifies that the syntax structure general_hrd_parameters() exists in the SPS RBSP syntax structure.
[0399] sps_general_hrd_params_present_flag equal to 0 specifies that the syntax structure general_hrd_parameters() does not exist in the SPS RBSP syntax structure.
[0400] sps_sublayer_cpb_params_present_flag, identical to 1, specifies that the syntax structure old_hrd_parameters() of SPS RBSP contains HRD parameters for sublayer representations with TemporalIds in the range including 0 to sps_max_sublayers_minus1.
[0401] sps_sublayer_cpb_params_present_flag, which is equal to 0, specifies that the syntax structure ols_hrd_parameters() of SPS RBSP contains HRD parameters for a sublayer representation that has a TemporalId equal to 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 equal to 0.
[0402] When sps_sublayer_cpb_params_present_flag is equal to 0, HRD parameters for sublayer representations with TemporalIds in the range from 0 to sps_max_sublayers_minus1-1 are inferred to be the same as those for sublayer representations with TemporalIds equal to sps_max_sublayers. This includes HRD parameters starting from the fixed_pic_rate_general_flag[ I ] syntax element up to the sublayer_hrd_parameters( I ) syntax structure immediately below the "if(general_vcl_hrd_params_present_flag)" condition of the ols_hrd_parameters syntax structure.
[0403] If field_seq_flag is 1, it indicates that CLVS is delivering a picture representing a field. A field_seq_flag equal to 0 indicates that CLVS is delivering a picture representing a frame. When general_frame_only_constraint_flag is equal to 1, the value of field_seq_flag must be equal to 0.
[0404] When field_seq_flag is equal to 1, there must be a frame field information SEI message for all coded pictures in CLVS.
[0405] Note 5 - The specified decoding process does not handle pictures that represent fields or frames differently. Therefore, a series of pictures representing a field is coded as the picture dimension of the individual field. For example, a picture representing a 1080i field typically has a cropped output size of 1920x540, and the sequence picture rate typically represents the rate of the source field (typically 50–60 Hz) instead of the source frame rate (typically 25–30 Hz).
[0406] vui_parameters_present_flag, identical to 1, specifies that the syntax structure vui_parameters() exists in the SPS RBSP syntax structure.
[0407] vui_parameters_present_flag equal to 0 specifies that the syntax structure vui_parameters() does not exist in the SPS RBSP syntax structure.
[0408] aps_extension_flag equal to 0 specifies that the aps_extension_data_flag syntax element does not exist in the APS RBSP syntax structure. aps_extension_flag equal to 1 specifies that the aps_extension_data_flag syntax element exists in the APS RBSP syntax structure.
[0409] sps_extension_data_flag can have any value. Its presence and value do not affect decoder suitability for the profile specified in this version of this specification. Decoders conforming to this version of this specification must ignore all aps_extension_data_flag syntax elements.
[0410] 3.3. PPS Syntax and Semantics
[0411] In the latest VVC draft text, the PPS syntax and semantics are as follows:
[0412]
[0413]
[0414]
[0415]
[0416]
[0417]
[0418] The PPS RBSP must be available in the decoding process before being referenced, and is included in one or more AUs or provided through external means where the TemporalId is smaller than or equal to the TemporalId of the PPS NAL unit.
[0419] All PPS NAL units within the PU that have a specific value of pps_pic_parameter_set_id must have the same content.
[0420] pps_pic_parameter_set_id identifies the PPS so that other syntax elements can reference it. The value of pps_pic_parameter_set_id must be in the range from 0 to 63.
[0421] The PPS NAL unit shares the same value space as pps_pic_parameter_set_id regardless of the nuh_layer_id value.
[0422] Let ppsLayerId be the value of nuh_layer_id of a specific PPS NAL unit, and vclLayerId be the value of nuh_layer_id of a specific VCL NAL unit. A specific VCL NAL unit must not reference a specific PPS NAL unit unless ppsLayerId is less than or equal to vclLayerId and a layer with nuh_layer_id equal to ppsLayerId is included in at least one OLS that contains a layer with nuh_layer_id equal to vclLayerId.
[0423] 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 must be in the range from 0 to 15. The value of pps_seq_parameter_set_id must be the same for all PPS referenced by the picture coded in CLVS.
[0424] mixed_nalu_types_in_pic_flag, equivalent to 1, specifies that each picture referencing the PPS has more than one VCL NAL unit, that the VCL NAL units do not have the same value for nal_unit_type, and that the picture is not an IRAP picture. mixed_nalu_types_in_pic_flag, equivalent to 0, specifies that each picture referencing the PPS has more than one VCL NAL unit and that the VCL NAL units of each picture referencing the PPS have the same value for nal_unit_type.
[0425] When no_mixed_nalu_types_in_pic_constraint_flag is equal to 1, the value of mixed_nalu_types_in_pic_flag must be equal to 0.
[0426] For each slice in the range from IDR_W_RADL to CRA_NUT where the nal_unit_type value is nalUnitTypeA, in a picture picA that also contains one or more slices with different nal_unit_type values (i.e., the value of mixed_nalu_types_in_pic_flag for picture picA is equal to 1), the following applies:
[0427] - The slice must belong to subpicA, where the value of the corresponding subpic_treated_as_pic_flag[ i ] is equal to 1.
[0428] - The slice must not belong to a subpicture of picA containing a VCL NAL unit whose nal_unit_type is not the same as nalUnitTypeA.
[0429] - If nalUnitTypeA is the same as CRA, for every next PU that follows the current picture of CLVS in the decoding order and output order, RefPicList
[0000] or RefPicList
[0001] of the slice in subpicA of that PU must not contain any picture that precedes picA in the decoding order of the active item.
[0430] - Otherwise (i.e., nalUnitTypeA is the same as IDR_W_RADL or IDR_N_LP), for all PUs in CLVS that follow the current picture in the decoding order, RefPicList
[0000] or RefPicList
[0001] of the slice in the subpicA of that PU must not contain any picture that precedes picA in the decoding order of the active item.
[0431] The mixed_nalu_types_in_pic_flag, identical to Note 1-1, indicates that the picture referencing the PPS contains slices with different NAL unit types, for example, in a subpicture bitstream merging operation where the encoder must match the bitstream structure and ensure additional alignment of the parameters of the original bitstream. An example of such alignment is as follows: If the value of sps_idr_rpl_flag is 0 and mixed_nalu_types_in_pic_flag is 1, the picture referencing the PPS cannot have slices with the same nal_unit_type as IDR_W_RADL or IDR_N_LP.
[0432] pic_width_in_luma_samples specifies the width of each decoding picture that references PPS in the luma sample unit. pic_width_in_luma_samples must not be 0, must be an integer multiple of Max(8, MinCbSizeY), and must be less than or equal to pic_width_max_in_luma_samples.
[0433] When res_change_in_clvs_allowed_flag is equal to 0, the value of pic_width_in_luma_samples must be equal to pic_width_max_in_luma_samples.
[0434] pic_height_in_luma_samples specifies the height of each decoding picture referencing PPS in the luma sample unit. pic_height_in_luma_samples must not be 0, must be an integer multiple of Max(8, MinCbSizeY), and must be less than or equal to pic_height_max_in_luma_samples.
[0435] When res_change_in_clvs_allowed_flag is equal to 0, the value of pic_height_in_luma_samples must be equal to pic_height_max_in_luma_samples.
[0436] The variables PicWidthInCtbsY, PicHeightInCtbsY, PicSizeInCtbsY, PicWidthInMinCbsY, PicHeightInMinCbsY, PicSizeInMinCbsY, PicSizeInSamplesY, PicWidthInSamplesC, and PicHeightInSamplesC are derived as follows:
[0437] PicWidthInCtbsY = Ceil( pic_width_in_luma_samples χ CtbSizeY ) (69)
[0438] PicHeightInCtbsY = Ceil( pic_height_in_luma_samples χ CtbSizeY ) (70)
[0439] PicSizeInCtbsY = PicWidthInCtbsY * PicHeightInCtbsY (71)
[0440] PicWidthInMinCbsY = pic_width_in_luma_samples / MinCbSizeY (72)
[0441] PicHeightInMinCbsY = pic_height_in_luma_samples / MinCbSizeY (73)
[0442] PicSizeInMinCbsY = PicWidthInMinCbsY * PicHeightInMinCbsY (74)
[0443] PicSizeInSamplesY = pic_width_in_luma_samples * pic_height_in_luma_samples (75)
[0444] PicWidthInSamplesC = pic_width_in_luma_samples / SubWidthC (76)
[0445] PicHeightInSamplesC = pic_height_in_luma_samples / SubHeightC (77)
[0446] The pps_conformance_window_flag identical to 1 indicates that the conformance cropping window offset parameter in PPS follows the following.
[0447] pps_conformance_window_flag equal to 0 indicates that the conformance cropping window offset parameter does not exist in PPS.
[0448] pps_conf_win_left_offset, pps_conf_win_right_offset, pps_conf_win_top_offset, and pps_conf_win_bottom_offset specify the picture samples of CLVS output from the decoding process in terms of the rectangular area specified at the picture coordinates for output. When pps_conformance_window_flag is 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.
[0449] The fit cropping window contains lumina samples with horizontal picture coordinates from SubWidthC*pps_conf_win_left_offset to pic_width_in_luma_samples-(SubWidthC*pps_conf_win_right_offset +1) and vertical picture coordinates from SubHeightC*pps_conf_win_top_offset_.
[0450] The value of SubWidthC* (pps_conf_win_left_offset+pps_conf_win_right_offset) must be less than pic_width_in_luma_samples, and the value of SubHeightC* (pps_conf_win_top_offset+pps_conf_win_bottom_offset) must be less than pic_height_samples.in_lum.
[0451] When ChromaArrayType is not 0, the corresponding specified sample of the two chroma arrays is a sample with picture coordinates (x / SubWidthC, y / SubHeightC), where (x, y) are the picture coordinates of the specified chroma sample.
[0452] Note 2 - The fit cropping window offset parameter applies only to the output. All internal decoding processes are applied to the uncropped picture size.
[0453] Assume ppsA and ppsB are any two PPSs that reference the same SPS. When ppsA and ppsB have the same values for pic_width_in_luma_samples and pic_height_in_luma_samples, respectively, it is a requirement for bitstream conformance that ppsA and pps_offtom,_pps_win,_pps_win_set_offset, and pps_conf_win have the same values.
[0454] When pic_width_in_luma_samples is equal to pic_width_max_in_luma_samples and pic_height_in_luma_samples is equal to pic_height_max_in_luma_samples, it is a bitstream conformity requirement 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_bottom_offset, sps_conf_win_right_offset, sps_conf_win_right_offset, and sps_conf_win_win_offset, respectively.
[0455] scaling_window_explicit_signalling_flag equal to 1 specifies that the scaling window offset parameter exists in PPS. scaling_window_explicit_signalling_flag equal to 0 specifies 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 must be equal to 0.
[0456] scaling_win_left_offset, scaling_win_right_offset, scaling_win_top_offset, and scaling_win_bottom_offset specify the offsets applied to the picture size for calculating the scaling ratio. If absent, the values of scaling_win_left_offset, scaling_win_right_offset, scaling_win_top_offset, and scaling_win_bottom_offset are inferred to be the same as pps_conf_win_left_offset, pps_conf_win_right_offset, pps_conf_win_right_offset, and pps_conf_win, respectively.
[0457] The value of SubWidthC* (scaling_win_left_offset+scaling_win_right_offset) must be smaller than pic_width_in_luma_samples, and the value of SubHeightC* (scaling_win_top_offset+scaling_win_bottom_offset) must be smaller than pic_height_in_luma_samples.
[0458] The variables PicOutputWidthL and PicOutputHeightL are derived as follows:
[0459] PicOutputWidthL = pic_width_in_luma_samples - (78)
[0460] SubWidthC * ( scaling_win_right_offset + scaling_win_left_offset )
[0461] PicOutputHeightL = pic_height_in_luma_samples - (79) SubWidthC * ( scaling_win_bottom_offset + scaling_win_top_offset )
[0462] refPicOutputWidthL and refPicOutputHeightL are set to the PicOutputWidthL and PicOutputHeightL of the reference picture of the current picture referencing this PPS, respectively. The following are requirements for bitstream conformity where all of the following conditions are satisfied:
[0463] - - PicOutputWidthL*2 must be greater than or equal to refPicWidthInLumaSamples.
[0464] - - PicOutputHeightL*2 must be greater than or equal to refPicHeightInLumaSamples.
[0465] - - PicOutputWidthL must be less than or equal to refPicWidthInLumaSamples*8.
[0466] - - PicOutputHeightL must be less than or equal to refPicHeightInLumaSamples*8.
[0467] - PicOutputWidthL*pic_width_max_in_luma_samples must be greater than or equal to refPicOutputWidthL*(pic_width_in_luma_samples-Max (8, MinCbSizeY)).
[0468] - PicOutputHeightL*pic_height_max_in_luma_samples must be greater than or equal to refPicOutputHeightL*(pic_height_in_luma_samples-Max(8, MinCbSizeY)).
[0469] output_flag_present_flag equal to 1 indicates that the pic_output_flag syntax element exists in the slice header referencing the PPS. output_flag_present_flag equal to 0 indicates that the pic_output_flag syntax element does not exist in the slice header referencing the PPS.
[0470] The subpic_id_mapping_in_pps_flag identical to 1 specifies that subpic ID mapping is signaled in PPS.
[0471] subpic_id_mapping_in_pps_flag equal to 0 specifies that the subpic ID mapping is not signaled in the PPS. If subpic_id_mapping_explicitly_signalled_flag is 0 or subpic_id_mapping_in_sps_flag is equal to 1, the value of subpic_id_mapping_in_pps_flag must be equal to 0. Otherwise (subpic_id_mapping_explicitly_signalled_flag is equal to 1 and subpic_id_mapping_in_sps_flag is equal to 0), the value of subpic_id_mapping_in_pps_flag must be equal to 1.
[0472] pps_num_subpics_minus1 must be the same as sps_num_subpics_minus1.
[0473] pps_subpic_id_len_minus1 must be the same as sps_subpic_id_len_minus1.
[0474] pps_subpic_id[ i ] specifies the subpicture ID of the i-th subpicture. The length of the pps_subpic_id[ i ] syntax element is pps_subpic_id_len_minus1 + 1 bit.
[0475] The variable SubpicIdVal[ i ] is derived as follows for each value of i in the range from 0 to sps_num_subpics_minus1:
[0476] for( i = 0; i <= sps_num_subpics_minus1; i++ )
[0477] if( subpic_id_mapping_explicitly_signalled_flag )
[0478] SubpicIdVal[ i ] = subpic_id_mapping_in_pps_flag ? pps_subpic_id[i] : sps_subpic_id[i] (80)
[0479] else
[0480] SubpicIdVal[ i ] = i
[0481] All of the following constraints are requirements for bitstream conformity:
[0482] - For two different values of i and j in the range from 0 to sps_num_subpics_minus1, SubpicIdVal[i] is not equal to SubpicIdVal[j].
[0483] - When the current picture is not the first picture of the CLVS, for each value of i in the range including 0 to sps_num_subpics_minus1, if the value of SubpicIdVal[ i ] is not the same as the value of SubpicIdVal[ i ] of the previous picture in the same layer in decoding order, then the nal_unit_type for all coded slice NAL units of the subpicture of the current picture with subpicture index i must be the same as a specific value in the range including IDR_W_RADL to CRA_NUT.
[0484] The no_pic_partition_flag, identical to 1, specifies that picture partitioning is not applied to each picture referencing the PPS.
[0485] no_pic_partition_flag equal to 0 specifies that each picture referencing a PPS can be partitioned into one or more tiles or slices.
[0486] It is a bitstream conformance requirement that the value of no_pic_partition_flag must be the same for all PPS referenced by coded pictures within CLVS.
[0487] It is a bitstream conformance requirement that the value of no_pic_partition_flag must not be equal to 1 when the value of sps_num_subpics_minus1 + 1 is greater than 1.
[0488] pps_log2_ctu_size_minus5 plus 5 specifies the luminal coding tree block size for each CTU. pps_log2_ctu_size_minus5 must be equal to sps_log2_ctu_size_minus5.
[0489] num_exp_tile_columns_minus1 plus 1 specifies the number of explicitly provided tile column widths. The value of num_exp_tile_columns_minus1 must be in the range from 0 to PicWidthInCtbsY - 1. When no_pic_partition_flag is equal to 1, the value of num_exp_tile_columns_minus1 is inferred to be equal to 0.
[0490] num_exp_tile_rows_minus1 plus 1 specifies the number of explicitly provided tile row heights. The value of num_exp_tile_rows_minus1 must be in the range from 0 to PicHeightInCtbsY - 1. When no_pic_partition_flag is equal to 1, the value of num_tile_rows_minus1 is inferred to be equal to 0.
[0491] tile_column_width_minus1[ i ] plus 1 specifies the width of the i-th tile column in CTB units for i in the range including 0 to num_exp_tile_columns_minus1. tile_column_width_minus1[num_exp_tile_columns_minus1] is used to derive the width of a tile column whose index is greater than or equal to num_exp_tile_columns_minus1, as specified in Section 6.5.1. The value of tile_column_width_minus1[ i ] must be in the range including 0 to PicWidthInCtbsY - 1. If it does not exist, the value of tile_column_width_minus1[0] is inferred to be equal to PicWidthInCtbsY - 1.
[0492] tile_row_height_minus1[ i ] plus 1 specifies the height of the i-th tile row in CTB units for i in the range including 0 to num_exp_tile_rows_minus1 - 1. tile_row_height_minus1 [num_exp_tile_rows_minus1] is used to derive the height of a tile row whose index is greater than or equal to num_exp_tile_rows_minus1, as specified in Section 6.5.1. The value of tile_row_height_minus1[ i ] must be in the range including 0 to PicHeightInCtbsY - 1. If it does not exist, the value of tile_row_height_minus1[0] is inferred to be equal to PicHeightInCtbsY - 1.
[0493] rect_slice_flag, equal to 0, specifies that the tiles within each slice are in raster scan order and slice information is not signaled in the PPS. rect_slice_flag, equal to 1, specifies that the tiles within each slice cover a rectangular area of the picture and slice information is signaled in the PPS. If not present, 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 must be equal to 1.
[0494] The single_slice_per_subpic_flag, identical to 1, specifies that each subpicture consists of one rectangular slice.
[0495] single_slice_per_subpic_flag equal to 0 specifies that each subpicture may consist of one or more rectangular slices. When single_slice_per_subpic_flag equals 1, num_slices_in_pic_minus1 is inferred to be equal to sps_num_subpics_minus1. When not present, the value of single_slice_per_subpic_flag is inferred to be equal to 0.
[0496] num_slices_in_pic_minus1 plus 1 specifies the number of rectangular slices for each picture referencing PPS. The value of num_slices_in_pic_minus1 must be in the range including 0 to MaxSlicesPerPicture - 1, where MaxSlicesPerPicture is specified in Appendix A. When no_pic_partition_flag is equal to 1, the value of num_slices_in_pic_minus1 is inferred to be equal to 0.
[0497] tile_idx_delta_present_flag equal to 0 specifies that the tile_idx_delta value does not exist in the PPS and that all rectangular slices of the picture referencing the PPS are assigned in raster order according to the process defined in Section 6.5.1. tile_idx_delta_present_flag equal to 1 specifies that the tile_idx_delta value may exist in the PPS and that all rectangular slices of the picture referencing the PPS are assigned in the order indicated by the value of tile_idx_delta. slice_width_in_tiles_minus1[ i ] plus 1 specifies the width of the i-th rectangular slice in tile column units.
[0498] The value of slice_width_in_tiles_minus1[ i ] must be in the range from 0 to NumTileColumns - 1. When i is less than num_slices_in_pic_minus1 and NumTileColumns is equal to 1, the value of slice_width_in_tiles_minus1[ i ] is inferred to be equal to 0.
[0499] If slice_width_in_tiles_minus1[ i ] is not present, the following applies:
[0500] - - If NumTileColumns is equal to 1, the value of slice_width_in_tiles_minus1[ i ] is inferred to be equal to 0.
[0501] - Otherwise, the value of slice_width_in_tiles_minus1[ i ] is inferred as specified in Section 6.5.1.
[0502] slice_height_in_tiles_minus1[ i ] plus 1 specifies the height of the i-th rectangular slice in the tile row unit. The value of slice_height_in_tiles_minus1[ i ] must be in the range from 0 to NumTileRows - 1.
[0503] If slice_height_in_tiles_minus1[ i ] is not present, the following applies:
[0504] - If NumTileRows is 1, or tile_idx_delta_present_flag is 0 and tileIdx %NumTileColumns is greater than 0), the value of slice_height_in_tiles_minus1[ i ] is inferred to be equal to 0.
[0505] - Otherwise (NumTileRows is not 1 and tile_idx_delta_present_flag is 1 or tileIdx %NumTileColumns is 0), when tile_idx_delta_present_flag is 1 or tileIdx %NumTileColumns is equal to the value of slice_hemin_in_in_hemin_us, the value of slice_height_in_tiles_minus1[ i ] is inferred to be equal to slice_height_in_tiles_minus1[i - 1].
[0506] num_exp_slices_in_tile[ i ] specifies the number of explicitly provided slice heights in the current tile containing two or more rectangular slices. The value of num_exp_slices_in_tile[ i ] must be in the range from 0 to RowHeight[tileY] - 1, where tileY is the tile row index containing the i-th slice. If 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.
[0507] exp_slice_height_in_ctus_minus1 [j] plus 1 specifies the height of the j-th rectangular slice of the current tile in CTU row units. The value of exp_slice_height_in_ctus_minus1 [j] must be in the range from 0 to RowHeight [tileY] - 1, where tileY is the tile row index of the current tile.
[0508] If num_exp_slices_in_tile[ i ] is greater than 0, SliceHeightInCtusMinus1 [i + k] for the variable NumSlicesInTile[ i ] and k in the range from 0 to NumSlicesInTile[ i ] - 1 is derived as follows:
[0509] remainingHeightInCtbsY = RowHeight[ SliceTopLeftTileIdx[ i ] / NumTileColumns ]
[0510] numExpSliceInTile = num_exp_slices_in_tile[ i ]
[0511] for( j = 0; j < numExpSliceInTile - 1; j++ ) {
[0512] SliceHeightInCtusMinus1[i++] = exp_slice_height_in_ctu_minus1[j]
[0513] remainingHeightInCtbsY -= SliceHeightInCtusMinus1[ j ]
[0514] }
[0515] uniformSliceHeightMinus1 = SliceHeightInCtusMinus1[ i - 1 ] (81)
[0516] while( remainingHeightInCtbsY >= (uniformSliceHeightMinus1 + 1) ) {
[0517] SliceHeightInCtusMinus1[ i++ ] = uniformSliceHeightMinus1
[0518] remainingHeightInCtbsY -= (uniformSliceHeightMinus1 + 1)
[0519] j++
[0520] }
[0521] if( remainingHeightInCtbsY > 0 ) {
[0522] SliceHeightInCtusMinus1[ i++ ] = remainingHeightInCtbsY
[0523] j++
[0524] }
[0525] NumSlicesInTile[ i ] = j
[0526] tile_idx_delta[ i ] specifies the difference between the tile index of the first tile in the i-th rectangular slice and the tile index of the first tile in the (i + 1)-th rectangular slice. The value of tile_idx_delta[ i ] must be in the range from -NumTilesInPic + 1 to NumTilesInPic - 1. If it does not exist, the value of tile_idx_delta[ i ] is inferred to be equal to 0. If it exists, the value of tile_idx_delta[ i ] must not be equal to 0.
[0527] loop_filter_across_tiles_enabled_flag, equivalent to 1, specifies that in-loop filtering behavior can be performed across the tile boundaries of the picture referencing the PPS. loop_filter_across_tiles_enabled_flag, equivalent to 0, specifies that in-loop filtering behavior is not performed across the tile boundaries of the picture referencing the PPS. In-loop filtering behaviors include deblocking filter, sample-adaptive offset filter, and adaptive loop filter behavior. If not present, the value of loop_filter_across_tiles_enabled_flag is inferred to be equal to 1.
[0528] loop_filter_across_slices_enabled_flag, equivalent to 1, specifies that in-loop filtering behavior can be performed across the slice boundaries of the picture referencing the PPS. loop_filter_across_slice_enabled_flag, equivalent to 0, specifies that in-loop filtering behavior is not performed across the slice boundaries of the picture referencing the PPS. In-loop filtering behaviors include deblocking filter, sample-adaptive offset filter, and adaptive loop filter behavior. If not present, the value of loop_filter_across_slices_enabled_flag is inferred to be equal to 0.
[0529] cabac_init_present_flag equal to 1 specifies that cabac_init_flag exists in the slice header referencing the PPS. cabac_init_present_flag equal to 0 specifies that cabac_init_flag does not exist in the slice header referencing the PPS.
[0530] num_ref_idx_default_active_minus1[ i ] + 1, when i is 0, specify the inferred value of variable NumRefIdxActive[0] for a P or B slice where num_ref_idx_active_override_flag is 0, and when i is equal to 1, specify the inferred value of NumRefIdxActive[1] for a B slice where num_ref_idx_active_override_flag is 0. The value of num_ref_idx_default_active_minus1[ i ] must be in the range including 0 to 14.
[0531] rpl1_idx_present_flag equal to 0 specifies that ref_pic_list_sps_flag[1] and ref_pic_list_idx[1] do not exist in the PH syntax structure or slice header for the picture referencing the PPS. rpl1_idx_present_flag equal to 1 specifies that ref_pic_list_sps_flag[1] and ref_pic_list_idx[1] may exist in the PH syntax structure or slice header for the picture referencing the PPS.
[0532] init_qp_minus26plus 26 specifies the initial value of SliceQpY for each slice referencing PPS. The initial value of SliceQpY is modified at the picture level when the non-zero value of ph_qp_delta is decoded, or at the slice level when the non-zero value of slice_qp_delta is decoded. The value of init_qp_minus26 must be in the range from -(26+QpBdOffset) to +37.
[0533] cu_qp_delta_enabled_flag equal to 1 specifies that the ph_cu_qp_delta_subdiv_intra_slice and ph_cu_qp_delta_subdiv_inter_slice syntax elements exist in a PH that references a PPS and that cu_qp_delta_abs may exist in the transform unit syntax. cu_qp_delta_enabled_flag equal to 0 specifies that the ph_cu_qp_delta_subdiv_intra_slice and ph_cu_qp_delta_subdiv_inter_slice syntax elements do not exist in a PH that references a PPS and that cu_qp_delta_abs does not exist in the transform unit syntax.
[0534] pps_chroma_tool_offsets_present_flag, identical to 1, specifies that chroma tool offset related syntax elements exist in the PPS RBSP syntax structure.
[0535] pps_chroma_tool_offsets_present_flag, which is equal to 0, specifies that chroma tool offset related syntax elements do not exist in the PPS RBSP syntax structure. When ChromaArrayType is equal to 0, the value of pps_chroma_tool_offsets_present_flag must be equal to 0.
[0536] pps_cb_qp_offset and pps_cr_qp_offset specify the offset for the luminance quantization parameter Qp'Y used to derive Qp'Cb and Qp'Cr, respectively. The values of pps_cb_qp_offset and pps_cr_qp_offset must be in the range from -12 to +12. When ChromaArrayType is equal to 0, pps_cb_qp_offset and pps_cr_qp_offset are not used in the decoding process, and the decoder must ignore their values. If they do not exist, the values of pps_cb_qp_offset and pps_cr_qp_offset are inferred to be equal to 0.
[0537] pps_joint_cbcr_qp_offset_present_flag, identical to 1, specifies that pps_joint_cbcr_qp_offset_value and joint_cbcr_qp_offset_list[ i ] exist in the PPS RBSP syntax structure.
[0538] pps_joint_cbcr_qp_offset_present_flag equal to 0 specifies 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 must be equal to 0. When not present, the value of pps_joint_cbcr_qp_offset_present_flag is inferred to be equal to 0.
[0539] pps_joint_cbcr_qp_offset_value specifies the offset for the luminance quantization parameter Qp'Y used to derive Qp'CbCr. The value of pps_joint_cbcr_qp_offset_value must be in the range from -12 to +12. When ChromaArrayType is equal to 0 or sps_joint_cbcr_enabled_flag is equal to 0, pps_joint_cbcr_qp_offset_value is not used in the decoding process and the decoder must ignore the value. When pps_joint_cbcr_qp_offset_present_flag is equal to 0, pps_joint_cbcr_qp_offset_value does not exist and is inferred to be equal to 0.
[0540] pps_slice_chroma_qp_offsets_present_flag, identical to 1, specifies that the slice_cb_qp_offset and slice_cr_qp_offset syntax elements exist in the associated slice header.
[0541] pps_slice_chroma_qp_offsets_present_flag, which is equal to 0, specifies 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 equal to 0.
[0542] pps_cu_chroma_qp_offset_list_enabled_flag, identical to 1, specifies that ph_cu_chroma_qp_offset_subdiv_intra_slice and ph_cu_chroma_qp_offset_subdiv_inter_slice syntax elements exist in PHs that reference PPS, and cu_chroma_qp_offset_flag may exist in transform unit syntax and palette coding syntax.
[0543] pps_cu_chroma_qp_offset_list_enabled_flag, which is equal to 0, specifies that the syntax elements of ph_cu_chroma_qp_offset_subdiv_intra_slice and ph_cu_chroma_qp_offset_subdiv_inter_slice do not exist in the PH that references the PPS, and that there are no coding units or syntax elements in cu_chroma_gp_offset_flag. When not present, the value of pps_cu_chroma_qp_offset_list_enabled_flag is inferred to be equal to 0.
[0544] chroma_qp_offset_list_len_minus1 plus 1 specifies the number of syntax elements 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 must be in the range from 0 to 5.
[0545] cb_qp_offset_list[ i ], cr_qp_offset_list[ i ], and joint_cbcr_qp_offset_list[ i ] specify the offsets used for deriving Qp'Cb' Qp'Cr' and Qp'CbCr', respectively. The values of cb_qp_offset_list[ i ], cr_qp_offset_list[ i ], and joint_cbcr_qp_offset_list[ i ] must be in the range from -12 to +12. When pps_joint_cbcr_qp_offset_present_flag is equal to 0, joint_cbcr_qp_offset_list[ i ] is inferred to be non-existent and equal to 0.
[0546] pps_weighted_pred_flag equal to 0 specifies that weighted predictions are not applied to P slices referencing PPS. pps_weighted_pred_flag equal to 1 specifies that weighted predictions are applied to P slices referencing PPS. When sps_weighted_pred_flag is equal to 0, the value of pps_weighted_pred_flag must be equal to 0.
[0547] pps_weighted_bipred_flag equal to 0 specifies that explicit weighted predictions are not applied to B slices referencing PPS. pps_weighted_bipred_flag equal to 1 specifies that explicit weighted predictions are applied to B slices referencing PPS. When sps_weighted_bipred_flag is equal to 0, the value of pps_weighted_bipred_flag must be equal to 0.
[0548] The deblocking_filter_control_present_flag, identical to 1, specifies the presence of the deblocking filter control syntax element in the PPS.
[0549] The deblocking_filter_control_present_flag, which is equal to 0, specifies the absence of the deblocking filter control syntax element in the PPS.
[0550] The deblocking_filter_override_enabled_flag identical to 1 specifies the presence of the ph_deblocking_filter_override_flag of the PH referencing the PPS or the slice_deblocking_filter_override_flag of the slice header referencing the PPS.
[0551] deblocking_filter_override_enabled_flag equal to 0 specifies the absence of ph_deblocking_filter_override_flag in a PH referencing a PPS, or specifies slice_deblocking_filter_override_flag in a slice header referencing a PPS. If it does not exist, the value of deblocking_filter_override_enabled_flag is inferred to be equal to 0.
[0552] pps_deblocking_filter_disabled_flag, identical to 1, specifies that the deblocking filter operation is not applied to slices that reference a PPS for which slice_deblocking_filter_disabled_flag does not exist.
[0553] pps_deblocking_filter_disabled_flag equal to 0 specifies that the deblocking filter behavior is applied to slices referencing PPSs for which slice_deblocking_filter_disabled_flag does not exist. If it does not exist, the value of pps_deblocking_filter_disabled_flag is inferred to be equal to 0.
[0554] pps_beta_offset_div2 and pps_tc_offset_div2 specify the default deblocking parameter offsets for β and tC (divided by 2) applied to the luminance component of the slice referencing the PPS, unless the default deblocking parameter offset is overridden by the deblocking parameter offset in the picture header or slice header of the slice referencing the PPS. The values of pps_beta_offset_div2 and pps_tc_offset_div2 must both be in the range from -12 to 12. If they do not exist, the values of pps_beta_offset_div2 and pps_tc_offset_div2 are both inferred to be equal to 0.
[0555] Unless the default deblocking parameter offset is ignored by the deblocking parameter offset in the slice header of the slice referencing the PPS, pps_cb_beta_offset_div2 and pps_cb_tc_offset_div2Specifies the default deblocking parameter offsets for β and tC (divided by 2) applied to the Cb component of the slice referencing PPS. The values of pps_cb_beta_offset_div2 and pps_cb_tc_offset_div2 must both be in the range from -12 to 12. If they do not exist, the values of pps_cb_beta_offset_div2 and pps_cb_tc_offset_div2 are both inferred to be equal to 0.
[0556] Unless the default deblocking parameter offset is ignored by the deblocking parameter offset in the slice header of the slice referencing the PPS, pps_cr_beta_offset_div2 and pps_cr_tc_offset_div2 Specifies the default deblocking parameter offsets for β and tC (divided by 2) applied to the Cr component of the slice referencing PPS. The values of pps_cr_beta_offset_div2 and pps_cr_tc_offset_div2 must both be in the range from -12 to 12. If they do not exist, the values of pps_cr_beta_offset_div2 and pps_cr_tc_offset_div2 are both inferred to be equal to 0.
[0557] rpl_info_in_ph_flag, identical to 1, specifies that reference picture list information exists in the PH syntax structure and not in the slice header that references the PPS, which does not contain the PH syntax structure.
[0558] rpl_info_in_ph_flag equal to 0 specifies that reference picture list information does not exist in the PH syntax structure and may exist in a slice header that references a PPS that does not contain the PH syntax structure.
[0559] dbf_info_in_ph_flag, identical to 1, specifies that deblocking filter information exists in the PH syntax structure and not in the slice header that references the PPS, which does not include the PH syntax structure.
[0560] dbf_info_in_ph_flag equal to 0 specifies that deblocking filter information does not exist in the PH syntax structure and may exist in a slice header referencing a PPS that does not contain the PH syntax structure. If it does not exist, the value of dbf_info_in_ph_flag is inferred to be equal to 0.
[0561] The sao_info_in_ph_flag identical to 1 specifies that SAO filter information exists in the PH syntax structure and not in slice headers that reference PPS that do not contain the PH syntax structure.
[0562] sao_info_in_ph_flag equal to 0 specifies that SAO filter information does not exist in the PH syntax structure and may exist in a slice header that references a PPS that does not contain the PH syntax structure.
[0563] alf_info_in_ph_flag identical to 1 specifies that ALF information exists in the PH syntax structure and not in the slice header that references the PPS, which does not contain the PH syntax structure.
[0564] alf_info_in_ph_flag equal to 0 specifies that ALF information does not exist in the PH syntax structure and may exist in a slice header that references a PPS that does not contain the PH syntax structure.
[0565] wp_info_in_ph_flag identical to 1 specifies that weighted prediction information may exist in the PH syntax structure and may not exist in slice headers referencing PPS that do not include the PH syntax structure.
[0566] wp_info_in_ph_flag equal to 0 specifies that weighted prediction information does not exist in the PH syntax structure and may exist in a slice header referencing a PPS that does not contain the PH syntax structure. When it does not exist, the value of wp_info_in_ph_flag is inferred to be equal to 0.
[0567] qp_delta_info_in_ph_flag, identical to 1, specifies that QP delta information exists in the PH syntax structure and not in the slice header that references the PPS, which does not contain the PH syntax structure.
[0568] qp_delta_info_in_ph_flag equal to 0 specifies that QP delta information does not exist in the PH syntax structure and may exist in a slice header that references a PPS that does not contain the PH syntax structure.
[0569] pps_ref_wraparound_enabled_flag equal to 1 specifies that horizontal wrap-around motion compensation is applied to inter prediction. pps_ref_wraparound_enabled_flag equal to 0 specifies that horizontal wrap-around 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 must be equal to 0. When sps_ref_wraparound_enabled_flag is equal to 0, the value of pps_ref_wraparound_enabled_flag must be equal to 0.
[0570] pps_ref_wraparound_offset plus (CtbSizeY / MinCbSizeY) + 2 specifies the offset used to calculate the horizontal wrap-around position in MinCbSizeY luminar sample units. The value of pps_ref_wraparound_offset must be in the range from 0 to (pic_width_in_luma_samples / MinCbSizeY) - (CtbSizeY / MinCbSizeY) - 2.
[0571] The variable PpsRefWraparoundOffset is set to be equal to pps_ref_wraparound_offset + (CtbSizeY / MinCbSizeY) + 2.
[0572] The picture_header_extension_present_flag, which is equal to 0, specifies that there are no PH extension syntax elements in the PH that references the PPS.
[0573] picture_header_extension_present_flag equal to 1 specifies that PH extension syntax elements exist in the PH that references the PPS. picture_header_extension_present_flag must be equal to 0 in bitstreams that follow this version of this specification.
[0574] slice_header_extension_present_flag equal to 0 specifies that slice header extension syntax elements do not exist in the slice header for a coded picture referencing a PPS.
[0575] slice_header_extension_present_flag, identical to 1, specifies that slice header extension syntax elements exist in the slice header for the coded picture referencing the PPS.
[0576] slice_header_extension_present_flag must be equal to 0 in bitstreams that follow this version of this specification.
[0577] pps_extension_flag equal to 0 specifies that the pps_extension_data_flag syntax element does not exist in the PPS RBSP syntax structure.
[0578] pps_extension_flag identical to 1 specifies that the pps_extension_data_flag syntax element exists in the PPS RBSP syntax structure.
[0579] pps_extension_data_flag may have an arbitrary value. Its presence and value do not affect decoder suitability for the profile specified in this version of this specification. Decoders conforming to this version of this specification must ignore all pps_extension_data_flag syntax elements.
[0580] 3.4. APS Syntax and Semantics
[0581] In the latest VVC draft text, the APS syntax and semantics are as follows:
[0582]
[0583] APS RBSP includes the ALF syntax structure, namely alf_data().
[0584]
[0585]
[0586]
[0587] APS RBSP includes the LMCS syntax structure, namely lmcs_data().
[0588]
[0589] APS RBSP includes the scaling list data syntax structure, namely scaling_list_data().
[0590]
[0591]
[0592] Each APS RBSP is included in at least one AU having a TemporalId smaller than or equal to the TemporalId of the coded slice NAL unit that is referenced or provided through external means, and can be used in the decoding process before being referenced.
[0593] Regardless of whether it is a prefix or suffix APS NAL unit, all APS NAL units within the PU that have a specific value aps_parameter_set_id and a specific value aps_params_type must have the same content.
[0594] Adaptation_parameter_set_id provides an identifier for the APS so that other syntax elements can reference it.
[0595] When aps_params_type is the same as ALF_APS or SCALING_APS, the value of adaptation_parameter_set_id must be in a range that includes 0 to 7.
[0596] When aps_params_type is the same as LMCS_APS, the value of adaptation_parameter_set_id must be in a range that includes 0 to 3.
[0597] Let apsLayerId be the value of nuh_layer_id of a specific APS NAL unit, and let vclLayerId be the value of nuh_layer_id of a specific VCL NAL unit. A specific VCL NAL unit must not reference a specific APS NAL unit unless apsLayerId is less than or equal to vclLayerId and a layer with nuh_layer_id equal to apsLayerId is included in at least one OLS that contains a layer with nuh_layer_id equal to vclLayerId.
[0598] aps_params_type specifies the type of APS parameters passed from APS as specified in Table 6.
[0599] Table 6 - APS Parameter Type Codes and APS Parameter Types aps_params_type Name of aps_params_type Types of APS parameters 0 ALF_APS ALF parameters 1 LMCS_APS LMCS parameters 2 SCALING_APS Scaling list parameters 3..7 Reserved Reserved
[0600] Regardless of the nuh_layer_id value, all APS NAL units with a specific value of aps_params_type share the same value space for aps_parameter_set_id. APS NAL units with different values of aps_params_type use a separate value space for aps_parameter_set_id.
[0601] Note 1 - APS NAL units (having specific values for adaptation_parameter_set_id and aps_params_type) can be shared between pictures, and different slices within a picture can reference different ALF APS.
[0602] Note 2 - The suffix APS NAL unit associated with a specific VCL NAL unit (this VCL NAL unit precedes the suffix APS NAL unit in the decoding order) is not intended for use by the specific VCL NAL unit, but is used by the VCL NAL unit that follows the suffix APS NAL unit in the decoding order.
[0603] aps_extension_flag equal to 0 specifies that the aps_extension_data_flag syntax element does not exist in the APS RBSP syntax structure. aps_extension_flag equal to 1 specifies that the aps_extension_data_flag syntax element exists in the APS RBSP syntax structure.
[0604] aps_extension_data_flag may have an arbitrary value. Its presence and value do not affect decoder suitability for the profile specified in this version of this specification. Decoders conforming to this version of this specification must ignore all aps_extension_data_flag syntax elements.
[0605] alf_luma_filter_signal_flag equal to 1 specifies that the lumina filter set is signaled. alf_luma_filter_signal_flag equal to 0 specifies that the lumina filter set is not signaled.
[0606] 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 is equal to 0, alf_chroma_filter_signal_flag must be equal to 0.
[0607] 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 must be equal to 1.
[0608] The variable NumAlfFilters, which specifies the number of other adaptive loop filters, is set to 25.
[0609] alf_luma_clip_flag equal to 0 specifies that linear adaptive loop filtering is applied to the lumina component. alf_luma_clip_flag equal to 1 specifies that non-linear adaptive loop filtering may be applied to the lumina component.
[0610] alf_luma_num_filters_signalled_minus1 plus 1 specifies the number of adaptive loop filter classes to which the luminance coefficient can be signaled. The value of alf_luma_num_filters_signalled_minus1 must be in the range from 0 to NumAlfFilters - 1.
[0611] alf_luma_coeff_delta_idx[ filtIdx ] specifies the index of the signaled adaptive loop filter luminance coefficient delta for the filter class represented by filtIdx, which ranges from 0 to 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] must be in the range including 0 to alf_luma_num_filters_signalled_minus1.
[0612] alf_luma_coeff_abs[ sfIdx ][ j ] specifies the absolute value of the j-th coefficient of the signaled luminance filter represented 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] must be in the range from 0 to 128.
[0613] alf_luma_coeff_sign[ sfIdx ][ j ] specifies the sign of the j-th luminance coefficient of the filter represented by sfIdx as follows.
[0614] - If alf_luma_coeff_sign[ sfIdx ][ j ] is 0, the corresponding luminance filter coefficient has a positive value.
[0615] - Otherwise (alf_luma_coeff_sign[ sfIdx ][ j ] is equal to 1), the corresponding luma filter coefficient has a negative value.
[0616] When alf_luma_coeff_sign[ sfIdx ][ j ] does not exist, it is inferred to be the same as 0.
[0617] The variable filtCoeff[ sfIdx ][ j ] with sfIdx = 0..alf_luma_num_filters_signalled_minus1, j = 0..11 is initialized as follows:
[0618] filtCoeff[sfIdx][j] = alf_luma_coeff_abs[sfIdx][j] * (93)
[0619] ( 1 - 2 * alf_luma_coeff_sign[ sfIdx ][ j ] )
[0620] The luminance filter coefficients AlfCoeffL[adapt_parameter_set_id] with filtIdx = 0..NumAlfFilters - 1 and j = 0..11 are derived as follows with the elements AlfCoeffL[adaptation_parameter_set_id][filtIdx][j]:
[0621] AlfCoeffL[ adapt_parameter_set_id ][ filtIdx ][ j ] = filtCoeff[ alf_luma_coeff_delta_idx[ filtIdx ] ][ j ] (94)
[0622] The fixed filter coefficients AlfFixFiltCoeff[ i ][ j ] with i = 0..64, j = 0..11 and the mapping filter class AlfClassToFiltMap[ m ][ n ] with m = 0..15 and n = 0..24 are derived as follows:
[0623] AlfFixFiltCoeff = (95)
[0624] {
[0625] { 0, 0, 2, -3, 1, -4, 1, 7, -1, 1, -1, 5}
[0626] { 0, 0, 0, 0, 0, -1, 0, 1, 0, 0, -1, 2}
[0627] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}
[0628] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 1}
[0629] { 2, 2, -7, -3, 0, -5, 13, 22, 12, -3, -3, 17}
[0630] {-1, 0, 6, -8, 1, -5, 1, 23, 0, 2, -5, 10}
[0631] { 0, 0, -1, -1, 0, -1, 2, 1, 0, 0, -1, 4}
[0632] { 0, 0, 3, -11, 1, 0, -1, 35, 5, 2, -9, 9}
[0633] { 0, 0, 8, -8, -2, -7, 4, 4, 2, 1, -1, 25}
[0634] { 0, 0, 1, -1, 0, -3, 1, 3, -1, 1, -1, 3}
[0635] { 0, 0, 3, -3, 0, -6, 5, -1, 2, 1, -4, 21}
[0636] {-7, 1, 5, 4, -3, 5, 11, 13, 12, -8, 11, 12}
[0637] {-5, -3, 6, -2, -3, 8, 14, 15, 2, -7, 11, 16}
[0638] { 2, -1, -6, -5, -2, -2, 20, 14, -4, 0, -3, 25}
[0639] { 3, 1, -8, -4, 0, -8, 22, 5, -3, 2, -10, 29}
[0640] { 2, 1, -7, -1, 2, -11, 23, -5, 0, 2, -10, 29}
[0641] {-6, -3, 8, 9, -4, 8, 9, 7, 14, -2, 8, 9}
[0642] { 2, 1, -4, -7, 0, -8, 17, 22, 1, -1, -4, 23}
[0643] { 3, 0, -5, -7, 0, -7, 15, 18, -5, 0, -5, 27}
[0644] { 2, 0, 0, -7, 1, -10, 13, 13, -4, 2, -7, 24}
[0645] { 3, 3, -13, 4, -2, -5, 9, 21, 25, -2, -3, 12}
[0646] {-5, -2, 7, -3, -7, 9, 8, 9, 16, -2, 15, 12}
[0647] { 0, -1, 0, -7, -5, 4, 11, 11, 8, -6, 12, 21}
[0648] { 3, -2, -3, -8, -4, -1, 16, 15, -2, -3, 3, 26}
[0649] { 2, 1, -5, -4, -1, -8, 16, 4, -2, 1, -7, 33}
[0650] { 2, 1, -4, -2, 1, -10, 17, -2, 0, 2, -11, 33}
[0651] { 1, -2, 7, -15, -16, 10, 8, 8, 20, 11, 14, 11}
[0652] { 2, 2, 3, -13, -13, 4, 8, 12, 2, -3, 16, 24}
[0653] { 1, 4, 0, -7, -8, -4, 9, 9, -2, -2, 8, 29}
[0654] { 1, 1, 2, -4, -1, -6, 6, 3, -1, -1, -3, 30}
[0655] {-7, 3, 2, 10, -2, 3, 7, 11, 19, -7, 8, 10}
[0656] { 0, -2, -5, -3, -2, 4, 20, 15, -1, -3, -1, 22}
[0657] { 3, -1, -8, -4, -1, -4, 22, 8, -4, 2, -8, 28}
[0658] { 0, 3, -14, 3, 0, 1, 19, 17, 8, -3, -7, 20}
[0659] { 0, 2, -1, -8, 3, -6, 5, 21, 1, 1, -9, 13}
[0660] {-4, -2, 8, 20, -2, 2, 3, 5, 21, 4, 6, 1}
[0661] { 2, -2, -3, -9, -4, 2, 14, 16, 3, -6, 8, 24}
[0662] { 2, 1, 5, -16, -7, 2, 3, 11, 15, -3, 11, 22}
[0663] { 1, 2, 3, -11, -2, -5, 4, 8, 9, -3, -2, 26}
[0664] { 0, -1, 10, -9, -1, -8, 2, 3, 4, 0, 0, 29}
[0665] { 1, 2, 0, -5, 1, -9, 9, 3, 0, 1, -7, 20}
[0666] {-2, 8, -6, -4, 3, -9, -8, 45, 14, 2, -13, 7}
[0667] { 1, -1, 16, -19, -8, -4, -3, 2, 19, 0, 4, 30}
[0668] { 1, 1, -3, 0, 2, -11, 15, -5, 1, 2, -9, 24}
[0669] { 0, 1, -2, 0, 1, -4, 4, 0, 0, 1, -4, 7}
[0670] { 0, 1, 2, -5, 1, -6, 4, 10, -2, 1, -4, 10}
[0671] { 3, 0, -3, -6, -2, -6, 14, 8, -1, -1, -3, 31}
[0672] { 0, 1, 0, -2, 1, -6, 5, 1, 0, 1, -5, 13}
[0673] { 3, 1, 9, -19, -21, 9, 7, 6, 13, 5, 15, 21}
[0674] { 2, 4, 3, -12, -13, 1, 7, 8, 3, 0, 12, 26}
[0675] { 3, 1, -8, -2, 0, -6, 18, 2, -2, 3, -10, 23}
[0676] { 1, 1, -4, -1, 1, -5, 8, 1, -1, 2, -5, 10}
[0677] { 0, 1, -1, 0, 0, -2, 2, 0, 0, 1, -2, 3}
[0678] { 1, 1, -2, -7, 1, -7, 14, 18, 0, 0, -7, 21}
[0679] { 0, 1, 0, -2, 0, -7, 8, 1, -2, 0, -3, 24}
[0680] { 0, 1, 1, -2, 2, -10, 10, 0, -2, 1, -7, 23}
[0681] { 0, 2, 2, -11, 2, -4, -3, 39, 7, 1, -10, 9}
[0682] { 1, 0, 13, -16, -5, -6, -1, 8, 6, 0, 6, 29}
[0683] { 1, 3, 1, -6, -4, -7, 9, 6, -3, -2, 3, 33}
[0684] { 4, 0, -17, -1, -1, 5, 26, 8, -2, 3, -15, 30}
[0685] { 0, 1, -2, 0, 2, -8, 12, -6, 1, 1, -6, 16}
[0686] { 0, 0, 0, -1, 1, -4, 4, 0, 0, 0, -3, 11}
[0687] { 0, 1, 2, -8, 2, -6, 5, 15, 0, 2, -7, 9}
[0688] { 1, -1, 12, -15, -7, -2, 3, 6, 6, -1, 7, 30}
[0689] },
[0690] ,
[0691] AlfClassToFiltMap = (96)
[0692] {
[0693] { 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}
[0694] { 11, 12, 13, 14, 15, 30, 11, 17, 18, 19, 16, 20, 20, 4, 53, 21, 22, 23, 14, 25, 26, 26, 27, 28,}
[0695] { 16, 12, 31, 32, 14, 16, 30, 33, 53, 34, 35, 16, 20, 4, 7, 16, 21, 36, 18, 19, 21, 26, 37, 38, 3}
[0696] { 35, 11, 13, 14, 43, 35, 16, 4, 34, 62, 35, 35, 30, 56, 7, 35, 21, 38, 24, 40, 16, 21, 49, 57, 3}
[0697] { 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}
[0698] { 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}
[0699] { 30, 33, 62, 51, 44, 20, 41, 56, 34, 45, 20, 41, 41, 56, 5, 30, 56, 38, 40, 47, 11, 37, 42, 57,}
[0700] { 35, 11, 23, 32, 14, 35, 20, 4, 17, 18, 21, 20, 20, 20, 4, 16, 21, 36, 46, 25, 41, 26, 48, 49, 5}
[0701] { 12, 31, 59, 59, 3, 33, 33, 59, 59, 52, 4, 33, 17, 59, 55, 22, 36, 59, 59, 60, 22, 5 36, 59, 25, 5}
[0702] { 31, 25, 15, 60, 60, 22, 17, 19, 55, 55, 20, 20, 53, 19, 55, 22, 46, 25, 43, 60, 37, 28, 10, 55,}
[0703] { 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}
[0704] { 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}
[0705] { 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}
[0706] { 35, 11, 23, 14, 51, 35, 20, 41, 56, 62, 16, 20, 41, 56, 7, 16, 21, 38, 24, 40, 26, 26, 42, 57,}
[0707] { 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}
[0708] { 16, 31, 32, 15, 60, 30, 4, 17, 19, 25, 22, 20, 4, 53, 19, 21, 22, 46, 25, 55, 26, 548, 63, 58, 5}
[0709] },
[0710] It is a requirement for bitstream conformance that the value of AlfCoeffL[ adaptation_parameter_set_id ][ filtIdx ][ j ], where filtIdx = 0..NumAlfFilters - 1, j = 0..11, must be in the range that includes -27 to 27 - 1.
[0711] alf_luma_clip_idx[ sfIdx ][ j ] specifies the clipping index of the clipping value to use before multiplying by the j-th coefficient of the signaled luma filter represented by sfIdx. It is a bitstream conformance requirement that the value of alf_luma_clip_idx[ sfIdx ][ j ] with sfIdx = 0..alf_luma_num_filters_signalled_minus1 and j = 0..11 be in a range that includes 0 to 3.
[0712] Element AlfClip L [adaptation_parameter_set_id] [filtIdx] [j] , luma filter clipping value AlfClip with filtIdx=0..NumAlfFilters-1 and j=0..11 L[adaptation_parameter_set_id] is derived as specified in Table 8, depending on BitDepth, and clipIdx is set to be equal to alf_luma_clip_idx [alf_luma_coeff_delta_idx [filtIdx] ] [j].
[0713] alf_chroma_clip_flag equal to 0 specifies that linear adaptive loop filtering is applied to the chroma component; alf_chroma_clip_flag equal to 1 specifies that non-linear adaptive loop filtering is applied to the chroma component. When absent, alf_chroma_clip_flag is inferred to be equal to 0.
[0714] alf_chroma_num_alt_filters_minus1 plus 1 specifies the number of alternate filters for the chroma component. The value of alf_chroma_num_alt_filters_minus1 must be in the range from 0 to 7.
[0715] alf_chroma_coeff_abs[ altIdx ][ j ] specifies the absolute value of the j-th chroma filter coefficient for the alternate 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] must be in the range from 0 to 128.
[0716] alf_chroma_coeff_sign[ altIdx ][ j ] specifies the sign of the j-th chroma filter coefficient for the alternate chroma filter with index altIdx as follows:
[0717] - If alf_chroma_coeff_sign[ altIdx ][ j ] is 0, the corresponding chroma filter coefficient has a positive value.
[0718] - Otherwise (alf_chroma_coeff_sign[ altIdx ][ j ] is equal to 1), the corresponding chroma filter coefficient has a negative value.
[0719] When alf_chroma_coeff_sign[ altIdx ][ j ] does not exist, it is inferred to be the same as 0.
[0720] The chroma filter coefficient AlfCoeffC[ adapt_parameter_set_id ][ altIdx ] with factor AlfCoeffC[ adaptation_parameter_set_id ][ altIdx ][ j ] for altIdx = 0..alf_chroma_num_alt_filters_minus:1, j = 0..5 is derived as follows:
[0721] AlfCoeffC[ adapt_parameter_set_id ][ altIdx ][ j ] = alf_chroma_coeff_abs[ altIdx ][ j ] * (97)
[0722] ( 1 - 2 * alf_chroma_coeff_sign[ altIdx ][ j ] )
[0723] The value of AlfCoeff C [adaptation_parameter_set_id] [altIdx] [j] for altIdx=0..alf_chroma_num_alt_filters_minus1, j=0..5 is -2 7 ~ 2 7-1 Being within the range that includes is a requirement for bitstream conformity.
[0724] alf_cc_cb_filter_signal_flag, identical to 1, specifies that the cross-component filter for the Cb color component is signaled.
[0725] alf_cc_cb_filter_signal_flag equal to 0 specifies that the cross-component filter for the Cb color component is not signaled. When ChromaArrayType is equal to 0, alf_cc_cb_filter_signal_flag must be equal to 0.
[0726] alf_cc_cb_filters_signalled_minus1 plus 1 specifies the number of cross-component filters for the Cb color component signaled in the current ALF APS. The value of alf_cc_cb_filters_signalled_minus1 must be in the range from 0 to 3.
[0727] alf_cc_cb_mapped_coeff_abs[k][j] specifies the absolute value of the j-th mapped coefficient of the k-th cross-component filter signaled for the Cb color component. When alf_cc_cb_mapped_coeff_abs[k][j] does not exist, it is inferred to be equal to 0.
[0728] alf_cc_cb_coeff_sign [k] [j] specifies the sign of the j-th coefficient of the signaled k-th cross-component filter for the Cb color component as follows:
[0729] - If alf_cc_cb_coeff_sign [k][j] is 0, the corresponding cross-component filter coefficient has a positive value.
[0730] - Otherwise (alf_cc_cb_sign [k][j] is equal to 1), the corresponding cross-component filter coefficient has a negative value.
[0731] When alf_cc_cb_coeff_sign [k] [j] does not exist, it is inferred to be the same as 0.
[0732] The signaled k-th cross-component filter coefficients for the color component Cb [adaptation_parameter_set_id] [k] [j] are derived as follows for j=0..6:
[0733] - If alf_cc_cb_mapped_coeff_abs[k][j] is 0, CcAlfApsCoeffCb[adaptation_parameter_set_id][k][j] is set to 0.
[0734] - Otherwise, CcAlfApsCoeffCb[adaptation_parameter_set_id] [k] [j] is (1-2*alf_cc_cb_coeff_sign [k] [j] ) *2 alf_cc_cb_mapped_coeff_abs [k] [j] -1 It is set to be the same as.
[0735] alf_cc_cr_filter_signal_flag equal to 1 specifies that the cross-component filter for the Cr color component is signaled. alf_cc_cr_filter_signal_flag equal to 0 specifies that the cross-component filter for the Cr color component is not signaled. When ChromaArrayType is equal to 0, alf_cc_cr_filter_signal_flag must be equal to 0.
[0736] alf_cc_cr_filters_signalled_minus1 plus 1 specifies the number of cross-component filters for the Cr color components signaled in the current ALF APS. The value of alf_cc_cr_filters_signalled_minus1 must be in the range from 0 to 3.
[0737] alf_cc_cr_mapped coeff_abs[k][j] specifies the absolute value of the j-th mapped coefficient of the k-th cross-component filter signaled for the Cr color component. When alf_cc_cr_mapped coeff_abs[k][j] does not exist, it is inferred to be equal to 0.
[0738] alf_cc_cr_coeff_sign [k] [j] Specifies the sign of the j-th coefficient of the signaled k-th cross-component filter for the Cr color component as follows:
[0739] - If alf_cc_cr_coeff_sign [k][j] is 0, the corresponding cross-component filter coefficient has a positive value.
[0740] - Otherwise (alf_cc_cr_sign [k][j] is equal to 1), the corresponding cross-component filter coefficient has a negative value.
[0741] When alf_cc_cr_coeff_sign [k] [j] does not exist, it is inferred to be the same as 0.
[0742] The signaled k-th cross-component filter coefficients for the Cr color component CcAlfApsCoeff Cr [adaptation_parameter_set_id] [k] [j] with j=0..6 are derived as follows:
[0743] - If alf_cc_cr_mapped_coeff_abs[k][j] is 0, CcAlfApsCoeffCr[adaptation_parameter_set_id][k][j] is set to 0.
[0744] - Otherwise, CcAlfApsCoeffCr[adaptation_parameter_set_id] [k] [j] is set to (1-2*alf_cc_cr_coeff_sign [k] [j] ) *2alf_cc_cr_mapped_coeff_abs [k] [j] -1.
[0745] alf_chroma_clip_idx[ altIdx ][ j ] specifies the clipping index of the clipping value to be used before multiplying the j-th coefficient of the alternate chroma filter by the index altIdx. It is a bitstream conformance requirement that the value of alf_chroma_clip_idx[ altIdx ][ j ], where altIdx = 0..alf_chroma_num_alt_filters_minus1 and j = 0..5, must be in a range that includes 0 to 3.
[0746] The chroma filter clipping value AlfClipC[adaptation_parameter_set_id] [altIdx] [j], altIdx=0..alf_chroma_num_alt_filters_minus1, j=0..5, is derived as specified in Table 8, which depends on BitDepth, and clipIdx is set to be equal to alf_chroma_clip_idx [altIdx] [j].
[0747] Table 8 - AlfClip Specifications Based on bitDepth and clipIdx BitDepth clipIdx 0 1 2 3 8 2 8 2 5 2 3 2 1 9 2 9 2 6 2 4 2 2 10 2 10 2 7 2 5 2 3 11 2 11 2 8 2 6 2 4 12 2 12 2 9 2 7 2 5 13 2 13 2 10 2 8 2 6 14 2 14 2 11 2 9 2 7 15 2 15 2 12 2 10 2 8 16 2 16 2 13 2 11 2 9
[0748] lmcs_min_bin_idx specifies the minimum bin index used for luminance mapping with the chroma scaling configuration process. The value of lmcs_min_bin_idx must be in a range from 0 to 15.
[0749] lmcs_delta_max_bin_idx specifies a delta value between 15 and LmcsMaxBinIdx, the maximum bin index used for luminance mapping with the chroma scaling configuration process. The value of lmcs_delta_max_bin_idx must be in a range including 0 to 15. The value of LmcsMaxBinIdx is set to 15 minus lmcs_delta_max_bin_idx. The value of LmcsMaxBinIdx must be greater than or equal to lmcs_min_bin_idx.
[0750] lmcs_delta_cw_prec_minus1 plus 1 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 must be in a range including 0 to BitDepth-2.
[0751] lmcs_delta_abs_cw[ i ] specifies the absolute delta codeword value for the i-th bin.
[0752] lmcs_delta_sign_cw_flag[ i ] specifies the sign of the variable lmcsDeltaCW[ i ] as follows:
[0753] - If lmcs_delta_sign_cw_flag[ i ] is 0, lmcsDeltaCW[ i ] is a positive value.
[0754] - Otherwise (lmcs_delta_sign_cw_flag[ i ] is not 0), lmcsDeltaCW[ i ] is a negative value.
[0755] If lmcs_delta_sign_cw_flag[ i ] is missing, it is inferred to be the same as 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 - 2 * 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 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 ] must be in the range from (OrgCW>>3) to (OrgCW<<3-1).
[0765] - For i=LmcsMaxBinIdx+1..15, lmcsCW[ i ] is set to 0.
[0766] The following condition being true is a requirement for bitstream conformity:
[0767] <= ( 1 << BitDepth ) - 1 (101)
[0768] The variable InputPivot[ i ] for i=0..16 is derived as follows:
[0769] InputPivot[ i ] = i * OrgCW (102)
[0770] The variables LmcsPivot[i] for i=0..16, ScaleCoeff[i], and InvScaleCoeff[i] for i=0..15 are derived as follows:
[0771] LmcsPivot[ 0 ] = 0;
[0772] for( i = 0; i <= 15; i++ ) {
[0773] LmcsPivot[ i + 1 ] = LmcsPivot[ i ] + lmcsCW[ i ]
[0774] ScaleCoeff[ i ] = ( lmcsCW[ i ] * (1 << 11 ) + ( 1 << ( Log2( OrgCW ) - 1 ) ) ) >> ( Log2( OrgCW ) )
[0775] if( lmcsCW[ i ] == 0 ) (103)
[0776] InvScaleCoeff[ i ] = 0
[0777] else
[0778] InvScaleCoeff[i] = OrgCW * (1 << 11) / lmcsCW[i]
[0779] }
[0780] For LmcsMaxBinIdx, if the value of LmcsPivot[i] is not a multiple of 1<< (BitDepth-5), then (LmcsPivot[i] >> (LmcsPivot[i]) BitDepth-5)) is a bitstream conformance requirement that it must not be equal to the value of (LmcsPivot[i+1] >> (BitDepth-5)).
[0781] lmcs_delta_abs_crs specifies the absolute codeword value of the variable lmcsDeltaCrs. The value of lmcs_delta_abs_crs must be in the range including 0 and 7. If it does not exist, lmcs_delta_abs_crs is inferred to be equal to 0.
[0782] lmcs_delta_sign_crs_flag specifies the sign of the variable lmcsDeltaCrs. If it does not exist, lmcs_delta_sign_crs_flag is inferred to be equal to 0.
[0783] The variable lmcsDeltaCrs is derived as follows:
[0784] lmcsDeltaCrs = ( 1 - 2 * lmcs_delta_sign_crs_flag ) * lmcs_delta_abs_crs (104)
[0785] When lmcsCW[ i ] is not equal to 0, it is a bitstream conformance requirement that (lmcsCW[ i ] + lmcsDeltaCrs) must be in the range including (OrgCW>>3) ~ ((OrgCW<<3) -1).
[0786] The variable ChromaScaleCoeff[ i ] for i=0...15 is derived as follows:
[0787] if( lmcsCW[ i ] == 0 )
[0788] ChromaScaleCoeff[i] = (1 << 11)
[0789] else
[0790] ChromaScaleCoeff[i] = OrgCW * (1 << 11) / (lmcsCW[i] + lmcsDeltaCrs)
[0791] The scaling_matrix_for_lfnst_disabled_flag, identical to 1, specifies that the scaling matrix is not applied to blocks coded as LFNST.
[0792] scaling_matrix_for_lfnst_disabled_flag, which is equal to 0, specifies that a scaling matrix can be applied to blocks coded as LFNST.
[0793] [[1 is equivalent to scaling_list_chroma_present_flag, which specifies that the chroma scaling list exists in scaling_list_data().
[0794] scaling_list_chroma_present_flag equal to 0 specifies that the chroma scaling list does not exist in scaling_list_data(). It is a bitstream conformance requirement that scaling_list_chroma_present_flag must be equal to 0 when ChromaArrayType is equal to 0, and equal to 1 when ChromaArrayType is not equal to 0.
[0795] scaling_list_copy_mode_flag [id], which is the same as 1, specifies 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].
[0796] scaling_list_copy_mode_flag [id] equal to 0 specifies that scaling_list_pred_mode_flag exists.
[0797] scaling_list_pred_mode_flag [id] equal to 1 specifies that the value of the scaling list can be predicted from the reference scaling list. The reference scaling list is specified by scaling_list_pred_id_delta [id]. scaling_list_pred_mode_flag [id] equal to 0 specifies that the value of the scaling list is explicitly signaled. If it does not exist, the value of scaling_list_pred_mode_flag [id] is inferred to be equal to 0.
[0798] scaling_list_pred_id_delta[id] specifies the reference scaling list used to derive the prediction scaling matrix ScalingMatrixPred[id]. If it does not exist, the value of scaling_list_pred_id_delta[id] is inferred to be equal to 0. The value of scaling_list_pred_id_delta[id] must be in the range from 0 to maxIdDelta, and maxIdDelta is derived according to id as follows:
[0799] maxIdDelta = (id< 2) ? id : ( (id<8) ? (id-2) : (id-8) ) (106) (106)
[0800] The variables refId and matrixSize are derived as follows:
[0801] refId = id - scaling_list_pred_id_delta[ id ] (107)
[0802] matrixSize = (id < 2) 2 : ( (id < 8) ? 4 : 8 ) (108)
[0803] The array ScalingMatrixPred [x] [y] x=0..matrixSize-1, y=0..matrixSize-1 and the variable ScalingMatrixDCPred is derived as follows:
[0804] - When both scaling_list_copy_mode_flag[id] and scaling_list_pred_mode_flag[id] are 0, all elements of ScalingMatrixPred are set to 8, and the value of ScalingMatrixDCPred is set to 8.
[0805] - Otherwise, when scaling_list_pred_id_delta[id] is 0, all elements of ScalingMatrixPred are set to 16 and ScalingMatrixDCPred is set to 16.
[0806] - Otherwise (scaling_list_copy_mode_flag[id] or scaling_list_pred_mode_flag[id] is 1 and scaling_list_pred_id_delta[id] is greater than 0), ScalingMatrixPred is set to be equal to alingMatrixRec [refId], and the following applies to ScalingMatrixPred:
[0807] - If refId is greater than 13, ScalingMatrixDCPred is set to be the same as ScalingMatrixDCRec[refId-14].
[0808] - Otherwise (refId is less than or equal to 13), ScalingMatrixDCPred is set to be equal to ScalingMatrixPred [0] [0].
[0809] scaling_list_dc_coef [id-14] is used to derive the value of the variable ScalingMatrixDC [id-14] when id is greater than 13, as follows:
[0810] ScalingMatrixDCRec[id - 14] = (ScalingMatrixDCPred + scaling_list_dc_coef[id - 14]) & 255 (109)
[0811] If not present, the value of scaling_list_dc_coef[id-14] is inferred to be equal to 0. The value of scaling_list_delta_coef[id-14] must be in the range of -128 to 127. The value of ScalingMatrixDCRec[id-14] must be greater than 0.
[0812] scaling_list_delta_coef[id][i] specifies the difference between the current matrix coefficient ScalingList[id][i] and the previous matrix coefficient ScalingList[id][i-1] when scaling_list_copy_mode_flag[id] is 0. The value of scaling_list_delta_coef[id][i] must be in the range of -128 to 127. When scaling_list_copy_mode_flag[id] is 1, all elements of ScalingList[id] are set to 0.
[0813] The (matrixSize) x (matrixSize) array ScalingMatrixRec [id] is derived as follows:
[0814] ScalingMatrixRec[id][x][y] = (ScalingMatrixPred[x][y] + ScalingList[id][k]) & 255 (110)
[0815] k = 0..( matrixSize * matrixSize - 1 ),
[0816] x = DiagScanOrder[ Log2( matrixSize ) ][ Log2( matrixSize ) ][ k ][ 0 ], and
[0817] y = DiagScanOrder[ Log2( matrixSize ) ][ Log2( matrixSize ) ][ k ][ 1 ]
[0818] The value of ScalingMatrixRec [id] [x] [y] must be greater than 0.
[0819] 3.5. PH Syntax and Semantics
[0820] In the latest VVC draft text, the PH syntax and semantics are as follows:
[0821]
[0822] PH RBSP includes the PH syntax structure, namely picture_header_structure().
[0823]
[0824]
[0825]
[0826]
[0827]
[0828]
[0829]
[0830]
[0831] The PH syntax structure contains information common to all slices of the coded picture associated with the PH syntax structure.
[0832] gdr_or_irap_pic_flag equal to 1 specifies that the current picture is a GDR or IRAP picture. gdr_or_irap_pic_flag equal to 0 specifies that the current picture may or may not be a GDR or IRAP picture.
[0833] gdr_pic_flag equal to 1 specifies that the picture associated with PH is a GDR picture. gdr_pic_flag equal to 0 specifies that the picture associated with PH is not a GDR picture. When absent, the value of gdr_pic_flag is inferred to be equal to 0. When gdr_enabled_flag is equal to 0, the value of gdr_pic_flag must be equal to 0.
[0834] ph_inter_slice_allowed_flag equal to 0 specifies that all coded slices of a picture have the same slice_type as 2. ph_inter_slice_allowed_flag equal to 1 specifies that a picture with the same slice_type as 0 or 1 may or may not have one or more coded slices.
[0835] ph_intra_slice_allowed_flag equal to 0 specifies that all coded slices of a picture have a slice_type equal to 0 or 1.
[0836] ph_intra_slice_allowed_flag, which is the same as 1, specifies that a picture with slice_type, which is the same as 2, may or may not have one or more coded slices. If none exist, the value of ph_intra_slice_allowed_flag is inferred to be the same as 1.
[0837] Note 1 - For bitstreams assumed to operate subpicture-based bitstream merging without needing to change the PH NAL unit, the encoder must set the values of both ph_inter_slice_allowed_flag and ph_intra_slice_allowed_flag to 1.
[0838] The non_reference_picture_flag, equivalent to 1, specifies that the picture associated with PH is not used as a reference picture. The non_reference_picture_flag, equivalent to 0, specifies that the picture associated with PH may or may not be used as a reference picture.
[0839] ph_pic_parameter_set_id specifies the pps_pic_parameter_set_id value of the PPS in use. The value of ph_pic_parameter_set_id must be in the range from 0 to 63.
[0840] It is a requirement for bitstream conformance that the TemporalId value of PH must be greater than or equal to the TemporalId value of PPS having the same pps_pic_parameter_set_id as ph_pic_parameter_set_id.
[0841] ph_pic_order_cnt_lsb specifies MaxPicOrderCntLsb as the picture order count modulus for the current picture. 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 must be in the range from 0 to MaxPicOrderCntLsb-1.
[0842] no_output_of_prior_pics_flag affects the output of previously decoded pictures in DPB after decoding a CLVSS picture that is not the first picture of the bitstream specified in Appendix C.
[0843] Recovery_poc_cnt specifies the recovery point of the picture decoded in output order. If the current picture is a GDR picture associated with PH, and there is a picture picA in CLVS that follows the current GDR picture in decoding order with a PicOrderCntVal equal to the current GDR picture's PicOrderCntVal plus the value of recovery_poc_cnt, then picture picA is designated as the recovery point picture. Otherwise, the first picture in output order with a PicOrderCntVal greater than the current picture's PicOrderCntVal plus the value of recovery_poc_cnt is designated as the recovery point picture. The recovery point picture must not precede the current GDR picture in decoding order. The value of Recovery_poc_cnt must be in a range including 0 to MaxPicOrderCntLsb-1.
[0844] If the current picture is a GDR picture, the variable RpPicOrderCntVal is derived as follows:
[0845] RpPicOrderCntVal = PicOrderCntVal + recovery_poc_cnt (82)
[0846] Note 2 - When gdr_enabled_flag is 1 and the PicOrderCntVal of the current picture is greater than or equal to the RpPicOrderCntVal of the associated GDR picture, the current and subsequent decoded pictures in the output order exactly match the corresponding pictures created by starting the decoding process from the previous IRAP picture, if any, that precedes the associated GDR picture in the decoding order.
[0847] ph_extra_bit[ i ] can be 1 or 0. Decoders conforming to this version of this specification must ignore the value of ph_extra_bit[ i ]. This value does not affect the decoder's suitability for the profile specified in this version of the specification.
[0848] ph_poc_msb_present_flag equal to 1 specifies that the syntax element poc_msb_val exists in the PH. ph_poc_msb_present_flag equal to 0 specifies that the syntax element poc_msb_val does not exist in the PH. If vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]] is 0 and the current layer's reference layer has a picture in the current AU, the value of ph_poc_msb_present_flag must be equal to 0.
[0849] poc_msb_val specifies the POC MSB value of the current picture. The length of the syntax element poc_msb_val is poc_msb_len_minus1 + 1 bit.
[0850] ph_alf_enabled_flag, equivalent to 1, specifies that the adaptive loop filter is enabled for all slices associated with PH and can be applied to the Y, Cb, or Cr color components of the slices. ph_alf_enabled_flag, equivalent to 0, specifies that the adaptive loop filter can be disabled for one or more or all slices associated with PH. If not present, ph_alf_enabled_flag is inferred to be equivalent to 0.
[0851] ph_num_alf_aps_ids_luma specifies the number of ALF APS referenced by the slice associated with PH.
[0852] ph_alf_aps_id_luma[ i ] specifies the aps_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice associated with PH.
[0853] The alf_luma_filter_signal_flag value of an APS NAL unit having the same aps_params_type as ALF_APS and the same adapt_parameter_set_id as ph_alf_aps_id_luma[ i ] must be equal to 1.
[0854] The TemporalId of an APS NAL unit having the same aps_params_type as ALF_APS and the same aps_parameter_set_id as ph_alf_aps_id_luma[ i ] must be less than or equal to the TemporalId of the picture associated with PH.
[0855] 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 indicates that the adaptive loop filter is applied to the Cb color component. ph_alf_chroma_idc equal to 2 indicates that the adaptive loop filter is applied to the Cr color component. ph_alf_chroma_idc equal to 3 indicates that the adaptive loop filter is applied to the Cb and Cr color components. If ph_alf_chroma_idc does not exist, it is inferred to be equal to 0.
[0856] ph_alf_aps_id_chroma specifies the aps_parameter_set_id of the ALF APS that the chroma component of the slice associated with PH references.
[0857] The alf_chroma_filter_signal_flag value of an APS NAL unit having the same aps_params_type as ALF_APS and the same adapt_parameter_set_id as ph_alf_aps_id_chroma must be equal to 1.
[0858] The TemporalId of an APS NAL unit having the same aps_params_type as ALF_APS and the same aps_parameter_set_id as ph_alf_aps_id_chroma must be smaller than or equal to the TemporalId of the picture associated with PH.
[0859] ph_cc_alf_cb_enabled_flag, identical to 1, specifies that a cross-component filter for the Cb color component is enabled for all slices associated with PH and can be applied to the Cb color component of the slice.
[0860] ph_cc_alf_cb_enabled_flag, which is equal to 0, specifies that the cross-component filter for the Cb color component can be disabled for one or more or all slices associated with PH. If not present, ph_cc_alf_cb_enabled_flag is inferred to be equal to 0.
[0861] ph_cc_alf_cb_aps_i specifies the adaptation_parameter_set_id of the ALF APS that the Cb color component of the slice associated with PH references.
[0862] The alf_cc_cb_filter_signal_flag value of an APS NAL unit having the same aps_params_type as ALF_APS and the same aps_parameter_set_id as ph_cc_alf_cb_aps_id must be equal to 1.
[0863] The TemporalId of an APS NAL unit having the same aps_params_type as ALF_APS and the same aps_parameter_set_id as ph_cc_alf_cb_aps_id must be less than or equal to the TemporalId of the picture associated with PH.
[0864] ph_cc_alf_cr_enabled_flag, identical to 1, specifies that a cross-component filter for the Cr color component is enabled for all slices associated with PH and can be applied to the Cr color component of the slice.
[0865] ph_cc_alf_cr_enabled_flag, which is equal to 0, specifies that the cross-component filter for the Cr color component can be disabled for one or more or all slices associated with PH. If not present, ph_cc_alf_cr_enabled_flag is inferred to be equal to 0.
[0866] ph_cc_alf_cr_aps_id specifies the adaptation_parameter_set_id of the ALF APS that the Cr color component of the slice associated with PH references.
[0867] The alf_cc_cr_filter_signal_flag value of an APS NAL unit having the same aps_params_type as ALF_APS and the same adaptation_parameter_set_id as ph_cc_alf_cr_aps_id must be equal to 1.
[0868] The TemporalId of an APS NAL unit having the same aps_params_type as ALF_APS and the same adaptation_parameter_set_id as ph_cc_alf_cr_aps_id must be less than or equal to the TemporalId of the picture associated with PH.
[0869] If ph_lmcs_enabled_flag is 1, it specifies that luminance mapping with chroma scaling is enabled for all slices associated with PH. ph_lmcs_enabled_flag equal to 0 specifies that luminance mapping with chroma scaling may be disabled for one or more or all slices associated with PH. If not present, the value of ph_lmcs_enabled_flag is inferred to be equal to 0.
[0870] ph_lmcs_aps_id specifies the aps_parameter_set_id of the LMCS APS referenced by the slice associated with the PH. The TemporalId of an APS NAL unit having the same aps_params_type as the LMCS_APS and the same adapt_parameter_set_id as ph_lmcs_aps_id must be less than or equal to the TemporalId of the picture associated with the PH.
[0871] The ph_chroma_residual_scale_flag, identical to 1, specifies that chroma residual scaling is enabled for all slices associated with PH.
[0872] ph_chroma_residual_scale_flag equal to 0 specifies that chroma residual scaling may be disabled for one or more or all slices associated with PH. If ph_chroma_residual_scale_flag does not exist, it is inferred to be equal to 0.
[0873] ph_scaling_list_present_flag, identical to 1, specifies that the scaling list data used for slices associated with PH is derived based on the scaling list data contained in the referenced scaling list APS.
[0874] ph_scaling_list_present_flag equal to 0 specifies that the scaling list data used for slices associated with PH is set to 16. If it does not exist, the value of ph_scaling_list_present_flag is inferred to be 0.
[0875] ph_scaling_list_aps_id specifies the adaptation_parameter_set_id of the scaling list APS. The TemporalId of an APS NAL unit having the same aps_params_type as SCALING_APS and the same aps_parameter_set_id as ph_scaling_list_aps_id must be less than or equal to the TemporalId of the picture associated with the PH.
[0876] ph_virtual_boundaries_present_flag, identical to 1, specifies that virtual boundary information is signaled in PH.
[0877] ph_virtual_boundaries_present_flag, which is equal to 0, specifies that virtual boundary information is not signaled in the PH. When one or more virtual boundaries are signaled in the PH, in-loop filtering behavior is disabled across the picture's virtual boundaries. In-loop filtering behavior includes deblocking filters, sample-adaptive offset filters, and adaptive loop filter behaviors. If none exist, the value of ph_virtual_boundaries_present_flag is inferred to be equal to 0.
[0878] It is a requirement of bitstream conformity that when subpic_info_present_flag is equal to 1, the value of ph_virtual_boundaries_present_flag must be equal to 0.
[0879] The VirtualBoundariesPresentFlag variable is derived as follows:
[0880] VirtualBoundariesPresentFlag = 0
[0881] if( sps_virtual_boundaries_enabled_flag )
[0882] VirtualBoundariesPresentFlag = sps_virtual_boundaries_present_flag | |
[0883] ph_virtual_boundaries_present_flag (83)
[0884] ph_num_ver_virtual_boundaries specifies the number of ph_virtual_boundaries_pos_x[ i ] syntax elements in PH. If ph_num_ver_virtual_boundaries is not present, it is inferred to be equal to 0.
[0885] The NumVerVirtualBoundaries variable is derived as follows:
[0886] NumVerVirtualBoundaries = 0
[0887] if( sps_virtual_boundaries_enabled_flag )
[0888] NumVerVirtualBoundaries = sps_virtual_boundaries_present_flag ?
[0889] sps_num_ver_virtual_boundaries : ph_num_ver_virtual_boundaries (84)
[0890] ph_virtual_boundaries_pos_x[ i ] specifies the location of the i-th vertical virtual boundary in luminance sample units divided by 8. The value of ph_virtual_boundaries_pos_x[ i ] must be in the range from 1 to Ceil(pic_width_in_luma_samplesχ8) - 1.
[0891] A list of i in the range from 0 to NumVerVirtualBoundaries-1, VirtualBoundariesPosX[ i ], is derived as follows with luminance sample units specifying the location of the vertical virtual boundary:
[0892] for( i = 0; i < NumVerVirtualBoundaries; i++)
[0893] VirtualBoundariesPosX[ i ] = ( sps_virtual_boundaries_present_flag ?
[0894] sps_virtual_boundaries_pos_x[ i ] : ph_virtual_boundaries_pos_x[ i ] ) * 8 (85)
[0895] The distance between two vertical virtual boundaries must be greater than or equal to the CtbSizeY luminance sample.
[0896] ph_num_hor_virtual_boundaries specifies the number of ph_virtual_boundaries_pos_y[ i ] syntax elements in PH. If ph_num_hor_virtual_boundaries is not present, it is inferred to be equal to 0.
[0897] The NumHorVirtualBoundaries parameter is derived as follows:
[0898] NumHorVirtualBoundaries = 0
[0899] if( sps_virtual_boundaries_enabled_flag )
[0900] NumHorVirtualBoundaries = sps_virtual_boundaries_present_flag ?
[0901] sps_num_hor_virtual_boundaries : ph_num_hor_virtual_boundaries (86)
[0902] If sps_virtual_boundaries_enabled_flag is 1 and ph_virtual_boundaries_present_flag is 1, the sum of ph_num_ver_virtual_boundaries and ph_num_hor_virtual_boundaries must be greater than 0.
[0903] ph_virtual_boundaries_pos_y[ i ] specifies the location of the i-th horizontal virtual boundary in luminance sample units divided by 8. The value of ph_virtual_boundaries_pos_y[ i ] must be in the range from 1 to Ceil(pic_height_in_luma_samplesχ8) - 1.
[0904] The list VirtualBoundariesPosY[ i ] for i in the range from 0 to NumHorVirtualBoundaries-1 is derived as follows with luminous sample units specifying the locations of horizontal virtual boundaries:
[0905] for( i = 0; i < NumHorVirtualBoundaries; i++)
[0906] VirtualBoundariesPosY[ i ] = ( sps_virtual_boundaries_present_flag ?
[0907] sps_virtual_boundaries_pos_y[ i ] : ph_virtual_boundaries_pos_y[ i ] ) * 8 (87)
[0908] The distance between two horizontal virtual boundaries must be greater than or equal to the CtbSizeY luminance sample.
[0909] pic_output_flag affects the decoded picture output and removal process specified in Appendix C. If pic_output_flag does not exist, it is inferred to be the same as 1.
[0910] The partition_constraints_override_flag identical to 1 specifies that partition constraint parameters exist in PH.
[0911] partition_constraints_override_flag equal to 0 specifies that the partition constraint parameter does not exist in PH. When it does not exist, the value of partition_constraints_override_flag is inferred to be equal to 0.
[0912] pph_log2_diff_min_qt_min_cb_intra_slice_luma Specifies the difference between the base 2 log of the minimum size of the luminal samples of the luminal leaf blocks resulting from the quadtree splitting of the CTU and the base 2 log of the minimum coding block size of the luminal samples of the luminal CUs with the same slice_type as 2(I) associated with the PH. The value of ph_log2_diff_min_qt_min_cb_intra_slice_luma must be in the range including 0 to CtbLog2SizeY-MinCbLog2SizeY. If it does not exist, the value of ph_log2_diff_min_qt_min_cb_luma is inferred to be the same as sps_log2_diff_min_qt_min_cb_intra_slice_luma.
[0913] ph_max_mtt_hierarchy_depth_intra_slice_luma specifies the maximum hierarchy depth for coding units resulting from multi-type tree splitting of quadtree leaves in slices having the same slice_type as 2(I) associated with PH. The value of ph_max_mtt_hierarchy_depth_intra_slice_luma must be in the range including 0 to 2*(CtbLog2SizeY-MinCbLog2SizeY). If it does not exist, the value of ph_max_mtt_hierarchy_depth_intra_slice_luma is inferred to be the same as sps_max_mtt_hierarchy_depth_intra_slice_luma.
[0914] ph_log2_diff_max_bt_min_qt_intra_slice_luma Specifies the difference between the base 2 log of the maximum size (width or height) of the luminal samples of a luminal coding block that can be partitioned using binary partitioning, and the minimum size (width or height) of the luminal samples of a luminal leaf block resulting from the quadtree partitioning of the CTU in a slice with slice_type 2(I) associated with PH. The value of ph_log2_diff_max_bt_min_qt_intra_slice_luma must be in the range from 0 to CtbLog2SizeY-MinQtLog2SizeIntraY. If it does not exist, the value of ph_log2_diff_max_bt_min_qt_intra_slice_luma is inferred to be the same as sps_log2_diff_max_bt_min_qt_intra_slice_luma.
[0915] ph_log2_diff_max_tt_min_qt_intra_slice_lumaSpecifies the difference between the base 2 log of the maximum size (width or height) of the luminal samples of a luminal coding block that can be partitioned using ternary partitioning, and the minimum size (width or height) of the luminal samples of a luminal leaf block resulting from the quadtree partitioning of the CTU in a slice with slice_type 2(I) associated with PH. The value of ph_log2_diff_max_tt_min_qt_intra_slice_luma must be in the range from 0 to CtbLog2SizeY-MinQtLog2SizeIntraY. If it does not exist, the value of ph_log2_diff_max_tt_min_qt_intra_slice_luma is inferred to be the same as sps_log2_diff_max_tt_min_qt_intra_slice_luma.
[0916] ph_log2_diff_min_qt_min_cb_intra_slice_chroma Specifies the difference between the base 2 log of the minimum size in the luminance samples of the chroma leaf blocks resulting from quadtree splitting of the chroma CTU with the same treeType as DUAL_TREE_CHROMA and the base 2 log of the minimum coding block size for the luminance samples of the chroma CU with the same treeType as DUAL_TREE_CHROMA in the slice with slice_type 2(I) associated with PH. The value of ph_log2_diff_min_qt_min_cb_intra_slice_chroma must be in the range including 0 to CtbLog2SizeY-MinCbLog2SizeY. If it does not exist, the value of ph_log2_diff_min_qt_min_cb_intra_slice_chroma is inferred to be the same as sps_log2_diff_min_qt_min_cb_intra_slice_chroma.
[0917] ph_max_mtt_hierarchy_depth_intra_slice_chroma specifies the maximum hierarchy depth for chroma coding units resulting from multi-type tree splitting of chroma quadtree leaves with the same treeType as DUAL_TREE_CHROMA in a slice with slice_type 2(I) associated with PH. The value of ph_max_mtt_hierarchy_depth_intra_slice_chroma must be in the range from 0 to 2*(CtbLog2SizeY-MinCbLog2SizeY). If it does not exist, the value of ph_max_mtt_hierarchy_depth_intra_slice_chroma is inferred to be the same as sps_max_mtt_hierarchy_depth_intra_slice_chroma.
[0918] ph_log2_diff_max_bt_min_qt_intra_slice_chroma Specifies the difference between the base 2 log of the maximum size (width or height) of the luminance samples in a chroma coding block that can be split using binary splitting, and the minimum size (width or height) of the luminance samples in a chroma leaf block resulting from quadtree splitting of a chroma CTU with treeType DUAL_TREE_CHROMA in a slice with slice_type 2(I) associated with PH. The value of ph_log2_diff_max_bt_min_qt_intra_slice_chroma must be in the range including 0 to CtbLog2SizeY-MinQtLog2SizeIntraC. If it does not exist, the value of ph_log2_diff_max_bt_min_qt_intra_slice_chroma is inferred to be the same as sps_log2_diff_max_bt_min_qt_intra_slice_chroma.
[0919] ph_log2_diff_max_tt_min_qt_intra_slice_chromaSpecifies the difference between the base 2 log of the maximum size (width or height) of the luminance samples of a chroma coding block that can be split using ternary splitting, and the minimum size (width or height) of the luminance samples of a chroma leaf block resulting from quadtree splitting of a chroma CTU with treeType DUAL_TREE_CHROMA in a slice with slice_type 2(I) associated with PH. The value of ph_log2_diff_max_tt_min_qt_intra_slice_chroma must be in the range including 0 to CtbLog2SizeY-MinQtLog2SizeIntraC. If it does not exist, the value of ph_log2_diff_max_tt_min_qt_intra_slice_chroma is inferred to be the same as sps_log2_diff_max_tt_min_qt_intra_slice_chroma.
[0920] ph_cu_qp_delta_subdiv_intra_slice specifies the maximum cbSubdiv value of the coding unit of the intra slice, passing cu_qp_delta_abs and cu_qp_delta_sign_flag. The value of ph_cu_qp_delta_subdiv_intra_slice must be in the range of 0 to 2*(CtbLog2SizeY-MinQtLog2SizeIntraY+ph_max_mtt_hierarchy_depth_intra_slice_luma).
[0921] If it does not exist, the value of ph_cu_qp_delta_subdiv_intra_slice is inferred to be equal to 0.
[0922] ph_cu_chroma_qp_offset_subdiv_intra_slice specifies the maximum cbSubdiv value of the coding unit of the intra slice passing cu_chroma_qp_offset_flag. The value of ph_cu_chroma_qp_offset_subdiv_intra_slice must be in the range of 0 to 2*(CtbLog2SizeY-MinQtLog2SizeIntraY+ph_max_mtt_hierarchy_depth_intra_slice_luma).
[0923] When it does not exist, the value of ph_cu_chroma_qp_offset_subdiv_intra_slice is inferred to be equal to 0.
[0924] ph_log2_diff_min_qt_min_cb_inter_slice Specifies the difference between the base 2 log of the minimum size of the luminal samples of the luminal leaf blocks resulting from the quadtree splitting of the CTU and the base 2 log of the minimum luminal coding block size of the luminal samples for the luminal CUs of the slices associated with PH where slice_type is 0 (B) or 1 (P). The value of ph_log2_diff_min_qt_min_cb_inter_slice must be in the range from 0 to CtbLog2SizeY - MinCbLog2SizeY. If it does not exist, the value of ph_log2_diff_min_qt_min_cb_luma is inferred to be the same as sps_log2_diff_min_qt_min_cb_inter_slice.
[0925] ph_max_mtt_hierarchy_depth_inter_slice specifies the maximum hierarchical depth of coding units resulting from multi-type tree splitting of quadtree leaves in slices having the same slice_type as 0(B) or 1(P) associated with PH. The value of ph_max_mtt_hierarchy_depth_inter_slice must be in the range including 0 to 2*(CtbLog2SizeY-MinCbLog2SizeY). If it does not exist, the value of ph_max_mtt_hierarchy_depth_inter_slice is inferred to be the same as sps_max_mtt_hierarchy_depth_inter_slice.
[0926] ph_log2_diff_max_bt_min_qt_inter_slice Specifies the difference between the base 2 log of the maximum size (width or height) of the luminance samples of a luminance coding block that can be partitioned using binary partitioning, and the minimum size (width or height) of the luminance samples of a luminance leaf block resulting from the quadtree partitioning of the CTU in a slice where the slice_type associated with PH is 0 (B) or 1 (P). The value of ph_log2_diff_max_bt_min_qt_inter_slice must be in the range from 0 to CtbLog2SizeY - MinQtLog2SizeInterY. If it does not exist, the value of ph_log2_diff_max_bt_min_qt_inter_slice is inferred to be the same as sps_log2_diff_max_bt_min_qt_inter_slice.
[0927] ph_log2_diff_max_tt_min_qt_inter_sliceSpecifies the difference between the base 2 log of the maximum size (width or height) of the luminance samples of a luminance coding block that can be partitioned using ternary partitioning, and the minimum size (width or height) of the luminance samples of a luminance leaf block resulting from the quadtree partitioning of the CTU in a slice where the slice_type associated with PH is 0 (B) or 1 (P). The value of ph_log2_diff_max_tt_min_qt_inter_slice must be in the range from 0 to CtbLog2SizeY - MinQtLog2SizeInterY. If it does not exist, the value of ph_log2_diff_max_tt_min_qt_inter_slice is inferred to be the same as sps_log2_diff_max_tt_min_qt_inter_slice.
[0928] ph_cu_qp_delta_subdiv_inter_slice specifies the maximum cbSubdiv value of the coding unit passing cu_qp_delta_abs and cu_qp_delta_sign_flag in the inter slice. The value of ph_cu_qp_delta_subdiv_inter_slice must be in the range from 0 to 2*(CtbLog2SizeY-MinQtLog2SizeInterY+ph_max_mtt_hierarchy_depth_inter_slice).
[0929] When it does not exist, the value of ph_cu_qp_delta_subdiv_inter_slice is inferred to be equal to 0.
[0930] ph_cu_chroma_qp_offset_subdiv_inter_slice specifies the maximum cbSubdiv value of the coding unit of the inter slice passing cu_chroma_qp_offset_flag. The value of ph_cu_chroma_qp_offset_subdiv_inter_slice must be in a range including 0 to 2*(CtbLog2SizeY-MinQtLog2SizeInterY+ph_max_mtt_hierarchy_depth_inter_slice).
[0931] When it does not exist, the value of ph_cu_chroma_qp_offset_subdiv_inter_slice is inferred to be equal to 0.
[0932] ph_temporal_mvp_enabled_flag specifies whether the temporal motion vector predictor can be used for inter-prediction on the slice associated with the PH. If ph_temporal_mvp_enabled_flag is equal to 0, the syntax elements of the slice associated with the PH must be restricted so that the temporal motion vector predictor is not used for decoding the slice. Otherwise (ph_temporal_mvp_enabled_flag is equal to 1), the temporal motion vector predictor can be used for decoding the slice associated with the PH. If it does not exist, the value of ph_temporal_mvp_enabled_flag is inferred to be equal to 0. If the reference picture of the DPB does not have the same spatial resolution as the current picture, the value of ph_temporal_mvp_enabled_flag must be equal to 0.
[0933] MaxNumSubblockMergeCand, the maximum number of sub-block-based merge MVP candidates, is derived as follows:
[0934] if( sps_affine_enabled_flag )
[0935] MaxNumSubblockMergeCand = 5 - five_minus_max_num_subblock_merge_cand (88)
[0936] else
[0937] MaxNumSubblockMergeCand = sps_sbtmvp_enabled_flag && ph_temporal_mvp_enable_flag
[0938] The value of MaxNumSubblockMergeCand must be in a range including 0 to 5.
[0939] ph_collocated_from_l0_flag, identical to 1, specifies that the collocated picture used for temporal motion vector prediction is derived from reference picture list 0.
[0940] ph_collocated_from_l0_flag, which is equal to 0, specifies that the juxtaposed picture used for temporal motion vector prediction is derived from reference picture list 1.
[0941] ph_collocated_ref_idx specifies the reference index of the juxtaposed picture used for temporal motion vector prediction.
[0942] When ph_collocated_from_l0_flag is equal to 0, ph_collocated_ref_idx refers to an item in reference picture list 1, and the value of ph_collocated_ref_idx must be in the range from 0 to num_ref_entries[1][RplsIdx[1]]-1.
[0943] When ph_collocated_from_l0_flag is equal to 0, ph_collocated_ref_idx refers to an item in reference picture list 1, and the value of ph_collocated_ref_idx must be in the range from 0 to num_ref_entries[1][RplsIdx[1]]-1.
[0944] When it does not exist, the value of ph_collocated_ref_idx is inferred to be equal to 0.
[0945] If mvd_l1_zero_flag is 1, the mvd_coding(x0, y0, 1) syntax structure is not parsed and
[0946] MvdL1 [x0] [y0] [compIdx] and MvdCpL1 [x0] [y0] [cpIdx] [compIdx] are set to equal to 0 for compIdx=0..1 and cpIdx=0..2. mvd_l1_zero_flag equal to 0 indicates that the mvd_coding(x0, y0, 1) syntax structure is parsed.
[0947] Same as 1 ph_fpel_mmvd_enabled_flag specifies that a merge mode with a motion vector difference uses integer sample precision in the slice associated with PH.
[0948] ph_fpel_mmvd_enabled_flag equal to 0 specifies that the merge mode with motion vector difference can use fractional sample precision on the slice associated with PH. If not present, the value of ph_fpel_mmvd_enabled_flag is assumed to be 0.
[0949] ph_disable_bdof_flag equal to 1 specifies that bidirectional optical flow inter-prediction-based inter-bidirectional prediction is disabled on the slice associated with PH. ph_disable_bdof_flag equal to 0 specifies that bidirectional optical flow inter-prediction-based inter-bidirectional prediction may or may not be enabled on the slice associated with PH.
[0950] If ph_disable_bdof_flag is not present, the following applies:
[0951] - If sps_bdof_enabled_flag is equal to 1, the value of ph_disable_bdof_flag is inferred to be equal to 0.
[0952] - Otherwise (sps_bdof_enabled_flag is equal to 0), the value of ph_disable_bdof_flag is inferred to be equal to 1.
[0953] ph_disable_dmvr_flag, identical to 1, specifies that decoder motion vector refinement based on inter-bidirectional prediction is disabled on slices associated with PH.
[0954] ph_disable_dmvr_flag, which is equal to 0, specifies that decoder motion vector refinement based on inter-bidirectional prediction may or may not be enabled on slices associated with PH.
[0955] If ph_disable_dmvr_flag is not present, the following applies:
[0956] - If sps_dmvr_enabled_flag is equal to 1, it is inferred that the value of ph_disable_dmvr_flag is equal to 0.
[0957] - Otherwise (sps_dmvr_enabled_flag is equal to 0), the value of ph_disable_dmvr_flag is inferred to be equal to 1.
[0958] ph_disable_prof_flag, identical to 1, specifies that predictive purification using optical flow is disabled in slices associated with PH.
[0959] ph_disable_prof_flag equal to 0 specifies that predictive purification using optical flow in slices associated with PH may or may not be enabled.
[0960] If ph_disable_prof_flag is not present, the following applies:
[0961] - If sps_affine_prof_enabled_flag is equal to 1, it is inferred that the value of ph_disable_prof_flag is equal to 0.
[0962] - Otherwise (sps_affine_prof_enabled_flag is equal to 0), the value of ph_disable_prof_flag is inferred to be equal to 1.
[0963] ph_qp_delta specifies the initial value of QpY to be used in the picture's coding block until it is modified by the value of CuQpDeltaVal in the coding unit layer.
[0964] When qp_delta_info_in_ph_flag is equal to 1, the initial value of the QpY quantization parameter SliceQpY for all slices of the picture is derived as follows:
[0965] SliceQp Y = 26 + init_qp_minus26 + ph_qp_delta (89)
[0966] The value of SliceQpY must be in the range from -QpBdOffset to +63.
[0967] ph_joint_cbcr_sign_flag specifies whether the juxtaposed residual samples of the two chroma components have inverted signs in a transform unit where tu_joint_cbcr_residual_flag [x0] [y0] is 1. When tu_joint_cbcr_residual_flag [x0] [y0] is equal to 1 for a transform unit, ph_joint_cbcr_sign_flag equal to 0 specifies that the sign of each residual sample of the Cr (or Cb) component is equal to the sign of the juxtaposed Cb (or Cr) residual sample, and ph_joint_cbcr_sign_flag equal to 1 specifies that the sign of each residual sample of the Cr (or Cb) component is given by the inverted sign of the juxtaposed Cb (or Cr) residual sample.
[0968] ph_sao_luma_enabled_flag, equivalent to 1, specifies that SAO is enabled for the lumina component of all slices associated with PH; ph_sao_luma_enabled_flag, equivalent to 0, specifies that SAO for the lumina component may be disabled for one or more or all slices associated with PH. If ph_sao_luma_enabled_flag is missing, it is inferred to be equivalent to 0.
[0969] ph_sao_chroma_enabled_flag, equivalent to 1, specifies that SAO is enabled for the chroma component on all slices associated with PH; ph_sao_chroma_enabled_flag, equivalent to 0, specifies that SAO for the chroma component may be disabled for one or more or all slices associated with PH. If ph_sao_chroma_enabled_flag is missing, it is inferred to be equivalent to 0.
[0970] ph_dep_quant_enabled_flag, equivalent to 0, specifies that dependent quantization is disabled for the current picture. ph_dep_quant_enabled_flag, equivalent to 1, specifies that dependent quantization is enabled for the current picture. If ph_dep_quant_enabled_flag is missing, it is inferred to be equivalent to 0.
[0971] pic_sign_data_hiding_enabled_flag equal to 0 specifies that sign bit hiding is disabled for the current picture. pic_sign_data_hiding_enabled_flag equal to 1 specifies that sign bit hiding is enabled for the current picture. If pic_sign_data_hiding_enabled_flag does not exist, it is inferred to be equal to 0.
[0972] Same as 1 ph_deblocking_filter_override_flag _deblocking_filter_override_flag specifies that the deblocking parameter exists in PH. ph_deblocking_filter_override_flag, which is equal to 0, specifies 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 equal to 0.
[0973] ph_deblocking_filter_disabled_flag, equivalent to 1, specifies that the deblocking filter operation is not applied to slices associated with PH. ph_deblocking_filter_disabled_flag, equivalent to 0, specifies that the deblocking filter operation is applied to slices associated with PH. If ph_deblocking_filter_disabled_flag does not exist, it is inferred to be the same as pps_deblocking_filter_disabled_flag.
[0974] ph_beta_offset_div2 and ph_tc_offset_div2 specify the deblocking parameter offsets for β and tC (divided by 2) applied to the luminance component of the slice associated with PH. The values of ph_beta_offset_div2 and ph_tc_offset_div2 must both be in the range from -12 to 12. If they do not exist, the values of ph_beta_offset_div2 and ph_tc_offset_div2 are inferred to be the same as pps_beta_offset_div2 and pps_tc_offset_div2, respectively.
[0975] ph_beta_offset_div2 and ph_tc_offset_di v2 specifies the deblocking parameter offset for β and tC (divided by 2) applied to the luminance component of the slice associated with PH. The values of ph_cb_beta_offset_div2 and ph_cb_tc_offset_div2 must both be in the range from -12 to 12. If they do not exist, the values of ph_cb_beta_offset_div2 and ph_cb_tc_offset_div2 are inferred to be the same as pps_cb_beta_offset_div2 and pps_cb_tc_offset_div2, respectively.
[0976] ph_cr_beta_offset_div2 and ph_cr_tc_offset_div2 Specifies the deblocking parameter offset for β and tC (divided by 2) applied to the Cr component of the slice associated with PH. The values of ph_cr_beta_offset_div2 and ph_cr_tc_offset_div2 must both be in the range from -12 to 12. If they do not exist, the values of ph_cr_beta_offset_div2 and ph_cr_tc_offset_div2 are inferred to be the same as pps_cr_beta_offset_div2 and pps_cr_tc_offset_div2, respectively.
[0977] ph_extension_length specifies the length of PH extended data in byte units, without including bits used to signal ph_extension_length itself. The value of ph_extension_length must be in a range including 0 to 256. If it does not exist, the value of ph_extension_length is inferred to be equal to 0.
[0978] ph_extension_data_byte can have an arbitrary value. Decoders conforming to this version of this specification must ignore the value of ph_extension_data_byte. This value does not affect decoder suitability for profiles specified in this version of the specification.
[0979] 3.6. SH Syntax and Semantics
[0980] In the latest VVC draft text, SH syntax and semantics are as follows:
[0981]
[0982]
[0983]
[0984]
[0985]
[0986]
[0987] The variable CuQpDeltaVal, which specifies the difference between the lumens quantization parameter and its prediction for a coding unit containing cu_qp_delta_abs, is set to 0. The variables CuQpOffsetCb, CuQpOffsetCr, and CuQpOffsetCbCr, which specify the values to be used when determining the respective values of the Qp'Cb, Qp'Cr, and Qp'CbCr quantization parameters for a coding unit containing cu_chroma_qp_offset_flag, are all set to 0.
[0988] picture_header_in_slice_header_flag, identical to 1, specifies that the PH syntax structure exists in the slice header.
[0989] picture_header_in_slice_header_flag equal to 0 specifies that the PH syntax structure does not exist in the slice header.
[0990] The requirement that the value of picture_header_in_slice_header_flag be the same across all coded slices of CLVS is a bitstream conformance requirement.
[0991] When picture_header_in_slice_header_flag is equal to 1 for the coded slice, it is a bitstream conformance requirement that there are no VCL NAL units in CLVS with the same nal_unit_type as PH_NUT.
[0992] When picture_header_in_slice_header_flag is equal to 0, all coded slices of the current picture must have picture_header_in_slice_header_flag equal to 0, and the current PU must have a PH NAL unit.
[0993] slice_subpic_id specifies the subpicture ID of the subpicture containing the slice. If slice_subpic_id exists, the value of the variable CurrSubpicIdx is induced so that SubpicIdVal[CurrSubpicIdx] is equal to slice_subpic_id. Otherwise (slice_subpic_id does not exist), CurrSubpicIdx is induced to be equal to 0. The length of slice_subpic_id is sps_subpic_id_len_minus1 + 1 bit.
[0994] slice_address specifies the slice address of the slice. If it does not exist, the value of slice_address is inferred to be 0. When rect_slice_flag is 1 and NumSlicesInSubpic[CurrSubpicIdx] is equal to 1, the value of slice_address is inferred to be 0.
[0995] If rect_slice_flag is 0, the following applies:
[0996] - The slice address is the raster scan tile index.
[0997] - The length of slice_address is Ceil(Log2(NumTilesInPic)) bits.
[0998] - The value of slice_address must be in the range from 0 to NumTilesInPic -1.
[0999] Otherwise (rect_slice_flag is 1), the following applies:
[1000] - The slice address is the slice index at the subpicture level of the slice.
[1001] - The length of slice_address is Ceil(Log2(NumSlicesInSubpic [CurrSubpicIdx])) bits.
[1002] - The value of slice_address must be in the range from 0 to NumSlicesInSubpic [CurrSubpicIdx] - 1.
[1003] The following constraints apply to the requirements of bitstream conformity:
[1004] - If rect_slice_flag is equal to 0 or subpic_info_present_flag is equal to 0, the value of slice_address must not be equal to the slice_address value of another coded slice NAL unit of the same coded picture.
[1005] - Otherwise, the pair of slice_subpic_id and slice_address values must not be identical to the pair of slice_subpic_id and slice_address values of other coded slice NAL units of the same coded picture.
[1006] - The shape of the picture slices must ensure that when each CTU is decoded, it has a full left boundary and a full top boundary composed of the picture boundary or the boundary of the previously decoded CTU(s).
[1007] sh_extra_bit[ i ] can be 1 or 0. Decoders conforming to this version of this specification must ignore the sh_extra_bit[ i ] value. This value does not affect decoder suitability for profiles specified in this version of the specification.
[1008] num_tiles_in_slice_minus1 + 1 specifies the number of tiles in the slice, if present. The value of num_tiles_in_slice_minus1 must be in the range from 0 to NumTilesInPic - 1.
[1009] The variable NumCtusInCurrSlice, which specifies the number of CTUs in the current slice, and the list CtbAddrInCurrSlice[ i ], which specifies the picture raster scan address of the i-th CTB within the slice and the range i including 0 to NumCtusInCurrSlice-1, are derived as follows:
[1010] if( rect_slice_flag ) {
[1011] picLevelSliceIdx = slice_address
[1012] for( j = 0; j < CurrSubpicIdx; j++ )
[1013] picLevelSliceIdx += NumSlicesInSubpic[ j ]
[1014] NumCtusInCurrSlice = NumCtusInSlice[ picLevelSliceIdx ]
[1015] for( i = 0; i < NumCtusInCurrSlice; i++ )
[1016] CtbAddrInCurrSlice[ i ] = CtbAddrInSlice[ picLevelSliceIdx ][ i ] (117)
[1017] } else {
[1018] NumCtusInCurrSlice = 0
[1019] for( tileIdx = slice_address; tileIdx <= slice_address + num_tiles_in_slice_minus1; tileIdx++ ) {
[1020] tileX = tileIdx % NumTileColumns
[1021] tileY = tileIdx / NumTileColumns
[1022] for( ctbY = tileRowBd[ tileY ]; ctbY < tileRowBd[ tileY + 1 ]; ctbY++ ) {
[1023] for( ctbX = tileColBd[ tileX ]; ctbX < tileColBd[ tileX + 1 ]; ctbX++ ) {
[1024] CtbAddrInCurrSlice[ NumCtusInCurrSlice ] = ctbY * PicWidthInCtb + ctbX
[1025] NumCtusInCurrSlice++
[1026] }
[1027] }
[1028] }
[1029] }
[1030] 변수 SubpicLeftBoundaryPos, SubpicTopBoundaryPos, SubpicRightBoundaryPos 및 SubpicBotBoundaryPos는 다음과 같이 유도된다:
[1031] if( subpic_treated_as_pic_flag[ CurrSubpicIdx ] ) {
[1032] SubpicLeftBoundaryPos = subpic_ctu_top_left_x[ CurrSubpicIdx ] * CtbSizeY
[1033] SubpicRightBoundaryPos = Min( pic_width_max_in_luma_samples - 1,
[1034] ( subpic_ctu_top_left_x[ CurrSubpicIdx ] +
[1035] subpic_width_minus1[ CurrSubpicIdx ] + 1 ) * CtbSizeY - 1 )
[1036] SubpicTopBoundaryPos = subpic_ctu_top_left_y[ CurrSubpicIdx ] *CtbSizeY (118)
[1037] SubpicBotBoundaryPos = Min( pic_height_max_in_luma_samples - 1,
[1038] ( subpic_ctu_top_left_y[ CurrSubpicIdx ] +
[1039] subpic_height_minus1[ CurrSubpicIdx ] + 1 ) * CtbSizeY - 1 )
[1040] }
[1041] slice_type specifies the coding type of the slice according to Table 9.
[1042] Table 9 - Name associations for slice_type slice_type Name of slice_type 0 B (B slice) 1 P(P slice) 2 I (I slice)
[1043] If it does not exist, the value of slice_type is inferred to be the same as 2.
[1044] When ph_intra_slice_allowed_flag is equal to 0, the value of slice_type must be equal to 0 or 1. When nal_unit_type is in the range including IDR_W_RADL to CRA_NUT and vps_independent_layer_flag[GeneralLayerIdx[nuh_layer_id]] is equal to 1, slice_type must be equal to 2.
[1045] The variables MinQtLog2SizeY, MinQtLog2SizeC, MinQtSizeY, MinQtSizeC, MaxBtSizeY, MaxBtSizeC, MinBtSizeY, MaxTtSizeY, MaxTtSizeC, MinTtSizeY, MaxMttDepthY, and MaxMttDepthC are derived as follows:
[1046] - If slice_type is 2(I), the following applies:
[1047] MinQtLog2SizeY = MinCbLog2SizeY + ph_log2_diff_min_qt_min_cb_intra_slice_luma (119)
[1048] MinQtLog2SizeC = MinCbLog2SizeY + ph_log2_diff_min_qt_min_cb_intra_slice_chroma (120)
[1049] MaxBtSizeY = 1 << ( MinQtLog2SizeY + ph_log2_diff_max_bt_min_qt_intra_slice_luma ) (121)
[1050] MaxBtSizeC = 1 << ( MinQtLog2SizeC + ph_log2_diff_max_bt_min_qt_intra_slice_chroma ) (122)
[1051] MaxTtSizeY = 1 << ( MinQtLog2SizeY + ph_log2_diff_max_tt_min_qt_intra_slice_luma ) (123)
[1052] MaxTtSizeC = 1 << ( MinQtLog2SizeC + ph_log2_diff_max_tt_min_qt_intra_slice_chroma ) (124)
[1053] MaxMttDepthY = ph_max_mtt_hierarchy_depth_intra_slice_luma (125)
[1054] MaxMttDepthC = ph_max_mtt_hierarchy_depth_intra_slice_chroma (126)
[1055] CuQpDeltaSubdiv = ph_cu_qp_delta_subdiv_intra_slice (127)
[1056] CuChromaQpOffsetSubdiv = ph_cu_chroma_qp_offset_subdiv_intra_slice (128)
[1057] - Otherwise (slice_type is 0 (B) or 1 (P)), the following applies:
[1058] MinQtLog2SizeY = MinCbLog2SizeY + ph_log2_diff_min_qt_min_cb_inter_slice (129)
[1059] MinQtLog2SizeC = MinCbLog2SizeY + ph_log2_diff_min_qt_min_cb_inter_slice (130)
[1060] MaxBtSizeY = 1 << ( MinQtLog2SizeY + ph_log2_diff_max_bt_min_qt_inter_slice) (131)
[1061] MaxBtSizeC = 1 << ( MinQtLog2SizeC + ph_log2_diff_max_bt_min_qt_inter_slice) (132)
[1062] MaxTtSizeY = 1 << ( MinQtLog2SizeY + ph_log2_diff_max_tt_min_qt_inter_slice) (133)
[1063] MaxTtSizeC = 1 << ( MinQtLog2SizeC + ph_log2_diff_max_tt_min_qt_inter_slice) (134)
[1064] MaxMttDepthY = ph_max_mtt_hierarchy_depth_inter_slice (135)
[1065] MaxMttDepthC = ph_max_mtt_hierarchy_depth_inter_slice (136)
[1066] CuQpDeltaSubdiv = ph_cu_qp_delta_subdiv_inter_slice (137)
[1067] CuChromaQpOffsetSubdiv = ph_cu_chroma_qp_offset_subdiv_inter_slice (138)
[1068] - The following applies:
[1069] MinQtSizeY = 1 << MinQtLog2SizeY (139)
[1070] MinQtSizeC = 1 << MinQtLog2SizeC (140)
[1071] MinBtSizeY = 1 << MinCbLog2SizeY (141)
[1072] MinTtSizeY = 1 << MinCbLog2SizeY (142)
[1073] slice_alf_enabled_flag, identical to 1, specifies that the adaptive loop filter is enabled and can be applied to the Y, Cb, or Cr color components of the slice.
[1074] slice_alf_enabled_flag equal to 0 specifies that the adaptive loop filter is disabled for all color components of the slice. If not present, the value of slice_alf_enabled_flag is inferred to be the same as ph_alf_enabled_flag.
[1075] 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.
[1076] slice_alf_aps_id_luma[ i ] specifies the aps_parameter_set_id of the i-th ALF APS referenced by the slice's luma component. The TemporalId of an APS NAL unit having the same aps_params_type as ALF_APS and the same aps_parameter_set_id as slice_alf_aps_id_luma[ i ] must be less than or equal to the TemporalId of the coded slice NAL unit. When slice_alf_enabled_flag is 1 and slice_alf_aps_id_luma[ i ] does not exist, the value of slice_alf_aps_id_luma[ i ] is inferred to be the same as the value of ph_alf_aps_id_luma[ i ].
[1077] The value of alf_luma_filter_signal_flag of an APS NAL unit having the same aps_params_type as ALF_APS and the same aps_parameter_set_id as slice_alf_aps_id_luma[ i ] must be equal to 1.
[1078] slice_alf_chroma_idc equal to 0 specifies that the adaptive loop filter is not applied to the Cb and Cr color components. slice_alf_chroma_idc equal to 1 indicates that the adaptive loop filter is applied to the Cb color component.
[1079] slice_alf_chroma_idc identical to 2 indicates that the adaptive loop filter is applied to the Cr color component. slice_alf_chroma_idc identical to 3 indicates that the adaptive loop filter is applied to the Cb and Cr color components. If slice_alf_chroma_idc does not exist, it is inferred to be identical to ph_alf_chroma_idc.
[1080] slice_alf_aps_id_chroma specifies the adaptation_parameter_set_id of the ALF APS that the slice's chroma component references. The TemporalId of an APS NAL unit having the same aps_params_type as ALF_APS and the same aps_parameter_set_id as slice_alf_aps_id_chroma must be less than or equal to the TemporalId of the coded slice NAL unit. If slice_alf_enabled_flag is 1 and slice_alf_aps_id_chroma does not exist, the value of slice_alf_aps_id_chroma is inferred to be the same as the value of ph_alf_aps_id_chroma.
[1081] The value of alf_chroma_filter_signal_flag of an APS NAL unit having the same aps_params_type as ALF_APS and the same aps_parameter_set_id as slice_alf_aps_id_chroma must be equal to 1.
[1082] slice_cc_alf_cb_enabled_flag, which is equal to 0, specifies that the cross-component filter is not applied to the Cb color component.
[1083] slice_cc_alf_cb_enabled_flag, which is identical to 1, indicates that the cross-component filter is enabled and can be applied to the Cb color component. If slice_cc_alf_cb_enabled_flag does not exist, it is inferred to be identical to ph_cc_alf_cb_enabled_flag.
[1084] slice_cc_alf_cb_aps_id specifies the aps_parameter_set_id referenced by the slice's Cb color component.
[1085] The TemporalId of an APS NAL unit having the same aps_params_type as ALF_APS and the same aps_parameter_set_id as slice_cc_alf_cb_aps_id must be less than or equal to the TemporalId of the coded slice NAL unit. When slice_cc_alf_cb_enabled_flag is 1 and slice_cc_alf_cb_aps_id does not exist, the value of slice_cc_alf_cb_aps_id is inferred to be the same as the value of ph_cc_alf_cb_aps_id.
[1086] The alf_cc_cb_filter_signal_flag value of an APS NAL unit having the same aps_params_type as ALF_APS and the same aps_parameter_set_id as slice_cc_alf_cb_aps_id must be equal to 1.
[1087] slice_cc_alf_cr_enabled_flag, which is equal to 0, specifies that the cross-component filter is not applied to the Cr color component. slice_cc_alf_cb_enabled_flag, which is equal to 1, indicates that the cross-component adaptive loop filter is enabled and can be applied to the Cr color component. If slice_cc_alf_cr_enabled_flag does not exist, it is inferred to be the same as ph_cc_alf_cr_enabled_flag.
[1088] slice_cc_alf_cr_aps_id specifies the aps_parameter_set_id referenced by the slice's Cr color component. The TemporalId of an APS NAL unit having the same aps_params_type as ALF_APS and the same aps_parameter_set_id as slice_cc_alf_cr_aps_id must be less than or equal to the TemporalId of the coded slice NAL unit. When slice_cc_alf_cr_enabled_flag is 1 and slice_cc_alf_cr_aps_id does not exist, the value of slice_cc_alf_cr_aps_id is inferred to be the same as the value of ph_cc_alf_cr_aps_id.
[1089] The alf_cc_cr_filter_signal_flag value of an APS NAL unit having the same aps_params_type as ALF_APS and the same adaptation_parameter_set_id as slice_cc_alf_cr_aps_id must be equal to 1.
[1090] color_plane_id identifies the color plane associated with the current slice when separator_colour_plane_flag is equal to 1. The value of color_plane_id must be in the range from 0 to 2. color_plane_id values 0, 1, and 2 correspond to the Y, Cb, and Cr planes, respectively. The value of color_plane_id 3 is reserved by ITU-T for future use. | ISO / IEC.
[1091] Note 1 - There is no dependency between the decoding processes of different color planes of a picture.
[1092] num_ref_idx_active_override_flag identical to 1 specifies that the syntax element num_ref_idx_active_minus1[0] exists for P and B slices and the syntax element num_ref_idx_active_minus1[1] exists for B slice.
[1093] num_ref_idx_active_override_flag equal to 0 specifies that the syntax elements num_ref_idx_active_minus1[0] and num_ref_idx_active_minus1[1] do not exist. When they do not exist, the value of num_ref_idx_active_override_flag is inferred to be equal to 1.
[1094] num_ref_idx_active_minus1[ i ] is used to derive the variable NumRefIdxActive[ i ] specified by Equation 143. The value of num_ref_idx_active_minus1[ i ] must be in the range from 0 to 14.
[1095] If i is 0 or 1, it is inferred that the current slice is slice B, num_ref_idx_active_override_flag is 1, num_ref_idx_active_minus1[ i ] does not exist, and num_ref_idx_active_minus1[ i ] is equal to 0.
[1096] If the current slice is a P slice, num_ref_idx_active_override_flag is 1 and num_ref_idx_active_minus1[0] does not exist and num_ref_idx_active_minus1[0] is inferred to be the same as 0.
[1097] The variable NumRefIdxActive[ i ] is derived as follows:
[1098] for( i = 0; i < 2; i++ ) {
[1099] if( slice_type = = B | | ( slice_type = = P && i = = 0 ) ) {
[1100] if( num_ref_idx_active_override_flag )
[1101] NumRefIdxActive[ i ] = num_ref_idx_active_minus1[ i ] + 1 (143)
[1102] else {
[1103] if( num_ref_entries[ i ][ RplsIdx[ i ] ] >= num_ref_idx_default_active_minus1[ i ] + 1 )
[1104] NumRefIdxActive[ i ] = num_ref_idx_default_active_minus1[ i ] + 1
[1105] else
[1106] NumRefIdxActive[ i ] = num_ref_entries[ i ][ RplsIdx[ i ] ]
[1107] }
[1108] } else / * slice_type = = I | | ( slice_type = = P && i = = 1 ) * /
[1109] NumRefIdxActive[ i ] = 0
[1110] }
[1111] A value of NumRefIdxActive[ i ] -1 specifies the maximum reference index for reference picture list i that can be used to decode the slice. When the value of NumRefIdxActive[ i ] is equal to 0, the reference index for reference picture list i cannot be used to decode the slice.
[1112] If the current slice is a P slice, the value of NumRefIdxActive[0] must be greater than 0.
[1113] If the current slice is slice B, both NumRefIdxActive[0] and NumRefIdxActive[1] must be greater than 0.
[1114] cabac_init_flag specifies how to determine the initialization table used in the initialization process for context variables. When slice_ASDT_flag does not exist, it is inferred to be equal to 0.
[1115] slice_collocated_from_l0_flag, identical to 1, specifies that the juxtaposed picture used for temporal motion vector prediction is derived from reference picture list 0.
[1116] slice_collocated_from_l0_flag, which is identical to 0, specifies that the juxtaposed picture used for temporal motion vector prediction is derived from reference picture list 1.
[1117] If slice_type is the same as B or P, ph_temporal_mvp_enabled_flag is 1, and slice_collocated_from_l0_flag does not exist, the following applies:
[1118] - When rpl_info_in_ph_flag is 1, slice_collocated_from_l0_flag is inferred to be the same as ph_collocated_from_l0_flag.
[1119] - Otherwise (rpl_info_in_ph_flag is 0 and slice_type is the same as P), the value of slice_collocated_from_l0_flag is inferred to be the same as 1.
[1120] slice_collocated_ref_idx specifies the reference index of the juxtaposed picture used for temporal motion vector prediction.
[1121] If slice_type is the same as P or slice_type is the same as B and slice_collocated_from_l0_flag is 1, slice_collocated_ref_idx refers to the item in reference picture list 0 and the value of slice_collocated_ref_idx must be in the range including 0 to NumRefIdxActive[0]-1.
[1122] When slice_type is equal to B and slice_collocated_from_l0_flag is equal to 0, slice_collocated_ref_idx refers to the entry in reference picture list 1, and the value of slice_collocated_ref_idx must be in the range including 0 to NumRefIdxActive[1]-1.
[1123] If slice_collocated_ref_idx is missing, the following applies:
[1124] - When rpl_info_in_ph_flag is 1, the value of slice_collocated_ref_idx is inferred to be the same as ph_collocated_ref_idx.
[1125] - Otherwise (rpl_info_in_ph_flag is equal to 0), the value of slice_collocated_ref_idx is inferred to be equal to 0.
[1126] It is a bitstream conformance requirement that the picture referenced by slice_collocated_ref_idx must be the same for all slices of the coded picture.
[1127] The bitstream conformity requirement is that the pic_width_in_luma_samples and pic_height_in_luma_samples values of the reference picture referenced by slice_collocated_ref_idx must be equal to the pic_width_in_luma_samples and pic_height_in_luma_samples values of the current picture, respectively, and RprConstraintsActive [slice_collocated_from_l0_flag? 0:1] [slice_collocated_ref_idx] must be equal to 0.
[1128] slice_qp_delta specifies the initial value of QpY to be used in the slice's coding block until it is modified by the value of CuQpDeltaVal in the coding unit layer.
[1129] When qp_delta_info_in_ph_flag is equal to 0, the initial value of the QpY quantization parameter for the slice, SliceQpY, is derived as follows:
[1130] SliceQp Y = 26 + init_qp_minus26 + slice_qp_delta (144)
[1131] The value of SliceQpY must be in the range from -QpBdOffset to +63.
[1132] If one of the following conditions is true:
[1133] - The value of wp_info_in_ph_flag is 1, pps_weighted_pred_flag is 1, and slice_type is the same as P.
[1134] - The value of wp_info_in_ph_flag is 1, pps_weighted_bipred_flag is 1, and slice_type is the same as B.
[1135] The following applies:
[1136] - The value of NumRefIdxActive[0] must be less than or equal to the value of NumWeightsL0.
[1137] For each reference picture index RefPicList[0][ i ] for i in the range including 0 to NumRefIdxActive[0]-1, the luma weight, Cb weight, and Cr weight applied to the reference picture index are LumaWeightL0[ i ], ChromaWeightL0[0][ i ], and ChromaWeightL0[1][ i ], respectively.
[1138] When wp_info_in_ph_flag is 1, pps_weighted_bipred_flag is 1, and slice_type is the same as B, the following applies:
[1139] - The value of NumRefIdxActive[1] must be less than or equal to the value of NumWeightsL1.
[1140] For each reference picture index RefPicList[1][ i ] for i in the range including 0 to NumRefIdxActive[1]-1, the luma weight, Cb weight, and Cr weight applied to the reference picture index are LumaWeightL1[ i ], ChromaWeightL1[0][ i ], and ChromaWeightL1[1][ i ], respectively.
[1141] slice_cb_qp_offset specifies the difference to be added to the value of pps_cb_qp_offset when determining the value of the Qp'Cb quantization parameter. The value of slice_cb_qp_offset must be in the range of -12 to +12. If slice_ASDT_flag is not present, it is inferred to be equal to 0. The value of pps_cb_qp_offset+slice_cb_qp_offset must be in the range of -12 to +12.
[1142] slice_cr_qp_offset specifies the difference to be added to the value of pps_cr_qp_offset when determining the value of the Qp'Cr quantization parameter. The value of slice_cr_qp_offset must be in the range of -12 to +12. If slice_ASDT_flag is not present, it is inferred to be equal to 0. The value of pps_cr_qp_offset+slice_cr_qp_offset must be in the range of -12 to +12.
[1143] slice_joint_cbcr_qp_offset specifies the difference to add to pps_joint_cbcr_qp_offset_value when determining the value of Qp'CbCr. The value of slice_joint_cbcr_qp_offset must be in the range of -12 to +12. If 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 must be in the range of -12 to +12.
[1144] cu_chroma_qp_offset_enabled_flag, identical to 1, specifies that cu_chroma_qp_offset_flag can exist in transform units and palette coding syntax.
[1145] cu_chroma_qp_offset_enabled_flag equal to 0 specifies that cu_chroma_qp_offset_flag does not exist in the transform unit or palette coding syntax. If it does not exist, the value of cu_chroma_qp_offset_enabled_flag is inferred to be equal to 0.
[1146] slice_sao_luma_flag equal to 1 specifies that SAO is enabled for the luma component of the current slice; slice_sao_luma_flag equal to 0 specifies that SAO is disabled for the luma component of the current slice. If slice_sao_luma_flag does not exist, it is inferred to be the same as ph_sao_luma_enabled_flag.
[1147] slice_sao_chroma_flag equal to 1 specifies that SAO is enabled for the chroma components of the current slice; slice_sao_chroma_flag equal to 0 specifies that SAO is disabled for the chroma components of the current slice. If slice_sao_chroma_flag does not exist, it is inferred to be the same as ph_sao_chroma_enabled_flag.
[1148] Same as 1 slice_deblocking_filter_override_flag specifies that the deblocking parameter exists in the slice header.
[1149] slice_deblocking_filter_override_flag equal to 0 specifies 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 the same as ph_deblocking_filter_override_flag.
[1150] Same as 1 slice_deblocking_filter_disabled_flagSpecifies that the deblocking filter behavior is not applied to the current slice.
[1151] slice_deblocking_filter_disabled_flag equal to 0 specifies that the deblocking filter behavior is applied to the current slice. If slice_deblocking_filter_disabled_flag does not exist, it is inferred to be equal to ph_deblocking_filter_disabled_flag.
[1152] slice_beta_offset_div2 and slice_tc_offset_div2 specify the deblocking parameter offsets for β and tC (divided by 2) applied to the luma component of the current slice. The values of slice_beta_offset_div2 and slice_tc_offset_div2 must both be in the range from -12 to 12. If they do not exist, the values of slice_beta_offset_div2 and slice_tc_offset_div2 are inferred to be the same as ph_beta_offset_div2 and ph_tc_offset_div2, respectively.
[1153] slice_cb_beta_offset_div2 and slice_cb_tc_offset_div2 Specifies the deblocking parameter offset for β and tC (divided by 2) applied to the Cb component of the current slice. The values of slice_cb_beta_offset_div2 and slice_cb_tc_offset_div2 must both be in the range from -12 to 12. If they do not exist, the values of slice_cb_beta_offset_div2 and slice_cb_tc_offset_div2 are inferred to be the same as ph_cb_beta_offset_div2 and ph_cb_tc_offset_div2, respectively.
[1154] slice_cb_beta_offset_div2 and slice_cb_tc_offset_div2Specifies the deblocking parameter offset for β and tC (divided by 2) applied to the Cr component of the current slice. The values of slice_cr_beta_offset_div2 and slice_cr_tc_offset_div2 must both be in the range from -12 to 12. If they do not exist, the values of slice_cr_beta_offset_div2 and slice_cr_tc_offset_div2 are inferred to be the same as ph_cr_beta_offset_div2 and ph_cr_tc_offset_div2, respectively.
[1155] slice_ts_residual_coding_disabled_flag, identical to 1, specifies that the residual_coding() syntax structure is used to parse residual samples of transform skip blocks for the current slice.
[1156] slice_ts_residual_coding_disabled_flag, which is equal to 0, specifies that the residual_ts_coding() syntax structure is used to parse residual samples of transform skip blocks for the current slice. If slice_ts_residual_coding_disabled_flag does not exist, it is inferred to be equal to 0.
[1157] slice_lmcs_enabled_flag equal to 1 specifies that luminance mapping with chroma scaling is enabled for the current slice. slice_lmcs_enabled_flag equal to 0 specifies that luminance mapping with chroma scaling is not enabled for the current slice. If slice_lmcs_enabled_flag is missing, it is inferred to be equal to 0.
[1158] slice_scaling_list_present_flag, identical to 1, specifies that the scaling list data used for the current slice is derived based on the scaling list data contained in the referenced scaling list APS, aps_params_type is identical to SCALING_APS, and adapt_parameter_set_id is identical to ph_scaling_list_aps_id.
[1159] slice_scaling_list_present_flag equal to 0 specifies that the scaling list data used for the current picture is the derived default scaling list data specified in Section 7.4.3.21. If it does not exist, the value of slice_scaling_list_present_flag is inferred to be equal to 0.
[1160] The variable NumEntryPoints, which specifies the number of entry points of the current slice, is derived as follows:
[1161] NumEntryPoints = 0
[1162] for( i = 1; i < NumCtusInCurrSlice; i++ ) {
[1163] ctbAddrX = CtbAddrInCurrSlice[ i ] % PicWidthInCtbsY
[1164] ctbAddrY = CtbAddrInCurrSlice[ i ] / PicWidthInCtbsY (145) prevCtbAddrX = CtbAddrInCurrSlice[ i - 1 ] % PicWidthInCtbsY
[1165] prevCtbAddrY = CtbAddrInCurrSlice[ i - 1 ] / PicWidthInCtbsY
[1166] if( CtbToTileRowBd[ ctbAddrY ] != CtbToTileRowBd[ prevCtbAddrY ] | |
[1167] CtbToTileColBd[ ctbAddrX ] != CtbToTileColBd[ prevCtbAddrX ] | |
[1168] ( ctbAddrY != prevCtbAddrY && sps_wpp_entry_point_offsets_present_flag ) )
[1169] NumEntryPoints++
[1170] }
[1171] offset_len_minus1 plus 1 specifies the length of the entry_point_offset_minus1[ i ] syntax element in bit units. The value of offset_len_minus1 must be in the range from 0 to 31.
[1172] entry_point_offset_minus1[ i ] plus 1 specifies the i-th entry point offset in bytes and is represented by offset_len_minus1 plus 1 bit. The slice data following the slice header consists of a NumEntryPoints+1 subset, and the subset index value range includes 0 to NumEntryPoints. The first byte of the slice data is considered to be byte 0. If present, the anti-emulation byte appearing in the slice data portion of the coded slice NAL unit is counted as part of the slice data for subset identification. Subset 0 consists of bytes from 0 to entry_point_offset_minus1[0] of the coded slice data, and subset k, where k is in the range including 1 to NumEntryPoints-1, consists of bytes including firstByte[k] to lastByte[k] of the coded slice data, with firstByte[k] and lastByte[k] defined as follows:
[1173] (146)
[1174] lastByte[k] = firstByte[k] + entry_point_offset_minus1[k] (147)
[1175] The last subset (where the subset index is equal to NumEntryPoints) consists of the remaining bytes of the coded slice data.
[1176] If sps_entropy_coding_sync_enabled_flag is 0 and the slice contains one or more complete tiles, each subset must consist of all coded bits of all CTUs of the slice within the same tile, and the number of subsets (i.e., the value of NumEntryPoints+1) must be equal to the number of tiles in the slice.
[1177] If sps_entropy_coding_sync_enabled_flag is 0 and the slice contains a subset of CTU rows from a single tile, NumEntryPoints is 0 and the number of subsets is 1. The subset consists of all coded bits of all CTUs in the slice.
[1178] When sps_entropy_coding_sync_enabled_flag is equal to 1, each subset k with k in the range including 0 to NumEntryPoints must consist of all coded bits of all CTUs in the CTU rows within the tile, and the number of subsets (i.e., NumEntryPoints+1) must be equal to the total number of CTU rows per tile of the slice.
[1179] slice_header_extension_length specifies the length of the slice header extension data in byte units, without including bits used to signal slice_header_extension_length itself. The value of slice_header_extension_length must be in the range from 0 to 256. If it does not exist, the value of slice_header_extension_length is inferred to be equal to 0.
[1180] slice_header_extension_data_byte[ i ] can have any value. Decoders conforming to this version of this specification must ignore the values of all slice_header_extension_data_byte[ i ] syntax elements. This value does not affect decoder suitability for profiles specified in this version of the specification.
[1181] 3.7. Transform Unit Syntax (Slice Data)
[1182] In the latest VVC draft text, the transform unit syntax and semantics are as follows:
[1183]
[1184]
[1185]
[1186]
[1187]
[1188]
[1189] The transform factor level is represented by the array TransCoeffLevel [x0] [y0] [cIdx] [xC] [yC]. Array indices x0 and y0 specify the position (x0, y0) of the top-left luminance sample of the transform block considered relative to the top-left luminance sample of the picture. Array index cIdx specifies the indicator for the color component; it is equivalent to 0 for Y, 1 for Cb, and 2 for Cr. Array indices xC and yC specify the transform factor position (xC, yC) within the current transform block. If the value of TransCoeffLevel [x0] [y0] [cIdx] [xC] [yC] is not specified in Section 7.3.10.11, it is inferred to be 0.
[1190] tu_cbf_cb [x0] [y0], equivalent to 1, specifies that the Cb transform block contains one or more non-zero transform factor levels. Array indices x0, y0 specify the top-left position (x0, y0) of the transform block being considered.
[1191] If tu_cbf_cb [x0] [y0] is missing, its value is inferred to be equal to 0.
[1192] If tu_cbf_cr [x0] [y0] is 1, it specifies that the Cr transform block contains one or more non-zero transform factor levels. Array indices x0, y0 specify the top-left position (x0, y0) of the transform block being considered.
[1193] If tu_cbf_cr [x0] [y0] is missing, its value is inferred to be equal to 0.
[1194] If tu_cbf_luma [x0] [y0] is 1, it specifies that the luminance transform block contains one or more non-zero transform factor levels. Array indices x0, y0 specify the position (x0, y0) of the top-left luminance sample of the transform block considered relative to the top-left luminance sample of the picture.
[1195] If tu_cbf_luma [x0] [y0] is missing, the value is inferred as follows:
[1196] - If cu_sbt_flag is 1 and one of the following conditions is true, tu_cbf_luma[x0][y0] is inferred to be equal to 0:
[1197] - subTuIndex is 0 and cu_sbt_pos_flag is 1.
[1198] - subTuIndex is 1 and cu_sbt_pos_flag is 0.
[1199] - Otherwise, if treeType is the same as DUAL_TREE_CHROMA, tu_cbf_luma[x0][y0] is inferred to be the same as 0.
[1200] - Otherwise, tu_cbf_luma[x0][y0] is inferred to be the same as 1.
[1201] tu_joint_cbcr_residual_ [x0] [y0] specifies whether residual samples for both chroma components Cb and Cr are coded into a single transform block. Array indices x0, y0 specify the position (x0, y0) of the top-left luminance sample of the transform block considered relative to the top-left luminance sample of the picture.
[1202] tu_joint_cbcr_residual_flag [x0] [y0], identical to 1, specifies that the transform unit syntax includes transform coefficient levels for a single transform block from which residual samples for both Cb and Cr are derived.
[1203] tu_joint_cbcr_residual_flag [x0][y0], which is equal to 0, specifies that the transform coefficient levels of the chroma component are coded as indicated by the syntax elements tu_cbf_cb[x0][y0] and tu_cbf_cr[x0][y0].
[1204] If ttu_joint_cbcr_residual_flag[ x0 ][ y0 ] does not exist, it is inferred to be the same as 0.
[1205] Depending on tu_joint_cbcr_residual_flag[ x0 ][ y0 ], tu_cbf_cb[ x0 ][ y0 ], and tu_cbf_cr [x0] [y0], TuCResMode[x0] [y0] is derived as follows:
[1206] - If tu_joint_cbcr_residual_flag[ x0 ][ y0 ] is equal to 0, the variable TuCResMode [x0] [y0] is set to 0.
[1207] - Otherwise, if tu_cbf_cb[x0][y0] is equal to 1 and tu_cbf_cr[x0][y0] is 0, the variable TuCResMode[x0][y0] is set to 1.
[1208] - Otherwise, if tu_cbf_cb[x0][y0] is equal to 1, the variable TuCResMode[x0][y0] is set to 2.
[1209] - Otherwise, the variable TucresMode[x0][y0] is set to 3.
[1210] cu_qp_delta_abs specifies the absolute value of the difference CuQpDeltaVal between the quantization parameter of the current coding unit and its prediction.
[1211] cu_qp_delta_sign_flag specifies the sign of CuQpDeltaVal as follows:
[1212] - If cu_qp_delta_sign_flag is 0, the corresponding CuQpDeltaVal has a positive value.
[1213] - Otherwise (cu_qp_delta_sign_flag is 1), the corresponding CuQpDeltaVal has a negative value.
[1214] If cu_qp_delta_sign_flag does not exist, it is inferred to be the same as 0.
[1215] If cu_qp_delta_abs exists, the variables IsCuQpDeltaCoded and CuQpDeltaVal are derived as follows:
[1216] IsCuQpDeltaCoded = 1 (187)
[1217] CuQpDeltaVal = cu_qp_delta_abs * ( 1 - 2 * cu_qp_delta_sign_flag ) (188)
[1218] The value of CuQpDeltaVal must be in the range from -(32 + QpBdOffset / 2) to +(31 + QpBdOffset / 2).
[1219] When cu_chroma_qp_offset_flag exists and is equal to 1, it specifies that the entry in cb_qp_offset_list[] is used to determine the value of CuQpOffset Cb, the corresponding entry in cr_qp_offset_list[] is used to determine the value of CuQpOffset Cr, and the corresponding entry in joint_cbcr_qp_offset_list[] is used to determine the value of CuQpOffset CbCr. cu_chroma_qp_offset_flag equal to 0 specifies that these lists are not used to determine the values of CuQpOffset Cb, CuQpOffset Cr, and CuQpOffset CbCr.
[1220] cu_chroma_qp_offset_idx specifies the index for cb_qp_offset_list[], cr_qp_offset_list[], and joint_cbcr_qp_offset_list[] used to determine the values of CuQpOffsetCb, CuQpOffset Cr, and CuQpOffset C, if present. If present, the value of cu_chroma_qp_offset_idx must be in the range from 0 to chroma_qp_offset_list_len_minus1. If not present, the value of cu_chroma_qp_offset_idx is inferred to be equal to 0.
[1221] If cu_chroma_qp_offset_flag is present, the following applies:
[1222] - The variable IsCuChromaQpOffsetCoded is set to 1.
[1223] - The variables CuQpOffsetCb, CuQpOffsetCr, and CuQpOffsetCbCr are derived as follows:
[1224] - If cu_chroma_qp_offset_flag is 1, the following applies:
[1225] CuQpOffset Cb = cb_qp_offset_list[cu_chroma_qp_offset_idx] (189)
[1226] CuQpOffsetCr= cr_qp_offset_list [cu_chroma_qp_offset_idx] (190) (190)
[1227] CuQpOffset CbCr = joint_cbcr_qp_offset_list[cu_chroma_qp_offset_idx] (191)
[1228] - Otherwise (cu_chroma_qp_offset_flag is equal to 0), CuQpOffsetCb, CuQpOffsetCr' and CuQpOffsetCbCr are all set to 0.
[1229] transform_skip_flag [x0] [y0] [cIdx] specifies whether the transform is applied to the associated transform block. Array index x0, y0 specifies the position (x0, y0) of the top-left luminance sample of the transform block considered relative to the top-left luminance sample of the picture. Array index cIdx specifies the indicator for the color component; equivalent to 0 for Y, 1 for Cb, and 2 for Cr.
[1230] transform_skip_flag [x0] [y0] [cIdx], identical to 1, specifies that no color transform is applied to the associated transform block.
[1231] transform_skip_flag [x0] [y0] [cIdx], which is equal to 0, specifies whether the color transform applied to the associated transform block depends on other syntax elements.
[1232] If transform_skip_flag [x0] [y0] [cIdx] is missing, it is inferred as follows:
[1233] - If BdpcmFlag [x0] [y0] [cIdx] is equal to 1, transform_skip_flag [x0] [y0] [cIdx] is inferred to be equal to 1.
[1234] - Otherwise, (BdpcmFlag [x0] [y0] [cIdx] is equal to 0), transform_skip_flag [x0] [y0] [cIdx] is inferred to be equal to 0.
[1235] 4. Examples of technical problems according to the disclosed embodiments
[1236] The existing design for SH, PPS, and APS syntax elements (SE) has the following problems:
[1237] 1) In the latest VVC draft text, the APS syntax element scaling_list_chroma_present_flag is signaled to control the number of scaling / quantization matrices (QMs) signaled in the SCALING APS, that is, when scaling_list_chroma_present_flag is equal to 1, 28 QMs are signaled for both luminance and chroma; otherwise (when scaling_list_chroma_present_flag is equal to 0), 10 QMs are signaled only for luminance. Currently, the value of scaling_list_chroma_present_flag is equal to ChromaArrayType (derived from the SPS syntax element), that is, the value of scaling_list_chroma_present_flag must be equal to 1 when ChromaArrayType is not equal to 0, whereas the value of scaling_list_chroma_present_flag must be equal to 0 when ChromaArrayType is equal to 0. This semantic constraint introduces an APS dependency on an SPS that should not occur, as it can be applied to a picture (or slice of a picture) referencing a different SPS where the APS can be associated with a different value of ChromaArrayType.
[1238] a. Additionally, currently, if a block is coded with a custom scaling list, the custom scaling list must be applied to both Luma and Chroma (if available); that is, the custom scaling lists for Luma and Chroma cannot be turned on or off individually. This design may not be efficient or flexible.
[1239] 2) In the latest VVC draft text, when the LMCS APS syntax structure is signaled, the APS syntax elements related to chroma residual scaling are always signaled regardless of whether ChromaArrayType is equal to 0 (e.g., there are no chroma components in the video content). This can cause unnecessary transmission of chroma-related syntax elements when there is no chroma being processed in the video content.
[1240] 3) In the latest VVC, the SH syntax element slice_ts_residual_coding_disabled_flag is used to specify whether Transform Skip-based Residual Coding (TSRC) or General Residual Coding (RRC) is used for transform skip blocks. However, now slice_ts_residual_coding_disabled_flag is always signaled in SH regardless of whether SPS level transform skips are disabled. In the case of sps_transform_skip_enabled_flag, transform_skip_flag is always 0, and in the case where the condition toggling TSRC and RRC (!transform_skip_flag [xC] [yC] [1] ||slice_ts_residual_coding_disabled_flag) is always true, slice_ts_residual_coding_disabled_flag becomes meaningless.
[1241] a. In addition, non-TS blocks can currently only use RRC and cannot switch between TSRC and RRC, so non-TS block compression may be inefficient.
[1242] 4) In the latest VVC draft text, multi-level control is used to enable cu_qp_delta for the luminance block, that is, first signaling the PPS on / off control flag cu_qp_delta_enabled_flag, then specifying the quantization group (QG) size in PH, and finally signaling the value of cu_qp_delta_abs for each QG. With this design, if the picture consists of multiple slices, and some slices use cu_qp_delta while others do not, the block-level cu_qp_delta_abs must still be signaled for all QGs. Therefore, there is block-level bit waste that can be avoided.
[1243] 5) In the latest VVC draft text, when the PPS syntax element single_slice_per_subpic_flag is 0, each subpicture of the picture referencing the PPS may consist of one or more rectangular slices. When single_slice_per_subpic_flag is 0, for pictures referencing such a PPS, the following may occur:
[1244] a. Duplicate case: when sps_num_subpics_minus1 is greater than 0 but each subpicture has only one slice. In this case, each picture contains multiple subpictures and multiple rectangular slices, but since single_slice_per_subpic_flag is equal to 0, num_slices_in_pic_minus1 needs to be signaled. However, this case is conceptually equivalent to single_slice_per_subpic_flag being 1, and since there is no need to signal this SE at all, it is signaled redundantly.
[1245] b. Redundant case: when sps_num_subpics_minus1 is 0 and there is only one slice in each picture referencing the PPS. In this case, each picture contains a single subpicture consisting of only one slice, but since single_slice_per_subpic_flag is still allowed to be equal to 0, num_slices_in_pic_minus1 needs to be signaled. However, this case is conceptually identical to single_slice_per_subpic_flag being 1, and since there is no need to signal this SE at all, it is redundantly signaled.
[1246] c. Additionally, if all the duplicate cases above are prohibited / avoided, it will be found that single_slice_per_subpic_flag, which is equal to 0, is always used when a picture has multiple subpictures (each subpicture contains a single slice or multiple slices) or when a picture has multiple slices (each picture contains a single subpicture or multiple subpictures). And in both cases, the value of num_slices_in_pic_minus1 is always greater than 1. It was also found that there is no need to conditionally signal the PPS syntax element tile_idx_delta_present_flag.
[1247] 6) In the latest VVC draft text, tile layouts such as tile width and height were designed using an explicit signaling method associated with implicit inference. If a picture is divided into multiple rows of tiles with tiles of the same height, the current design can signal the height of the first row of tiles and infer the heights of the remaining rows. Otherwise, if the picture is divided into multiple rows of tiles with tiles of different heights, the height of each row of tiles is explicitly signaled. Otherwise, if the picture is divided into multiple rows of tiles with the first few rows of tiles of different heights and the last few rows of tiles of the same height, then only one of the heights of the first few rows of tiles or the last few rows of tiles is explicitly signaled, and the height of the remaining rows of tiles of the same height is inferred without signaling. The current design combines explicit signaling and implicit inference to work well in these three cases. However, there are cases where a picture is divided into multiple rows of tiles with the first few rows of tiles of the same height and the last few rows of tiles of different heights. In such cases, the current design does not seem very efficient because implicit inference cannot be applied and the height of every tile row must be explicitly signaled. Similarly, the same situation applies to tile column signaling and rectangular slice layout signaling—specifically, when a slice is smaller than a tile, the same situation regarding slice height signaling. Modifications can be applied here for improvement.
[1248] 7) Currently, the GCI syntax element no_aps_constraint_flag is used to disable NAL units where nuh_unit_type is PREFIX_APS_NUT or SUFFIX_APS_NUT. More constraints regarding the absence of ALF APS are expected to be resolved in the draft text.
[1249] 8) Currently, the conformity window parameters are always signaled in the PPS, including cases where the picture width and height are the same as the maximum picture width and height signaled in the SPS referenced by the PPS, whereas the conformity window parameters for the picture with the maximum picture width and height are also signaled in the SPS. The signaling of the conformity window parameters for the picture with the maximum picture width and height in the PPS is redundant.
[1250] 9) When no_APS_constraint_flag is equal to 1, the intention was to disable the use of APS NAL units that exist in the bitstream (also called in-band) or are provided to the decoder through external means (e.g., via APIs in the implementation, out-of-band transmission, etc.). However, in the current VVC specification, the semantics of no_APS_constraint_flag apply only when APS NAL units exist in the bitstream. Therefore, even when no_APS_constraint_flag is 1, APS can still be used through external means.
[1251] 10) Currently, most coding tools / features can be controlled / disabled using GCI flags. However, some features / coding tools still lack GCI flag control. It may be desirable to control the disabling of features / coding tools whenever possible.
[1252] 11) Currently, it is defined that only intra and IBC coding modes can be used for MODE_TYPE_INTRA when using a local duplex tree. Additionally, intra (MODE_INTRA) and IBC (MODE_IBC) are defined, and inter coding mode can be used for MODE_TYPE_ALL. However, palette mode (MODE_PLT) must also be used for MODE_TYPE_INTRA and MODE_TYPE_ALL. It is argued that the current definition is incomplete.
[1253] 12) For a coding tree node, the prediction modes allowed for a CU within the coding tree node are defined by the derived modeTypeCondition and the signaled mode_constraint_flag when modeTypeCondition is equal to 2. However, when modeTypeCondition is 2 and mode_constraint_flag is 1, only prediction modes equal to INTRA and IBC are allowed; on the other hand, when modeTypeCondition is 2 and mode_constraint_flag is 0, only prediction modes equal to INTER are allowed. Therefore, in this case, palette mode is not always allowed and is undesirable.
[1254]
[1255] The variable modeTypeCondition is derived as follows:
[1256] - If one or more of the following conditions are true, modeTypeCondition is set to 0:
[1257] - sh_slice_type is the same as I and sps_qtbtt_dual_tree_intra_flag is the same as 1.
[1258] - modeTypeCurr is not the same as MODE_TYPE_ALL.
[1259] - sps_chroma_format_idc is equal to 0.
[1260] - sps_chroma_format_idc is the same as 3.
[1261] - Otherwise, if one of the following conditions is true, modeTypeCondition is set to 1:
[1262] - cbWidth * cbHeight is 64 and split_qt_flag is 1.
[1263] - cbWidth * cbHeight is equal to 64, and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_TT_HOR or SPLIT_TT_VER.
[1264] - cbWidth * cbHeight is 32 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is the same as SPLIT_BT_HOR or SPLIT_BT_VER.
[1265] - Otherwise, if one of the following conditions is true, modeTypeCondition is set to 1 + ( sh_slice_type != I ? 1 : 0 ):
[1266] - cbWidth * cbHeight is 64, MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_BT_HOR or SPLIT_BT_VER, and sps_chroma_format_idc is equal to 1.
[1267] - cbWidth * cbHeight is 128, MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_TT_HOR or SPLIT_TT_VER, and sps_chroma_format_idc is equal to 1.
[1268] - cbWidth is 8 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is the same as SPLIT_BT_VER.
[1269] - cbWidth is 16 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is the same as SPLIT_TT_VER.
[1270] - Otherwise, modeTypeCondition is set to 0.
[1271] Equivalent to 0 mode_constraint_flag specifies that the coding unit inside the current coding tree node can only use inter-predictive coding mode.
[1272] The mode_constraint_flag identical to 1 specifies that coding units inside the current coding tree node cannot use inter-predictive coding mode.
[1273] 5. List of examples of embodiments and techniques
[1274] To address the aforementioned problems and other unmentioned issues, the following methods are proposed. The inventions should be regarded as examples to illustrate general concepts and should not be interpreted in a narrow sense. Furthermore, these inventions may be applied individually or in any combination.
[1275] In the description below, regarding changes to the protected text based on the latest working draft JVET-Q2001-vD, deleted parts are highlighted with opening and closing double brackets (e.g., [ [] ] ) and the deleted text is displayed between the double brackets, and added parts are in bold italics.
[1276] 1. To address the first problem, regarding the value of the APS syntax element scaling_list_chroma_present_flag which depends on the SPS syntax element, one or more of the following approaches are disclosed:
[1277] 1) In one example, the VPS ID and / or SPS ID and / or PPS ID may be added to the APS syntax structure, that is, the syntax structure of adapt_parameter_set_rbsp(), for example, adapt_parameter_set_rbsp() may be changed as follows:
[1278]
[1279] aps_seq_parameter_set_id specifies the value of sps_seq_parameter_set_id for an APS. The value of aps_seq_parameter_set_id must be in the range from 0 to 15. The value of aps_seq_parameter_set_id must be the same for all APS referenced by pictures coded in CLVS.
[1280] a. Additionally, or alternatively, the signaling of the chroma scaling list can be explicitly controlled based on the value of ChromaArrayType, and, for example, the syntax table of scaling_list_data() can be changed as follows:
[1281]
[1282] And the semantics of scaling_list_chroma_present_flag are changed as follows:
[1283] [[1 is equivalent to scaling_list_chroma_present_flag, which specifies that the chroma scaling list exists in scaling_list_data().
[1284] scaling_list_chroma_present_flag equal to 0 specifies that the chroma scaling list does not exist in scaling_list_data(). The bitstream conformance requirement is that scaling_list_chroma_present_flag must be equal to 0 when ChromaArrayType is equal to 0, and equal to 1 when ChromaArrayType is not equal to 0.
[1285] 2) In one example, VPS and / or SPS and / or PPS associated with APS may be implicitly derived.
[1286] a. For example, if APS is referenced by a video unit (such as a picture header or slice header) and the video unit depends on VPS and / or SPS and / or PPS, APS is implicitly associated with VPS and / or SPS and / or PPS.
[1287] 3) In one example, instead of using a user-defined scaling list (also called an explicit scaling list), flat quantization (default scaling list) may be used for the chroma block even when an explicit scaling list is applied to the lumina block.
[1288] a. Alternatively, even if an explicit scaling list for the luminance block is signaled in the bitstream, an explicit scaling list for the chroma block may not be signaled.
[1289] 4) Alternatively, the value of scaling_list_chroma_present_flag can be separated from the value of ChromaArrayType.
[1290] a. An indication of whether to use an explicit scaling list or a default scaling list for different color components (e.g., luminance and chroma blocks) can be signaled / controlled separately.
[1291] i. In one example, syntax elements (e.g., one or more flags) may be added to SPS / PPS / PH / SH to specify whether to enable a custom scaling list (also called an explicit scaling list) for the Luma and / or Chroma components.
[1292] ii. For example, a flag may be added to the SPS to create luminance transform coefficients so that it can switch between flat quantization (default scaling list) and a user-defined scaling list.
[1293] iii. For example, one or more flags may be added to the SPS to allow the chroma-U and / or chroma-V transform coefficients to switch between flat quantization (default scaling list) and a user-defined scaling list.
[1294] b. For example, scaling_list_chroma_present_flag can be 1 when ChromaArrayType is 0.
[1295] i. In one example, for a coding picture in 4:0:0 chroma format, a set of N (such as N=28) scaling matrices can be signaled as APS.
[1296] ii. In one example, for a coding picture in a 4:4:4 chroma format having the same separate_color_plane_flag as 1, a set of M of the scaling matrix (e.g., M=28) can be signaled in the APS.
[1297] a) For example, for a set of scaling matrices M signaled in split_colour_plane_flag and APS equal to 1 (e.g., equal to M=28), the Y (luma), U (Cb), and V (Cr) channel transform coefficients can each be processed as luma-Y-channel, and the scaling matrix identifier variable id for the Y, U, and V transform coefficients is derived in relation to the color component equal to the Y-component (e.g., a value of 0).
[1298] b) Alternatively, if separate_colour_plane_flag is equal to 1 and is equal to M of the set of scaling matrices signaled in the APS (e.g., M=28), the scaling matrix identifier variable id for the luma-Y transform coefficient is derived in relation to the color component identical to the Y-component (e.g., a value of 0), the scaling matrix identifier variable id for chroma-U is derived in relation to the color component identical to the U-component (e.g., a value of 1), and the scaling matrix identifier variable id for chroma-V is derived in relation to the color component identical to the V-component (e.g., a value of 2).
[1299] c. For example, scaling_list_chroma_present_flag can be 0 when ChromaArrayType is 1.
[1300] i. In one example, whether chroma transform factors are allowed to use a user-defined scaling list may depend on the value of scaling_list_chroma_present_flag.
[1301] a) For example, when scaling_list_chroma_present_flag is 0, user-defined scaling lists cannot be used for chroma transform factors regardless of the values of sps_scaling_list_enabled_flag, ph_scaling_list_enabled_flag and slice_scaling_list_enabled_flag (e.g., the value of the additional flag used to specify the use of user-defined scaling lists for chroma must be equal to a specific number such as 0 or 1).
[1302] b) For example, if scaling_list_chroma_present_flag is 1, a user-defined scaling list may be allowed to be used for chroma transform factors.
[1303] ii. In one example, for a coding picture of a 4:2:0, and / or 4:2:2 chroma format and / or 4:4:4 chroma format having a separate_colour_plane_flag equal to 0, a set of N (equal to N=10) scaling matrices may be signaled in the APS.
[1304] a) For example, if ChromaArrayType is greater than 0 and N (e.g., N=10) sets of scaling matrices are signaled in APS, the scaling matrices for U and / or V transform coefficients can be derived from the signaled N sets of scaling matrices for Y transform coefficients.
[1305] b) Alternatively, if ChromaArrayType is greater than 0 and N (e.g., N=10) sets of scaling matrices are signaled in APS, the U and / or V transform coefficients may not use a user-defined scaling list (instead, the U and / or V transform coefficients may use flat quantization as the default scaling factor).
[1306] d. For example, a semantic constraint on scaling_list_chroma_present_flag based on ChromaArrayType may not be associated with the syntax element scaling_list_chroma_present_flag, for example, as follows:
[1307] scaling_list_chroma_present_flag equal to 1 specifies that a chroma scaling list exists in scaling_list_data(). scaling_list_chroma_present_flag equal to 0 specifies that a chroma scaling list does not exist in scaling_list_data(). [[It is a bitstream conformance requirement that scaling_list_chroma_present_flag must be equal to 0 when ChromaArrayType is 0, and 1 when ChromaArrayType is not equal to 0. ] ]
[1308] e. For example, the semantic constraint on scaling_list_chroma_present_flag based on ChromaArrayType can be changed as follows:
[1309] [[1 is equivalent to scaling_list_chroma_present_flag, which specifies that the chroma scaling list exists in scaling_list_data().
[1310] scaling_list_chroma_present_flag equal to 0 specifies that the chroma scaling list does not exist in scaling_list_data(). When ChromaArrayType is equal to 0, scaling_list_chroma_present_flag must be 0[[, when ChromaArrayType is not 0, it must be equal to 1] is a requirement for bitstream conformance.
[1311] 5) Alternatively, constraints related to PH and / or SH syntax elements may be added to restrict the value of scaling_list_chroma_present_flag to a specific value (e.g., 0 or 1) based on the ChromaArrayType derived from the PH / SH syntax elements, for example as follows:
[1312] In one example, the semantics of ph_scaling_list_aps_id are changed as follows:
[1313] ph_scaling_list_aps_id specifies the adaptation_parameter_set_id of the scaling list APS. The TemporalId of an APS NAL unit having the same aps_params_type as SCALING_APS and the same aps_parameter_set_id as ph_scaling_list_aps_id must be less than or equal to the TemporalId of the picture associated with the PH.
[1314] The scaling_list_chroma_present_flag value of the APS NAL unit must have aps_params_type equal to SCALING_APS, and the adaptation_parameter_set_id equal to ph_scaling_list_aps_id must be equal to ChromaArrayType==0?0: 0 : 1.
[1315] Alternatively, the semantics of ph_scaling_list_aps_id are changed as follows:
[1316] ph_scaling_list_aps_id specifies the adaptation_parameter_set_id of the scaling list APS. The TemporalId of an APS NAL unit having the same aps_params_type as SCALING_APS and the same aps_parameter_set_id as ph_scaling_list_aps_id must be less than or equal to the TemporalId of the picture associated with the PH.
[1317] When ChromaArrayType is equal to 1, the scaling_list_chroma_present_flag value of an APS NAL unit having the same aps_params_type as SCALING_APS and the same adapt_parameter_set_id as ph_scaling_list_aps_id must be equal to 1.
[1318] Alternatively, the semantics of ph_scaling_list_aps_id are changed as follows:
[1319] ph_scaling_list_aps_id specifies the adaptation_parameter_set_id of the scaling list APS. The TemporalId of an APS NAL unit having the same aps_params_type as SCALING_APS and the same aps_parameter_set_id as ph_scaling_list_aps_id must be less than or equal to the TemporalId of the picture associated with the PH.
[1320] When ChromaArrayType is equal to 0, the scaling_list_chroma_present_flag value of an APS NAL unit having the same aps_params_type as SCALING_APS and the same adapt_parameter_set_id as ph_scaling_list_aps_id must be equal to 0.
[1321] And the semantics of APS SE are changed as follows:
[1322] scaling_list_chroma_present_flag equal to 1 specifies that a chroma scaling list exists in scaling_list_data(). scaling_list_chroma_present_flag equal to 0 specifies that a chroma scaling list does not exist in scaling_list_data(). [[It is a bitstream conformance requirement that scaling_list_chroma_present_flag must be equal to 0 when ChromaArrayType is 0, and 1 when ChromaArrayType is not equal to 0. ] ]
[1323] 2. With respect to unnecessary chroma-related APS syntax element signaling when ChromaArrayType is 0, one or more of the following approaches are disclosed to address the second problem:
[1324] 1) In one example, to control the presence of APS syntax elements related to chroma residual scaling, syntax elements (e.g., flags) may be added to the APS syntax structure lmcs_data() (e.g., lmcs_delta_abs_crs, lmcs_delta_sign_crs_flag, etc.)
[1325] a. For example, when ChromaArrayType is equal to 0, chroma residual scaling related APS syntax elements (e.g., lmcs_delta_abs_crs, lmcs_delta_sign_crs_flag, et al.) are required not to be signaled, and, for example, the added flag must be equal to a specific value equal to 0 or 1.
[1326] b. For example, if ChromaArrayType is not equal to 0, the chroma residual scaling related APS syntax elements (e.g., lmcs_delta_abs_crs, lmcs_delta_sign_crs_flag, et al.) need to be signaled, for example, the added flag must be equal to a specific value equal to 0 or 1.
[1327] c. For example, whether the current slice is allowed to use chroma residual scaling may depend on added flags, and for example, if there is an added flag indicating that the chroma residual scaling related APS syntax element is not signaled, chroma residual scaling is not used regardless of the values of sps_lmcs_enabled_flag, ph_lmcs_enabled_flag, ph_chroma_residual_scale_flag and sh_lmcs_enabled_flag.
[1328] 2) To restrict the value of lmcs_delta_abs_crs regarding the value of ChromaArrayType, bitstream constraints may be added under the semantics of PH / SH / APS syntax elements, for example as follows:
[1329] ph_lmcs_aps_id specifies the aps_parameter_set_id of the LMCS APS referenced by the slice associated with the PH. The TemporalId of an APS NAL unit having the same aps_params_type as the LMCS_APS and the same adapt_parameter_set_id as ph_lmcs_aps_id must be less than or equal to the TemporalId of the picture associated with the PH.
[1330] When ChromaArrayType is equal to 0, the lmcs_delta_abs_crs value of an APS NAL unit having aps_params_type equal to LMCS_APS and aps_parameter_set_id equal to ph_lmcs_aps_id must be equal to 0.
[1331] Alternatively, the semantics of ph_lmcs_aps_id are changed as follows:
[1332] ph_lmcs_aps_id specifies the aps_parameter_set_id of the LMCS APS referenced by the slice associated with the PH. The TemporalId of an APS NAL unit having the same aps_params_type as the LMCS_APS and the same adapt_parameter_set_id as ph_lmcs_aps_id must be less than or equal to the TemporalId of the picture associated with the PH.
[1333] When ChromaArrayType is equal to 1, the lmcs_delta_abs_crs value of an APS NAL unit having aps_params_type equal to LMCS_APS and aps_parameter_set_id equal to ph_lmcs_aps_id must be greater than 0.
[1334] Alternatively, the semantics of ph_lmcs_aps_id are changed as follows:
[1335] ph_lmcs_aps_id specifies the aps_parameter_set_id of the LMCS APS referenced by the slice associated with the PH. The TemporalId of an APS NAL unit having the same aps_params_type as the LMCS_APS and the same adapt_parameter_set_id as ph_lmcs_aps_id must be less than or equal to the TemporalId of the picture associated with the PH.
[1336] If ChromaArrayType is equal to 0, the value of lmcs_delta_abs_crs of an APS NAL unit having aps_params_type equal to LMCS_APS and aps_parameter_set_id equal to ph_lmcs_aps_id must be equal to 0. Otherwise, the value of lmcs_delta_abs_crs of an APS NAL unit having aps_params_type equal to LMCS_APS and aps_parameter_set_id equal to ph_lmcs_aps_id must be greater than 0.
[1337] 3. In the above example, the term 'ChromaArrayType' can be replaced with 'checking if the color format is 4:0:0'.
[1338] 4. One or more of the following approaches are disclosed in relation to the use of RRC and TSRC to solve the third problem:
[1339] 1) Signaling of the TSRC enable / disable flag (e.g., slice_ts_residual_coding_disabled_flag) can be controlled based on whether transform skip is enabled (e.g., sps_transform_skip_enabled_flag in SPS).
[1340] a. In one example, the following may apply:
[1341]
[1342] b. Alternatively, if slice_ts_residual_coding_disabled_flag does not exist, it is inferred to be the same as 1.
[1343] 2) Alternatively, the value of the TSRC enable flag (e.g., slice_ts_residual_coding_disabled_flag) can be restricted by sps_transform_skip_enabled_flag in SPS, and, for example, the semantics of slice_ts_residual_coding_disabled_flag can be changed as follows:
[1344] slice_ts_residual_coding_disabled_flag, identical to 1, specifies that the residual_coding() syntax structure is used to parse residual samples of transform skip blocks for the current slice.
[1345] slice_ts_residual_coding_disabled_flag equal to 0 specifies that the residual_ts_coding() syntax structure is used to parse residual samples of transform skip blocks for the current slice. [[slice_ts_residual_coding_disabled_flag] ] When sps_transform_skip_enabled_flag equals 0, the value of slice_ts_residual_coding_disabled_flag must be equal to [ [inferred] ] [ [0] ] 1.
[1346] 3) Alternatively, if the signaling of the TSRC enable flag (e.g., slice_ts_residual_coding_disabled_flag) is not conditioned on other syntax elements, it may always be present, and, for example, the semantics of slice_ts_residual_coding_disabled_flag may be changed as follows:
[1347] slice_ts_residual_coding_disabled_flag, equivalent to 1, specifies that the residual_coding() syntax structure is used to parse residual samples of transform skip blocks for the current slice. slice_ts_residual_coding_disabled_flag, equivalent to 0, specifies that the residual_ts_coding() syntax structure is used to parse residual samples of transform skip blocks for the current slice. [ [If slice_ts_residual_coding_disabled_flag does not exist, it is inferred to be equivalent to 0. ] ]
[1348] 4) Additionally, TSRC can be applied to non-transform-skip (non-TS) coded blocks.
[1349] a. In one example, one or more syntax flags may be added to specify whether to enable TSRC or RRC for non-TS blocks.
[1350] i. In one example, one or more block-level (CTU / CU / TU) syntax flags may be added to specify whether the current video unit is using TSRC or RRC.
[1351] ii. Additionally, alternatively, one or more high-level (SPS / PPS / PH / SH) syntax flags may be added to specify whether TSRC is allowed for the video unit.
[1352] b. In one example, whether to use TSRC for a non-TS coded block or to allow TSRC for a non-TS coded block may depend on coded information such as the QP value for the block.
[1353] i. In one example, for a non-TS block where QP is less than or equal to X (X=4), it may be permissible to use TSRC or RRC for residual coding.
[1354] 5. One or more of the following approaches are disclosed in relation to the on / off control of cu qp delta for a luma block to solve the fourth problem:
[1355] a. SH level syntax elements (e.g., a flag represented by slice_cu_qp_delta_enabled_flag) may be added to control the activation and / or deactivation of cu qp delta for a specific slice.
[1356] i. In one example, the existence of the proposed slice_cu_qp_delta_enabled_flag is determined by the cu_qp_delta_enabled_flag of the PPS, for example, only when the cu_qp_delta_enabled_flag of the PPS is 1, the proposed slice_cu_qp_delta_enabled_flag is signaled, otherwise (when the cu_qp_delta_enabled_flag of the PPS is 0), the proposed slice_cu_qp_delta_enabled_flag is not signaled and is inferred to be 0.
[1357] a) Alternatively, the value of the proposed slice_cu_qp_delta_enabled_flag is limited to the value of the PPS's cu_qp_delta_enabled_flag, that is, when the PPS's cu_qp_delta_enabled_flag is equal to 0, the value of the proposed slice_cu_qp_delta_enabled_flag must be equal to 0.
[1358] ii. In one example, the cu_qp_delta_enabled_flag of the PPS may be used to control the presence of the SH-level cu_qp_delta_enabled_flag in the SHs, and / or the presence of cu_qp_delta_abs and / or cu_qp_delta_sign_flag in the transform unit syntax and palette coding syntax.
[1359] iii. In one example, the syntax structure can be changed as follows:
[1360] The PPS syntax structure is changed as follows:
[1361]
[1362] pps_ cu_qp_delta_enabled_flagEqual to 1 specifies that the ph_cu_qp_delta_subdiv_intra_slice and ph_cu_qp_delta_subdiv_inter_slice syntax elements exist in a PH referencing a PPS, and that cu_qp_delta_abs may exist in transform unit syntax and palette coding syntax. Equal to 0 pps_cu_qp_delta_enabled_flag specifies that the ph_cu_qp_delta_subdiv_intra_slice and ph_cu_qp_delta_subdiv_inter_slice syntax elements do not exist in a PH referencing a PPS, and that cu_qp_delta_abs does not exist in transform unit syntax and palette coding.
[1363] And the PH syntax structure is changed as follows:
[1364]
[1365] And the SH syntax structure is changed as follows:
[1366]
[1367] cu_qp_delta_enabled_flag equal to 1 specifies that cu_qp_delta_abs may exist in transform units and palette coding syntax. cu_qp_delta_enabled_flag equal to 0 specifies that cu_qp_delta_abs does not exist in transform units or palette coding syntax. If it does not exist, the value of sps_bdpcm_chroma_enabled_flag is inferred to be equal to 0.
[1368] a. Additionally, the presence of cu_qp_delta_abs in the syntax structure palette_coding() and / or the syntax structure transform_unit() is conditioned on the proposed slice_cu_qp_delta_enabled_flag, for example, cu_qp_delta_abs is signaled only when the value of the proposed slice_cu_qp_delta_enabled_flag is equal to 1; otherwise (when the proposed slice_cu_qp_delta_enabled_flag is equal to 0), the value of cu_qp_delta_abs is not signaled and is inferred to be equal to 0.
[1369] Alternatively, the chroma cu qp offset may not be controlled by the slice level on / off flag, and, for example, whether the chroma cu qp offset is applied to the current slice may depend on the PH / PPS / SPS level flag.
[1370] b. Alternatively, a PH level syntax element (e.g., a flag denoted as ph_cu_qp_delta_enabled_flag) may be added to control the activation and / or deactivation of the cu qp delta for a specific slice.
[1371] 6. To address the fifth problem in relation to the design of PPS SE single_slice_per_subpic_flag, num_slices_in_pic_minus1, tile_idx_delta_present_flag, one or more of the following approaches are disclosed:
[1372] a. In one example, a constraint can be added to the semantics of the PH / SH / PPS syntax element, for example, as follows:
[1373] ph_pic_parameter_set_id specifies the pps_pic_parameter_set_id value of the PPS in use. The value of ph_pic_parameter_set_id must be in the range from 0 to 63.
[1374] It is a requirement for bitstream conformance that the TemporalId value of PH must be greater than or equal to the TemporalId value of PPS having the same pps_pic_parameter_set_id as ph_pic_parameter_set_id.
[1375] When sps_num_subpics_minus1 is equal to 0, rect_slice_flag is equal to 1, a picture contains only one slice and another picture contains two or more slices, and the two pictures must refer to different PPSs.
[1376] b. In one example, the semantics of single_slice_per_subpic_flag can be changed as follows:
[1377] A single_slice_per_subpic_flag equal to 1 specifies that each subpicture consists of a single rectangular slice. A single_slice_per_subpic_flag equal to 0 specifies that if sps_num_subpics_minus1 is greater than 0 (in which case each picture contains two or more slices), each subpicture may consist of one or more rectangular slices, but not each of all subpictures contains only one rectangular slice, and otherwise (sps_num_subpics_minus1 is 0, in which case each picture contains only one subpicture), each picture contains two or more slices. When it does not exist, the value of single_slice_per_subpic_flag is inferred to be equal to 0.
[1378] c. In one example, a constraint can be added to the semantic of single_slice_per_subpic_flag as follows, for example:
[1379] The single_slice_per_subpic_flag, identical to 1, specifies that each subpicture consists of one rectangular slice.
[1380] single_slice_per_subpic_flag, which is equal to 0, specifies that each subpicture can consist of one or more rectangular slices. When not present, the value of single_slice_per_subpic_flag is inferred to be equal to 0.
[1381] When sps_num_subpics_minus1 is 0 and there is only one slice for each picture referencing PPS, the value of single_slice_per_subpic_flag must be equal to 1.
[1382] d. Additionally, or alternatively, constraints can be added to the semantics of single_slice_per_subpic_flag, for example, as follows:
[1383] The single_slice_per_subpic_flag, identical to 1, specifies that each subpicture consists of one rectangular slice.
[1384] single_slice_per_subpic_flag, which is equal to 0, specifies that each subpicture can consist of one or more rectangular slices. When not present, the value of single_slice_per_subpic_flag is inferred to be equal to 0.
[1385] If sps_num_subpics_minus1 is greater than 0 and there is only one slice in each subpic, the value of single_slice_per_subpic_flag must be equal to 1.
[1386] e. In one example, single_slice_per_subpic_flag is restricted to being equal to 1 when each subpicture consists of one rectangular slice.
[1387] f. Additionally, or alternatively, the presence of the PPS syntax element tile_idx_delta_present_flag may not be controlled based on num_slices_in_pic_minus1, for example, as follows:
[1388]
[1389] a. In one example, when single_slice_per_subpic_flag is equal to 1, there is a constraint that num_slices_in_pic_minus1 must be equal to sps_num_subpics_minus1.
[1390] b. Additionally, alternatively, the PPS syntax element num_slices_in_pic_minus1 can be changed to num_slices_in_pic_minus2.
[1391] i. Additionally, the condition for the existence of tile_idx_delta_present_flag is based on num_slices_in_pic_minus2, for example as follows:
[1392]
[1393] num_slices_in_pic_minus [ [1] ] 2 plus [ [1] ] 2 specifies the number of [ [rectangle] ] slices in each picture referencing the PPS. The value of num_slices_in_pic_minus [ [1] ] 2 must be in the range from 0 to MaxSlicesPerPicture-[ [1] ] 2, where MaxSlicesPerPicture is specified in Appendix A. The value of the variable NumSlicesInPic is derived to be equal to nnum_slices_in_pic_minus2+2. When no_pic_partition_flag is equal to 1, the value of the variable NumSlicesInPic is derived to be equal to 1[ [num_slices_in_pic_minus1 is inferred to be equal to 0] ]. When single_slice_per_subpic_flag is equal to 1, NumSlicesInPic is induced to be equal to sps_num_subpics_minus1-1[ [num_slices_in_pic_minus1 is inferred]].
[1394] Additionally, "num_slices_in_pic_minus1" in all other locations of the VVC draft text is replaced with "NumSlicesInPic-1".
[1395] 7. One or more of the following approaches are disclosed in relation to signaling for slice and tile layouts to solve the sixth problem:
[1396] a. Syntax elements (e.g., one or more flags) can be added to the PPS to specify whether the picture is divided into multiple tile rows / columns, with the first few tile rows / columns of the same height and the last few tile rows / columns of different heights / widths.
[1397] i. For example, the proposed syntax flags depend on no_pic_partition_flag and / or the explicit number of tile rows / columns (e.g., num_exp_tile_columns_minus1 and / or num_exp_tile_rows_minus1) as follows, e.g. as follows:
[1398]
[1399] If exp_tile_columns_in_reverse_order is equal to 1, it specifies that the picture is divided into two or more tile columns, with the first few tile columns of the same width and the last few tile columns of a different width. If exp_tile_columns_in_reverse_order is 0, this tile layout is not imposed.
[1400] If exp_tile_rows_in_reverse_order is 1, it specifies that the picture is divided into two or more tile rows, with the first few tile rows of the same height and the last few tile rows of a different height. exp_tile_rows_in_reverse_order equal to 0 does not impose such a tile layout.
[1401] ii. Additionally, when the proposed syntax flag is equal to 1, the tile column width and / or tile row height are derived according to the value of the proposed syntax flag, for example as follows:
[1402] The variable NumTileColumns, which specifies the number of tile columns, and the list colWidth[ i ], which specifies the width of the i-th tile column in CTB units and is in the range i from 0 to NumTileColumns-1, are derived as follows:
[1403] remainingWidthInCtbsY = PicWidthInCtbsY
[1404] for( i = 0; i < num_exp_tile_columns_minus1; i++ ) {
[1405] c colWidth[i] = tile_column_width_minus1[i] + 1
[1406] remainingWidthInCtbsY -= c colWidth[ i ]
[1407] }
[1408] uniformTileColWidth = tile_column_width_minus1[ num_exp_tile_columns_minus1 ] + 1 (23)
[1409] while( remainingWidthInCtbsY >= uniformTileColWidth ) {
[1410] c colWidth[i++] = uniformTileColWidth
[1411] remainingWidthInCtbsY -= uniformTileColWidth
[1412] }
[1413] if( remainingWidthInCtbsY > 0 )
[1414] c colWidth[ i++ ] = remainingWidthInCtbsY
[1415] NumTileColumns = i
[1416] if( exp_tile_colums_in_reverse_order )
[1417] for( k = 0; k < NumTileColumns; k++ ) {
[1418] colWidth[k] = ccolWidth[NumTileColumns - 1 - k]
[1419] The variable NumTileRows, specifying the number of tile rows, and the list RowHeight[j], specifying the height of the j-th tile row in CTB units for the range j from 0 to NumTileRows-1, are derived as follows:
[1420] remainingHeightInCtbsY = PicHeightInCtbsY
[1421] for( j = 0; j < num_exp_tile_rows_minus1; j++ ) {
[1422] c RowHeight[ j ] = tile_row_height_minus1[ j ] + 1
[1423] remainingHeightInCtbsY -= c RowHeight[ j ]
[1424] }
[1425] uniformTileRowHeight = tile_row_height_minus1[ num_exp_tile_rows_minus1 ] + 1 (24)
[1426] while( remainingHeightInCtbsY >= uniformTileRowHeight ) {
[1427] c RowHeight[ j++ ] = uniformTileRowHeight
[1428] remainingHeightInCtbsY -= uniformTileRowHeight
[1429] }
[1430] if( remainingHeightInCtbsY > 0 )
[1431] c RowHeight[ j++ ] = remainingHeightInCtbsY
[1432] NumTileRows = j
[1433] if( exp_tile_rows_in_reverse_order )
[1434] for( k = 0; k < NumTileRows; k++ ) {
[1435] RowHeight[k] = cRowHeight[NumTileRows - 1 - k]
[1436] b. Likewise, if a tile is divided into multiple slices (in which case the slice size is smaller than the tile size), syntax elements (e.g., one or more flags) may be added to the PPS to specify whether the tile is divided into multiple slice rows, with the first few slice rows of the same height and the last few slice rows of different heights.
[1437] i. Additionally, when the proposed syntax flag is 1, the slice height (e.g., SliceHeightInCtusMinus1) is derived according to the value of the proposed syntax flag.
[1438] 8. In the case where there is no ALF APS to solve the seventh problem, one or more of the following approaches are disclosed:
[1439] a. In one example, if there is no ALF APS (e.g., no_aps_constraint_flag is equal to 1 or an APS with the required APS ID cannot be used), ALF may not be allowed (in this case, sps_alf_enabled_flag and sps_ccalf_enabled_flag must be equal to 0).
[1440] b. In one example, when there are no ALF APS (e.g., when no_aps_constraint_flag is equal to 1 or when an APS with the required APS ID is unavailable), ALF may still be allowed (in this case, sps_alf_enabled_flag is 0 or 1).
[1441] i. For example, when there are no ALF APS (e.g., no_aps_constraint_flag is equal to 1), ph_alf_enabled_flag and / or slice_alf_enabled_flag are allowed to be equal to 0 or 1.
[1442] ii. For example, if there is no ALF APS (e.g., no_aps_constraint_flag is 1), chroma ALF and CC-ALF are not allowed, but lumina ALF with a fixed filter may be used.
[1443] iii. For example, when there are no ALF APS (e.g., no_aps_constraint_flag is equal to 1), the values of ph_num_alf_aps_ids_luma, ph_alf_chroma_idc, slice_num_alf_aps_ids_luma, slice_alf_chroma_idc, and sps_ccalf_enabled_flag are required to be equal to 0.
[1444] c. In one example, when the GCI syntax element no_alf_constraint_flag is equal to 1, ALF and / or CCALF may not be allowed (in this case, sps_alf_enabled_flag and / or sps_ccalf_enabled_flag are required to be equal to 0).
[1445] d. Alternatively, whether to signal the number of ALF APSs to be used (e.g., ph_num_alf_aps_ids_luma) and / or ALF / CC-ALF APS indices (e.g., ph_alf_aps_id_luma, ph_alf_aps_id_chroma, ph_cc_alf_cb_aps_id, ph_cc_alf_cr_aps_id) may also depend on whether ALF APS is allowed (e.g., no_aps_constraint_flag).
[1446] i. In one example, when ALF APS is not applied, the information may not be signaled.
[1447] e. In one example, a new syntax element may be signaled in SPS / PPS / PH / SH / GCI to disable ALF, and / or CCALF, and / or LMCS, and / or custom scaling lists.
[1448] f. In one example, an APS / VPS provided by external means may be disabled / disabled / restricted / off / not allowed depending on GCI syntax elements (e.g., constraint flags of the APS / VPS).
[1449] i. For example, the use of APS / VPS signaled in a bitstream and APS / VPS provided by external means may be disabled / disabled / restricted / off / not allowed.
[1450] ii. For example, a GCI syntax element (e.g., a flag named no_aps_constraint_flag) is signaled in a GCI syntax structure that specifies disabling / disabling / turning off the use of VPS in the decoding process (e.g., in this case, APS of the bitstream and APS provided by external means are not allowed).
[1451] iii. For example, the GCI syntax element no_aps_constraint_flag, which is equivalent to a specific value (e.g., 1), specifies that there are no NAL units with a nuh_unit_type identical to PREFIX_APS_NUT or SUFFIX_APS_NUT available in the decoding process, and, for example, the text of JVET-R2001-vA is changed as follows (the added part is Bold italics Text as Highlighted and deleted parts are highlighted by opening and closing double brackets (e.g., [[ ]]) with deleted text between them):
[1452] Same as 1 no_aps_constraint_flag is available to the decoder when decoding the bitstream of OlsInScope through existing in the bitstream or provided by external means [[is in OlsInScope]] Specifies that there are no NAL units with the same nuh_unit_type as PREFIX_APS_NUT or SUFFIX_APS_NUT, and sps_lmcs_enabled_flag and sps_scaling_list_enabled_flag must both be equal to 0. If no_aps_constraint_flag is equal to 0, these constraints do not apply.
[1453] or
[1454] Same as 1 no_aps_constraint_flag is available to the decoder when decoding the bitstream of OlsInScope through existing in the bitstream or provided by external means [[is in OlsInScope]] Specifies that there are no NAL units with the same nuh_unit_type as PREFIX_APS_NUT or SUFFIX_APS_NUT, and sps_lmcs_enabled_flag [[and]] , sps_scaling_list_enabled_flag, sps_ccalf_enabled_flag, ph_num_alf_aps_ids_luma, sh_num_alf_aps_ids_luma, ph_alf_cb_flag, ph_alf_cr_flag, sh_alf_cb_flag, and sh_alf_cr_flag All must be equal to [[both]]. If no_aps_constraint_flag is equal to 0, these constraints do not apply.
[1455] iv. For example, the GCI syntax element no_aps_constraint_flag, which is equivalent to a specific value (e.g., 1), specifies the disabling of APS-mandated coding tools (e.g., LMCS, Scaling List, CCALF, Chroma ALF, luma ALF with APS, etc.) without specifying the presence of OlsInScope, and, for example, the text of JVET-R2001-vA is changed as follows (the added part is Bold italics Text as Highlighted and deleted parts are highlighted by opening and closing double brackets (e.g., [[ ]]) with deleted text between them):
[1456] Same as 1 no_aps_constraint_flagSpecifies that [[there must be no NAL units with the same nuh_unit_type as PREFIX_APS_NUT or SUFFIX_APS_NUT existing in OlsInScope,]] sps_lmcs_enabled_flag and sps_scaling_list_enabled_flag0 must both be equal to 0. no_aps_constraint_flag equal to 0 does not impose these constraints.
[1457] or
[1458] no_aps_constraint_flag, which is equivalent to 1, specifies that there should be no NAL units with a nuh_unit_type identical to PREFIX_APS_NUT or SUFFIX_APS_NUT present in OlsInScope, and sps_lmcs_enabled_flag [[and]] , sps_scaling_list_enabled_flag, sps_ccalf_enabled_flag, ph_num_alf_aps_ids_luma, sh_num_alf_aps_ids_luma, ph_alf_cb_flag, ph_alf_cr_flag, sh_alf_cb_flag, and sh_alf_cr_flag All must be equal to [[both]]. If no_aps_constraint_flag is equal to 0, these constraints do not apply.
[1459] v. The syntax elements described above (e.g., no_aps_constraint_flag) are examples for specifying whether APS is enabled, available, or present, and their names can be changed if necessary.
[1460] 9. Regarding the signaling of conformity window parameters to solve the eighth problem:
[1461] a. In one example, when pic_width_in_luma_samples is equal to pic_width_max_in_luma_samples and pic_height_in_luma_samples is equal to pic_height_max_in_luma_samples, the signaling of conformance window parameters (i.e., pps_conformance_window_flag, pps_conf_win_left_offset, pps_conf_win_right_offset, pps_conf_win_top_offset, and pps_conf_win_bottom_offset) in PPS may be skipped.
[1462] i. In one example, a flag may be added to the PPS syntax, and when the value of this flag equal to X (0 or 1) specifies that pic_width_in_luma_samples is equal to pic_width_max_in_luma_samples and pic_height_in_luma_samples is equal to pic_height_max_in_luma_samples, a flag equal to 1-X specifies that pic_width_in_luma_samples is less than pic_width_max_in_luma_samples or pic_height_in_luma_samples is less than pic_height_max_in_luma_samples. However, note that even if pic_width_in_luma_samples is equal to pic_width_max_in_luma_samples and pic_height_in_luma_samples is equal to pic_height_max_in_luma_samples, pic_width_in_luma_samples and pic_height_in_luma_samples must still be signaled in PPS to avoid parsing dependencies of PPS on SPS.
[1463] Additionally, when the upper flag is the same as X, signaling of the conformance window parameters in PPS (i.e., pps_conformance_window_flag, pps_conf_win_left_offset, pps_conf_win_right_offset, pps_conf_win_top_offset, and pps_conf_win_bottom_offset) is skipped, and additionally, the parameter values are inferred to be the same as the parameter values in SPS (i.e., sps_conformance_window_flag, sps_conf_win_left_offset, sps_conf_win_right_offset, sps_conf_win_top_offset, and sps_conf_win_bottom_offset).
[1464] 10. Regarding disable control via GCI SE to resolve the tenth problem:
[1465] a. In one example, a constraint flag / indicator may be added to / signaled to a GCI syntax structure expressing restrictions on the values of SPS / PPS / APS / PH / SH syntax elements and / or their presence.
[1466] i. For example, a constraint flag / indicator identical to a specific value (e.g., 1) specifies that the coding tool / function marked with X is restricted.
[1467] ii. For example, the constraint flag can be coded as u(1).
[1468] iii. For example, constraint indicators can be coded as u(N), such that N is a positive constant.
[1469] iv. For example, X can be one or more of the following:
[1470] a) sps_ptl_dpb_hrd_params_present_flag(e.g., restriction on the existence of ptl, dpb, hrd, etc.)
[1471] b) sps_subpic_info_present_flag(e.g., subpicture restriction, subpicture extraction, etc.)
[1472] c) sps_independent_subpics_flag(e.g., independent / dependent subpics restriction, subpice extraction, etc.)
[1473] d) sps_subpic_id_mapping_explicitly_signalled_flag(e.g., restrictions on subpic ID mapping, etc.)
[1474] e) sps_subpic_id_mapping_present_flag(e.g., restrictions on subpic ID mapping, etc.)
[1475] f) sps_entropy_coding_sync_enabled_flag(e.g., restrictions on entropy coding sync, wpp, etc.)
[1476] g) sps_entry_point_offsets_present_flag(e.g., restrictions on entropy coding synchronization, wpp, etc.)
[1477] h) sps_log2_max_pic_order_cnt_lsb_minus4(e.g., POC feature limit, etc.)
[1478] i) sps_poc_msb_cycle_flag (e.g., POC characteristic restriction, etc.)
[1479] j) sps_sublayer_dpb_params_flag(e.g., restrictions on sublayer HRD, etc.)
[1480] k) sps_partition_constraints_override_enabled_flag(e.g., restrictions on overriding partition constraints in syntax structures other than SPS, such as SH)
[1481] l) sps_log2_min_luma_coding_block_size_minus2(e.g., minimum CTB size limit, etc.)
[1482] m) sps_log2_diff_min_qt_min_cb_intra_slice_luma(e.g., minimum QT size limit for intra-slices, etc.)
[1483] n) sps_max_mtt_hierarchy_depth_intra_slice_luma(e.g., limits on MTT depth of intraslices, etc.)
[1484] o) sps_log2_diff_min_qt_min_cb_inter_slice(e.g., minimum QT size limit for interslices, etc.)
[1485] p) sps_max_mtt_hierarchy_depth_inter_slice(e.g., limits on MTT depth of interslices, etc.)
[1486] q) sps_max_luma_transform_size_64_flag(e.g., 64xN / Nx64 transform size limit, etc.)
[1487] r) sps_same_qp_table_for_chroma_flag(e.g., restrictions on the same QP table for Cb / Cr, etc.)
[1488] s) sps_log2_transform_skip_max_size_minus2(e.g., maximum block size limit for transform skipping, etc.)
[1489] t) sps_idr_rpl_present_flag(e.g., RPL limit for IDR pictures, bitstream merging / BEAMing, etc.)
[1490] u) sps_rpl1_same_as_rpl0_flag(e.g., restrictions on the same RPL for list0 and list1, etc.)
[1491] v) sps_num_ref_pic_lists[ i ](e.g., a limit on the number of reference picture lists in the i-th RPL item)
[1492] w) sps_dmvr_control_present_in_ph_flag(e.g., restrict DMVR control in phs other than SPS)
[1493] x) sps_mmvd_fullpel_only_flag(e.g., restriction on full-pel / fractional-pel MMVD)
[1494] y) sps_six_minus_max_num_merge_cand(e.g., merge limit)
[1495] z) sps_affine_type_flag (e.g., restrictions on affine types such as 4-parameter / 6-parameter models)
[1496] aa) sps_affine_amvr_enabled_flag(e.g., restriction on relationship with AMVR)
[1497] bb) sps_prof_control_present_in_ph_flag(e.g., restriction on PROF control in phs other than SPS)
[1498] cc) sps_log2_parallel_merge_level_minus2(e.g., limit for MER)
[1499] dd) sps_chroma_horizontal_collocated_flag(e.g., restrictions on chroma subsampling methods)
[1500] ee) sps_chroma_vertical_collocated_flag(e.g., restrictions on chroma subsampling methods)
[1501] ff) sps_internal_bit_depth_minus_input_bit_depth(e.g., internal bit depth growth limit)
[1502] gg) sps_scaling_matrix_for_lfnst_disabled_flag(e.g., restriction on the scaling matrix of LFNST)
[1503] hh) sps_scaling_matrix_for_alternative_colour_space_disabled_flag(e.g., restriction on the scaling matrix for alternative color space)
[1504] ii) sps_scaling_matrix_designated_colour_space_flag (e.g., scaling matrix restriction for color spaces other than the specified color space)
[1505] jj) sps_general_hrd_params_present_flag(e.g., restrictions on HRD)
[1506] kk) sps_sublayer_cpb_params_present_flag(e.g., restrictions on CPB / HRD)
[1507] ll) sps_vui_parameters_present_flag(e.g., restrictions on VUI)
[1508] v. The names listed above (e.g., X) are examples of specifying syntax elements corresponding to specific coding tools / features / functions within signaling / existing syntax elements in SPS / PPS / PH / SH syntax structures, and the names can be changed as necessary.
[1509] 11. Regarding the incomplete description of the local duplex tree for solving the 11th problem, for a coding tree node, the variable named ModeType depends on the decoded information (e.g., modeTypeCondition in VVC and / or mode_constraint_flag / non_inter_flagIt can be derived (depending on). In addition, the following may apply:
[1510] a. In one example, palette modes (e.g., MODE_PLT and / or pred_mode_plt_flag 1) may be enabled for coding units within a coding tree node when the coding tree node belongs to a specific mode type (e.g., MODE_TYPE_INTRA and / or MODE_TYPE_ALL of the VVC specification).
[1511] i. For example, a specific mode type (e.g., MODE_TYPE_INTRA) may be defined to specify whether only Intra (MODE_INTRA), IBC (MODE_IBC), and Palette (MODE_PLT) coding modes can be used for coding units within a coding tree node.
[1512] ii. For example, a specific mode type (e.g., MODE_TYPE_INTER) may be defined to specify whether only the MODE_INTER coding mode can be used for coding units inside a coding tree node.
[1513] iii. For example, a specific mode type (e.g., MODE_TYPE_ALL) may be defined to specify whether all intra, IBC, palette, and inter coding modes can be used in coding units within a coding tree node.
[1514] b. In one example, palette mode (e.g., MODE_PLT, and / or pred_mode_plt_flag 1) may be enabled only for luminous coding blocks inside a coding tree node when the coding tree node belongs to a specific mode type (e.g., MODE_TYPE_INTRA and / or MODE_TYPE_ALL).
[1515] c. For example, when there are no coding mode restrictions applied to a coding tree node (e.g., the mode type of this coding tree node is the same as MODE_TYPE_ALL), one of the following modes may be used for the coding unit inside the coding tree node.
[1516] i. Intra mode (e.g., prediction mode equivalent to MODE_INTRA)
[1517] ii. IBC mode (e.g., prediction mode identical to MODE_IBC)
[1518] iii. Palette mode (e.g., prediction mode identical to MODE_PLT and / or pred_mode_plt_flag identical to 1)
[1519] iv. Inter mode (e.g., prediction mode identical to MODE_INTER)
[1520] d. In one example, when a local duplex tree is applied to a coding tree node (e.g., the mode type of this coding tree node is the same as MODE_TYPE_INTRA), any of the following modes may be used for the coding unit inside the coding tree node.
[1521] i. Intra mode (e.g., prediction mode equivalent to MODE_INTRA)
[1522] ii. IBC mode (e.g., prediction mode identical to MODE_IBC)
[1523] iii. Palette mode (e.g., prediction mode identical to MODE_PLT and / or pred_mode_plt_flag identical to 1)
[1524] e. In one example, when a local duplex tree is applied to a coding unit inside a coding tree node (e.g., the mode type of this coding tree node is the same as MODE_TYPE_INTRA), the luma block inside this coding tree node can be coded in intra and / or IBC and / or pallet mode.
[1525] i. Additionally, the chroma blocks inside this coding tree node are coded in intra mode (MODE_INTRA).
[1526] ii. For example, all luma blocks inside this coding tree node can be coded in intra mode (MODE_INTRA).
[1527] iii. For example, all luma blocks inside this coding tree node can be coded in IBC mode (MODE_IBC).
[1528] iv. For example, all luma blocks within this coding tree node can be coded in palette mode (MODE_PLT).
[1529] v. For example, a luma block inside this coding tree node can be mixed with any luma block coded in one of Intra mode (MODE_INTRA), IBC mode (MODE_IBC), and Palette mode (MODE_PLT).
[1530] vi. For example, the Inter mode (MODE_INTER) is not allowed to be used in coding units within a local double-tree coding tree node (i.e., a coding tree node having the same mode type as MODE_TYPE_INTRA).
[1531] f. Alternatively, an indication of whether a palette mode is applied to a CU inside a coding tree node that has a mode type of a specific value (e.g., MODE_TYPE_INTRA and / or MODE_TYPE_ALL) may also be additionally signaled.
[1532] g. In one example, the partition availability check text for JVET-R2001-vA is changed as follows (the added content is Bold italics (Highlighted as text).
[1533] 6.4 Availability Process
[1534] 6.4.1 Allowed Quad Split Processes
[1535] The input for this process is as follows:
[1536] - Coding block size cbSize of Luma sample,
[1537] - Multi-type tree depth mttDepth,
[1538] - A variable treeType that specifies whether a single tree (SINGLE_TREE) or dual tree is used to partition coding tree nodes, and if a dual tree is used, whether the Luma (DUAL_TREE_LUMA) or Chroma component (DUAL_TREE_CHROMA) is currently being processed.
[1539] - Intra(MODE_INTRA), IBC(MODE_IBC), Palette(MODE_PLT) A variable modeType that specifies whether inter coding modes can be used (MODE_TYPE_ALL), or only intra [[and]], IBC, and palette coding modes can be used (MODE_TYPE_INTRA), or only inter coding modes can be used for coding units inside coding tree nodes (MODE_TYPE_INTER).
[1540] . . .
[1541] 6.4.2 Allowed binary split process
[1542] The input for this process is as follows:
[1543] - . . .
[1544] - A variable treeType that specifies whether a single tree (SINGLE_TREE) or dual tree is used to partition coding tree nodes, and if a dual tree is used, whether the Luma (DUAL_TREE_LUMA) or Chroma component (DUAL_TREE_CHROMA) is currently being processed.
[1545] - Intra(MODE_INTRA), IBC(MODE_IBC), Palette(MODE_PLT) A variable modeType that specifies whether inter coding modes can be used (MODE_TYPE_ALL), or only intra [[and]], IBC, and palette coding modes can be used (MODE_TYPE_INTRA), or only inter coding modes can be used for coding units inside coding tree nodes (MODE_TYPE_INTER).
[1546] ...
[1547] 6.4.3 Allowed Three-Part Division Process
[1548] The input for this process is as follows:
[1549] - . . .
[1550] - A variable treeType that specifies whether a single tree (SINGLE_TREE) or dual tree is used to partition coding tree nodes, and if a dual tree is used, whether the Luma (DUAL_TREE_LUMA) or Chroma component (DUAL_TREE_CHROMA) is currently being processed.
[1551] - Intra(MODE_INTRA), IBC(MODE_IBC), Palette(MODE_PLT) A variable modeType that specifies whether inter coding modes can be used (MODE_TYPE_ALL), or only intra [[and]], IBC, and palette coding modes can be used (MODE_TYPE_INTRA), or only inter coding modes can be used for coding units inside coding tree nodes (MODE_TYPE_INTER).
[1552] . . .
[1553] 12. The syntax element can be signaled when modeTypeCondition (e.g., defined in VVC) is equal to 1, and the syntax element is used to specify whether one of the three prediction modes (e.g., MODE_INTRA, MODE_IBC, MODE_PALETTE) is allowed for all CUs within the coding tree node.
[1554] a. In one example, the syntax element is a flag (e.g., mode_constraint_flag or is indicated as non_inter_flag or inter_mode_only_flag).
[1555] b. In one example, the semantics of a syntax element can be defined as follows:
[1556] Equivalent to 0 non_inter_flag _inter_flag specifies that coding units within the current coding tree node can only use inter-predictive coding mode. The non_inter_flag, which is equivalent to 1, specifies that coding units within the current coding tree node can use intra, IBC, or pallet-predictive coding mode.
[1557] or
[1558] Same as 1 inter_mode_only_flagSpecifies that coding units within the current coding tree node can only use inter-predictive coding mode. An inter_mode_only_flag equal to 0 specifies that coding units within the current coding tree node can use intra, IBC, or pallet-predictive coding mode.
[1559] c. Alternatively, the prediction mode to be used in the CU may also rely more on other syntax elements / decoded information in addition to the syntax elements above.
[1560] FIG. 1 is a block diagram illustrating an exemplary video processing system (1900) in which the various technologies disclosed herein may be implemented. Various implementations may include some or all of the components of the system (1900). The system (1900) may include an input (1902) for receiving video content. The video content may be received in a raw or uncompressed format, for example, as 8 or 10-bit multi-component pixel values, or in a compressed or encoded format. The input (1902) may represent a network interface, a peripheral bus interface, or a storage interface. Examples of network interfaces include wired interfaces such as Ethernet and Passive Optical Network (PON), and wireless interfaces such as Wi-Fi or cellular interfaces.
[1561] The system (1900) may include a coding component (1904) capable of implementing various coding or encoding methods described in this document. The coding component (1904) may reduce the average bitrate of the video from the input (1902) to the output of the coding component (1904) to generate a coded representation of the video. Thus, coding technology is also referred to as video compression or video transcoding technology. The output of the coding component (1904) may be stored or transmitted via connected communication, as represented by the component (1906). The stored or transmitted bitstream (or coded) representation of the video received at the input (1902) may be used by the component (1908) to generate pixel values or a displayable video transmitted to the display interface (1910). The process of generating a video viewable by a user from the bitstream representation is also referred to as video decompression. In addition, while specific video processing operations are referred to as "coding" operations or tools, you will understand that coding tools or operations are used in the encoder, and the corresponding decoding tools or operations that return the coding results are performed by the decoder.
[1562] Examples of peripheral bus interfaces or display interfaces may include Universal Serial Bus (USB), High Definition Multimedia Interface (HDMI), or DisplayPort. Examples of storage interfaces include SATA (Serial Advanced Technology Attachment), PCI, and IDE interfaces. The technology described in this document may be implemented in various electronic devices, such as mobile phones, laptops, smartphones, or other devices capable of performing digital data processing and / or video display.
[1563] FIG. 2 is a block diagram of a video processing apparatus (3600). The apparatus (3600) may be used to implement one or more of the methods described herein. The apparatus (3600) may be implemented as a smartphone, tablet, computer, Internet of Things (IoT) receiver, etc. The apparatus (3600) may include one or more processors (3602), one or more memories (3604), and video processing hardware (3606). The processor(s) (3602) may be configured to implement one or more of the methods described herein. The memory (memories) (3604) may be used to store data and code used to implement the methods and techniques described herein. The video processing hardware (3606) may be used to implement some of the techniques described herein in hardware circuitry.
[1564] FIG. 4 is a block diagram illustrating an example video coding system (100) that can utilize the technology of the present disclosure.
[1565] As illustrated in FIG. 4, a video coding system (100) may include a source device (110) and a destination device (120). The source device (110) generates encoded video data and may be referred to as a video encoding device. The destination device (120) can decode the encoded video data generated by the source device (110) and may be referred to as a video decoding device.
[1566] The source device (110) may include a video source (112), a video encoder (114), and an input / output (I / O) interface (116).
[1567] The video source (112) may include a video capture device, an interface for receiving video data from a video content provider, a computer graphics system for generating video data, or a combination of such sources. The video data may include one or more pictures. A video encoder (114) encodes the video data of the video source (112) to generate a bitstream. The bitstream may include a sequence of bits that form a coded representation of the video data. The bitstream may include a coded picture and associated data. The coded picture is a coded representation of the picture. The associated data may include a sequence parameter set, a picture parameter set, and other syntax structures. The I / O interface (116) may include a modulator / demodulator (modem) and / or a transmitter. The encoded video data may be transmitted directly to a destination device (120) via the I / O interface (116) through a network (130a). The encoded video data may also be stored in a storage medium / server (130b) for access by the destination device (120).
[1568] The target device (120) may include an I / O interface (126), a video decoder (124), and a display device (122).
[1569] The I / O interface (126) may include a receiver and / or a modem. The I / O interface (126) may obtain encoded video data from a source device (110) or a storage medium / server (130b). A video decoder (124) may decode the encoded video data. A display device (122) may display the decoded video data to a user. The display device (122) may be integrated with the destination device (120) or may be located outside the destination device (120) configured to interface with an external display device.
[1570] The video encoder (114) and video decoder (124) can operate according to the same video compression standards as the High Efficiency Video Coding (HEVC) standard, the Multipurpose Video Coding (VVC) standard, and other current and / or additional standards.
[1571] FIG. 5 is a block diagram illustrating an example of a video encoder (200) that may be the video encoder (114) of the system (100) exemplified in FIG. 4.
[1572] A video encoder (200) may be configured to perform any or all of the techniques of the present disclosure. In the example of FIG. 5, the video encoder (200) includes a plurality of functional components. The techniques described in the present disclosure may be shared among the various components of the video encoder (200). In some examples, a processor may be configured to perform any or all of the techniques described in the present disclosure.
[1573] The functional components of the video encoder (200) may include a partition unit (201), a mode select unit (203), a motion estimation unit (204), a motion compensation unit (205), and an intra prediction unit (206), a prediction unit (202), a residual generation unit (207), a transform unit (208), a quantization unit (209), an inverse quantization unit (210), an inverse transform unit (211), a reconstruction unit (212), a buffer (213), and an entropy encoding unit (214).
[1574] In another example, the video encoder (200) may include more or fewer or different functional components. For example, the prediction unit (202) may include an intra-block copy (IBC) unit. The IBC unit may perform prediction in an IBC mode where at least one reference picture is the picture containing the current video block.
[1575] Furthermore, some components such as the motion estimation unit (204) and the motion correction unit (205) can be highly integrated, but in the example of FIG. 5, they are depicted as separated for the purpose of explanation.
[1576] The partition unit (201) can partition a picture into one or more video blocks. The video encoder (200) and video decoder (300) can support various video block sizes.
[1577] The mode selection unit (203) selects a coding mode, e.g., intra or inter, based on the error result, provides the resulting intra or inter coded block to the residual generation unit (207) to generate residual block data, and provides it to the reconstruction unit (212) to reconstruct the coded block for use as a reference ...
Claims
Claim 1 A method for processing video data comprises the step of performing a conversion between a video containing a video block and a bitstream of said video according to a rule, wherein the video block is a coding tree node containing one or more coding blocks, and the rule is such that when a local duplex tree is applied to the one or more coding blocks within the coding tree node, one or more coding modes among an intra-predictive coding mode, an intra-block copy (IBC) mode, and a palette coding mode are allowed to be used by one or more chroma blocks of the one or more coding blocks, and said intra-predictive coding mode is applied to one or more chroma blocks of the one or more coding blocks; and specifies that the inter predictive coding mode is not allowed for one or more coding blocks of the coding tree node to which the local double tree is applied, and the rule specifies that the existence of a first syntax element is at least based on the value of a variable named mode type being MODE_TYPE_INTRA or MODE_TYPE_ALL, and that if the value of the variable named mode type is MODE_TYPE_INTER, the first syntax element does not exist - the first syntax element indicates whether the palette coding mode is enabled for one or more coding blocks -, the rule further specifies that a third syntax element of a general constraint information syntax structure controls the value of a fourth syntax element of a sequence parameter set - the fourth syntax element indicates whether subpicture information exists in the coded hierarchical video sequence and whether one or more subpictures are included in each picture of the coded hierarchical video sequence -.and the above rule specifies that one or more coding modes among the intra-predictive coding mode, the IBC mode, and the palette coding mode are allowed to be applied to a plurality of luma blocks - the one or more coding modes include two or more of the intra-predictive coding mode, the IBC mode, and the palette coding mode -, method. Claim 2 A method according to claim 1, wherein MODE_TYPE_INTER specifies that only the inter predictive coding mode may be used for the coding block, MODE_TYPE_INTRA specifies that only the intra predictive coding mode, the IBC mode, and the palette coding mode are allowed to be used for the coding block, and MODE_TYPE_ALL specifies that the inter predictive coding mode, the intra predictive coding mode, the IBC mode, and the palette coding mode are allowed to be used for the coding block. Claim 3 A method according to claim 1, wherein the variable named as the mode type is based on a variable named modeTypeCondition and a second syntax element non_inter_flag indicating whether only the inter-predicted coding mode is allowed. Claim 4 In claim 1, MODE_TYPE_INTER, MODE_TYPE_INTRA, and MODE_TYPE_ALL are also used in a partitioning process, and the partitioning process comprises at least one of a quad partitioning process, a binary partitioning process, or a ternary partitioning process. Claim 5 A method according to claim 1, wherein the rule specifies that the value of the fifth syntax element of the general constraint information syntax structure is equal to 1 and the value of the sixth syntax element of the sequence parameter set is limited to 0, and the sixth syntax element indicates whether the maximum transformation size of the luma sample is equal to 64. Claim 6 A method according to claim 1, wherein the step of performing the conversion includes the step of encoding the video into the bitstream. Claim 7 A method according to claim 1, wherein the step of performing the conversion includes the step of decoding the video from the bitstream. Claim 8 In an apparatus for processing video data, the apparatus comprises a processor and a non-transient memory having instructions, wherein the instructions, when executed by the processor, cause the processor to perform a conversion between a video containing a video block and a bitstream of the video according to a rule, wherein the video block is a coding tree node containing one or more coding blocks, and the rule allows one or more coding modes among an intra-predictive coding mode, an intra-block copy (IBC) mode, and a palette coding mode to be used by one or more chroma blocks of one or more coding blocks when a local duplex tree is applied to one or more coding blocks within the coding tree node, and wherein the intra-predictive coding mode is applied to one or more chroma blocks of one or more coding blocks. and specifies that the inter predictive coding mode is not allowed for one or more coding blocks of the coding tree node to which the local double tree is applied, and the rule specifies that the existence of a first syntax element is at least based on the value of a variable named mode type being MODE_TYPE_INTRA or MODE_TYPE_ALL, and that if the value of the variable named mode type is MODE_TYPE_INTER, the first syntax element does not exist - the first syntax element indicates whether the palette coding mode is enabled for one or more coding blocks -, the rule further specifies that a third syntax element of a general constraint information syntax structure controls the value of a fourth syntax element of a sequence parameter set - the fourth syntax element indicates whether subpicture information exists in the coded hierarchical video sequence and whether one or more subpictures are included in each picture of the coded hierarchical video sequence -.and the above rule specifies that one or more coding modes among the intra-predictive coding mode, the IBC mode, and the palette coding mode are allowed to be applied to a plurality of luma blocks - the one or more coding modes include two or more of the intra-predictive coding mode, the IBC mode, and the palette coding mode -, device. Claim 9 In a non-transient computer-readable storage medium for storing instructions, said instructions cause a processor to perform a conversion between a video containing a video block and a bitstream of said video according to a rule, said video block is a coding tree node containing one or more coding blocks, said rule is such that when a local duplex tree is applied to the one or more coding blocks within the coding tree node, one or more coding modes among an intra-predictive coding mode, an intra-block copy (IBC) mode, and a palette coding mode are allowed to be used by one or more chroma blocks of the one or more coding blocks, and said intra-predictive coding mode is applied to one or more chroma blocks of the one or more coding blocks; and specifies that the inter predictive coding mode is not allowed for one or more coding blocks of the coding tree node to which the local double tree is applied, and the rule specifies that the existence of a first syntax element is at least based on the value of a variable named mode type being MODE_TYPE_INTRA or MODE_TYPE_ALL, and that if the value of the variable named mode type is MODE_TYPE_INTER, the first syntax element does not exist - the first syntax element indicates whether the palette coding mode is enabled for one or more coding blocks -, the rule further specifies that a third syntax element of a general constraint information syntax structure controls the value of a fourth syntax element of a sequence parameter set - the fourth syntax element indicates whether subpicture information exists in the coded hierarchical video sequence and whether one or more subpictures are included in each picture of the coded hierarchical video sequence -.and the above rule specifies that one or more coding modes among the intra-predictive coding mode, the IBC mode, and the palette coding mode are allowed to be applied to a plurality of luma blocks - the one or more coding modes include two or more of the intra-predictive coding mode, the IBC mode, and the palette coding mode -, a non-transient computer-readable storage medium. Claim 10 A non-transient computer-readable recording medium storing a bitstream of a video generated by a method performed by a video processing device, wherein the method comprises the step of generating a bitstream of the video including a video block according to a rule, wherein the video block is a coding tree node including one or more coding blocks, and the rule is such that when a local duplex tree is applied to one or more coding blocks within the coding tree node, one or more coding modes among an intra-predictive coding mode, an intra-block copy (IBC) mode, and a palette coding mode are allowed to be used by one or more chroma blocks of one or more coding blocks, and the intra-predictive coding mode is applied to one or more chroma blocks of one or more coding blocks. and specifies that the inter predictive coding mode is not allowed for one or more coding blocks of the coding tree node to which the local double tree is applied, and the rule specifies that the existence of a first syntax element is at least based on the value of a variable named mode type being MODE_TYPE_INTRA or MODE_TYPE_ALL, and that if the value of the variable named mode type is MODE_TYPE_INTER, the first syntax element does not exist - the first syntax element indicates whether the palette coding mode is enabled for one or more coding blocks -, the rule further specifies that a third syntax element of a general constraint information syntax structure controls the value of a fourth syntax element of a sequence parameter set - the fourth syntax element indicates whether subpicture information exists in the coded hierarchical video sequence and whether one or more subpictures are included in each picture of the coded hierarchical video sequence -.and the above rule specifies that one or more coding modes among the intra-predictive coding mode, the IBC mode, and the palette coding mode are allowed to be applied to a plurality of luma blocks - the one or more coding modes include two or more of the intra-predictive coding mode, the IBC mode, and the palette coding mode -, a non-transient computer-readable recording medium. Claim 11 delete Claim 12 delete Claim 13 delete Claim 14 delete Claim 15 delete Claim 16 delete Claim 17 delete Claim 18 delete Claim 19 delete Claim 20 delete Claim 21 delete Claim 22 delete Claim 23 delete Claim 24 delete Claim 25 delete Claim 26 delete Claim 27 delete Claim 28 delete Claim 29 delete Claim 30 delete Claim 31 delete Claim 32 delete Claim 33 delete Claim 34 delete Claim 35 delete Claim 36 delete Claim 37 delete Claim 38 delete Claim 39 delete Claim 40 delete Claim 41 delete Claim 42 delete Claim 43 delete Claim 44 delete Claim 45 delete Claim 46 delete Claim 47 delete Claim 48 delete Claim 49 delete Claim 50 delete Claim 51 delete
