Patent ID: 12225210

DETAILED DESCRIPTION

FIG.1illustrates a system100according to an example embodiment. System200includes an encoder202in communication with a decoder204via a network110(e.g., the Internet or other network). Deblocking may be performed in both encoder202and decoder204. The embodiments described herein can be used in video encoder102or video decoder104.

FIG.2is a schematic block diagram of a video encoder102according to one embodiment. A current block of pixels is predicted by performing a motion estimation using motion estimator250from an already provided block of pixels in the same frame or in a previous frame. The result of the motion estimation is a motion or displacement vector associated with the reference block, in the case of inter prediction. The motion vector may be used by motion compensator250to output an inter prediction of the block of pixels. Intra predictor249computes an intra prediction of the current block of pixels. The outputs from the motion estimator/compensator250and the intra predictor249are input in selector251that either selects intra prediction or inter prediction for the current block of pixels. The output from the selector251is input to an error calculator in the form of adder241that also receives the pixel values of the current block of pixels. Adder241calculates and outputs a residual error as the difference in pixel values between the block of pixels and its prediction. The error is transformed in transformer242, such as by a discrete cosine transform, and quantized by quantizer243followed by coding in encoder244, such as by entropy encoder. In inter coding, also the estimated motion vector is brought to encoder244to generate the coded representation of the current block of pixels. The transformed and quantized residual error for the current block of pixels is also provided to an inverse quantizer245and inverse transformer246to retrieve the original residual error. This error is added by adder247to the block prediction output from the motion compensator250or intra predictor249to create a reference block of pixels that can be used in the prediction and coding of a next block of pixels. This new reference block is first processed by a deblocking filter200. The processed new reference block is then temporarily stored in frame buffer248, where it is available to intra predictor249and motion estimator/compensator250.

FIG.3is a block diagram of a video decoder104according to some embodiments. Decoder104includes a decoder361, such as entropy decoder, to decode an encoded representation of a block of pixels to get a set of quantized and transformed residual errors. These residual errors are dequantized by inverse quantizer362and inverse transformed by inverse transformer363to provide a set of residual errors. These residual errors are added by ladder364to the pixel values of a reference block of pixels. The reference block is determined by a motion estimator/compensator367or intra predictor366, depending on whether inter or intra prediction is performed. Selector368is thereby interconnected to adder364and motion estimator/compensator367and intra predictor366. The resulting decoded block of pixels output form adder364is input to deblocking filter300. The filtered block of pixels is output from decoder104and may be furthermore temporarily provided to frame buffer365to be used as a reference block of pixels for a subsequent block of pixels to be decoded. Frame buffer365is thereby connected to motion estimator/compensator367to make the stored blocks of pixels available to motion estimator/compensator367. The output from adder364also be input to intra predictor366to be used as an unfiltered reference block of pixels.

FIG.4illustrates an example video bitstream400. The bitstream400includes a CVS401, which comprises a parameter set (PS)410(e.g., a non-VCL NAL unit that contains a parameter set) and a number of segments (e.g., a number of VCL NAL units that contain a VVC slice). Segments412aand412bare shown. A segment is a unit of data that comprises segment data (SD), which comprises sample data. A segment may have a segment header (SH) in addition to the segment data (SD). A VVC slice and an HEVC slice are examples of a segment. A segment can also be a picture, a tile group or some other entity that comprises a full picture or a part of a picture. In this example, each segment includes a segment header in addition to the segment data.

A case of hierarchical partitioning is illustrated inFIG.5where a picture502is partitioned into large grain partition blocks (e.g., a VVC subpicture) shown with thick lines (e.g. block511) and the thin dotted lines show small grain partition blocks (e.g., VVC slices) inside the large grain partition blocks (see e.g., block512, which is spatially located in block511). In some embodiments, in case of such a hierarchical partitioning, at least two values are signaled in a header or parameter set of a small grain partition block (e.g., block512): i) one value specifying which large grain partition block the small grain partition is spatially located in (e.g., block511) and ii) one value to provide the address of the small grain partition block relative to the position of the large grain partition block. A VVC slice is an example of a small grain partition block and a VVC subpicture is an example of a large grain partition blocks.

