Video encoder, video decoder, and corresponding methods
By signaling sub-picture IDs and size information in the SPS, the method addresses inefficiencies in sub-picture management, enhancing coding efficiency and reducing resource usage in video coding systems.
Patent Information
- Application Number
- JP2025183832
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Priority Date
- 2019-01-09
- Filing Date
- 2025-10-30
- Publication Date
- 2026-02-24
AI Technical Summary
Existing video coding systems face challenges in efficiently managing sub-pictures, leading to issues such as increased network, memory, and processing resource usage due to inefficient signaling and positioning of sub-pictures, which can result in errors and reduced coding efficiency.
The proposed solution involves signaling sub-picture IDs and associated size information in the Sequence Parameter Set (SPS) rather than the Picture Parameter Set (PPS), allowing each sub-picture to be positioned and sized independently without reference to other sub-pictures, and including a complete set of sub-picture IDs in the SPS to facilitate error correction and efficient extraction.
This approach enhances coding efficiency, reduces resource usage, and improves error resilience by enabling independent extraction and positioning of sub-pictures, thereby optimizing network, memory, and processing resources in both encoders and decoders.
Smart Images

Figure 2026031558000001_ABST
Abstract
Description
[Technical Field]
[0001] CROSS-REFERENCE TO RELATED APPLICATIONS This application claims the benefit of U.S. Provisional Patent Application No. 62 / 790,207, filed January 9, 2019 by Ye-Kui Wang et al., entitled "Sub-Pictures in Video Coding," which is incorporated herein by reference.
[0002] FIELD OF THE DISCLOSURE This disclosure relates generally to video coding, and more particularly to sub-picture management in video coding. [Background technology]
[0003] The amount of video data required to depict even a relatively short video can be significant, which can pose challenges when the data is to be streamed or otherwise communicated over communication networks with limited bandwidth capacity. Therefore, video data is typically compressed before being communicated over modern telecommunications networks. Because memory resources may be limited, video size can also be an issue when the video is stored on a storage device. Video compression devices often use software and / or hardware at the source to code the video data before transmission or storage, thereby reducing the amount of data needed to represent a digital video image. The compressed data is then received at the destination by a video decompression device, which decodes the video data. Due to limited network resources and an ever-increasing demand for higher video quality, improved compression and decompression techniques that improve compression ratios with little or no sacrifice in image quality are desirable. Summary of the Invention [Means for solving the problem]
[0004] In an embodiment, the present disclosure includes a method implemented in a decoder, the method comprising: receiving, by a receiver of the decoder, a bitstream comprising a sequence parameter set (SPS), one or more subpictures partitioned from a picture, and one or more slice headers associated with one or more slices; parsing, by a processor of the decoder, the SPS to obtain subpicture identifiers (IDs) of one or more subpictures; parsing, by the processor, the slice header to obtain a current subpicture ID associated with a current subpicture, where the current subpicture ID indicates that the current subpicture from the one or more subpictures includes a slice; decoding, by the processor, the current subpicture based on the current subpicture ID to create a video sequence; and transmitting, by the processor, the video sequence for display. Some video coding systems signal subpicture positions relative to other subpictures. This causes problems if subpictures are lost during transport or are transmitted separately for separate extraction purposes. In this example, the complete set of subpicture IDs is signaled in the SPS. Furthermore, the slice header includes a subpicture ID that indicates the subpicture that contains the slice corresponding to the slice header. By specifying each subpicture by ID, the subpicture can be positioned and sized without reference to other subpictures. This aids error correction and applications that extract only a portion of a subpicture, preventing the transmission of other subpictures. A complete list of all subpicture IDs, along with associated size information, can be transmitted in the SPS. Each slice header may include a subpicture ID that indicates the subpicture that contains the corresponding slice. In this way, the subpicture and corresponding slice can be extracted and positioned without reference to other subpictures.Thus, sub-picture IDs facilitate improved performance and / or coding efficiency, which reduces the use of network resources, memory resources, and / or processing resources in the encoder and decoder.
[0005] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the SPS further comprises a sub-picture size of each sub-picture partitioned from the picture.
[0006] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the SPS further comprises a sub-picture position of each sub-picture partitioned from the picture.
[0007] Optionally, in any of the preceding aspects, another implementation of the aspect specifies that decoding the current subpicture includes matching a slice with the current subpicture based on the current subpicture ID, and positioning the slice based on the subpicture size and subpicture position of the current subpicture.
[0008] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the sub-picture position includes an offset distance between a top-left sample of the current sub-picture and a top-left sample of the picture.
[0009] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the sub-picture size comprises a sub-picture height in luma samples and a sub-picture width in luma samples.
[0010] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the SPS further comprises an indication that one or more of the subpictures are motion constrained subpictures.
[0011] In an embodiment, the present disclosure includes a method implemented in an encoder, the method comprising: partitioning, by a processor of the encoder, a picture into multiple subpictures; partitioning, by the processor, each of the multiple subpictures into one or more slices; encoding, by the processor, an SPS comprising subpicture IDs of the multiple subpictures partitioned from the picture into a bitstream; encoding, by the processor, a slice header comprising subpicture IDs indicating that the indicated subpicture contains a slice; encoding, by the processor, one or more of the multiple subpictures into the bitstream; and storing the bitstream in the encoder's memory for communication to a decoder. Some video coding systems signal subpicture positions relative to other subpictures. This causes problems if subpictures are lost during transport or are transmitted separately for separate extraction purposes. In this example, the complete set of subpicture IDs is signaled in the SPS. Furthermore, the slice header includes a subpicture ID indicating the subpicture containing the slice corresponding to the slice header. By specifying each subpicture by its ID, the subpicture can be positioned and sized without reference to other subpictures. This aids in error correction and applications that extract only a portion of a subpicture, preventing the transmission of other subpictures. A complete list of all subpicture IDs can be transmitted in the SPS along with associated size information. Each slice header can include a subpicture ID that indicates the subpicture that contains the corresponding slice. In this way, a subpicture and its corresponding slice can be extracted and positioned without reference to other subpictures. Therefore, subpicture IDs aid in improved performance and / or coding efficiency, which reduces the use of network resources, memory resources, and / or processing resources in the encoder and decoder.
[0012] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the SPS further comprises a sub-picture size for each of the plurality of sub-pictures.
[0013] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the SPS further comprises a sub-picture position for each of the plurality of sub-pictures.
[0014] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the sub-picture position includes an offset distance between a top-left sample of the corresponding sub-picture and a top-left sample of the picture.
[0015] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the sub-picture size comprises a sub-picture height in luma samples and a sub-picture width in luma samples.
[0016] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the SPS further comprises an indication that one or more of the subpictures are motion constrained subpictures.
[0017] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the union of the multiple sub-pictures encompasses the entire area of the picture, without gaps and without overlaps.
[0018] In an embodiment, the present disclosure includes a video coding device comprising a processor, a memory, a receiver coupled to the processor, and a transmitter coupled to the processor, wherein the processor, memory, receiver, and transmitter are configured to perform the method of any of the preceding aspects.
[0019] In an embodiment, the present disclosure includes a non-transitory computer-readable medium comprising a computer program product for use by a video coding device, the computer program product comprising computer-executable instructions stored on the non-transitory computer-readable medium that, when executed by a processor, cause the video coding device to perform the method of any of the preceding aspects.
[0020] In an embodiment, the present disclosure includes a decoder comprising: receiving means for receiving a bitstream comprising an SPS, wherein one or more subpictures are partitioned from a picture and one or more slice headers are associated with one or more slices; parsing means for parsing the SPS to obtain subpicture identifiers (IDs) of one or more subpictures and parsing the slice header to obtain a current subpicture ID associated with a current subpicture, wherein the current subpicture ID indicates that the slice is included in the current subpicture from the one or more subpictures; decoding means for decoding the current subpicture based on the current subpicture ID to create a video sequence; and forwarding means for forwarding the video sequence for display.
[0021] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the decoder is further configured to perform the method of any of the preceding aspects.
[0022] In an embodiment, the present disclosure includes an encoder comprising partitioning means for partitioning a picture into a plurality of sub-pictures and partitioning each of the plurality of sub-pictures into one or more slices, encoding means for encoding an SPS comprising sub-picture IDs of the plurality of sub-pictures partitioned from the picture into a bitstream, encoding a slice header comprising sub-picture IDs indicating that the indicated sub-picture contains a slice into the bitstream, encoding one or more of the plurality of sub-pictures into the bitstream, and storage means for storing the bitstream for communication to a decoder.
[0023] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the encoder is further configured to perform the method of any of the preceding aspects.
[0024] For clarity, any one of the above-described embodiments may be combined with any one or more of the other above-described embodiments to create new embodiments within the scope of the present disclosure.
[0025] These and other features will be more clearly understood from the following detailed description taken in conjunction with the accompanying drawings and claims.
[0026] For a more complete understanding of the present disclosure, reference is now made to the following brief description taken in conjunction with the accompanying drawings and detailed description, wherein like reference numerals represent like parts. [Brief explanation of the drawings]
[0027] [Figure 1] 1 is a flowchart of an exemplary method for coding a video signal. [Figure 2] 1 is a schematic diagram of an example encoding and decoding (codec) system for video coding. [Figure 3] FIG. 1 is a schematic diagram illustrating an exemplary video encoder. [Figure 4]FIG. 1 is a schematic diagram illustrating an exemplary video decoder. [Figure 5] FIG. 2 is a schematic diagram illustrating an exemplary bitstream and sub-bitstreams extracted from the bitstream. [Figure 6] FIG. 2 is a schematic diagram illustrating an exemplary picture partitioned into sub-pictures. [Figure 7] FIG. 1 is a schematic diagram illustrating an exemplary mechanism for associating slices with subpicture layouts. [Figure 8] FIG. 10 is a schematic diagram illustrating another exemplary picture partitioned into sub-pictures. [Figure 9] 1 is a schematic diagram of an exemplary video coding device. [Figure 10] 1 is a flowchart of an exemplary method for encoding sub-picture identifiers (IDs) in a bitstream to support sub-picture decoding. [Figure 11] 10 is a flowchart of an exemplary method for decoding a sub-picture bitstream based on a sub-picture ID. [Figure 12] 1 is a schematic diagram of an example system for signaling sub-picture IDs via a bitstream. DETAILED DESCRIPTION OF THE INVENTION
[0028] While illustrative implementations of one or more embodiments are provided below, it should be understood at the outset that the disclosed systems and / or methods may be implemented using any number of techniques, whether currently known or in existence. The present disclosure should not be limited in any way to the illustrative implementations, diagrams, and techniques illustrated below, including the exemplary designs and implementations illustrated and described herein, but may be modified within the scope of the appended claims along with their full scope of equivalents.
[0029] Various acronyms are used herein, such as coding tree block (CTB), coding tree unit (CTU), coding unit (CU), coded video sequence (CVS), Joint Video Experts Team (JVET), motion constrained tile set (MCTS), maximum transmission unit (MTU), network abstraction layer (NAL), picture order count (POC), raw byte sequence payload (RBSP), sequence parameter set (SPS), versatile video coding (VVC), and working draft (WD).
[0030] Many video compression techniques can be utilized to reduce the size of video files while minimizing data loss. For example, video compression techniques may include performing spatial (e.g., intra-picture) prediction and / or temporal (e.g., inter-picture) prediction to reduce or remove data redundancy in a video sequence. For block-based video coding, video slices (e.g., video pictures or portions of video pictures) may be partitioned into video blocks, which may also be referred to as tree blocks, coding tree blocks (CTBs), coding tree units (CTUs), coding units (CUs), and / or coding nodes. Video blocks in intra-coded (I) slices of a picture are coded using spatial prediction with respect to reference samples in neighboring blocks in the same picture. Video blocks in inter-coded unidirectionally predicted (P) or bidirectionally predicted (B) slices of a picture may be coded by utilizing spatial prediction with respect to reference samples in neighboring blocks of the same picture or temporal prediction with respect to reference samples in other reference pictures. Pictures may be referred to as frames and / or images, and reference pictures may be referred to as reference frames and / or reference images. Spatial or temporal prediction results in a predictive block representing an image block. Residual data represents pixel differences between the original image block and the predictive block. Thus, inter-coded blocks are coded according to a motion vector pointing to a block of reference samples forming the predictive block and residual data indicating the difference between the coded block and the predictive block. Intra-coded blocks are coded according to an intra-coding mode and the residual data. For further compression, the residual data may be transferred from the pixel domain to the transform domain. These result in residual transform coefficients that may be quantized. The quantized transform coefficients may first be arranged in a two-dimensional array. The quantized transform coefficients may be scanned to produce a one-dimensional vector of transform coefficients. Entropy coding may be applied to achieve further compression.Such video compression techniques are discussed in more detail below.
[0031] To ensure that the encoded video can be correctly decoded, the video is encoded and decoded according to a corresponding video coding standard. Video coding standards include International Telecommunication Union (ITU) Standardization Sector (ITU-T) H.261, International Organization for Standardization / International Electrotechnical Commission (ISO / IEC) Motion Picture Experts Group (MPEG)-1 Part 2, Advanced Video Coding (AVC), also known as ITU-T H.262 or ISO / IEC MPEG-2 Part 2, ITU-T H.263, ISO / IEC MPEG-4 Part 2, ITU-T H.264 or ISO / IEC MPEG-4 Part 10, and High Efficiency Video Coding (HEVC), also known as ITU-T H.265 or MPEG-H Part 2. AVC includes extensions such as Scalable Video Coding (SVC), Multiview Video Coding (MVC) and Multiview Video Coding plus Depth (MVC+D), and three-dimensional (3D) AVC (3D-AVC). HEVC includes extensions such as Scalable HEVC (SHVC), Multiview HEVC (MV-HEVC), and 3D HEVC (3D-HEVC). The ITU-T and ISO / IEC Joint Video Experts Team (JVET) has begun development of a video coding standard called Versatile Video Coding (VVC). VVC is contained in working drafts (WD), including JVET-L1001-v9.
[0032] To code a video image, the image is first partitioned, and the partitions are coded into a bitstream. Various picture partitioning schemes are available. For example, an image may be partitioned into regular slices, dependent slices, tiles, and / or according to wavefront parallelism (WPP). For simplicity, HEVC constrains the encoder to use regular slices, dependent slices, tiles, WPP, and combinations thereof when partitioning slices into groups of CTBs for video coding. Such partitioning may be applied to support maximum transmission unit (MTU) size adaptation, parallel processing, and reduced end-to-end delay. The MTU represents the maximum amount of data that can be transmitted in a single packet. If a packet payload exceeds the MTU, the payload is split into two packets through a process called fragmentation.
[0033] A regular slice, also referred to simply as a slice, is a partitioned portion of an image that can be reconstructed independently of other regular slices within the same picture, despite some interdependence due to loop filtering operations. Each regular slice is encapsulated in a unique Network Abstraction Layer (NAL) unit for transmission. Furthermore, intra-picture prediction (intra-sample prediction, motion information prediction, coding mode prediction) and entropy coding dependencies across slice boundaries can be disabled to support independent reconstruction. Such independent reconstruction supports parallelization. For example, regular slice-based parallelization utilizes minimal inter-processor or inter-core communication. However, because each regular slice is independent, each slice is associated with a separate slice header. The use of regular slices can incur significant coding overhead due to the bit cost of the slice header for each slice and the lack of prediction across slice boundaries. Furthermore, regular slices can be utilized to support compliance with MTU size requirements. Specifically, because regular slices are encapsulated in separate NAL units and can be coded independently, each regular slice must be smaller than the MTU in the MTU scheme to avoid breaking the slice into multiple packets. Thus, the goals of parallelization and MTU size adaptation may impose conflicting requirements on the slice layout in a picture.
[0034] Dependent slices are similar to regular slices but have shortened slice headers, allowing for partitioning of picture treeblock boundaries without breaking intra-picture prediction. Dependent slices therefore allow regular slices to be fragmented into multiple NAL units, which results in reduced end-to-end delay by allowing parts of a regular slice to be sent out before the coding of the entire regular slice is complete.
[0035] A tile is a partitioned portion of an image, bounded by horizontal and vertical boundaries that create tile columns and rows. Tiles may be coded in raster scan order (right-to-left and top-to-bottom). The scan order of CTBs is local within a tile. Thus, the CTB of the first tile is coded in raster scan order before proceeding to the CTB of the next tile. Similar to regular slices, tiles break intra-picture prediction dependencies as well as entropy decoding dependencies. However, because tiles may not be included in individual NAL units, tiles may not be used for MTU size adaptation. Each tile may be processed by a single processor / core, and inter-processor / inter-core communication utilized for intra-picture prediction between processing units decoding neighboring tiles may be limited to carrying a shared slice header (when adjacent tiles are in the same slice) and performing loop filtering-related sharing of reconstructed samples and metadata. When more than one tile is included in a slice, the entry point byte offset for each tile other than the first entry point offset in the slice may be signaled in the slice header. For each slice and tile, at least one of the following conditions should be met: 1) all coded treeblocks in a slice belong to the same slice, and 2) all coded blocks in a tile belong to the same slice.
[0036] In WPP, an image is partitioned into single rows of CTBs. The entropy decoding and prediction mechanisms may use data from CTBs in other rows. Parallel processing is enabled through parallel decoding of CTB rows. For example, the current row can be decoded in parallel with the previous row. However, the decoding of the current row lags behind the decoding process of the previous row by the two CTBs. This delay ensures that data for the CTBs above and to the right of the current CTB in the current row is available before the current CTB is coded. This approach appears graphically as a wavefront. This staggered start allows parallelization with up to the same number of processors / cores as the number of CTB rows the image contains. Because intra-picture prediction between neighboring treeblock rows within a picture is allowed, inter-processor / inter-core communication to enable intra-picture prediction can be significant. WPP partitioning takes into account the NAL unit size. Therefore, WPP does not support MTU size adaptation. However, regular slicing can be used with WPP, with some coding overhead, to perform MTU size adaptation on demand.
[0037] A tile may also include a motion constrained tile set. A motion constrained tile set (MCTS) is a tile set designed such that associated motion vectors are constrained to point to integer sample positions within the MCTS and fractional sample positions that require only integer sample positions within the MCTS for interpolation. Furthermore, the use of motion vector candidates for temporal motion vector prediction derived from blocks outside the MCTS is not permitted. In this way, each MCTS can be independently decoded without the presence of tiles not included in the MCTS. A temporal MCTS Supplemental Enhancement Information (SEI) message indicates the presence of an MCTS in a bitstream and can be used to signal the MCTS. The MCTS SEI message provides supplemental information that can be used in MCTS sub-bitstream extraction (defined as part of the semantics of the SEI message) to generate a conforming bitstream for the MCTS set. The information includes several extraction information sets, each of which defines the number of MCTS sets and contains raw byte sequence payload (RBSP) bytes of replacement video parameter sets (VPS), sequence parameter sets (SPS), and picture parameter sets (PPS) to be used during the MCTS sub-bitstream extraction process. When extracting a sub-bitstream according to the MCTS sub-bitstream extraction process, the parameter sets (VPS, SPS, and PPS) may be rewritten or replaced, and the slice header may be updated, because one or all of the slice address-related syntax elements (including first_slice_segment_in_pic_flag and slice_segment_address) may use different values in the extracted sub-bitstream.
[0038] A picture may also be partitioned into one or more subpictures. A subpicture is a rectangular set of tile groups / slices, starting with the tile group with tile_group_address equal to 0. Each subpicture may reference a separate PPS and therefore have a separate tile partition. Subpictures may be treated like pictures in the decoding process. A reference subpicture for decoding the current subpicture is generated by extracting an area in the decoded picture buffer that is co-located with the current subpicture from the reference picture. The extracted area is treated as the decoded subpicture. Inter-prediction may be performed between subpictures of the same size and the same location within a picture. A tile group, also known as a slice, is a sequence of related tiles within a picture or subpicture. To determine the location of a subpicture within a picture, several items may be derived. For example, each current subpicture may be placed in the next unoccupied position in CTU raster scan order within a picture large enough to fit the current subpicture within the picture boundary.
[0039] Furthermore, picture partitioning may be based on picture-level tiles and sequence-level tiles. Sequence-level tiles may include MCTS functionality and may be implemented as subpictures. For example, a picture-level tile may be defined as a rectangular region of coding tree blocks within a particular tile column and a particular tile row in a picture. A sequence-level tile may also be defined as a set of rectangular regions of coding tree blocks contained in different frames, each rectangular region further comprising one or more picture-level tiles, and a set of rectangular regions of coding tree blocks is independently decodable from any other set of similar rectangular regions. A sequence-level tile group set (STGPS) is a group of such sequence-level tiles. STGPS may be signaled in a non-video coding layer (VCL) NAL unit with an associated identifier (ID) in the NAL unit header.
[0040] The preceding sub-picture-based partitioning scheme may be associated with certain problems. For example, when sub-pictures are enabled, tiling within the sub-picture (partitioning of the sub-picture into tiles) may be used to support parallel processing. The tile partitioning of a sub-picture intended for parallel processing may vary from picture to picture (e.g., for the purpose of balancing parallel processing load) and therefore may be managed at the picture level (e.g., in the PPS). However, sub-picture partitioning (partitioning of a picture into sub-pictures) may be utilized to support region of interest (ROI) and sub-picture-based picture access. In such cases, signaling of sub-pictures or MCTS in the PPS is not efficient.
[0041] In another example, when any subpicture in a picture is coded as a temporal motion constrained subpicture, all subpictures in the picture may be coded as temporal motion constrained subpictures. Such picture partitioning may be restrictive. For example, coding a subpicture as a temporal motion constrained subpicture may reduce coding efficiency in exchange for additional functionality. However, in region-of-interest-based applications, typically only one or a few of the subpictures use the temporal motion constrained subpicture-based functionality. Therefore, the remaining subpictures suffer from reduced coding efficiency without providing any practical benefit.
[0042] In another example, syntax elements for specifying the size of a subpicture may be specified in units of luma CTU size. Thus, both the width and height of the subpicture should be integer multiples of CtbSizeY. This mechanism for specifying the subpicture width and height may result in various problems. For example, subpicture partitioning is only applicable to pictures with picture widths and / or picture heights that are integer multiples of CtbSizeY. This makes subpicture partitioning unavailable for pictures that include dimensions that are not integer multiples of CtbSizeY. If subpicture partitioning is applied to the picture width and / or height when the picture dimensions are not integer multiples of CtbSizeY, the derivation of the subpicture width and / or subpicture height in luma samples for the rightmost and bottommost subpictures will be incorrect. In some coding tools, such an incorrect derivation produces incorrect results.
[0043] In another example, the position of a sub-picture in a picture may not be signaled. Instead, the position is derived using the following rule: The current sub-picture is placed at the next unoccupied position in CTU raster scan order within a picture large enough to fit the sub-picture within the picture boundaries. In some cases, deriving sub-picture positions in such a way may cause errors. For example, if a sub-picture is lost in transmission, the positions of other sub-pictures will be derived incorrectly and decoded samples will be placed in the wrong positions. The same problem applies when sub-pictures arrive in the wrong order.
[0044] In another example, decoding a sub-picture may require extraction of the sub-picture at the same location in the reference picture, which may impose additional complexity and a resulting burden in terms of processor and memory resource usage.
[0045] In another example, when a subpicture is designated as a temporal motion constrained subpicture, the loop filter that scans the subpicture boundaries is disabled. This occurs regardless of whether the loop filter that scans the tile boundaries is enabled. Such constraints may be too strict and may result in visual artifacts for video pictures that utilize multiple subpictures.
[0046] In another example, the relationship between the SPS, STGPS, PPS, and tile group header is as follows: STGPS references the SPS, PPS references the STGPS, and tile group headers / slice headers reference the PPS. However, STGPS and PPS must be orthogonal, rather than PPS referencing STGPS. The above configuration may also not allow all tile groups of the same picture to reference the same PPS.
[0047] In another example, each STGPS may include IDs for the four sides of a subpicture. Such IDs are used to identify subpictures that share the same boundary so that their relative spatial relationships can be defined. However, in some cases, such information may not be sufficient to derive position and size information for a sequence-level tile group set. In other cases, signaling position and size information may be redundant.
[0048] In another example, the STGPS ID may be signaled in the NAL unit header of a VCL NAL unit using 8 bits. This may aid in subpicture extraction. Such signaling may unnecessarily extend the length of the NAL unit header. Another issue is that one tile group may be associated with multiple sequence level tile group sets, unless the sequence level tile group sets are constrained to prevent overlaps.
[0049] To address one or more of the above-mentioned problems, various mechanisms are disclosed herein. In a first example, subpicture layout information is included in the SPS rather than the PPS. The subpicture layout information includes the subpicture position and the subpicture size. The subpicture position is the offset between the top-left sample of the subpicture and the top-left sample of the picture. The subpicture size is the height and width of the subpicture as measured in luma samples. As mentioned above, some systems include tiling information in the PPS because tiles can change from picture to picture. However, subpictures can be used to support ROI application and subpicture-based access. These features do not change from picture to picture. Furthermore, a video sequence may contain a single SPS (or one per video segment) or as many as one PPS per picture. Placing the subpicture layout information in the SPS ensures that the layout is signaled only once for the sequence / segment rather than being redundantly signaled for each PPS. Signaling the sub-picture layout in the SPS therefore increases coding efficiency, thereby reducing the use of network resources, memory resources, and / or processing resources in the encoder and decoder. Some systems also have sub-picture information derived by the decoder. Signaling the sub-picture information reduces the probability of errors when packets are lost and supports additional functionality with respect to extracting sub-pictures. Signaling the sub-picture layout in the SPS therefore increases the functionality of the encoder and / or decoder.
[0050] In a second example, the subpicture width and subpicture height are constrained to be multiples of the CTU size. However, these constraints are removed when the subpicture is placed on the right border of a picture or the bottom border of a picture, respectively. As mentioned above, some video systems may restrict subpictures to include heights and widths that are multiples of the CTU size. This prevents subpictures from working correctly with many picture layouts. By allowing the bottom and right subpictures to include heights and widths that are not multiples of the CTU size, respectively, subpictures can be used with any picture without causing decoding errors. This results in improved encoder and decoder capabilities. Furthermore, the improved capabilities enable encoders to code pictures more efficiently, which reduces the use of network, memory, and / or processing resources in the encoder and decoder.
[0051] In a third example, a subpicture is constrained to encompass a picture without gaps or overlaps. As mentioned above, some video coding systems allow subpictures to include gaps and overlaps. This creates the possibility that a tile group / slice may be associated with multiple subpictures. If this is allowed in an encoder, the decoder must be built to support such a coding scheme, even if the decoding scheme is rarely used. Not allowing subpicture gaps and overlaps can reduce decoder complexity because the decoder is not required to consider potential gaps and overlaps when determining the size and position of the subpicture. Furthermore, not allowing subpicture gaps and overlaps can reduce the complexity of the rate-distortion optimization (RDO) process in the encoder because the encoder can omit considering gap and overlap cases when selecting encoding for a video sequence. Therefore, avoiding gaps and overlaps can reduce the use of memory and / or processing resources in the encoder and decoder.
[0052] In a fourth example, a flag may be signaled in the SPS to indicate when a subpicture is a temporal motion constrained subpicture. As mentioned above, some systems may collectively set all subpictures as temporal motion constrained subpictures or may not allow the use of temporal motion constrained subpictures at all. Such temporal motion constrained subpictures provide independent extraction capabilities at the expense of reduced coding efficiency. However, in region-of-interest-based applications, regions of interest should be coded for independent extraction, while regions outside the regions of interest do not require such capabilities. Thus, the remaining subpictures suffer reduced coding efficiency without providing any practical benefit. Therefore, this flag allows for the mixing of temporal motion constrained subpictures that provide independent extraction capabilities with non-motion constrained subpictures to increase coding efficiency when independent extraction is not desired. Thus, this flag allows for increased functionality and / or improved coding efficiency, which reduces the use of network resources, memory resources, and / or processing resources in the encoder and decoder.
[0053] In a fifth example, a complete set of subpicture IDs is signaled in the SPS, and slice headers include subpicture IDs that indicate the subpictures that contain the corresponding slices. As mentioned above, some systems signal picture positions relative to other subpictures. This creates problems if subpictures are lost or extracted separately. By specifying each subpicture with an ID, the subpictures can be positioned and sized without reference to other subpictures. This supports error correction and applications that extract only a portion of a subpicture and avoid transmitting other subpictures. A complete list of all subpicture IDs can be transmitted in the SPS, along with associated size information. Each slice header can include a subpicture ID that indicates the subpicture that contains the corresponding slice. In this way, subpictures and corresponding slices can be extracted and positioned without reference to other subpictures. Thus, subpicture IDs help improve performance and / or coding efficiency, which reduces the use of network resources, memory resources, and / or processing resources in the encoder and decoder.
[0054] In a sixth example, a level is signaled for each subpicture. In some video coding systems, a level is signaled for each picture. The level indicates the hardware resources required to decode the picture. As mentioned above, in some cases, different subpictures may have different capabilities and thus be treated differently during the coding process. Therefore, picture-based levels may not be useful for decoding some pictures. Thus, this disclosure includes a level for each subpicture. In this way, each subpicture can be coded independently of other subpictures without unnecessarily burdening the decoder by setting too high decoding requirements for subpictures coded according to less complex mechanisms. Signaled subpicture level information helps improve functionality and / or coding efficiency, which reduces the use of network resources, memory resources, and / or processing resources in the encoder and decoder.
[0055] 1 is a flowchart of an exemplary operational method 100 of coding a video signal. Specifically, a video signal is encoded in an encoder. The encoding process compresses the video signal by utilizing various mechanisms to reduce the video file size. The smaller file size allows the compressed video file to be transmitted to a user while reducing the associated bandwidth overhead. A decoder then decodes the compressed video file to reconstruct the original video signal for display to the end user. The decoding process generally mirrors the encoding process to enable the decoder to reliably reconstruct the video signal.
[0056] In step 101, a video signal is input to an encoder. For example, the video signal may be an uncompressed video file stored in memory. As another example, the video file may be captured by a video capture device, such as a video camera, and encoded to support live streaming of the video. The video file may include both an audio component and a video component. The video component includes a series of image frames that, when viewed in sequence, create the visual effect of movement. A frame includes pixels represented in terms of light, referred to herein as luma components (or luma samples), and pixels represented in terms of color, referred to herein as chroma components (or color samples). In some examples, the frame may also include depth values to support three-dimensional viewing.
[0057] In step 103, the video is partitioned into blocks. Partitioning involves subdividing the pixels of each frame into square and / or rectangular blocks for compression. For example, in High Efficiency Video Coding (HEVC) (also known as H.265 and MPEG-H Part 2), a frame may first be divided into coding tree units (CTUs), which are blocks of a predetermined size (e.g., 64 pixels by 64 pixels). CTUs contain both luma and chroma samples. A coding tree may be utilized to divide the CTUs into blocks and then recursively subdivide the blocks until a configuration that supports further encoding is achieved. For example, the luma component of a frame may be subdivided until each block contains relatively uniform illumination values. Furthermore, the chroma component of a frame may be subdivided until each block contains relatively uniform color values. Thus, the partitioning scheme varies depending on the content of the video frame.
[0058] In step 105, various compression mechanisms are utilized to compress the image blocks partitioned in step 103. For example, inter-prediction and / or intra-prediction may be utilized. Inter-prediction is designed to take advantage of the fact that objects in a common scene tend to appear in consecutive frames. Thus, a block depicting an object in a reference frame need not be repeatedly described in adjacent frames. Specifically, an object such as a table may remain in a constant position across multiple frames. Thus, the table may be described once, and adjacent frames may reference the reference frame. A pattern matching mechanism may be utilized to match objects across multiple frames. Furthermore, a moving object may be depicted across multiple frames, for example, due to object motion or camera motion. As a specific example, a video may show a car moving around on the screen across multiple frames. A motion vector may be utilized to describe such motion. A motion vector is a two-dimensional vector that provides an offset from the coordinates of the object in a frame to the coordinates of the object in a reference frame. Thus, inter-prediction may encode an image block in a current frame as a set of motion vectors indicating an offset from a corresponding block in a reference frame.
[0059] Intra prediction encodes blocks within a common frame. Intra prediction takes advantage of the fact that luma and chroma components tend to be clustered in a frame. For example, a green spot in a tree tends to be positioned next to a similar green spot. Intra prediction utilizes multiple directional prediction modes (e.g., 33 in HEVC), planar mode, and direct current (DC) mode. Directional mode indicates that the current block is similar / the same as samples of neighboring blocks in the corresponding direction. Planar mode indicates that a series of blocks along a row / column (e.g., a plane) can be interpolated based on neighboring blocks at the end of the row. Planar mode essentially indicates a smooth transition of light / color across a row / column by utilizing a relatively constant gradient by varying values. DC mode is utilized for boundary smoothing and indicates that the block is similar / the same as the average value associated with samples of all neighboring blocks associated with the angular direction of the directional prediction mode. Thus, intra-predicted blocks can represent image blocks as various related prediction mode values instead of actual values. Furthermore, inter-predicted blocks can represent image blocks as motion vector values instead of actual values. In either case, the prediction block may in some cases not exactly represent the image block. Any differences are stored in a residual block. To further compress the file, a transform may be applied to the residual block.
[0060] In step 107, various filtering techniques may be applied. In HEVC, filters are applied according to an in-loop filtering scheme. The block-based prediction discussed above may result in the creation of blocky images in a decoder. Furthermore, the block-based prediction scheme may encode a block and then reconstruct the encoded block for later use as a reference block. The in-loop filtering scheme iteratively applies a noise suppression filter, a deblocking filter, an adaptive loop filter, and a sample adaptive offset (SAO) filter to a block / frame. These filters mitigate such blocking artifacts so that the encoded file can be accurately reconstructed. Furthermore, because these filters mitigate artifacts in the reconstructed reference block, the artifacts are less likely to produce additional artifacts in subsequent blocks that are coded based on the reconstructed reference block.
[0061] Once the video signal has been segmented, compressed, and filtered, the resulting data is encoded in a bitstream in step 109. The bitstream includes the data discussed above as well as any signaling data desired to support proper video signal reconstruction at the decoder. For example, such data may include segmentation data, prediction data, residual blocks, and various flags that provide coding instructions to the decoder. The bitstream may be stored in memory for transmission to the decoder on demand. The bitstream may also be broadcast and / or multicast to multiple decoders. Creation of the bitstream is an iterative process. Thus, steps 101, 103, 105, 107, and 109 may occur sequentially and / or simultaneously across multiple frames and blocks. The order shown in FIG. 1 is presented for clarity and ease of discussion and is not intended to limit the video coding process to any particular order.
[0062] In step 111, a decoder receives the bitstream and begins the decoding process. Specifically, the decoder converts the bitstream into corresponding syntax and video data using an entropy decoding scheme. In step 111, the decoder uses syntax data from the bitstream to determine a partition for the frame. This partition must match the result of the block partitioning in step 103. Entropy encoding / decoding as used in step 111 is now described. The encoder makes many choices during the compression process, such as selecting a block partitioning scheme from several possible options based on the spatial arrangement of values in the input image. Signaling the exact selection may utilize multiple bins. Herein, a bin is a binary value (e.g., a bit value that can change depending on the situation) treated as a variable. Entropy coding allows the encoder to discard any options that are clearly not feasible for a particular case, leaving a set of acceptable options. Each acceptable option is then assigned a codeword. The length of the codeword is based on the number of allowable choices (e.g., one bin for two choices, two bins for three to four choices, etc.). The encoder then encodes the codeword for the selected choice. This scheme reduces the size of the codeword because the codeword is as large as desired to uniquely indicate a choice from a small subset of allowable choices, rather than uniquely indicating a choice from a large possible set of all possible choices. The decoder then decodes the choices by determining the set of allowable choices in a similar manner as the encoder. By determining the set of allowable choices, the decoder can read the codeword and determine the choices made by the encoder.
[0063] In step 113, the decoder performs block decoding. Specifically, the decoder generates a residual block using an inverse transform. The decoder then uses the residual block and a corresponding predictive block to reconstruct an image block according to the partition. The predictive block may include both intra-predicted blocks and inter-predicted blocks, such as those generated by the encoder in step 105. The reconstructed image block is then positioned into a frame of the reconstructed video signal according to the partition data determined in step 111. The syntax for step 113 may also be signaled in the bitstream via entropy coding, as discussed above.
[0064] In step 115, filtering is performed on the frames of the reconstructed video signal at the encoder in a manner similar to step 107. For example, a noise suppression filter, a deblocking filter, an adaptive loop filter, and an SAO filter may be applied to the frames to remove blocking artifacts. Once the frames have been filtered, the video signal may be output to a display in step 117 for viewing by an end user.
[0065] 2 is a schematic diagram of an exemplary encoding and decoding (codec) system 200 for video coding. Specifically, codec system 200 provides functionality to support the implementation of operational method 100. Codec system 200 is generalized to depict components utilized in both encoders and decoders. Codec system 200 receives and segments a video signal as discussed with respect to steps 101 and 103 in operational method 100, which results in a segmented video signal 201. When operating as an encoder, as discussed with respect to steps 105, 107, and 109 of method 100, codec system 200 then compresses the segmented video signal 201 into a coded bitstream. When operating as a decoder, codec system 200 generates an output video signal from the bitstream as discussed with respect to steps 111, 113, 115, and 117 of operational method 100. The codec system 200 includes a general coder control component 211, a transform scaling and quantization component 213, an intra-picture estimation component 215, an intra-picture prediction component 217, a motion compensation component 219, a motion estimation component 221, a scaling and inverse transform component 229, a filter control analysis component 227, an in-loop filter component 225, a decoded picture buffer component 223, and a header formatting and context-adaptive binary arithmetic coding (CABAC) component 231. Such components are coupled as shown. In FIG. 2, black lines indicate the movement of data to be encoded / decoded, and dashed lines indicate the movement of control data that controls the operation of other components. The components of the codec system 200 may all reside within an encoder. A decoder may include a subset of the components of the codec system 200. For example, a decoder may include the intra-picture prediction component 217, the motion compensation component 219, the scaling and inverse transform component 229, the in-loop filter component 225, and the decoded picture buffer component 223.These components are now described.
[0066] The partitioned video signal 201 is a captured video sequence that has been partitioned into blocks of pixels by a coding tree. The coding tree utilizes various partitioning modes to subdivide the blocks of pixels into smaller blocks of pixels. These blocks may then be further subdivided into smaller blocks. The blocks may be referred to as nodes on the coding tree. Larger parent nodes are divided into smaller child nodes. The number of times a node is subdivided is referred to as the depth of the node / coding tree. In some cases, the partitioned blocks may be included in a coding unit (CU). For example, a CU may be a subpart of a CTU that includes a luma block, a red differential chroma (Cr) block, and a blue differential chroma (Cb) block, along with corresponding syntax instructions for the CU. Partitioning modes may include a binary tree (BT), a ternary tree (TT), and a quad tree (QT), each of which is utilized to partition a node into two, three, or four child nodes whose shape changes depending on the partitioning mode utilized. The segmented video signal 201 is forwarded to a general coder control component 211, a transform scaling and quantization component 213, an intra-picture estimation component 215, a filter control analysis component 227, and a motion estimation component 221 for compression.
[0067] The generic coder control component 211 is configured to make decisions regarding the coding of images of a video sequence into a bitstream according to application constraints. For example, the generic coder control component 211 manages the optimization of bitrate / bitstream size versus reconstruction quality. Such decisions may be made based on storage space / bandwidth availability and image resolution requirements. The generic coder control component 211 also manages buffer utilization, taking transmission speed into account, to mitigate buffer underrun and overrun issues. To manage these issues, the generic coder control component 211 manages segmentation, prediction, and filtering by other components. For example, the generic coder control component 211 may dynamically increase compression complexity to improve resolution and bandwidth utilization, or decrease compression complexity to reduce resolution and bandwidth utilization. Thus, the generic coder control component 211 controls other components of the codec system 200 to balance video signal reconstruction quality and bitrate issues. The generic coder control component 211 generates control data, which controls the operation of other components. Control data is also forwarded to the Header Formatting and CABAC component 231 and encoded in the bitstream to signal parameters for decoding at the decoder.
[0068] The partitioned video signal 201 is also sent to a motion estimation component 221 and a motion compensation component 219 for inter-prediction. A frame or slice of the partitioned video signal 201 may be divided into multiple video blocks. The motion estimation component 221 and the motion compensation component 219 perform inter-predictive coding of the received video blocks relative to one or more blocks in one or more reference frames to perform temporal prediction. The codec system 200 may perform multiple coding passes to, for example, select an appropriate coding mode for each block of video data.
[0069] The motion estimation component 221 and the motion compensation component 219 may be highly integrated but are shown separately for conceptual purposes. Motion estimation, performed by the motion estimation component 221, is the process of generating motion vectors that estimate the motion of video blocks. A motion vector may indicate, for example, the displacement of a coded object relative to a predictive block. A predictive block is a block that is found to closely match a block to be coded in terms of pixel differences. A predictive block may also be referred to as a reference block. Such pixel differences may be determined by sum of absolute differences (SAD), sum of squared differences (SSD), or other difference measures. HEVC utilizes several coded objects, including CTUs, coding tree blocks (CTBs), and CUs. For example, CTUs may be divided into CTBs, which may then be divided into CBs for inclusion in CUs. CUs may be coded as prediction units (PUs) containing prediction data and / or transform units (TUs) containing transformed residual data for the CUs. The motion estimation component 221 generates motion vectors, PUs, and TUs by using rate-distortion analysis as part of a rate-distortion optimization process. For example, motion estimation component 221 may determine multiple reference blocks, multiple motion vectors, etc. for the current block / frame and may select the reference block, motion vector, etc. with the best rate-distortion performance, which balances the quality of the video reconstruction (e.g., the amount of data lost due to compression) and coding efficiency (e.g., the size of the final encoding).
[0070] In some examples, the codec system 200 may calculate values for sub-integer pixel positions of reference pictures stored in the decoded picture buffer component 223. For example, the video codec system 200 may interpolate values for quarter-pixel positions, eighth-pixel positions, or other fractional pixel positions of the reference pictures. Accordingly, the motion estimation component 221 may perform motion searches for integer and fractional pixel positions to output fractional-pixel precision motion vectors. The motion estimation component 221 calculates motion vectors for PUs of video blocks in inter-coded slices by comparing the positions of the PUs with the positions of predictive blocks of the reference pictures. The motion estimation component 221 outputs the calculated motion vectors to the header formatting and CABAC component 231 as motion data for encoding and outputs motion to the motion compensation component 219.
[0071] The motion compensation performed by the motion compensation component 219 may involve fetching or generating a predictive block based on a motion vector determined by the motion estimation component 221. Again, the motion estimation component 221 and the motion compensation component 219 may be functionally integrated in some examples. Upon receiving the motion vector for the PU of the current video block, the motion compensation component 219 may locate the predictive block to which the motion vector points. A residual video block is then formed by subtracting pixel values of the predictive block from pixel values of the current video block being coded to form pixel difference values. Generally, the motion estimation component 221 performs motion estimation on the luma component, and the motion compensation component 219 uses the motion vector calculated based on the luma component for both the chroma and luma components. The predictive block and the residual block are forwarded to the transform scaling and quantization component 213.
[0072] The partitioned video signal 201 is also sent to an intra-picture estimation component 215 and an intra-picture prediction component 217. Like the motion estimation component 221 and the motion compensation component 219, the intra-picture estimation component 215 and the intra-picture prediction component 217 may be highly integrated but are shown separately for conceptual purposes. The intra-picture estimation component 215 and the intra-picture prediction component 217 intra-predict the current block relative to blocks in the current frame as an alternative to the inter-prediction performed by the motion estimation component 221 and the motion compensation component 219 between frames, as described above. Specifically, the intra-picture estimation component 215 determines the intra-prediction mode to use to encode the current block. In some examples, the intra-picture estimation component 215 selects an appropriate intra-prediction mode for encoding the current block from multiple tested intra-prediction modes. The selected intra-prediction mode is then forwarded to the header formatting and CABAC component 231 for encoding.
[0073] For example, the intra picture estimation component 215 calculates a rate-distortion value using a rate-distortion analysis for various tested intra prediction modes and selects an intra prediction mode with the best rate-distortion characteristics among the tested modes. The rate-distortion analysis generally determines the amount of distortion (or error) between an encoded block and the original uncoded block that was coded to produce the encoded block, as well as the bit rate (e.g., number of bits) used to produce the encoded block. The intra picture estimation component 215 calculates a ratio from the distortion and rate for the various coded blocks to determine which intra prediction mode exhibits the best rate-distortion value for the block. In addition, the intra picture estimation component 215 may be configured to code depth blocks of a depth map using a depth modeling mode (DMM) based on rate-distortion optimization (RDO).
[0074] The intra-picture prediction component 217, when implemented on an encoder, may generate a residual block from the prediction block based on a selected intra-prediction mode determined by the intra-picture estimation component 215, or, when implemented on a decoder, may read the residual block from the bitstream. The residual block includes value differences between the prediction block and the original block, represented as a matrix. The residual block is then forwarded to the transform scaling and quantization component 213. The intra-picture estimation component 215 and the intra-picture prediction component 217 may operate on both the luma and chroma components.
[0075] The transform scaling and quantization component 213 is configured to further compress the residual block. The transform scaling and quantization component 213 applies a transform, such as a discrete cosine transform (DCT), a discrete sine transform (DST), or a conceptually similar transform, to the residual block, resulting in a video block comprising residual transform coefficient values. A wavelet transform, an integer transform, a subband transform, or other types of transforms may also be used. The transform may convert the residual information from the pixel value domain to a transform domain, such as the frequency domain. The transform scaling and quantization component 213 is also configured to scale the transformed residual information, for example, based on frequency. Such scaling involves applying a scale factor to the residual information so that different frequency information is quantized with different granularity, which may affect the final visual quality of the reconstructed video. The transform scaling and quantization component 213 is also configured to quantize the transform coefficients to further reduce the bit rate. The quantization process may reduce the bit depth associated with some or all of the coefficients. The degree of quantization may be modified by adjusting a quantization parameter. In some examples, the transform scaling and quantization component 213 may then perform a scan of a matrix containing the quantized transform coefficients, which are forwarded to the header formatting and CABAC component 231 to be encoded in the bitstream.
[0076] The scaling and inverse transform component 229 applies the inverse operations of the transform scaling and quantization component 213 to support motion estimation. The scaling and inverse transform component 229 applies inverse scaling, transform, and / or quantization to reconstruct residual blocks in the pixel domain for later use as reference blocks, which may become predictive blocks for another current block, for example. The motion estimation component 221 and / or motion compensation component 219 may calculate reference blocks by adding the residual blocks back to the corresponding predictive blocks for use in motion estimation of later blocks / frames. A filter is applied to the reconstructed reference blocks to mitigate artifacts created during scaling, quantization, and transform. Such artifacts may otherwise cause inaccurate predictions (and create further artifacts) when subsequent blocks are predicted.
[0077] The filter control analysis component 227 and the in-loop filter component 225 apply filters to residual blocks and / or reconstructed image blocks. For example, a transformed residual block from the scaling and inverse transform component 229 may be combined with a corresponding prediction block from the intra-picture prediction component 217 and / or the motion compensation component 219 to reconstruct the original image block. The filter may then be applied to the reconstructed image block. In some examples, the filter may instead be applied to the residual block. Like the other components in FIG. 2, the filter control analysis component 227 and the in-loop filter component 225 may be highly integrated and implemented together, but are illustrated separately for conceptual purposes. The filters applied to reconstructed reference blocks are applied to specific spatial regions and include multiple parameters for adjusting how such filters are applied. The filter control analysis component 227 analyzes the reconstructed reference blocks to determine where such filters should be applied and sets the corresponding parameters. Such data is forwarded to the header formatting and CABAC component 231 as filter control data for encoding. The in-loop filter component 225 applies such filters based on the filter control data. The filters may include a deblocking filter, a noise suppression filter, a SAO filter, and an adaptive loop filter. Such filters may be applied in the spatial / pixel domain (e.g., on reconstructed pixel blocks) or in the frequency domain, depending on the example.
[0078] When operating as an encoder, the filtered reconstructed image blocks, residual blocks, and / or predictive blocks are stored in the decoded picture buffer component 223 for later use in motion estimation as discussed above. When operating as a decoder, the decoded picture buffer component 223 stores and forwards the reconstructed and filtered blocks to a display as part of the output video signal. The decoded picture buffer component 223 may be any memory device capable of storing predictive blocks, residual blocks, and / or reconstructed image blocks.
[0079] The header formatting and CABAC component 231 receives data from various components of the codec system 200 and encodes such data into a coded bitstream for transmission to a decoder. Specifically, the header formatting and CABAC component 231 generates various headers to encode control data, such as general control data and filter control data. Additionally, prediction data, including intra-prediction and motion data, and residual data in the form of quantized transform coefficient data, are all encoded in the bitstream. The final bitstream contains all information desired by a decoder to reconstruct the original partitioned video signal 201. Such information may also include an intra-prediction mode index table (also called a codeword mapping table), definitions of coding contexts for various blocks, indications of the most probable intra-prediction mode, indications of partition information, and so on. Such data may be encoded by utilizing entropy coding. For example, the information may be encoded by utilizing context-adaptive variable length coding (CAVLC), CABAC, syntax-based context-adaptive binary arithmetic coding (SBAC), probability interval partitioned entropy (PIPE) coding, or another entropy coding technique. Following entropy coding, the coded bitstream may be transmitted to another device (eg, a video decoder) or may be archived for later transmission or retrieval.
[0080] 3 is a block diagram illustrating an example video encoder 300. Video encoder 300 may be utilized to implement the encoding functionality of codec system 200 and / or to implement steps 101, 103, 105, 107, and / or 109 of method of operation 100. Encoder 300 segments an input video signal, resulting in a segmented video signal 301 that is substantially similar to segmented video signal 201. Segmented video signal 301 is then compressed and encoded into a bitstream by components of encoder 300.
[0081] Specifically, the partitioned video signal 301 is forwarded to an intra-picture prediction component 317 for intra prediction. The intra-picture prediction component 317 may be substantially similar to the intra-picture estimation component 215 and the intra-picture prediction component 217. The partitioned video signal 301 is also forwarded to a motion compensation component 321 for inter prediction based on a reference block in a decoded picture buffer component 323. The motion compensation component 321 may be substantially similar to the motion estimation component 221 and the motion compensation component 219. The prediction block and residual block from the intra-picture prediction component 317 and the motion compensation component 321 are forwarded to a transform and quantization component 313 for transforming and quantizing the residual block. The transform and quantization component 313 may be substantially similar to the transform scaling and quantization component 213. The transformed and quantized residual block and the corresponding prediction block (along with associated control data) are forwarded to an entropy coding component 331 for coding into a bitstream. The entropy coding component 331 may be substantially similar to the header formatting and CABAC component 231 .
[0082] The transformed and quantized residual block and / or the corresponding prediction block are also forwarded from the transform and quantization component 313 to the inverse transform and quantization component 329 for reconstruction into a reference block used by the motion compensation component 321. The inverse transform and quantization component 329 may be substantially similar to the scaling and inverse transform component 229. An in-loop filter in the in-loop filter component 325 is also applied to the residual block and / or the reconstructed reference block, depending on the example. The in-loop filter component 325 may be substantially similar to the filter control analysis component 227 and the in-loop filter component 225. The in-loop filter component 325 may include multiple filters such as those discussed with respect to the in-loop filter component 225. The filtered block is then stored in the decoded picture buffer component 323 for use as a reference block by the motion compensation component 321. The decoded picture buffer component 323 may be substantially similar to the decoded picture buffer component 223.
[0083] 4 is a block diagram illustrating an exemplary video decoder 400. Video decoder 400 may be utilized to implement the decoding functionality of codec system 200 and / or to perform steps 111, 113, 115, and / or 117 of method of operation 100. Decoder 400 receives a bitstream, for example, from encoder 300, and generates a reconstructed output video signal based on the bitstream for display to an end user.
[0084] The bitstream is received by the entropy decoding component 433. The entropy decoding component 433 is configured to implement an entropy decoding scheme, such as CAVLC, CABAC, SBAC, PIPE coding, or other entropy coding techniques. For example, the entropy decoding component 433 may utilize header information to provide context for interpreting additional data encoded as codewords in the bitstream. The decoded information includes any desired information for decoding the video signal, such as general control data, filter control data, partition information, motion information, prediction data, and quantized transform coefficients from residual blocks. The quantized transform coefficients are forwarded to the inverse transform and quantization component 429 for reconstruction into residual blocks. The inverse transform and quantization component 429 may be similar to the inverse transform and quantization component 329.
[0085] The reconstructed residual block and / or predictive block are forwarded to the intra-picture prediction component 417 for reconstruction into an image block based on an intra-prediction operation. The intra-picture prediction component 417 may be similar to the intra-picture estimation component 215 and the intra-picture prediction component 217. Specifically, the intra-picture prediction component 417 utilizes a prediction mode to locate a reference block within a frame and applies the residual block to the result to reconstruct an intra-predicted image block. The reconstructed intra-predicted image block and / or residual block and corresponding inter-prediction data are forwarded to the decoded picture buffer component 423 via an in-loop filter component 425, which may be substantially similar to the decoded picture buffer component 223 and the in-loop filter component 225, respectively. The in-loop filter component 425 filters the reconstructed image block, residual block, and / or predictive block, and such information is stored in the decoded picture buffer component 423. The reconstructed image blocks from the decoded picture buffer component 423 are forwarded to the motion compensation component 421 for inter prediction. The motion compensation component 421 may be substantially similar to the motion estimation component 221 and / or the motion compensation component 219. Specifically, the motion compensation component 421 utilizes motion vectors from reference blocks to generate prediction blocks and applies a residual block to the result to reconstruct an image block. The resulting reconstructed blocks may also be forwarded to the decoded picture buffer component 423 via an in-loop filter component 425. The decoded picture buffer component 423 continues to store additional reconstructed image blocks, which may be reconstructed into frames via partition information. Such frames may also be arranged in a sequence. The sequence is output to a display as a reconstructed output video signal.
[0086] 5 is a schematic diagram illustrating an exemplary bitstream 500 and a sub-bitstream 501 extracted from bitstream 500. For example, bitstream 500 may be generated by codec system 200 and / or encoder 300 for decoding by codec system 200 and / or decoder 400. As another example, bitstream 500 may be generated by an encoder in step 109 of method 100 for use by a decoder in step 111.
[0087] The bitstream 500 includes a sequence parameter set (SPS) 510, multiple picture parameter sets (PPSs) 512, multiple slice headers 514, image data 520, and one or more SEI messages 515. The SPS 510 includes sequence data common to all pictures in a video sequence included in the bitstream 500. Such data may include picture size, bit depth, coding tool parameters, bit rate limits, etc. The PPS 512 includes parameters specific to one or more corresponding pictures. Thus, each picture in the video sequence may point to one PPS 512. The PPS 512 may indicate available coding tools for tiles in the corresponding picture, quantization parameters, offsets, picture-specific coding tool parameters (e.g., filter controls), etc. The slice header 514 includes parameters specific to one or more corresponding slices 524 in the picture. Thus, each slice 524 in the video sequence may reference the slice header 514. The slice header 514 may include slice type information, a picture order count (POC), a reference picture list, prediction weights, tile entry points, deblocking parameters, etc. In some examples, the slice 524 may be referred to as a tile group. In such cases, the slice header 514 may be referred to as a tile group header. The SEI message 515 is an optional message that includes metadata that is not required for block decoding, but may be utilized for related purposes such as indicating picture output timing, display settings, loss detection, loss concealment, etc.
[0088] The image data 520 includes video data coded according to inter-prediction and / or intra-prediction, as well as corresponding transformed and quantized residual data. Such image data 520 is classified according to a partition used to partition the image before encoding. For example, a video sequence is divided into pictures 521. The pictures 521 may be further divided into sub-pictures 522, and the sub-pictures 522 are divided into slices 524. The slices 524 may be further divided into tiles and / or CTUs. The CTUs are further divided into coding blocks based on a coding tree. The coding blocks may then be encoded / decoded according to a prediction mechanism. For example, the picture 521 may include one or more sub-pictures 522. The sub-pictures 522 may include one or more slices 524. The picture 521 references the PPS 512, and the slices 524 reference the slice header 514. The sub-pictures 522 may reference the SPS 510 because they may be stably partitioned across the entire video sequence (also known as segments). Each slice 524 may include one or more tiles. Each slice 524, and therefore the picture 521 and subpicture 522, may also include multiple CTUs.
[0089] Each picture 521 may include the complete set of visual data associated with the video sequence for the corresponding moment. However, in some applications, it may be desirable to display only a portion of picture 521. For example, a virtual reality (VR) system may display a user-selected region of picture 521, which creates the sensation of being in the scene depicted in picture 521. The region the user may wish to view is not known at the time bitstream 500 is encoded. Thus, picture 521 may include each possible region the user may view as a sub-picture 522, which may be decoded and displayed separately based on user input. In other applications, regions of interest may be displayed separately. For example, a television with picture-in-picture functionality may desire to display a particular region, and thus a sub-picture 522, from one video sequence over a picture 521 of an unrelated video sequence. In yet another example, a teleconferencing system may display an entire picture 521 of a user who is currently speaking and a sub-picture 522 of a user who is not currently speaking. Thus, sub-picture 522 may include a defined region of picture 521. Temporal motion constrained sub-picture 522 may be separately decodable from the rest of picture 521. Specifically, a temporal motion constrained sub-picture is coded without reference to samples outside of the temporal motion constrained sub-picture and therefore contains enough information for complete decoding without reference to the rest of picture 521.
[0090] Each slice 524 may be a rectangle defined by a CTU in the upper-left corner and a CTU in the lower-right corner. In some examples, slices 524 include a series of tiles and / or CTUs in a raster scan order proceeding from left to right and top to bottom. In other examples, slices 524 are rectangular slices. Rectangular slices may not scan the entire width of the picture according to the raster scan order. Instead, rectangular slices may include rectangular and / or square regions of picture 521 and / or subpicture 522 defined in terms of CTU and / or tile rows and CTU and / or tile columns. Slices 524 are the smallest units that can be individually displayed by a decoder. Thus, slices 524 from picture 521 may be assigned to different subpictures 522 to separately depict desired regions of picture 521.
[0091] A decoder may display one or more subpictures 523 of picture 521. A subpicture 523 is a user-selected or predetermined subgroup of subpictures 522. For example, picture 521 may be divided into nine subpictures 522, but the decoder may display only a single subpicture 523 from the group of subpictures 522. A subpicture 523 includes slices 525, which are selected or predetermined subgroups of slices 524. To enable separate display of subpictures 523, sub-bitstream 501 may be extracted (529) from bitstream 500. Extraction 529 may be performed at the encoder side, such that the decoder receives only sub-bitstream 501. In other cases, the entire bitstream 500 is transmitted to the decoder, and the decoder extracts sub-bitstream 501 for separate decoding (529). Note that sub-bitstream 501 may also be generally referred to as a bitstream in some cases. The sub-bitstream 501 includes an SPS 510, a PPS 512, a selected sub-picture 523, and slice headers 514 and SEI messages 515 related to the sub-pictures 523 and / or slices 525.
[0092] This disclosure signals various data to support efficient coding of subpictures 522 for selection and display of subpictures 523 at a decoder. SPS 510 includes subpicture size 531, subpicture position 532, and subpicture ID 533 for the complete set of subpictures 522. Subpicture size 531 includes the subpicture height in luma samples and the subpicture width in luma samples for the corresponding subpicture 522. Subpicture position 532 includes the offset distance between the top-left sample of the corresponding subpicture 522 and the top-left sample of picture 521. Subpicture position 532 and subpicture size 531 define the layout of the corresponding subpicture 522. Subpicture ID 533 includes data that uniquely identifies the corresponding subpicture 522. Subpicture ID 533 may be the raster scan index of the subpicture 522 or another defined value. Thus, a decoder can read the SPS 510 and determine the size, position, and ID of each subpicture 522. In some video coding systems, data related to subpictures 522 may be included in the PPS 512 because the subpictures 522 are partitioned from the picture 521. However, the partitioning used to create the subpictures 522 may be used by applications that rely on consistent partitioning of the subpictures 522 across a video sequence / segment, such as ROI-based applications, VR applications, etc. Thus, the partitioning of the subpictures 522 generally does not change from picture to picture. Placing the layout information of the subpictures 522 in the SPS 510 ensures that the layout is signaled only once for the sequence / segment, rather than being redundantly signaled for each PPS 512 (which may potentially be signaled for each picture 521). Also, signaling sub-picture 522 information rather than relying on the decoder to derive such information reduces the probability of error in the event of packet loss and supports additional functionality with respect to extracting sub-picture 523.Therefore, signaling the layout of the sub-pictures 522 in the SPS 510 improves the functionality of the encoder and / or decoder.
[0093] The SPS 510 also includes motion constraint subpicture flags 534 associated with the complete set of subpictures 522. The motion constraint subpicture flags 534 indicate whether each subpicture 522 is a temporal motion constrained subpicture. Thus, a decoder can read the motion constraint subpicture flags 534 to determine which of the subpictures 522 can be extracted and displayed separately without decoding the other subpictures 522. This allows selected subpictures 522 to be coded as temporal motion constrained subpictures, while other subpictures 522 can be coded without such constraints for improved coding efficiency.
[0094] The sub-picture IDs 533 are also included in the slice headers 514. Each slice header 514 contains data related to a corresponding set of slices 524. Thus, the slice header 514 contains only the sub-picture IDs 533 corresponding to the slices 524 associated with the slice header 514. Thus, a decoder can receive a slice 524, obtain the sub-picture IDs 533 from the slice header 514, and determine which sub-picture 522 contains the slice 524. The decoder can also use the sub-picture IDs 533 from the slice header 514 to correlate with the associated data in the SPS 510. Thus, the decoder can determine how to position the sub-pictures 522 / 523 and slices 524 / 525 by reading the SPS 510 and the associated slice header 514. This allows the sub-pictures 523 and slices 525 to be decoded even if some sub-pictures 522 are lost in transmission or intentionally omitted to increase coding efficiency.
[0095] The SEI message 515 may also include a sub-picture level 535. The sub-picture level 535 indicates the hardware resources required to decode the corresponding sub-picture 522. In this way, each sub-picture 522 can be coded independently of the other sub-pictures 522. This ensures that each sub-picture 522 can be allocated the correct amount of hardware resources at the decoder. Without such a sub-picture level 535, each sub-picture 522 would be allocated sufficient resources to decode the most complex sub-picture 522. Thus, the sub-picture level 535 prevents the decoder from over-allocating hardware resources when sub-pictures 522 are associated with varying hardware resource requirements.
[0096] 6 is a schematic diagram illustrating an example picture 600 partitioned into sub-pictures 622. For example, picture 600 may be encoded in and decoded from bitstream 500, e.g., by codec system 200, encoder 300, and / or decoder 400. Furthermore, picture 600 may be partitioned and / or included in sub-bitstreams 501 to support encoding and decoding according to method 100.
[0097] Picture 600 may be substantially similar to picture 521. Furthermore, picture 600 may be partitioned into sub-pictures 622, which are substantially similar to sub-picture 522. The sub-pictures 622 each include a sub-picture size 631, which may be included in bitstream 500 as sub-picture size 531. The sub-picture size 631 includes a sub-picture width 631a and a sub-picture height 631b. The sub-picture width 631a is the width of the corresponding sub-picture 622 in units of luma samples. The sub-picture height 631b is the height of the corresponding sub-picture 622 in units of luma samples. The sub-pictures 622 each include a sub-picture ID 633, which may be included in bitstream 500 as sub-picture ID 633. The subpicture ID 633 may be any value that uniquely identifies each subpicture 622. In the example shown, the subpicture ID 633 is an index of the subpicture 622. The subpictures 622 each include a position 632, which may be included in the bitstream 500 as the subpicture position 532. The position 632 is expressed as an offset between the top-left sample of the corresponding subpicture 622 and the top-left sample 642 of the picture 600.
[0098] Also as shown, some subpictures 622 may be temporal motion constrained subpictures 634, while others may not. In the example shown, the subpicture 622 with a subpicture ID 633 of 5 is a temporal motion constrained subpicture 634. This indicates that the subpicture 622 identified as 5 is coded without reference to any other subpictures 622, and therefore can be extracted and decoded separately without considering data from the other subpictures 622. An indication of which subpictures 622 are temporal motion constrained subpictures 634 may be signaled in the bitstream 500 in a motion constrained subpicture flag 534.
[0099] As shown, subpictures 622 may be constrained to encompass picture 600 without gaps or overlaps. A gap is a region of picture 600 that is not included in any subpicture 622. An overlap is a region of picture 600 that is included in more than one subpicture 622. In the example shown in FIG. 6, subpicture 622 is partitioned from picture 600 to prevent both gaps and overlaps. A gap causes samples of picture 600 to remain outside of subpicture 622. An overlap causes associated slices to be included in multiple subpictures 622. Thus, gaps and overlaps can cause samples to be affected by different treatment when subpictures 622 are coded differently. If this is allowed in an encoder, a decoder must support such coding schemes, even when the decoding schemes are rarely used. Disallowing gaps and overlaps of sub-pictures 622 may reduce decoder complexity because the decoder is not required to consider potential gaps and overlaps when determining sub-picture size 631 and position 632. Furthermore, disallowing gaps and overlaps of sub-pictures 622 reduces the complexity of the RDO process in the encoder because the encoder can omit considering cases of gaps and overlaps when selecting encoding for a video sequence. Thus, avoiding gaps and overlaps may reduce the use of memory and / or processing resources in the encoder and decoder.
[0100] 7 is a schematic diagram illustrating an example mechanism 700 for associating slices 724 with a layout of subpictures 722. For example, mechanism 700 may be applied to picture 600. Furthermore, mechanism 700 may be applied based on data in bitstream 500, for example, by codec system 200, encoder 300, and / or decoder 400. Furthermore, mechanism 700 may be utilized to support encoding and decoding according to method 100.
[0101] Mechanism 700 may be applied to slices 724 within subpicture 722, such as slices 524 / 525 and subpictures 522 / 523, respectively. In the example shown, subpicture 722 includes a first slice 724a, a second slice 724b, and a third slice 724c. The slice header of each of slices 724 includes a subpicture ID 733 for subpicture 722. The decoder can match the subpicture ID 733 from the slice header with a subpicture ID 733 in the SPS. The decoder can then determine the position 732 and size of subpicture 722 from the SPS based on the subpicture ID 733. Using the position 732, subpicture 722 may be positioned relative to an upper-left sample at the upper-left corner 742 of the picture. The size may be used to set the height and width of subpicture 722 relative to the position 732. Slice 724 may then be included in subpicture 722. Thus, slice 724 may be located in the correct subpicture 722 based on subpicture ID 733 without reference to other subpictures. This aids in error correction, as other lost subpictures do not alter the decoding of subpicture 722. This also aids in applications that extract only subpicture 722 and avoid transmitting other subpictures. Thus, subpicture ID 733 aids in improved performance and / or coding efficiency, which reduces the use of network resources, memory resources, and / or processing resources in the encoder and decoder.
[0102] 8 is a schematic diagram illustrating another example picture 800 partitioned into sub-pictures 822. Picture 800 may be substantially similar to picture 600. In addition, picture 800 may be encoded in and decoded from bitstream 500, for example, by codec system 200, encoder 300, and / or decoder 400. Furthermore, picture 800 may be partitioned in and / or included in sub-bitstream 501 to support encoding and decoding according to method 100 and / or mechanism 700.
[0103] Picture 800 includes a subpicture 822, which may be substantially similar to subpictures 522, 523, 622, and / or 722. The subpicture 822 is divided into multiple CTUs 825. The CTUs 825 are basic coding units in standardized video coding systems. The CTUs 825 are subdivided into coding blocks by a coding tree, and the coding blocks are coded according to inter-prediction or intra-prediction. As shown, some subpictures 822a are constrained to include subpicture widths and subpicture heights that are multiples of the size of the CTUs 825. In the example shown, subpicture 822a has a height of six CTUs 825 and a width of five CTUs 825. This constraint is removed for subpicture 822b located at the right border 801 of the picture and subpicture 822c located at the bottom border 802 of the picture. In the example shown, subpicture 822b has a width of between 5 and 6 CTUs 825. However, subpictures 822b that are not located on the bottom boundary 802 of the picture are still constrained to maintain a subpicture height that is a multiple of the size of CTU 825. In the example shown, subpicture 822c has a height of between 6 and 7 CTUs 825. However, subpicture 822c that is not located on the right boundary 801 of the picture is still constrained to maintain a subpicture width that is a multiple of the size of CTU 825.
[0104] As mentioned above, some video systems may restrict subpictures 822 to include heights and widths that are multiples of the size of the CTU 825. This may prevent the subpictures 822 from working correctly with many picture layouts, for example, pictures 800 that include an overall width or height that is not a multiple of the size of the CTU 825. By allowing the bottom subpicture 822c and the right subpicture 822b to include heights and widths, respectively, that are not multiples of the size of the CTU 825, the subpictures 822 may be used with any picture 800 without causing decoding errors. This results in improved encoder and decoder capabilities. Furthermore, the improved capabilities enable the encoder to code pictures more efficiently, which reduces the use of network resources, memory resources, and / or processing resources in the encoder and decoder.
[0105] As described herein, this disclosure describes the design of sub-picture-based picture partitioning in video coding. A sub-picture is a rectangular area within a picture that can be independently decoded using a decoding process similar to that used for a picture. This disclosure relates to the signaling of sub-pictures in a coded video sequence and / or bitstream, as well as processes for sub-picture extraction. The description of the techniques is based on VVC by JVET of ITU-T and ISO / IEC. However, the techniques also apply to other video codec specifications. The following are example embodiments described herein. Such embodiments may be applied individually or in combination.
[0106] Information about sub-pictures that may exist in a coded video sequence (CVS) may be signaled in a sequence-level parameter set, such as an SPS. Such signaling may include the following information: The number of sub-pictures present in each picture of the CVS may be signaled in the SPS. In the context of an SPS or a CVS, sub-pictures at the same position for all access units (AUs) may be collectively referred to as a sub-picture sequence. A loop for further specifying information describing the nature of each sub-picture may also be included in the SPS. This information may comprise sub-picture identification information, the sub-picture's position (e.g., the offset distance between the sub-picture's top-left corner luma sample and the picture's top-left corner luma sample), and the sub-picture's size. In addition, the SPS may signal whether each sub-picture is a motion-constrained sub-picture (including the functionality of MCTS). Profile, tier, and level information for each sub-picture may also be signaled or derivable at the decoder. Such information may be utilized to determine profile, tier, and level information for a bitstream created by extracting subpictures from the original bitstream. The profile and tier of each subpicture may be derived to be the same as the profile and tier of the entire bitstream. The level of each subpicture may be explicitly signaled. Such signaling may be present in a loop contained in the SPS. Sequence-level hypothetical reference decoder (HRD) parameters may be signaled in the video availability information (VUI) section of the SPS for each subpicture (or equivalently, each subpicture sequence).
[0107] When a picture is not partitioned into two or more subpictures, the characteristics of the subpictures (e.g., position, size, etc.) may not be present in / signaled in the bitstream, except for the subpicture ID. When subpictures of a picture in the CVS are extracted, each access unit in the new bitstream may not contain a subpicture. In this case, the picture in each AU in the new bitstream is not partitioned into multiple subpictures. Therefore, there is no need to signal subpicture characteristics such as position and size in the SPS, because such information can be derived from the picture properties. However, subpicture identification information may still be signaled, because the ID can be referenced by the VCL NAL unit / tile group included in the extracted subpicture. This may allow the subpicture ID to remain the same when extracting subpictures.
[0108] The position (x offset and y offset) of a sub-picture within a picture may be signaled in units of luma samples. The position represents the distance between the top-left corner luma sample of the sub-picture and the top-left corner luma sample of the picture. Alternatively, the position of a sub-picture within a picture may be signaled in units of the minimum coding luma block size (MinCbSizeY). Alternatively, the unit of the sub-picture position offset may be explicitly indicated by a syntax element in the parameter set. The unit may be CtbSizeY, MinCbSizeY, luma samples, or other values.
[0109] The subpicture size (subpicture width and subpicture height) may be signaled in units of luma samples. Alternatively, the subpicture size may be signaled in units of minimum coding luma block size (MinCbSizeY). Alternatively, the unit of the subpicture size value may be explicitly indicated by a syntax element in the parameter set. The unit may be CtbSizeY, MinCbSizeY, luma samples, or other values. When the right boundary of the subpicture does not coincide with the right boundary of the picture, the subpicture width may be required to be an integer multiple of the luma CTU size (CtbSizeY). Similarly, when the bottom boundary of the subpicture does not coincide with the bottom boundary of the picture, the subpicture height may be required to be an integer multiple of the luma CTU size (CtbSizeY). If the subpicture width is not an integer multiple of the luma CTU size, the subpicture may be required to be located at the rightmost position within the picture. Similarly, if the height of a subpicture is not an integer multiple of the luma CTU size, the subpicture may be required to be located at the bottommost position in the picture. In some cases, the width of a subpicture may be signaled in units of the luma CTU size, but the width of the subpicture is not an integer multiple of the luma CTU size. In this case, the actual width in luma sample units may be derived based on the offset position of the subpicture. The width of the subpicture may be derived based on the luma CTU size, and the height of the picture may be derived based on the luma samples. Similarly, the height of a subpicture may be signaled in units of the luma CTU size, but the height of the subpicture is not an integer multiple of the luma CTU size. In such cases, the actual height in luma sample units may be derived based on the offset position of the subpicture. The height of the subpicture may be derived based on the luma CTU size, and the height of the picture may be derived based on the luma samples.
[0110] For any subpicture, the subpicture ID may be different from the subpicture index. The subpicture index may be the index of the subpicture as signaled in the subpicture loop in the SPS. The subpicture ID may be the index of the subpicture in the subpicture raster scan order of the picture. When the value of the subpicture ID for each subpicture is the same as the subpicture index, the subpicture ID may be signaled or derived. When the subpicture ID for each subpicture is different from the subpicture index, the subpicture ID is explicitly signaled. The number of bits for signaling the subpicture ID may be signaled in the same parameter set (e.g., in the SPS) that contains the subpicture characteristics. Some values for the subpicture ID may be left unused for certain purposes. For example, when a tile group header includes a sub-picture ID to specify which sub-pictures comprise the tile group, the value 0 may be reserved and unused for the sub-picture to ensure that the first few bits of the tile group header are not all 0 to prevent the accidental inclusion of emulation prevention code. In the optional case where the sub-pictures of a picture do not encompass the entire area of the picture without gaps and overlaps, a value (e.g., value 1) may be reserved for tile groups that are not part of any sub-picture. Alternatively, the sub-picture IDs of the remaining area are explicitly signaled. The number of bits for signaling sub-picture IDs may be constrained as follows: The range of values must be sufficient to uniquely identify all sub-pictures in the picture, including any spare values for sub-picture IDs. For example, the minimum number of bits for a sub-picture ID may be a value of Ceil(Log2(number of sub-pictures in picture + number of spare sub-picture IDs)).
[0111] It may be constrained that the union of sub-pictures must encompass the entire picture without gaps or overlaps. When this constraint is applied, for each sub-picture, there may be a flag to specify whether the sub-picture is a motion-constrained sub-picture, which indicates that the sub-picture can be extracted. Alternatively, the union of sub-pictures may not encompass the entire picture, but overlaps may not be allowed.
[0112] To aid the sub-picture extraction process without requiring the extractor to parse the rest of the NAL unit bits, a sub-picture ID may be present immediately after the NAL unit header. For VCL NAL units, the sub-picture ID may be present in the first bit of the tile group header. For non-VCL NAL units, the following may apply: In an SPS, the sub-picture ID does not need to be present immediately after the NAL unit header. In a PPS, if all tile groups of the same picture are constrained to reference the same PPS, the sub-picture ID does not need to be present immediately after its NAL unit header. If tile groups of the same picture are allowed to reference different PPSs, the sub-picture ID may be present in the first bit of the PPS (e.g., immediately after the NAL unit header). In this case, any tile groups of one picture may be allowed to share the same PPS. Alternatively, when tile groups of the same picture are allowed to reference different PPSs and different tile groups of the same picture are also allowed to share the same PPS, the sub-picture ID may not be present in the PPS syntax. Alternatively, when tile groups of the same picture are allowed to reference different PPSs and different tile groups of the same picture are allowed to share the same PPS, a list of sub-picture IDs may be present in the PPS syntax. This list indicates the sub-pictures to which the PPS applies. For other non-VCL NAL units, if a non-VCL unit (e.g., access unit delimiter, end of sequence, end of bitstream, etc.) applies at the picture level or above, the sub-picture ID may not be present immediately after the NAL unit header. Otherwise, the sub-picture ID may be present immediately after the NAL unit header.
[0113] Using the above SPS signaling, tile partitioning within individual subpictures can be signaled in the PPS. Tile groups within the same picture can be allowed to refer to different PPSs. In this case, tile grouping can only occur within each subpicture. The concept of tile grouping is the partitioning of a subpicture into tiles.
[0114] Alternatively, a parameter set is defined to describe tile partitioning within individual subpictures. Such a parameter set may be called a subpicture parameter set (SPPS). The SPPS references the SPS. Syntax elements referencing the SPS ID are present in the SPPS. The SPPS may include a subpicture ID. For the purpose of subpicture extraction, the syntax element referencing the subpicture ID is the first syntax element in the SPPS. The SPPS includes the tile structure (e.g., number of columns, number of rows, uniform tile spacing, etc.). The SPPS may include a flag to indicate whether the loop filter is valid across the associated subpicture boundary. Alternatively, subpicture characteristics for each subpicture may be signaled in the SPPS rather than the SPS. Tile partitioning within individual subpictures may still be signaled in the PPS. Tile groups within the same picture are allowed to reference different PPSs. When the SPPS is enabled, it lasts for a sequence of consecutive AUs in decoding order. However, an SPPS may be deactivated / activated in an AU that is not the first in the CVS. At any moment during the decoding process of a single-layer bitstream with multiple subpictures in some AU, multiple SPPSs may be active. An SPPS may be shared by different subpictures of an AU. Alternatively, the SPPS and PPS may be combined into one parameter set. In such cases, it may not be required that all tile groups of the same picture refer to the same PPS. A constraint may be applied such that all tile groups in the same subpicture may refer to the same parameter set resulting from the combination of the SPPS and PPS.
[0115] The number of bits used to signal the sub-picture ID may be signaled in the NAL unit header. When present in the NAL unit header, such information may aid the sub-picture extraction process in parsing the sub-picture ID value at the beginning of the NAL unit payload (e.g., the first few bits immediately after the NAL unit header). For such signaling, some of the spare bits in the NAL unit header (e.g., 7 spare bits) may be used to avoid increasing the length of the NAL unit header. The number of bits for such signaling may comprise the value of sub-picture-ID-bit-len. For example, 4 bits of the 7 spare bits of the VVC NAL unit header may be used for this purpose.
[0116] When decoding a subpicture, the position of each coding tree block (e.g., xCtb and yCtb) may be adjusted to the actual luma sample position in the picture instead of the luma sample position in the subpicture. In this way, since the coding tree block is decoded with reference to the picture instead of the subpicture, extraction of the subpicture at the same position from each reference picture can be avoided. To adjust the position of the coding tree block, variables SubpictureXOffset and SubpictureYOffset may be derived based on the position of the subpicture (subpic_x_offset and subpic_y_offset). The values of the variables may be added to the values of the luma sample position x and y coordinates of each coding tree block in the subpicture, respectively.
[0117] The subpicture extraction process may be defined as follows: The input to the process is the target subpicture to be extracted. This may be in the form of a subpicture ID or a subpicture location. When the input is a subpicture location, the associated subpicture ID may be resolved by parsing the subpicture information in the SPS. For non-VCL NAL units, the following applies: Syntax elements in the SPS related to picture size and level may be updated with subpicture size and level information. The following non-VCL NAL units remain unchanged: PPS, Access Unit Delimiter (AUD), End of Sequence (EOS), End of Bitstream (EOB), and any other non-VCL NAL units applicable to the picture level or above. Remaining non-VCL NAL units with subpicture IDs not equal to the target subpicture ID may be removed. VCL NAL units with subpicture IDs not equal to the target subpicture ID may also be removed.
[0118] A sequence-level subpicture nesting SEI message may be used to nest an AU-level SEI message or a subpicture-level SEI message for a set of subpictures. This may include buffering periods, picture timing, and non-HRD SEI messages. The syntax and semantics of this subpicture nesting SEI message may be as follows: In a system operating in an Omnidirectional Media Format (OMAF) environment, a set of subpicture sequences that encompass a viewport may be requested and decoded by an OMAF player. Therefore, a sequence-level SEI message is used to convey information about a set of subpicture sequences that collectively encompass a rectangular picture area. This information may be used by the system to indicate the required decoding capabilities as well as the bitrate of the set of subpicture sequences. This information indicates the level of a bitstream that includes only the set of subpicture sequences. This information also indicates the bitrate of a bitstream that includes only the set of subpicture sequences. Optionally, a sub-bitstream extraction process may be specified for a set of subpicture sequences. The advantage of doing this is that a bitstream containing only a set of sub-picture sequences can also be adapted. The disadvantage is that there can be many such sets in addition to the individual sub-picture sequences, which may already be numerous when considering the possibility of different viewport sizes.
[0119] In an exemplary embodiment, one or more of the disclosed examples may be implemented as follows: A subpicture may be defined as a rectangular region of one or more tile groups within a picture. An allowed bisection process may be defined as follows: Inputs to this process are a bisection mode btSplit, a coding block width cbWidth, a coding block height cbHeight, a position (x0, y0) of the top-left luma sample of the considered coding block relative to the top-left luma sample of the picture, a multi-type tree depth mttDepth, a maximum multi-type tree depth maxMttDepth with an offset, a maximum bisection tree size maxBtSize, and a partition index partIdx. The output of this process is the variable allowBtSplit.
[0120] [Table 1]
[0121] The variables parallelTtSplit and cbSize are derived as specified above. The variable allowBtSpit is derived as follows: if one or more of the following conditions are true: cbSize is less than or equal to MinBtSizeY, cbWidth is greater than maxBtSize, cbHeight is greater than maxBtSize, and mttDepth is greater than or equal to maxMttDepth, then allowBtSplit is set equal to FALSE. Otherwise, if all of the following conditions are true: btSplit is equal to SPLIT_BT_VER, and y0+cbHeight is greater than SupPicBottomBorderInPic, then allowBtSplit is set equal to FALSE. Otherwise, if all of the following conditions are true: btSplit is equal to SPLIT_BT_HOR, and x0+cbWidth is greater than SupPicRightBorderInPic, and y0+cbHeight is less than or equal to SubPicBottomBorderInPic, then allowBtSplit is set equal to FALSE. Otherwise, if all of the following conditions are true: mttDepth is greater than 0, partIdx is equal to 1, and MttSplitMode[x0][y0][mttDepth-1] is equal to parallelTtSplit, then allowBtSplit is set equal to FALSE. Otherwise, if all of the following conditions are true: btSplit is equal to SPLIT_BT_VER, cbWidth is less than or equal to MaxTbSizeY, and cbHeight is greater than MaxTbSizeY, then allowBtSplit is set equal to FALSE. Otherwise, if all of the following conditions are true: btSplit equals SPLIT_BT_HOR, cbWidth is greater than MaxTbSizeY, and cbHeight is less than or equal to MaxTbSizeY, then allowBtSplit is set equal to FALSE. Otherwise, allowBtSplit is set equal to TRUE.
[0122] The allowed three-way split process may be defined as follows: The inputs to this process are the three-way split mode ttSplit, the coding block width cbWidth, the coding block height cbHeight, the position (x0, y0) of the top-left luma sample of the considered coding block relative to the top-left luma sample of the picture, the multi-type tree depth mttDepth, the maximum multi-type tree depth with offset maxMttDepth, and the maximum binary tree size maxTtSize. The output of this process is the variable allowTtSplit.
[0123] [Table 2]
[0124] The variable cbSize is derived as specified above. The variable allowTtSplit is derived as follows: if one or more of the following conditions are true: cbSize is less than or equal to 2*MinTtSizeY, cbWidth is greater than Min(MaxTbSizeY,maxTtSize), cbHeight is greater than Min(MaxTbSizeY,maxTtSize), mttDepth is greater than or equal to maxMttDepth, x0+cbWidth is greater than SupPicRightBoderInPic, and y0+cbHeight is greater than SubPicBottomBorderInPic, then allowTtSplit is set equal to FALSE. Otherwise, allowTtSplit is set equal to TRUE.
[0125] The syntax and semantics of the sequence parameter set RBSP are as follows:
[0126] [Table 3]
[0127] pic_width_in_luma_samples specifies the width of each decoded picture in units of luma samples. pic_width_in_luma_samples shall not be equal to 0 and shall be an integer multiple of MinCbSizeY. pic_height_in_luma_samples specifies the height of each decoded picture in units of luma samples. pic_height_in_luma_samples shall not be equal to 0 and shall be an integer multiple of MinCbSizeY. num_subpicture_minus1 plus 1 specifies the number of subpictures partitioned in the coded picture that belong to the coded video sequence. subpic_id_len_minus1 plus 1 specifies the number of bits used to represent the syntax elements subpic_id[i] in the SPS, spps_subpic_id in the SPPS that references the SPS, and tile_group_subpic_id in the tile group header that references the SPS. The value of subpic_id_len_minus1 shall be in the range of Ceil(Log2(num_subpic_minus1+2)) to 8, inclusive. subpic_id[i] specifies the subpicture ID of the ith subpicture of the picture referencing the SPS. The length of subpic_id[i] is subpic_id_len_minus1+1 bits. The value of subpic_id[i] shall be greater than 0. subpic_level_idc[i] indicates the level at which the CVS resulting from the extraction of the ith subpicture complies with the specified resource requirements. The bitstream shall not contain values of subpic_level_idc[i] other than those specified. Other values of subpic_level_idc[i] are reserved. When not present, the value of subpic_level_idc[i] is inferred to be equal to the value of general_level_idc.
[0128] subpic_x_offset[i] specifies the horizontal offset of the top-left corner of the ith subpicture relative to the top-left corner of the picture. When not present, the value of subpic_x_offset[i] is inferred to be equal to 0. The subpicture x offset value is derived as follows: SubpictureXOffset[i] = subpic_x_offset[i]. subpic_y_offset[i] specifies the vertical offset of the top-left corner of the ith subpicture relative to the top-left corner of the picture. When not present, the value of subpic_y_offset[i] is inferred to be equal to 0. The subpicture y offset value is derived as follows: SubpictureYOffset[i] = subpic_y_offset[i]. subpic_width_in_luma_samples[i] specifies the width of the ith decoded subpicture for which this SPS is the active SPS. When the sum of SubpictureXOffset[i] and subpic_width_in_luma_samples[i] is less than pic_width_in_luma_samples, the value of subpic_width_in_luma_samples[i] shall be an integer multiple of CtbSizeY. When not present, the value of subpic_width_in_luma_samples[i] is inferred to be equal to the value of pic_width_in_luma_samples. subpic_height_in_luma_samples[i] specifies the height of the ith decoded subpicture for which this SPS is the active SPS. When the sum of SubpictureYOffset[i] and subpic_height_in_luma_samples[i] is less than pic_height_in_luma_samples, the value of subpic_height_in_luma_samples[i] shall be an integer multiple of CtbSizeY. When not present, the value of subpic_height_in_luma_samples[i] is inferred to be equal to the value of pic_height_in_luma_samples.
[0129] It is a bitstream conformance requirement that the union of subpictures should encompass the entire area of the picture without overlaps and gaps. subpic_motion_constrained_flag[i] equal to 1 specifies that the i-th subpicture is a temporal motion constrained subpicture. subpic_motion_constrained_flag[i] equal to 0 specifies that the i-th subpicture may or may not be a temporal motion constrained subpicture. When not present, the value of subpic_motion_constrained_flag is inferred to be equal to 0.
[0130] The variables SubpicWidthInCtbsY, SubpicHeightInCtbsY, SubpicSizeInCtbsY, SubpicWidthInMinCbsY, SubpicHeightInMinCbsY, SubpicSizeInMinCbsY, SubpicSizeInSamplesY, SubpicWidthInSamplesC, and SubpicHeightInSamplesC are derived as follows: SubpicWidthInLumaSamples[i]=subpic_width_in_luma_samples[i] SubpicHeightInLumaSamples[i]=subpic_height_in_luma_samples[i] SubPicRightBorderInPic[i]=SubpictureXOffset[i]+PicWidthInLumaSamples[i] SubPicBottomBorderInPic[i]=SubpictureYOffset[i]+PicHeightInLumaSamples[i] SubpicWidthInCtbsY[i]=Ceil(SubpicWidthInLumaSamples[i]÷CtbSizeY) SubpicHeightInCtbsY[i]=Ceil(SubpicHeightInLumaSamples[i]÷CtbSizeY) SubpicSizeInCtbsY[i]=SubpicWidthInCtbsY[i]*SubpicHeightInCtbsY[i] SubpicWidthInMinCbsY[i]=SubpicWidthInLumaSamples[i] / MinCbSizeY SubpicHeightInMinCbsY[i]=SubpicHeightInLumaSamples[i] / MinCbSizeY SubpicSizeInMinCbsY[i]=SubpicWidthInMinCbsY[i]*SubpicHeightInMinCbsY[i] SubpicSizeInSamplesY[i]=SubpicWidthInLumaSamples[i]*SubpicHeightInLumaSamples[i] SubpicWidthInSamplesC[i]=SubpicWidthInLumaSamples[i] / SubWidthC SubpicHeightInSamplesC[i]=SubpicHeightInLumaSamples[i] / SubHeightC
[0131] The syntax and semantics of the sub-picture parameter set RBSP are as follows:
[0132] [Table 4]
[0133] spps_subpic_id identifies the subpicture to which the SPPS belongs. The length of spps_subpic_id is subpic_id_len_minus1 + 1 bits. spps_subpic_parameter_set_id identifies the SPPS for reference by other syntax elements. The value of spps_subpic_parameter_set_id shall be in the range of 0 to 63, inclusive. spps_seq_parameter_set_id specifies the value of spps_seq_parameter_set_id for the active SPS. The value of spps_seq_parameter_set_id shall be in the range of 0 to 15, inclusive. single_tile_in_subpic_flag equal to 1 specifies that there is only one tile in each subpicture that references the SPPS. single_tile_in_subpic_flag equal to 0 specifies that there is more than one tile in each subpicture that references the SPPS. num_tile_columns_minus1 plus one specifies the number of tile columns that partition the subpicture. num_tile_columns_minus1 shall be in the range from 0 to PicWidthInCtbsY[spps_subpic_id]-1, inclusive. When not present, the value of num_tile_columns_minus1 is inferred to be equal to 0. num_tile_rows_minus1 plus one specifies the number of tile rows that partition the subpicture. num_tile_rows_minus1 shall be in the range from 0 to PicHeightInCtbsY[spps_subpic_id]-1, inclusive. When not present, the value of num_tile_rows_minus1 is inferred to be equal to 0. The variable NumTilesInPic is set equal to (num_tile_columns_minus1+1)*(num_tile_rows_minus1+1).
[0134] When single_tile_in_subpic_flag is equal to 0, NumTilesInPic shall be greater than 0. uniform_tile_spacing_flag equal to 1 specifies that the tile column borders, and similarly the tile row borders, are uniformly distributed across the subpicture. uniform_tile_spacing_flag equal to 0 specifies that the tile column borders, and similarly the tile row borders, are not uniformly distributed across the subpicture, but are explicitly signaled using the syntax elements tile_column_width_minus1[i] and tile_row_height_minus1[i]. When absent, the value of uniform_tile_spacing_flag is inferred to be equal to 1. tile_column_width_minus1[i] plus 1 specifies the width of the ith tile column in units of CTBs. tile_row_height_minus1[i] plus 1 specifies the height of the ith tile row in units of CTBs.
[0135] The following variables: list ColWidth[i] for i ranging from 0 to num_tile_columns_minus1, inclusive, specifying the width of the ith tile column in CTBs; list RowHeight[j] for j ranging from 0 to num_tile_rows_minus1, inclusive, specifying the height of the jth tile row in CTBs; list ColBd[i] for i ranging from 0 to num_tile_columns_minus1+1, inclusive, specifying the location of the ith tile column boundary in CTBs; list RowBd[j] for j ranging from 0 to num_tile_rows_minus1+1, inclusive, specifying the location of the jth tile row boundary in CTBs; list CtbAddrRsToTs[ctbAddrRs] for ctbAddrRs ranging from 0 to PicSizeInCtbsY-1, inclusive, specifying the conversion from CTB addresses in the CTB raster scan of the picture to CTB addresses in the tile scan; A list CtbAddrTsToRs[ctbAddrTs] for ctbAddrTs ranging from 0 to PicSizeInCtbsY-1 inclusive, specifying the conversion to CTB addresses; a list TileId[ctbAddrTs] for ctbAddrTs ranging from 0 to PicSizeInCtbsY-1 inclusive, specifying the conversion from CTB addresses to tile IDs in tile scanning; a list tileId[ctbAddrTs] for ctbAddrTs ranging from 0 to PicSizeInCtbsY-1 inclusive, specifying the conversion from tile index to the number of CTUs in the tile. a list NumCtusInTile[tileIdx] for dx, a list FirstCtbAddrTs[tileIdx] for tileIdx ranging from 0 to NumTilesInPic-1 inclusive that specifies the conversion from tile ID to CTB address in the tile scan of the first CTB in the tile, a list ColumnWidthInLumaSamples[i] for i ranging from 0 to num_tile_columns_minus1 inclusive that specifies the width of the ith tile column in units of luma samples, andThe list RowHeightInLumaSamples[j], for j ranging from 0 to num_tile_rows_minus1, inclusive, specifying the height of the jth tile row in units of luma samples, is derived by invoking the CTB raster and tile scan conversion process. The values of ColumnWidthInLumaSamples[i], for i ranging from 0 to num_tile_columns_minus1, inclusive, and RowHeightInLumaSamples[j], for j ranging from 0 to num_tile_rows_minus1, inclusive, shall all be greater than 0.
[0136] loop_filter_across_tiles_enabled_flag equal to 1 specifies that in-loop filtering operations may be performed across tile boundaries in subpictures that reference an SPPS. loop_filter_across_tiles_enabled_flag equal to 0 specifies that in-loop filtering operations may not be performed across tile boundaries in subpictures that reference an SPPS. In-loop filtering operations include the deblocking filter, sample adaptive offset filter, and adaptive loop filter operations. When not present, the value of loop_filter_across_tiles_enabled_flag is inferred to be equal to 1. loop_filter_across_subpic_enabled_flag equal to 1 specifies that in-loop filtering operations may be performed across subpicture boundaries in subpictures that reference an SPPS. loop_filter_across_subpic_enabled_flag equal to 0 specifies that in-loop filtering operations may not be performed across subpicture boundaries in subpictures that reference an SPPS. In-loop filtering operations include a deblocking filter, a sample adaptive offset filter, and an adaptive loop filter operation. When not present, the value of loop_filter_across_subpic_enabled_flag is inferred to be equal to the value of loop_filter_across_tiles_enabed_flag.
[0137] The syntax and semantics of a general tile group header are as follows:
[0138] [Table 5]
[0139] The values of the tile group header syntax elements tile_group_pic_parameter_set_id and tile_group_pic_order_cnt_lsb shall be the same in all tile group headers of a coded picture. The value of the tile group header syntax element tile_group_subpic_id shall be the same in all tile group headers of a coded subpicture. tile_group_subpic_id identifies the subpicture to which the tile group belongs. The length of tile_group_subpic_id is subpic_id_len_minus1+1 bits. tile_group_subpic_parameter_set_id specifies the value of spps_subpic_parameter_set_id for the SPPS in use. The value of tile_group_spps_parameter_set_id shall be in the range 0 to 63, inclusive.
[0140] The following variables are derived and override the respective variables derived from the active SPS: PicWidthInLumaSamples=SubpicWidthInLumaSamples[tile_group_subpic_id] PicHeightInLumaSamples=PicHeightInLumaSamples[tile_group_subpic_id] SubPicRightBorderInPic=SubPicRightBorderInPic[tile_group_subpic_id] SubPicBottomBorderInPic=SubPicBottomBorderInPic[tile_group_subpic_id] PicWidthInCtbsY=SubPicWidthInCtbsY[tile_group_subpic_id] PicHeightInCtbsY=SubPicHeightInCtbsY[tile_group_subpic_id] PicSizeInCtbsY=SubPicSizeInCtbsY[tile_group_subpic_id] PicWidthInMinCbsY=SubPicWidthInMinCbsY[tile_group_subpic_id] PicHeightInMinCbsY=SubPicHeightInMinCbsY[tile_group_subpic_id] PicSizeInMinCbsY=SubPicSizeInMinCbsY[tile_group_subpic_id] PicSizeInSamplesY=SubPicSizeInSamplesY[tile_group_subpic_id] PicWidthInSamplesC=SubPicWidthInSamplesC[tile_group_subpic_id] PicHeightInSamplesC=SubPicHeightInSamplesC[tile_group_subpic_id]
[0141] The coding tree unit syntax is as follows:
[0142] [Table 6]
[0143] [Table 7]
[0144] The syntax and semantics of the coding quadtree are as follows:
[0145] [Table 8]
[0146] qt_split_cu_flag[x0][y0] specifies whether a coding unit is split into coding units with half the horizontal size and half the vertical size. The array indices x0, y0 specify the position (x0, y0) of the top-left luma sample of the considered coding block relative to the top-left luma sample of the picture. When qt_split_cu_flag[x0][y0] does not exist, the following applies. If one or more of the following conditions are true, the value of qt_split_cu_flag[x0][y0] is assumed to be equal to 1. When treeType is equal to DUAL_TREE_CHROMA or, otherwise, greater than MaxBtSizeY, x0 + (1 << log2CbSize) is greater than SubPicRightBorderInPic and (1 << log2CbSize) is greater than MaxBtSizeC. When treeType is equal to DUAL_TREE_CHROMA or, otherwise, greater than MaxBtSizeY, y0 + (1 << log2CbSize) is greater than SubPicBottomBorderInPic and (1 << log2CbSize) is greater than MaxBtSizeC.
[0147] Otherwise, if all of the following conditions are true, the value of qt_split_cu_flag[x0][y0] is assumed to be equal to 1. When treeType is equal to DUAL_TREE_CHROMA or, otherwise, greater than MinQtSizeY, x0 + (1 << log2CbSize) is greater than SubPicRightBorderInPic, y0 + (1 << log2CbSize) is greater than SubPicBottomBorderInPic, and (1 << log2CbSize) is greater than MinQtSizeC. Otherwise, the value of qt_split_cu_flag[x0][y0] is assumed to be equal to 0.
[0148] The syntax and semantics of the multi-type tree are as follows.
[0149] [Table 9A]
[0150] [Table 9B]
[0151] [Table 9C]
[0152] mtt_split_cu_flag equal to 0 specifies that the coding unit is not split. mtt_split_cu_flag equal to 1 specifies that the coding unit is split into two coding units using bisection, or into three coding units using trisection, as indicated by the syntax element mtt_split_cu_binary_flag. The bisection or trisection can be either vertical or horizontal, as indicated by the syntax element mtt_split_cu_vertical_flag. When mtt_split_cu_flag is not present, the value of mtt_split_cu_flag is inferred as follows: If one or more of the following conditions are true: x0+cbWidth is greater than SubPicRightBorderInPic, and y0+cbHeight is greater than SubPicBottomBorderInPic, the value of mtt_split_cu_flag is inferred to be equal to 1. Otherwise, the value of mtt_split_cu_flag is inferred to be equal to 0.
[0153] The derivation process for temporal luma motion vector prediction is as follows: The output of this process is a motion vector prediction with 1 / 16 fractional sample precision, mvLXCol, and an availability flag, availableFlagLXCol. The variable currCb specifies the current luma coding block at luma position (xCb, yCb). The variables mvLXCol and availableFlagLXCol are derived as follows: If tile_group_temporal_mvp_enabled_flag is equal to 0 or the reference picture is the current picture, then both components of mvLXCol are set equal to 0 and availableFlagLXCol is set equal to 0. Otherwise (tile_group_temporal_mvp_enabled_flag is equal to 1 and the reference picture is not the current picture), the following ordered steps are applied: The motion vector at the same position in the bottom right is derived as follows: xColBr=xCb+cbWidth (8-355) yColBr=yCb+cbHeight (8-356)
[0154] If yCb>>CtbLog2SizeY is equal to yColBr>>CtbLog2SizeY, yColBr is less than SubPicBottomBorderInPic, and xColBr is less than SubPicRightBorderInPic, the following applies: The variable colCb specifies the luma coding block that encompasses the modified position given by ((xColBr>>3)<<3,(yColBr>>3)<<3) within the co-located picture specified by ColPic. The luma position (xColCb, yColCb) is set equal to the top-left sample of the co-located luma coding block specified by colCb relative to the top-left luma sample of the co-located picture specified by ColPic. The co-located motion vector derivation process is invoked with inputs currCb, colCb, (xColCb, yColCb), refIdxLX, and sbFlag set equal to 0, and the output is assigned to mvLXCol and availableFlagLXCol. Otherwise, both components of mvLXCol are set equal to 0, and availableFlagLXCol is set equal to 0.
[0155] The derivation process for temporal triangle merge candidates is as follows: The variables mvLXColC0, mvLXColC1, availableFlagLXColC0 and availableFlagLXColC1 are derived as follows: If tile_group_temporal_mvp_enabled_flag is equal to 0, then both components mvLXColC0 and mvLXColC1 are set equal to 0, and availableFlagLXColC0 and availableFlagLXColC1 are set equal to 0. Otherwise (tile_group_temporal_mvp_enabled_flag is equal to 1), the following ordered steps are applied: The bottom right co-located motion vector mvLXColC0 is derived as follows: xColBr=xCb+cbWidth (8-392) yColBr=yCb+cbHeight (8-393)
[0156] If yCb>>CtbLog2SizeY is equal to yColBr>>CtbLog2SizeY, yColBr is less than SubPicBottomBorderInPic, and xColBr is less than SubPicRightBorderInPic, the following applies: The variable colCb specifies the luma coding block that encompasses the modified position given by ((xColBr>>3)<<3,(yColBr>>3)<<3) within the co-located picture specified by ColPic. The luma position (xColCb, yColCb) is set equal to the top-left sample of the co-located luma coding block specified by colCb relative to the top-left luma sample of the co-located picture specified by ColPic. The co-located motion vector derivation process is called with inputs currCb, colCb, (xColCb, yColCb), refIdxLXC0, and sbFlag set equal to 0, and the output is assigned to mvLXColC0 and availableFlagLXColC0. Otherwise, both components of mvLXColC0 are set equal to 0, and availableFlagLXColC0 is set equal to 0.
[0157] The derivation process for the constructed affine control point motion vector merging candidate is as follows: For X equal to 0 and 1, the fourth (co-located bottom-right) control point motion vector cpMvLXCorner[3], reference index refIdxLXCorner[3], prediction list usage flag predFlagLXCorner[3], and availability flag availableFlagCorner[3] are derived as follows: For X equal to 0 or 1, the reference index for the temporal merging candidate refIdxLXCorner[3] is set equal to 0. For X equal to 0 or 1, the variables mvLXCol and availableFlagLXCol are derived as follows: If tile_group_temporal_mvp_enabled_flag is equal to 0, both components of mvLXCol are set equal to 0, and availableFlagLXCol is set equal to 0. Otherwise (tile_group_temporal_mvp_enabled_flag is equal to 1), the following applies: xColBr=xCb+cbWidth (8-566) yColBr=yCb+cbHeight (8-567)
[0158] If yCb>>CtbLog2SizeY is equal to yColBr>>CtbLog2SizeY, yColBr is less than SubPicBottomBorderInPic, and xColBr is less than SubPicRightBorderInPic, the following applies: The variable colCb specifies the luma coding block that encompasses the modified position given by ((xColBr>>3)<<3,(yColBr>>3)<<3) within the co-located picture specified by ColPic. The luma position (xColCb, yColCb) is set equal to the top-left sample of the co-located luma coding block specified by colCb relative to the top-left luma sample of the co-located picture specified by ColPic. The co-located motion vector derivation process is called with inputs currCb, colCb, (xColCb, yColCb), refIdxLX, and sbFlag set equal to 0, and the output is assigned to mvLXCol and availableFlagLXCol. Otherwise, both components of mvLXCol are set equal to 0, and availableFlagLXCol is set equal to 0. Replace all occurrences of pic_width_in_luma_samples with PicWidthInLumaSamples. Replace all occurrences of pic_height_in_luma_samples with PicHeightInLumaSamples.
[0159] In the second exemplary embodiment, the syntax and semantics of the sequence parameter set RBSP are as follows:
[0160] [Table 10]
[0161] subpic_id_len_minus1 plus 1 specifies the number of bits used to represent the syntax element subpic_id[i] in an SPS, spps_subpic_id in an SPPS that references an SPS, and tile_group_subpic_id in tile group headers that reference an SPS. The value of subpic_id_len_minus1 shall be in the range Ceil(Log2(num_subpic_minus1+3)) to 8, inclusive. It is a bitstream conformance requirement that there be no overlap between subpicture[i] for i from 0 to num_subpic_minus1, inclusive. Each subpicture may be a temporal motion constrained subpicture.
[0162] The general semantics of a tile group header are as follows: tile_group_subpic_id identifies the subpicture to which the tile group belongs. The length of tile_group_subpic_id is subpic_id_len_minus1+1 bits. tile_group_subpic_id equal to 1 indicates that the tile group does not belong to any subpicture.
[0163] In the third exemplary embodiment, the syntax and semantics of the NAL unit header are as follows:
[0164] [Table 11]
[0165] nuh_subpicture_id_len specifies the number of bits used to represent the syntax element that specifies the subpicture ID. When the value of nuh_subpicture_id_len is greater than 0, the first nuh_subpicture_id_len-th bits after nuh_reserved_zero_4bits specify the ID of the subpicture to which the payload of the NAL unit belongs. When nuh_subpicture_id_len is greater than 0, the value of nuh_subpicture_id_len shall be equal to the value of subpic_id_len_minus1 in the active SPS. The value of nuh_subpicture_id_len for non-VCL NAL units is constrained as follows: If nal_unit_type is equal to SPS_NUT or PPS_NUT, nuh_subpicture_id_len shall be equal to 0. nuh_reserved_zero_3bits shall be equal to '000'. A decoder shall ignore (eg, remove from the bitstream and discard) NAL units whose value of nuh_reserved_zero_3bits is not equal to '000'.
[0166] In the fourth exemplary embodiment, the subpicture nesting syntax is as follows:
[0167] [Table 12]
[0168] all_sub_pictures_flag equal to 1 indicates that the nested SEI message applies to all subpictures. all_sub_pictures_flag equal to 1 specifies that the subpictures to which the nested SEI message applies are explicitly signaled by subsequent syntax elements. nesting_num_sub_pictures_minus1 plus 1 specifies the number of subpictures to which the nested SEI message applies. nesting_sub_picture_id[i] indicates the subpicture ID of the ith subpicture to which the nested SEI message applies. The nesting_sub_picture_id[i] syntax element is represented by Ceil(Log2(nesting_num_sub_pictures_minus1 + 1)) bits. sub_picture_nesting_zero_bit shall be equal to 0.
[0169] 9 is a schematic diagram of an exemplary video coding device 900. The video coding device 900 is suitable for implementing the disclosed examples / embodiments as described herein. The video coding device 900 includes a downstream port 920, an upstream port 950, and / or a transceiver unit (Tx / Rx) 910 including a transmitter and / or a receiver for communicating data upstream and / or downstream over a network. The video coding device 900 also includes a processor 930 including a logic unit and / or central processing unit (CPU) for processing data and a memory 932 for storing data. The video coding device 900 may also include electrical components, optical-electrical (OE) components, electrical-optical (EO) components, and / or wireless communication components coupled to the upstream port 950 and / or downstream port 920 for communication of data over a telecommunications network, an optical communication network, or a wireless communication network. The video coding device 900 may also include an input and / or output (I / O) device 960 for communicating data to and from a user. The I / O devices 960 may include output devices such as a display for displaying video data, speakers for outputting audio data, etc. The I / O devices 960 may also include input devices such as a keyboard, mouse, trackball, etc., and / or corresponding interfaces for interacting with such output devices.
[0170] The processor 930 is implemented by hardware and software. The processor 930 may be implemented as one or more CPU chips, cores (e.g., as a multi-core processor), field programmable gate arrays (FPGAs), application specific integrated circuits (ASICs), and digital signal processors (DSPs). The processor 930 is in communication with the downstream port 920, the Tx / Rx 910, the upstream port 950, and the memory 932. The processor 930 comprises a coding module 914. The coding module 914 implements the disclosed embodiments described above, such as the methods 100, 1000, 1100, and / or the mechanism 700, which may utilize the bitstream 500, the picture 600, and / or the picture 800. The coding module 914 may also implement any other method / mechanism described herein. Additionally, the coding module 914 may implement the codec system 200, the encoder 300, and / or the decoder 400. For example, the coding module 914 may be utilized to signal and / or obtain the location and size of subpictures in the SPS. In another example, the coding module 914 may constrain subpicture widths and subpicture heights to be multiples of the CTU size, unless such subpictures are located at the right border of the picture or the bottom border of the picture, respectively. In another example, the coding module 914 may constrain subpictures to encompass the picture without gaps or overlaps. In another example, the coding module 914 may be utilized to signal and / or obtain data indicating that some subpictures are temporal motion constrained subpictures and others are not. In another example, the coding module 914 may signal the complete set of subpicture IDs in the SPS and include a subpicture ID in each slice header to indicate the subpicture that includes the corresponding slice. In another example, the coding module 914 may signal the level of each subpicture.Thus, coding module 914 allows video coding device 900 to provide additional functionality and avoid certain processing to reduce processing overhead when partitioning and coding video data and / or to increase coding efficiency. Thus, coding module 914 improves the functionality of video coding device 900 as well as addresses problems specific to video coding techniques. Furthermore, coding module 914 performs transformations of video coding device 900 into different states. Alternatively, coding module 914 may be implemented as instructions stored in memory 932 and executed by processor 930 (e.g., as a computer program product stored on a non-transitory medium).
[0171] Memory 932 comprises one or more memory types such as a disk, a tape drive, a solid-state drive, a read-only memory (ROM), a random access memory (RAM), a flash memory, a ternary content addressable memory (TCAM), a static random access memory (SRAM), etc. Memory 932 may be used as an overflow data storage device to store programs when such programs are selected for execution and to store instructions and data read during program execution.
[0172] 10 is a flowchart of an example method 1000 of encoding sub-picture IDs in a bitstream, such as bitstream 500, to support decoding of sub-pictures, such as sub-pictures 522, 523, 622, 722, and / or 822. Method 1000 may be utilized by an encoder, such as codec system 200, encoder 300, and / or video coding device 900, when performing method 100.
[0173] Method 1000 may begin when an encoder receives a video sequence including multiple pictures and decides to encode the video sequence into a bitstream, for example, based on user input. The video sequence is partitioned into pictures / images / frames for further partitioning before encoding. In step 1001, the picture is partitioned into multiple sub-pictures. Each of the multiple sub-pictures is further partitioned into one or more slices. In some examples, the partitioning is constrained so that the union of the multiple sub-pictures encompasses the entire area of the picture without gaps or overlaps.
[0174] In step 1003, the SPS is encoded into a bitstream. The SPS comprises a subpicture ID of each subpicture partitioned from the picture. The SPS may further comprise a subpicture size for each of the multiple subpictures. The subpicture size may include a subpicture height in luma samples and a subpicture width in luma samples. The SPS may further comprise a subpicture position for each of the multiple subpictures. The subpicture position may include an offset distance between a top-left sample of the corresponding subpicture and a top-left sample of the picture. The SPS may further comprise an indication that one or more of the subpictures are temporal motion constrained subpictures.
[0175] In step 1005, a slice header is coded into a bitstream. The slice header includes a sub-picture ID indicating that the slice associated with the slice header is included in the indicated sub-picture. In step 1007, one or more of the sub-pictures are also coded into the bitstream. In step 1009, the bitstream is stored for communication to a decoder. The bitstream may then be transmitted to the decoder as desired. In some examples, the sub-bitstream may be extracted from the coded bitstream. In such cases, the transmitted bitstream is the sub-bitstream. In other examples, the coded bitstream may be transmitted for extraction of the sub-bitstream in the decoder. In yet other examples, the coded bitstream may be decoded and displayed without extraction of the sub-bitstream. In any of these examples, a complete list of all sub-picture IDs may be transmitted in the SPS along with associated size information. Each slice header includes a sub-picture ID indicating the sub-picture that includes the corresponding slice. In this way, a sub-picture and corresponding slice may be extracted and positioned without reference to other sub-pictures. Thus, sub-picture IDs facilitate improved performance and / or coding efficiency, which reduces the use of network resources, memory resources, and / or processing resources in the encoder and decoder.
[0176] 11 is a flowchart of an example method 1100 of decoding a bitstream, such as bitstream 500 and / or sub-bitstream 501, of a subpicture, such as subpictures 522, 523, 622, 722, and / or 822, based on a subpicture ID. Method 1100 may be utilized by a decoder, such as codec system 200, decoder 400, and / or video coding device 900, when performing method 100. For example, method 1100 may be applied to decode a bitstream created as a result of method 1100.
[0177] Method 1100 may begin when a decoder begins receiving a bitstream that includes subpictures. The bitstream may include a complete video sequence, or the bitstream may be a sub-bitstream that includes a reduced set of subpictures for separate extraction. In step 1101, a bitstream is received. The bitstream comprises an SPS, one or more subpictures partitioned from a picture, and one or more slice headers associated with slices included in the one or more subpictures.
[0178] In step 1103, the SPS is parsed to obtain subpicture IDs of one or more subpictures. Furthermore, the slice header is parsed to obtain a current subpicture ID, which indicates that the slice associated with the slice header is included in the current subpicture identified by the current subpicture ID. The SPS may further comprise a subpicture size of each subpicture partitioned from the picture. The subpicture size may include a subpicture height in luma samples and a subpicture width in luma samples. The SPS may further comprise a subpicture position of each subpicture partitioned from the picture. The subpicture position may include an offset distance between the top-left sample of the corresponding subpicture and the top-left sample of the picture. The SPS may further comprise an indication that one or more of the subpictures are temporal motion constrained subpictures. Thus, the SPS may also be parsed to obtain subpicture sizes, subpicture positions, and / or any indication of temporal motion constrained subpictures.
[0179] In step 1105, a slice may be matched with a current subpicture from one or more subpictures based on the current subpicture ID in the slice header. Furthermore, the slice may be partitioned based on the subpicture size and subpicture position of the current subpicture. The current subpicture may then be decoded based on the subpicture ID to create a video sequence, for example, by utilizing the correlation between the subpicture ID between the SPS and the slice header and the position of the slice determined based on the subpicture position and size. In step 1107, the video sequence may then be transmitted for display. Thus, a complete list of all subpicture IDs may be transmitted in the SPS along with associated size information. Each slice header includes a subpicture ID indicating the subpicture that contains the corresponding slice. In this way, a subpicture and corresponding slice may be extracted and located without reference to other subpictures. Therefore, the subpicture IDs facilitate improved performance and / or coding efficiency, which reduces the use of network resources, memory resources, and / or processing resources in the encoder and decoder.
[0180] 12 is a schematic diagram of an example system 1200 for signaling sub-picture IDs, such as sub-picture IDs of sub-pictures 522, 523, 622, 722, and / or 822, via a bitstream, such as bitstream 500 and / or sub-bitstream 501. System 1200 may be implemented by an encoder and decoder, such as codec system 200, encoder 300, decoder 400, and / or video coding device 900. Additionally, system 1200 may be utilized when performing methods 100, 1000, and / or 1100.
[0181] System 1200 includes a video encoder 1202. Video encoder 1202 comprises a partition module 1201 for partitioning a picture into multiple subpictures, partitioning each of the multiple subpictures into one or more slices, and partitioning each of the multiple subpictures into one or more slices. Video encoder 1202 further comprises an encoding module 1203 for encoding an SPS comprising a subpicture ID of each subpicture partitioned from the picture into a bitstream, encoding a slice header comprising a subpicture ID indicating that a slice is included in an indicated subpicture into the bitstream, and encoding one or more of the multiple subpictures into the bitstream. Video encoder 1202 further comprises a storage module 1205 for storing the bitstream for communication to a decoder. Video encoder 1202 further comprises a transmission module 1207 for transmitting a bitstream including the subpictures and the subpicture IDs to the decoder. Video encoder 1202 may be further configured to perform any of the steps of method 1000.
[0182] System 1200 also includes a video decoder 1210. The video decoder 1210 comprises a receiving module 1211 for receiving a bitstream comprising a sequence parameter set (SPS), one or more subpictures partitioned from a picture, and one or more slice headers associated with one or more slices. The video decoder 1210 further comprises a parsing module 1213 for parsing the SPS to obtain a subpicture identifier (ID) for each of the one or more subpictures and parsing the slice header to obtain a current subpicture ID indicating that the slice is included in a current subpicture from the one or more subpictures. The video decoder 1210 further comprises a decoding module 1215 for decoding the current subpicture based on the subpicture ID to create a video sequence. The video decoder 1110 further comprises a transport module 1217 for transporting the video sequence for display. The video decoder 1210 may be further configured to perform any of the steps of method 1100.
[0183] A first component is directly coupled to a second component when there are no intervening components other than a line, wire, or another medium between the first and second components. A first component is indirectly coupled to a second component when there are intervening components other than a line, wire, or another medium between the first and second components. The term "coupled" and variations thereof include both directly coupled and indirectly coupled. The use of the term "about," unless otherwise stated, means a range that includes ±10% of the number thereafter.
[0184] It should also be understood that the steps of the exemplary methods described herein do not necessarily have to be performed in the order described, and that the order of steps in such methods should be understood to be merely exemplary. Similarly, additional steps may be included in such methods, and some steps may be omitted or combined, in a manner consistent with various embodiments of the present disclosure.
[0185] Although several embodiments have been provided in this disclosure, it will be understood that the disclosed systems and methods may be embodied in many other specific forms without departing from the spirit or scope of the disclosure. The examples should be considered illustrative rather than limiting, and the intention is not to be limited to the details provided herein. For example, in another system, various elements or components may be combined or integrated, or certain features may be omitted or not implemented.
[0186] Additionally, the techniques, systems, subsystems, and methods described and illustrated in various embodiments as individual or separate may be combined or integrated with other systems, components, techniques, or methods without departing from the scope of the present disclosure. Other examples of changes, substitutions, and alterations will be ascertainable by those skilled in the art and could be made without departing from the spirit and scope disclosed herein. [Explanation of symbols]
[0187] 200 Codec System 201 segmented video signal 211 General-purpose coder control component 213 Transform Scaling and Quantization Components 215 Intra-picture Estimation Component 217 Intra-picture Prediction Component 219 Motion Compensation Component 221 Motion Estimation Component 223 Decoded Picture Buffer Component 225 In-Loop Filter Components 227 Filter Control Analysis Component 229 Scaling and Inverse Transformation Components 231 Header Formatting and CABAC Components 301 Segmented Video Signal 313 Transform and Quantize Components 317 Intra-picture Prediction Component 321 Motion Compensation Component 323 Decoded Picture Buffer Component 325 In-Loop Filter Components 329 Inverse Transform and Quantization Components 331 Entropy Coding Component 417 Intra-picture Prediction Component 421 Motion Compensation Component 423 Decoded Picture Buffer Component 425 In-Loop Filter Components 429 Inverse Transform and Quantization Components 433 Entropy Decoding Component 500 bitstream 501 Sub-Bitstream 510 SPS 512 PPS 514 slice header 515 SEI Message 520 Image Data 521 Pictures 522 Subpictures 523 Subpictures 524 slices 525 slices 531 Subpicture Size 532 Subpicture Position 533 Subpicture ID 534 Motion Constraint Subpicture Flag 535 Subpicture Level 600 pictures 622 Subpicture 631 Subpicture Size 631a Subpicture Width 631b Subpicture Height 632 position 633 Subpicture ID 634 Time-Motion Constrained Subpictures 642 Upper left sample 700 mechanism 722 Subpicture 724 slices 733 Subpicture ID 742 top left corner 801 Picture right border 802 Picture bottom border 822 Subpicture 825 CTU 900 Video Coding Device 910 Transmitter / Receiver 914 Coding Module 920 downstream ports 930 processor 932 memory 950 upstream ports 960 I / O devices 1200 System 1201 Division Module 1202 Video Encoder 1203 Encoding Module 1207 Transmitting Module 1210 Video Decoder 1211 Receiver Module 1213 Analysis Module 1215 Decryption Module 1217 Transfer Module
Claims
1. 1. A method implemented in a decoder, comprising: receiving, by a receiver of the decoder, a bitstream comprising a sequence parameter set (SPS), one or more sub-pictures partitioned from a picture, and one or more slice headers associated with one or more slices; parsing, by a processor of the decoder, the SPS to obtain sub-picture identifiers (IDs) of the one or more sub-pictures; parsing, by the processor, the slice header to obtain a current sub-picture ID associated with a current sub-picture, the current sub-picture ID indicating that the slice is included in the current sub-picture from the one or more sub-pictures; decoding, by the processor, the current sub-picture based on the current sub-picture ID to create a video sequence; transferring, by said processor, said video sequence for display; A method comprising:
2. The method of claim 1 , wherein the SPS further comprises a sub-picture size for each sub-picture partitioned from the picture.
3. The method of claim 1 or 2, wherein the SPS further comprises a sub-picture position of each sub-picture partitioned from the picture.
4. the step of decoding the current sub-picture comprises: matching the slice with the current subpicture based on the current subpicture ID; positioning the slice based on the subpicture size and the subpicture position of the current subpicture; 4. The method of claim 1, comprising:
5. The method of claim 1 , wherein the sub-picture position comprises an offset distance between a top-left sample of the current sub-picture and a top-left sample of the picture.
6. The method of claim 1 , wherein the sub-picture size comprises a sub-picture height in luma samples and a sub-picture width in luma samples.
7. The method of claim 1 , wherein the SPS further comprises an indication that one or more of the sub-pictures are motion constrained sub-pictures.
8. 1. A method implemented in an encoder, comprising: partitioning, by a processor of the encoder, a picture into a plurality of sub-pictures; partitioning, by the processor, each of the plurality of sub-pictures into one or more slices; encoding, by the processor, a sequence parameter set (SPS) comprising sub-picture identifiers (IDs) of the plurality of sub-pictures partitioned from the picture into a bitstream; encoding, by the processor, a slice header into the bitstream, the slice header including the sub-picture ID to indicate that the slice is included in an indicated sub-picture; encoding, by the processor, one or more of the plurality of sub-pictures into the bitstream; storing the bitstream in a memory of the encoder for communication to a decoder; A method comprising:
9. The method of claim 8 , wherein the SPS further comprises a subpicture size for each of the plurality of subpictures.
10. The method of claim 8 or 9, wherein the SPS further comprises a sub-picture position for each of the plurality of sub-pictures.
11. 11. The method of claim 8, wherein the sub-picture position comprises an offset distance between a top left sample of a corresponding sub-picture and a top left sample of the picture.
12. 12. The method of claim 8, wherein the sub-picture size comprises a sub-picture height in luma samples and a sub-picture width in luma samples.
13. The method of claim 8 , wherein the SPS further comprises an indication that one or more of the sub-pictures are motion constrained sub-pictures.
14. 14. The method of claim 8, wherein the union of the plurality of sub-pictures encompasses the entire area of the picture without gaps and without overlaps.
15. 15. A video coding device comprising: a processor; a memory; a receiver coupled to the processor; and a transmitter coupled to the processor, wherein the processor, memory, receiver, and transmitter are configured to perform the method of any one of claims 1 to 14.
16. 15. A non-transitory computer-readable medium comprising a computer program product for use by a video coding device, the computer program product comprising computer-executable instructions stored on the non-transitory computer-readable medium that, when executed by a processor, causes the video coding device to perform the method of any one of claims 1 to 14.
17. receiving means for receiving a bitstream comprising a sequence parameter set (SPS), one or more sub-pictures partitioned from a picture, and one or more slice headers associated with one or more slices; Parsing the SPS to obtain subpicture identifiers (IDs) for the one or more subpictures; Parsing the slice header to obtain a current subpicture ID associated with a current subpicture, the current subpicture ID indicating that the slice is included in the current subpicture from the one or more subpictures. and analytical means for decoding means for decoding the current sub-picture based on the current sub-picture ID to create a video sequence; transfer means for transferring said video sequence for display; A decoder comprising:
18. 18. The decoder of claim 17, wherein the decoder is further configured to perform the method of any one of claims 1 to 7.
19. Partitioning the picture into a plurality of sub-pictures; partitioning each of the plurality of sub-pictures into one or more slices; a classification means for encoding a sequence parameter set (SPS) comprising sub-picture identifiers (IDs) of the plurality of sub-pictures partitioned from the picture into a bitstream; encoding a slice header into the bitstream, the slice header comprising a sub-picture ID indicating that the slice is included in an indicated sub-picture; encoding one or more of the plurality of sub-pictures into the bitstream; and encoding means for storage means for storing said bitstream for communication to a decoder; An encoder comprising:
20. 20. The encoder of claim 19, wherein the encoder is further configured to perform the method of any one of claims 8 to 14.