It is to be understood by a person skilled in the art that the embodiments below may be combined to form solutions that are not explicitly defined, but still covered by this disclosure. Also, the embodiments described below may be described in terms of slices (e.g., small grain partition blocks) and subpictures (e.g., large grain partition blocks). That is, the terms slice and subpicture are used interchangeably with small grain partition block and large grain partition block, respectively. Also, although the embodiments are described with respect to slices, the invention is not limited to slices and is intended to cover other segments.

1. Two Values Signaled for Slice Address in the Slice Header

In a first embodiment, two values are signaled in a header or parameter set of a slice: i) a first value, e.g. an ID, that indicates the large grain partition block in which the small grain partition block is spatially located and ii) a second value that indicates the positioning of the small grain partition block relative to the position of the large grain partition block. As an example for this embodiment, two values are signaled in the slice header that together form the slice address: i) a first value for the subpicture ID, which indicates the subpicture to which the slice belongs (i.e., the subpicture in which the slice is located) and ii) one value for a local slice address, which indicates the spatial positioning of the slice relative to the subpicture position to which the slice belongs. Following is exemplary syntax and semantics for a slice header (note that all exemplary syntax and semantics are given as text on top of the current version of the VVC draft specification):

TABLE 6Descriptorslice_header( ) {slice_pic_parameter_set_idue(v)if( rect_slice_flag | | NumBricksInPic > 1 ) {if (subpics_present_flag)subpic_idu(v)local_slice_addressu(v)}...}

The subpic_id codword (a.k.a., syntax element) specifies the ID of the subpicture to which the slice belongs. The subpic_id codeword is in the table conditioned on subpics_present_flag, which is true (equal to 1) when there are subpictures in the picture and false (equal to 0) when there are no subpictures. If subpic_id is false, the local slice address codeword specifies the spatial positioning of the slice relative to the picture rather than the subpicture. Note that other conditions on the presence of subpic_id are possible and that there may be no condition, meaning that subpic_is always present when local slice address is present. When not present, the value of subpic_id is inferred to be equal to 0. The length of the syntax element is Ceil(Log 2(N)) bits. Note that in the current version of VVC 8 bits are used in SPS to signal max_subpics_minus_1 which may be in the range 0 to 254. N could then for example be 254.

The local_slice_address codeword specifies the slice address of the slice in the subpicture identified by subpic_id. When not present, the value of local slice address is inferred to be equal to 0. The length of the syntax element is Ceil(Log 2(max_num_slices_in_picture_minus1+1)) bits, where max_num_slices_in_picture_minus1+1 is the maximum number of slices allowed by the profile, tier, or level definition in use.

An alternative semantics for local_slice_address looks as follows:

The local_slice_address codeword specifies the address of the slice. When not present, the value of local_slice_address is inferred to be equal to 0. If subpictures are not enabled (subpics_present_flag is equal to 0), the following applies: 1) the slice address is the brick ID; 2) the length of slice_address is Ceil(Log 2 (NumBricksInPic)) bits; and 3) the value of slice_address shall be in the range of 0 to NumBricksInPic−1, inclusive. Otherwise, if subpictures are enabled (subpics_present_flag is equal to 1), the following applies: 1) the slice address is the slice address of the slice in the subpicture with subpic_id; and 2) the length of slice_address is equal to signalled_slice_id_length_minus1+1 bits.

A decoder may perform the following steps for this embodiment to decode one or more pictures from a bitstream, where the bitstream comprises at least two slices:

1) Determine from one or more syntax elements in the bitstream whether the partition structure has more than one level of hierarchy.

2) For a slice in the case there is more than one level of hierarchy do the following: 2a) decode a first value from a codeword in a slice header for the slice where the first value represents a first part of an address; 2b) decode a second value from a codeword in the slice header, where the second value represents a second part of an address; 2c) derive a slice address from the first and second value, locating the slice within a picture; and 2d) Use the slice address to decode the slice.

In another version two sets of values are signaled in a header or parameter set of a slice where each set may include one or more values and the one or more values in one of the sets collectively indicate the positioning of the slice relative to the position of a subpicture and the one or more values in another set collectively indicate the slice is spatially located in which subpicture. As an example for this version, two value sets are signaled in the slice header for the slice address, one value set includes one value for a subpicture ID which indicates which subpicture the slice belongs to, and one value set that includes two values Xsand Ysthat collectively indicate the spatial positioning of the slice relative to the subpicture position that the slice belongs to.

2—Using Indirection

In another embodiment, two values are signaled in a header or parameter set of a small grain partition block: i) one value indicates the large grain partition block in which the small grain partition block is spatially located and ii) the other value indicates the positioning of the small grain partition block relative to the position of the large grain partition block, and at least one of the two values use indirection mechanism—e.g. using an index mapping list or an address mapping list which may be signaled in a parameter set in the bitstream—e.g. a PPS or a SPS to specify the targeted values. Preferably, in this embodiment, the large grain partition block is the one using the indirection mechanism.

For example, assume that a picture is split into four spatial quadrants where each quadrant is a subpicture. Assume further that each of the four subpictures consist of only one slice each. In this example, all second values (e.g. the local slice address values) may be equal to 0 to indicate that the position of the slices is equal to the position of the subpicture. The first ID values (e.g. the subpic_id values) may be equal to 0, 1, 2, 3 respectively to indicate the subpictures to which each slice belong. Now, consider that subpictures 2 and 3 are extracted from the bitstream and a new bitstream consisting of those two subpictures are created. To support such an operation, the e.g. PPS may contain an indirection or an index mapping in which ID values 2 and 3 are mapped to 0 and 1 respectively. A decoder decoding the new bitstream may first decode that there are two subpictures in the new bitstream and therefore assign final subpicture ID 0 and 1 to them. Then the decoder will decode information in the PPS to create the index mapping. After that, the decoder may decode a slice with an ID value of 2. Using the index mapping, a final subpicture ID value equal to 0 is derived. Similarly, for slices with ID value of 3, the final subpicture ID value is derived as equal to 1. By this indirection or index mapping mechanism, it is possible to extract subpicture data and form a new bitstream without rewriting the slice ID values in each slice, but instead only create an index mapping once.

3—Signaling Addresses for More Than One Level Partitioning Hierarchy

In another embodiment, more than two level partitioning hierarchy exists—e.g. a three level partitioning hierarchy with small, medium and large grain partition blocks, and at least three values are signaled in a header or parameter set of a small grain partition block: i) a first value—e.g. an ID—that indicates the medium grain partition block in which the small grain partition block is spatially located, ii) a second value that indicates the positioning of the small grain partition block relative to the position of the medium grain partition block, and iii) a third value that indicates the large grain partition block in which the small grain partition block is spatially located. In some embodiments the header also includes a fourth value that indicates the positioning of the small grain partition block relative to the position of the large grain partition block. In this embodiment the spatial location of the medium grain partition block relative to the large grain block partition is derived from the differences of the spatial position of the small grain partition block relative to the medium and large grain partition blocks.

4—Signaling of Number of Local Slices in Subpicture

In another embodiment, which may be based on any of the previous embodiments the number of slices in the current subpicture is known when decoding a slice. This information may be signaled with e.g. a num_slices_in_subpic or num_slices_in_subpic_minus1 codeword, directly in the slice header or in a parameter set for each subpicture. The example below describes syntax and semantics on top of the current version of VVC, for signaling num_slices_in_subpic_minus1 in the slice header:

Descriptorslice_header( ) {slice_pic_parameter_set_idue(v)if( rect_slice_flag | | NumBricksInPic > 1 ) {subpic_idu(v)num_slices_in_subpic_minus1ue(v)local_slice_addressu(v)}...}

The subpic_id codeword specifies the ID of the subpicture that slice belongs to. When not present, the value of subpic_id is inferred to be equal to 0. The length of the syntax element is Ceil(Log 2(N)) bits. Note that in the current version of VVC 8 bits are used in SPS to signal max_subpics_minus_1 which may be in the range 0 to 254. N could then for example be 254.

The num_slices_in_subpic_minus1 codeword indicates the number of slices that are present in the current subpicture (i.e., num_slices_in_subpic_minus1 plus 1). When not present, the value of num_slices_in_subpic_minus1 is inferred to be equal to 0.

The local_slice_address codeword specifies the slice address of the slice in the subpicture with subpic_id. When not present, the value of local_slice_address is inferred to be equal to 0. The length of the syntax element is Ceil(Log 2(num_slices_in_subpic_minus1+1)) bits.

The example below describes syntax and semantics on top of the current version of VVC, for signaling num_slices_in_subpic_minus1[i] for each subpicture in the SPS:

TABLE 8Descriptorseq_parameter_set_rbsp( ) {...subpics_present_flagu(1)if( subpics_present_flag ) {max_subpics_minus1u(8)...for( i = 0; i <= NumSubPics; i++ ) {subpic_treated_as_pic_flag[ i ]u(1)loop_filter_across_subpic_enabled_flag[ i ]u(1)num_slices_in_subpic_minus1[ i ]u(v)}}}

The value of max_subpics_minus1 plus 1 specifies the maximum number of subpictures that may be present in the CVS. max_subpics_minus1 shall be in the range of 0 to 254. The value of 255 is reserved for future use by ITU-T|ISO/IEC.

The value of num_slices_in_subpic_minus1[i] plus 1 specifies the number of slices that are present in the i-th subpicture. When not present, the value of num_slices_in_subpic_minus1[i] is inferred to be equal to 0.

Embodiment 5—Using Max_Subpic_Minus1 when Deriving Subpic_Id

In another embodiment, which may be based on the first embodiment, the max_subpics_minus1 codeword signaled in SPS in the current version of VVC is used for deriving the number of bits used for the subpic_id. The semantics for the subpic_id in the slice header could then be: subpic_id specifies the ID of the subpicture to which the slice belongs. When not present, the value of subpic_id is inferred to be equal to 0. The length of the syntax element is Ceil(Log 2(max_subpics_minus1+1)) bits.

6—Signaling One Slice Per Subpicture

In one embodiment a flag single slice_in_subpicture_flag is present in a parameter set, preferably the SPS or DPS. When this flag has one value, there shall be no subpicture that consist of more than one slice. When this flag has another value, there may be multiple slice in a subpicture.

The presence of the slice_address code word may be conditioned on this flag such that the slice_address code word is not parsed when the flag indicates that there is one slice in each subpicture.

TABLE 9Descriptorseq_parameter_set_rbsp( ) {...subpics_present_flagu(1)if( subpics_present_flag ) {max_subpics_minus1u(8)single_slice_in_subpicture_flagu(1)...}}

When the value of single_slice_in_subpicture_flag equals 1, this specifies that there is only one slice in each subpicture in the CVS referring to the SPS. When the value of single_tile_in_pic_flag is equal to 0 this specifies that there may be more than one slice in a subpicture in the CVS referring to the SPS. When single_slice_in_subpicture_flag is not present, it is inferred to be equal to 0.

TABLE 10Descriptorpic_parameter_set_rbsp( ) {...if(subpics_present_flag ) {signalled_slice_id_flagu(1)if( signalled_slice_id_flag ) {signalled_slice_id_length_minus1ue(v)for( i = 0; i <= num_slices_in_pic_minus1; i++ )slice_id[ i ]u(v)}}

signalled_slice_id_length_minus1 plus 1 specifies the number of bits used to represent the syntax element slice_id[i] when present, and the syntax element slice_address in slice headers. The value of signalled_slice_id_length_minus1 shall be in the range of 0 to 15, inclusive. When not present, the value of signalled_slice_id_length_minus1 is inferred to be equal to Ceil(Log 2(Max(2, num_slices_in_pic_minus1+1)))−1.

TABLE 11Descriptorslice_header( ) {slice_pic_parameter_set_idue(v)if(subpics_present_flag )subpic_idu(v)if (!single_slice_in_subpicture_flag ||NumBricksInPic > 1 )slice_addressu(v)...}

subpic_id specifies the ID of the subpicture to which the slice belongs. When not present, the value of subpic_id is inferred to be equal to 0. The length of the syntax element is Ceil(Log 2(max_subpics_minus1+1)) bits.

slice_address specifies the address of the slice. When not present, the value of slice_address is inferred to be equal to 0.

If subpictures are not enabled (subpics_present_flag is equal to 0), the following applies: 1) the slice address is the brick ID; 2) the length of slice_address is Ceil(Log 2 (NumBricksInPic)) bits; and 3) the value of slice_address shall be in the range of 0 to NumBricksInPic−1, inclusive.

Otherwise, if subpictures are enabled (subpics_present_flag is equal to 1), the following applies: 1) the slice address is the slice address of the slice within the subpicture with subpicture ID equal to subpic_id; and 2) the length of slice_address is signalled_slice_id_length_minus1+1 bits.

Alternatively, the maximum number of slices per subpicture, max_number_of_slices_per_subpic_minus1, codeword may be signaled in a parameter set. In this case, the slice_address codeword is not parsed by the decoder but inferred to be equal to 0 if max_number_of_slices_per_subpic_minus1 is equal to 0. The number of bits to use for slice_address in case max_number_of_slices_per_subpic_minus1 is larger than 0 might be set equal to Ceil(Log 2(max_number_of_slices_per_subpic_minus1+1)) bits.

FIG.8is a block diagram of an apparatus800, according to some embodiments, for implementing the video encoder102or the video decoder104. That is, apparatus800is operative to perform process600and/or process700. In embodiments where apparatus800implements video encoder102, apparatus800may be referred to as “encoding apparatus800,” and in embodiments where apparatus800implements video decoder104, apparatus800may be referred to as a “decoding apparatus800.” As shown inFIG.8, apparatus800may comprise: processing circuitry (PC)802, which may include one or more processors (P)855(e.g., a general purpose microprocessor and/or one or more other processors, such as an application specific integrated circuit (ASIC), field-programmable gate arrays (FPGAs), and the like), which processors may be co-located in a single housing or in a single data center or may be geographically distributed (i.e., apparatus800may be a distributed computing apparatus); a network interface848comprising a transmitter (Tx)845and a receiver (Rx)847for enabling apparatus800to transmit data to and receive data from other nodes connected to a network110(e.g., an Internet Protocol (IP) network) to which network interface848is connected (directly or indirectly) (e.g., network interface848may be wirelessly connected to the network110, in which case network interface848is connected to an antenna arrangement); and a local storage unit (a.k.a., “data storage system”)808, which may include one or more non-volatile storage devices and/or one or more volatile storage devices. In embodiments where PC802includes a programmable processor, a computer program product (CPP)841may be provided. CPP841includes a computer readable medium (CRM)842storing a computer program (CP)843comprising computer readable instructions (CRI)844. CRM842may be a non-transitory computer readable medium, such as, magnetic media (e.g., a hard disk), optical media, memory devices (e.g., random access memory, flash memory), and the like. In some embodiments, the CRI844of computer program843is configured such that when executed by PC802, the CRI causes apparatus800to perform steps described herein (e.g., steps described herein with reference to the flow charts). In other embodiments, apparatus800may be configured to perform steps described herein without the need for code. That is, for example, PC802may consist merely of one or more ASICs. Hence, the features of the embodiments described herein may be implemented in hardware and/or software.

While various embodiments are described herein (including the additional material), it should be understood that they have been presented by way of example only, and not limitation. Thus, the breadth and scope of this disclosure should not be limited by any of the above-described exemplary embodiments. Moreover, any combination of the above-described elements in all possible variations thereof is encompassed by the disclosure unless otherwise indicated herein or otherwise clearly contradicted by context.

Additionally, while the processes described above and illustrated in the drawings are shown as a sequence of steps, this was done solely for the sake of illustration. Accordingly, it is contemplated that some steps may be added, some steps may be omitted, the order of the steps may be re-arranged, and some steps may be performed in parallel.

Abbreviation ExplanationATSCAdvanced Television Systems ComiteeAUAccess UnitAUDAccess Unit DelimiterALFAdaptive Loop FilterAPSAdaptive Parameter SetBLABroken Link AccessCLVSCoded Layer Video SequenceCRAClean Random AccessCVSCoded Video StreamCVSSCVS StartCUCoding UnitDASHDynamic Adaptive Streaming over HTTPDPSDecoding Parameter SetDVBDigital Video BroadcastingDRAPDependent Random Access PointGDRGradual Decoding RefreshHEVCHigh-Efficiency Video CodingIDRInstantaneous Decoding RefreshIRAPIntra Random Access PointISOInternational Standardization OrganizationISOBMFFISO Base Media File FormatFMCSLuma Mapping and Chroma ScalingMPEGMotion Picture Experts GroupMMTMPEG Media TransportNAENetwork Abstraction LayerNALUNAL unitNUTNAL unit typePPSPicture Parameter SetRADLRandom Access Decodable LeadingRAPRandom Access PointRASLRandom Access Skipped LeadingRBSPRaw Byte Sequence PayloadRPLReference Picture ListSEISupplemental Enhancement layerSPSSequence Parameter SetSTSAStep-wise Temporal Layer AccessVCLVideo Coding LayerVPSVideo Parameter SetVVCVersatile Video Coding

Additional Material

The following text is from a contribution that proposes changes to the current version of VVC.

Begin Text

Abstract

This contribution proposes the following changes to the VVC specification related to the slice address signaling in case of subpictures:Firstly, it is proposed to signal a subpicture ID in the slice header to specify which subpicture the current slice belongs to, conditioned on the presence of subpictures in the CVS.Secondly, it is proposed to signal the slice address in the slice header relative to the subpicture position.Thirdly it is proposed to use address indirection for subpicture ID and remove address indirection for slice addresses. For each subpicture the slice addresses are fixed relative to the subpicture and can be reused during sub-bitstream extraction and merge processes.
1. Introduction

In the current VVC specification draft in JVET-O2001-vE, subpictures are supported and targets simplifying the sub-bitstream extraction and merge processes. However, the address signaling mechanisms for subpictures with regards to other defined hierarchical partitions such as picture and slices might require improvements.

In the current VVC specification draft, slice addresses are signaled in the slice header and are used to derive the spatial position of the slice in the picture. However, there are a few issues with the current slice address signaling scheme when subpictures are used and when there is more than one slice in the subpictures:1—The spatial position of the slice in the subpicture cannot be derived directly from the slice_address syntax in the slice header and it requires a multi-steps process:the spatial position of the slice in the picture needs to be derived firstthen in a second step it needs to be derived which subpicture that spatial position in the picture belongs tothen in a third step the spatial position of the slice in that subpicture can be derived.2—From the slice header it cannot be derived which subpicture this slice belongs to. This information would be useful for the sub-bitstream merge and extraction process.3—The fixed relative spatial position of slices in subpicture is not exploited when subpictures are being extracted or merged (as in sub-bitstream extraction and merge).4—The indirection mechanism used for mapping the slice_address to slice_id might be suboptimal for sub-bitstream extraction and merge processes since in case of multiple slices in a subpicture, sub-bitstream extraction using the current VVC design may require several address indirections: one indirection for slice address values in each slice.
2. Proposal

This contribution proposes a solution to solve the above issues and to simplify multi-step process for deriving the relative position of slices in a subpicture. This contribution proposes following changes related to the slice address signaling in case of subpictures:Firstly, it is proposed to signal a subpicture ID in the slice header to specify which subpicture the current slice belongs to, conditioned to the presence of subpictures in the CVS.Secondly, it is proposed to signal the slice address in the slice header relative to the subpicture position.Thirdly it is proposed to use address indirection for subpicture ID and remove address indirection for slice addresses. For each subpicture the slice addresses are fixed relative to the subpicture and can be reused during sub-bitstream extraction and merge processes.

With this proposal, the four previously mentioned issues are solved in the following way:1. The spatial position of the slice in the subpicture is derived directly from the slice header.2. The ID of the subpicture that the slice belongs to is signaled in the slice header.3. The relative spatial position of slices in a subpicture is signaled in the slice header4. The indirection process is done per subpicture (instead of per slice) in the extraction and merge of the subpictures.

Below are the proposed syntax and semantics changes in the slice header on top of JVET-O2001-vE:

Descriptorseq_parameter_set_rbsp( ) {...if( subpics_present_flag ) {max_subpics_minus1u(8)subpic_grid_col_width_minus1u(v)subpic_grid_row_height_minus1u(v)for( i = 0; i < NumSubPicGridRows; i++ )for( j = 0; j < NumSubPicGridCols; j++ )subpic_grid_idx[ i ][ j ]u(v)for( i = 0; i <= NumSubPics; i++ ) {subpic_treated_as_pic_flag[ i ]u(1)loop_filter_across_subpic_enabled_flag[ i ]u(1)}signalled_subpic_id_flagu(1)if( signalled_subpic_id_flag ) {signalled_subpic_id_length_minus1ue(v)for( i = 0; i < NumSubPics; i++ )subpic_id[ i ]U(v)}}...}

max_subpics_minus1 plus 1 specifies the maximum number of subpictures that may be present in the CVS. max_subpics_minus1 shall be in the range of 0 to 254. The value of 255 is reserved for future use by ITU-T|ISO/IEC.

subpic_grid_col_width_minus1 plus 1 specifies the width of each element of the subpicture identifier grid in units of 4 samples. The length of the syntax element is Ceil(Log 2(pic_width_max_in_luma_samples/4)) bits. The variable NumSubPicGridCols is derived as follows:
NumSubPicGridCols=(pic_width_max_in_luma_samples+subpic_grid_col_width_minus1*4+3)/(subpic_grid_col_width_minus1*4+4)  (7-5)

subpic_grid_row_height_minus1 plus 1 specifies the height of each element of the subpicture identifier grid in units of 4 samples. The length of the syntax element is Ceil(Log 2(pic_height_max_in_luma_samples/4)) bits. The variable NumSubPicGridRows is derived as follows:

NumSubPicGridRows = ( pic_height_max_in_luma_samples + subpic_grid_row_height_minus1 * 4 + 3 )/( subpic_grid_row_height_minus1 * 4 + 4 )(7-6)

subpic_grid_idx[i][j] specifies the subpicture index of the grid position (i, j). The length of the syntax element is Ceil(Log 2(max_subpics_minus1+1)) bits.

The variables SubPicTop[subpic_grid_idx[i][j]], SubPicLeft[subpic_grid_idx[i][j]], SubPicWidth[subpic_grid_idx[i][j]], SubPicHeight[subpic_grid_idx[i][j]], and NumSubPics are derived as follows:

NumSubPics = 0for( i = 0; i. < NumSubPicGridRows; i++ ) {for( j = 0; j < NumSubPicGridCols; j++ ) {if ( i = = 0)SubPicTop[ subpic_grid_idx[ i ][ j ] ] = 0else if( subpic_grid_idx[ i ] [ j ] != subpic_grid_idx[ i − 1 ] [ j ]) {SubPicTop[ subpic_grid_idx[ i ][ j ] ] = iSubPicHeight[ subpic_grid_idx[ i − 1 ][ j ] ] = i − SubPicTop[ subpic_grid_idx[ i − 1 ][ j ] ]}if ( j = = 0)SubPicLeft[ subpic_grid_idx[ i ][ j ] ] = 0(7-7)else if (subpic_grid_idx[ i ][ j ] != subpic_grid_idx[ i ][ j − 1 ] ) {SubPicLeft[ subpic_grid_idx[ i ][ j ] ] =jSubPicWidth[ subpic_grid_idx[ i ][ j ] ] = j − SubPicLeft[ subpic_grid_idx[ i ][ j − 1 ] ]}if ( i = = − 1)SubPicHeight[ subpic_grid_idx[ i ][ j ] ] =i − SubPicTop[ subpic_grid_idx[ i − 1 ][ j ] ] + 1if (j = = NumSubPicGridRows − 1)SubPicWidth[ subpic_grid_idx[ i ][ j ] ] = j − SubPicLeft[ subpic_grid_idx[ i ][ j − 1 ] ] + 1if( subpic_grid_idx[ i ] [ j ] > NumSubPics)NumSubPics = subpic_grid_idx[ i ][ j ]}}

subpic_treated_as_pic_flag[i] equal to 1 specifies that the i-th subpicture of each coded picture in the CVS is treated as a picture in the decoding process excluding in-loop filtering operations. subpic_treated_as_pic_flag[i] equal to 0 specifies that the i-th subpicture of each coded picture in the CVS is not treated as a picture in the decoding process excluding in-loop filtering operations. When not present, the value of subpic_treated_as_pic_flag[i] is inferred to be equal to 0.

loop_filter_across_subpic_enabled_flag[i] equal to 1 specifies that in-loop filtering operations may be performed across the boundaries of the i-th subpicture in each coded picture in the CVS. loop_filter_across_subpic_enabled_flag[i] equal to 0 specifies that in-loop filtering operations are not performed across the boundaries of the i-th subpicture in each coded picture in the CVS. When not present, the value of loop_filter_across_subpic_enabled_pic_flag[i] is inferred to be equal to 1.

It is a requirement of bitstream conformance that the following constraints apply:For any two subpictures subpicA and subpicB, when the index of subpicA is less than the index of subpicB, any coded NAL unit of subPicA shall succeed any coded NAL unit of subPicB in decoding order.The shapes of the subpictures shall be such that each subpicture, when decoded, shall have its entire left boundary and entire top boundary consisting of picture boundaries or consisting of boundaries of previously decoded subpictures.

signalled_subpic_id_flag equal to 1 specifies that the subpicture ID for each subpicture is signalled. signalled_subpic_id_flag equal to 0 specifies that subpic IDs are not signalled. When subpics_present_flag is equal to 0, the value of signalled_subpic_id_flag is inferred to be equal to 0.

signalled_subpic_id_length_minus1 plus 1 specifies the number of bits used to represent the syntax element subpic_id[i] when present, and the syntax element slice_subpic_id in slice headers. The value of signalled_subpic_id_length_minus1 shall be in the range of 0 to 15, inclusive. When not present, the value of signalled_subpic_id_length_minus1 is inferred to be equal to Ceil(Log 2(Max(2, max_subpics_minus1+1)))−1.

subpic_id[i] specifies the subpicture ID of the i-th subpicture. The length of the subpic_id[i] syntax element is signalled_subpic_id_length_minus1+1 bits. When not present, the value of subpic_id[i] is inferred to be equal to i, for each i in the range of 0 to NumSubPics minus 1, inclusive.

Below are the proposed syntax and semantics changes in the slice header on top of JVET-O2001-vE:

Descriptorslice_header( ) {slice_pic_parameter_set_idue(v)if( rect_slice_flag | | NumBricksInPic > 1 ){if( subpics_present_flag )slice_subpic_idu(v)slice_addressu(v)}...}

slice_pic_parameter_set_id specifies the value of pps_pic_parameter_set_id for the PPS in use. The value of slice_pic_parameter_set_id shall be in the range of 0 to 63, inclusive.

It is a requirement of bitstream conformance that the value of TemporalId of the current picture shall be greater than or equal to the value of TemporalId of the PPS that has pps_pic_parameter_set_id equal to slice_pic_parameter_set_id.

slice_subpic_id specifies the value of subpic_id for the sub-picture the slice is spatially located in. When not present, the value of slice_subpic_id is inferred to be equal to 0. The length of the syntax element is Ceil(Log 2(max_subpics_minus1)) bits.

slice_address specifies the slice address of the slice. When not present, the value of slice_address is inferred to be equal to 0. If subpics_present_flag is equal to 0, slice_address represents the slice address of the slice relative to the picture, else, if subpics_present_flag is equal to 1, slice_adress represents the slice address of the slice relative to the sub-picture with sub-picture ID equal to slice_subpic_id.

If rect_slice_flag is equal to 0, the following applies:The slice address is the brick ID as specified by Equation (7-59).The length of slice_address is Ceil(Log 2 (NumBricksInPic)) bits.The value of slice_address shall be in the range of 0 to NumBricksInPic−1, inclusive.

Otherwise (rect_slice_flag is equal to 1), the following applies:The length of slice_address is Ceil(Log 2 (NumBricksInPic−NumSubpics)) bits.

It is a requirement of bitstream conformance that the following constraints apply:When rect_slice_flag is equal to 0, the slices of a picture shall be in increasing order of their slice_address values.The shapes of the slices of a picture shall be such that each brick, when decoded, shall have its entire left boundary and entire top boundary consisting of a picture boundary or consisting of boundaries of previously decoded brick(s).

num_bricks_in_slice_minus1, when present, specifies the number of bricks in the slice minus 1. The value of num_bricks_in_slice_minus1 shall be in the range of 0 to NumBricksInPic−1, inclusive. When rect_slice_flag is equal to 0 and single_brick_per_slice_flag is equal to 1, the value of num_bricks_in_slice_minus1 is inferred to be equal to 0. When single_brick_per_slice_flag is equal to 1, the value of num_bricks_in_slice_minus1 is inferred to be equal to 0.

The variable NumBricksInCurrSlice, which specifies the number of bricks in the current slice, and SliceBrickIdx[i], which specifies the brick index of the i-th brick in the current slice, are derived as follows:

if( rect_slice_flag ) {subpicIdx = 0while( slice_subpic_id != subpic_id[ subpicIdx ] )subpicIdx++sliceIdx = subpic_id[ subpicIdx ] + slice_addressNumBricksInCurrSlice = NumBricksInSlice[ sliceIdx ]brickIdx = TopLeftBrickIdx[ sliceIdx ]for( bIdx = 0; brickIdx <= BottomRightBrickIdx[ sliceIdx ];(7-92)brickIdx++ )if( BricksToSliceMap[ brickIdx ] = = sliceIdx )SliceBrickIdx[ bIdx++ ] = brickIdx} else {NumBricksInCurrSlice = num_bricks_in_slice_minus1 + 1SliceBrickIdx[ 0 ] = slice_addressfor( i = 1; i < NumBricksInCurrSlice; i++ )SliceBrickIdx[ i ] = SliceBrickIdx[ i − 1 ] + 1}