Slicing and Tiling in Video Coding

JP7651821B2Active Publication Date: 2025-03-27HUAWEI TECH CO LTD
View PDF 2 Cites 0 Cited by

Patent Information

Application Number
JP2023191416
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2018-09-14
Filing Date
2023-11-09
Publication Date
2025-03-27
Estimated Expiration
2039-09-13

Smart Images

  • Figure 0007651821000010
    Figure 0007651821000010
  • Figure 0007651821000011
    Figure 0007651821000011
  • Figure 0007651821000012
    Figure 0007651821000012
Patent Text Reader

Abstract

To disclose a video image coding mechanism.SOLUTION: A mechanism contains a step of receiving a bit stream containing a video image coding layer (VCL) network abstraction layer (NAL) unit containing slice of an image data divided into a plurality of tiles in a decoder. The number of tiles in the VCL NAL unit is calculated. The number of entry point off-sets related to each tile is calculated so that it is less than from the number of tiles in the VCL NAL unit by one. Each entry point off-set indicates a start position of the corresponded tile in the VCL NAL unit. The number of entry point off-sets is not specifically transmitted in a bit stream in a signal. On the basis of the number of entry point off-sets, an entry point off-set related to each tile is acquired. Each tile is decoded by the entry point off-set to generate a reconstruction image.SELECTED DRAWING: Figure 5
Need to check novelty before this filing date? Find Prior Art

Description

[Technical field]

[0001] This patent application claims the benefit of U.S. Provisional Patent Application No. 62 / 731,696, entitled “Slicing and Tiling In Video Coding,” filed Sep. 14, 2018 by Ye-Kui Wang et al., which is incorporated herein by reference. FIELD This disclosure relates generally to video coding, and more specifically to partitioning images into slices, tiles, and coding tree units (CTUs) to help increase compression in video coding. [Background technology]

[0002] The amount of video data required to render even a relatively short video can be significant, which can pose challenges when streaming or otherwise communicating the data over communication networks with limited bandwidth capacity. Thus, video data is typically compressed before being communicated over today's telecommunications networks. The size of the video can also be an issue when the video is stored in a storage device, since memory resources may be limited. Video compression devices often use software and / or hardware to code the video data at the source prior to transmission or storage, thereby reducing the amount of data required to represent a digital video image. The compressed data is then received at the destination by a video decompressor, which decodes the video data. With limited network resources and ever-increasing demands 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

[0003] In one embodiment, the disclosure includes a method implemented in a decoder. The method includes receiving, by a receiver of the decoder, a bitstream including a video coding layer (VCL) network abstraction layer (NAL) unit including a slice of image data divided into a plurality of tiles. The method further includes determining, by a processor of the decoder, a number of tiles in the VCL NAL unit. The method further includes determining, by the processor, a number of entry point offsets for the tiles as one less than the number of tiles in the VCL NAL unit, each entry point offset pointing to a start position of a corresponding tile in the VCL NAL unit, the number of entry point offsets not being explicitly signaled in the bitstream. The method further includes obtaining, by the processor, an entry point offset for the tile based on the number of entry point offsets. The method further includes decoding, by the processor, the tiles at the entry point offsets to generate a reconstructed image. In some systems, the number of entry point offsets for tiles in a slice is explicitly signaled. The disclosed system estimates the number of entry point offsets to be one less than the number of tiles. By using this estimation, a number of entry point offsets can be omitted from the bitstream, thus further shortening the bitstream, thus reducing the network resources used to transmit the bitstream, and further reducing memory resource usage in both the encoder and the decoder.

[0004] Optionally, in any of the aforementioned aspects, another implementation of the aspect provides that the entry point offset for the tile is obtained from a slice header associated with the slice.

[0005] Optionally, in any of the above aspects, another implementation of the aspect provides that the bitstream includes a plurality of VCL NAL units, each VCL NAL unit including a single slice of image data divided into an integer number of tiles. In some systems, slices and tiles are separate partitioning schemes. By requiring slices to be subdivided into tiles, information can be estimated. For example, some tile IDs within a slice can be estimated by the first and last tiles within the slice. Furthermore, slice boundaries can be signaled based on tile IDs rather than the relative position of the slice within a frame. This then supports an addressing scheme that does not require rewriting slice headers when signaling subframes. Thus, the bitstream can be further shortened in some examples, thereby saving memory and network communication resources. Furthermore, processing resources can be saved at the encoder and / or decoder.

[0006] Optionally, in any of the aforementioned aspects, another implementation of the aspect provides that image data is coded as multiple coding tree units (CTUs) contained in each tile, and addresses of the CTUs in the VCL NAL unit are assigned based on a tile identifier (ID) corresponding to the tile. For example, addressing the CTUs based on the tile ID allows for an address to be estimated based on the tile ID, which may shorten the bitstream. Furthermore, the tile-based addressing of the CTUs supports CTU coding that does not refer to a coding process performed outside the current slice. Therefore, addressing the CTUs based on the tile ID supports parallel processing and thus supports increased decoding speed at a decoder.

[0007] Optionally, in any of the aforementioned aspects, another implementation of the aspect provides that decoding the tile includes decoding the CTU based on an address of the CTU in a VCL NAL unit that is explicitly signaled in the slice header.

[0008] Optionally, in any of the aforementioned aspects, another implementation of the aspect provides that decoding the tile includes determining, by a processor, an address of a CTU in the VCL NAL unit based on a tile ID of a first tile included in the VCL NAL unit, and decoding, by the processor, the CTU based on the address of the CTU.

[0009] Optionally, in any of the above aspects, another implementation of the aspect provides that the CTU does not include a flag indicating the last CTU in the VCL NAL unit, and the VCL NAL unit includes padding bits immediately after the last CTU in each tile. In some systems, a flag is currently used in each CTU to indicate whether the CTU is the last CTU in the VCL NAL unit. In this disclosure, slices and CTUs are addressed based on tile IDs, and a VCL NAL unit includes a single slice. Thus, a decoder can determine which CTU is the last CTU in a slice, and therefore the last CTU in a VCL NAL unit, without such a flag. Because a video sequence includes many frames, and a frame includes many CTUs, omitting bits of data from every CTU encoding can significantly shorten the bitstream. Therefore, the network resources used to transmit the bitstream are reduced. Furthermore, memory resource usage in both the encoder and the decoder is reduced.

[0010] Optionally, in any of the aforementioned aspects, another implementation of the aspect provides further comprising transmitting, by the processor, the reconstructed image to a display as part of a reconstructed video sequence.

[0011] In one embodiment, the disclosure includes a method implemented in an encoder. The method includes dividing, by a processor of the encoder, an image into at least one slice and dividing the at least one slice into a plurality of tiles. The method further includes encoding, by the processor, the tiles into a bitstream of at least one VCL NAL unit. The method further includes encoding, by the processor, a number of tiles in the VCL NAL unit in the bitstream. The method further includes encoding, by the processor, entry point offsets for the tiles in the bitstream, each entry point offset pointing to a start position of a corresponding tile in the VCL NAL unit, and the number of entry point offsets is not explicitly signaled in the bitstream. The method further includes transmitting, by a transmitter of the encoder, a bitstream without the number of entry point offsets to support decoding the tiles according to an estimate that the number of entry point offsets for the tiles is one less than the number of tiles in the VCL NAL unit. In some systems, the number of entry point offsets for tiles in a slice is explicitly signaled. The disclosed system estimates the number of entry point offsets to be one less than the number of tiles. Using this estimate, the number of entry point offsets can be omitted from the bitstream. Thus, the bitstream is further shortened. Hence, the network resources used to transmit the bitstream are reduced. Furthermore, memory resource usage in both the encoder and the decoder is reduced.

[0012] Optionally, in any of the aforementioned aspects, another implementation of the aspect provides that the entry point offset for the tile is encoded in a slice header associated with the slice.

[0013] Optionally, in any of the above aspects, another implementation of the aspect provides that the bitstream includes a plurality of VCL NAL units, each VCL NAL unit including a single slice of an image divided into an integer number of tiles. In some systems, slices and tiles are separate partitioning schemes. By requiring slices to be subdivided into tiles, information can be estimated. For example, some tile IDs within a slice can be estimated by the first and last tiles within the slice. Furthermore, slice boundaries can be signaled based on tile IDs rather than the relative position of the slice within a frame. This then supports an addressing scheme that does not require rewriting slice headers when signaling subframes. Thus, the bitstream can be further shortened in some examples, thereby saving memory and network communication resources. Furthermore, processing resources can be saved at the encoder and / or decoder.

[0014] Optionally, in any of the aforementioned aspects, another implementation of the aspect provides for splitting a tile into multiple CTUs and assigning addresses of the CTUs in the VCL NAL unit based on tile identifiers (IDs) corresponding to the tiles. For example, addressing the CTUs based on the tile IDs allows for estimating addresses based on the tile IDs, which may shorten the bitstream. Furthermore, tile-based addressing of the CTUs supports CTU coding that does not refer to a coding process that is performed outside the current slice. Therefore, addressing the CTUs based on the tile IDs supports parallel processing and thus supports increased decoding speed at the decoder.

[0015] Optionally, in any of the aforementioned aspects, another implementation of the aspect provides further comprising explicitly signaling an address of the CTU in the VCL NAL unit in a slice header.

[0016] Optionally, in any of the above aspects, another implementation of the aspect provides that the addresses of the CTUs in the VCL NAL unit are omitted from the bitstream and support determining the addresses of the CTUs at the decoder based on the tile ID of the first tile contained in the VCL NAL unit. In this disclosure, slices and CTUs are addressed based on tile IDs, and the VCL NAL unit contains a single slice. Thus, the decoder can determine which CTU is the last CTU in the slice, and therefore the last CTU in the VCL NAL unit, without such a flag. Because a video sequence contains many frames, and a frame contains many CTUs, omitting bits of data from every CTU encoding can significantly shorten the bitstream. Thus, the network resources used to transmit the bitstream are reduced. Furthermore, memory resource usage at both the encoder and the decoder is reduced.

[0017] Optionally, in any of the aforementioned aspects, another implementation of the aspect provides that the CTU does not include a flag indicating the last CTU in the VCL NAL unit, and the VCL NAL unit includes padding bits immediately after the last CTU in each tile.

[0018] In one embodiment, the present disclosure includes a video coding apparatus having a processor, a receiver coupled to the processor, and a transmitter coupled to the processor, the processor, the receiver, and the transmitter configured to perform the method of any of the aforementioned aspects.

[0019] In one embodiment, the present disclosure includes a non-transitory computer-readable medium having a computer program product for use by a video coding device, the computer program product having 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 of the aforementioned aspects.

[0020] In one embodiment, the disclosure includes a decoder having receiving means for receiving a bitstream including a VCL network abstraction layer (NAL) unit including a slice of image data divided into a plurality of tiles. The decoder further has determining means for determining a number of tiles in the VCL NAL unit and determining a number of entry point offsets for the tiles as one less than the number of tiles in the VCL NAL unit, each entry point offset pointing to a start position of a corresponding tile in the VCL NAL unit, and the number of entry point offsets is not explicitly signaled in the bitstream. The decoder further has obtaining means for obtaining an entry point offset for the tile based on the number of entry point offsets. The decoder further has decoding means for decoding the tiles at the entry point offsets to generate a reconstructed image.

[0021] Optionally, in any of the aforementioned aspects, another implementation of the aspect provides that the encoder is further configured to perform the method of any of the aforementioned aspects.

[0022] In one embodiment, the disclosure includes an encoder having a partitioning means for partitioning an image into at least one slice and partitioning the at least one slice into a plurality of tiles. The encoder further has an encoding means for encoding tiles into a bitstream of at least one VCL NAL unit, encoding a number of tiles in the VCL NAL unit in the bitstream, and encoding entry point offsets for the tiles in the bitstream, each entry point offset pointing to a start position of a corresponding tile in the VCL NAL unit, and the number of entry point offsets is not explicitly signaled in the bitstream. The encoder further has a transmitting means for transmitting a bitstream without the number of entry point offsets to support decoding the tiles according to an estimation that the number of entry point offsets for the tiles is one less than the number of tiles in the VCL NAL unit.

[0023] Optionally, in any of the aforementioned aspects, another implementation of the aspect provides that the encoder is further configured to perform the method of any of the aforementioned 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. [Brief description of the drawings]

[0026] For a more complete understanding of this disclosure, reference should be made to the following brief description taken in conjunction with the accompanying drawings and detailed description, in which like reference characters represent like parts. [Figure 1] 1 is a flow chart of an example of a method for coding a video signal. [Diagram 2]1 is a schematic diagram of an example of a coding and decoding (codec) system for video coding. [Diagram 3] FIG. 1 is a schematic diagram illustrating an example of a video encoder. [Figure 4] FIG. 2 is a schematic diagram illustrating an example of a video decoder. [Diagram 5] FIG. 1 is a schematic diagram illustrating an example of a bitstream including an encoded video sequence. [Figure 6] FIG. 2 is a schematic diagram illustrating an example of an image divided for coding. [Figure 7] FIG. 1 is a schematic diagram of an example of a video coding device. [Figure 8] 1 is a flow chart of an example of a method for encoding an image into a bitstream. [Figure 9] 1 is a flow chart of an example of a method for decoding an image from a bitstream. [Figure 10] 1 is a schematic diagram of an example system for coding a video sequence of images into a bitstream. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0027] It should be understood at the outset that, although exemplary implementations of one or more embodiments are presented below, the disclosed systems and / or methods may be implemented using any number of technologies, whether currently known or in existence, and that this disclosure should in no way be limited to the exemplary implementations, drawings and technologies illustrated below, including the exemplary designs and implementations shown and described herein, but which may be modified within the scope of the appended claims and their full equivalents.

[0028] Numerous video compression techniques can be used to reduce the size of video files with minimal 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. In block-based video coding, a video slice (e.g., a video picture or a portion of a video picture) may be divided 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 an intra-coded (I) slice of a picture are coded using spatial prediction with respect to reference samples of neighboring blocks in the same picture. Video blocks in an inter-coded unidirectionally predicted (P) or bidirectionally predicted (B) slice of a picture may be coded by using spatial prediction with respect to reference samples of neighboring blocks in the same picture or temporal prediction with respect to reference samples in other reference pictures. A picture may also be referred to as a frame and / or an image, and a reference picture may also be referred to as a reference frame and / or a reference image. Spatial or temporal prediction results in a prediction block that represents an image block. Residual data represents pixel differences between the original image block and the prediction block. Inter-coded blocks are therefore coded according to a motion vector that points to a block of reference samples that form the prediction block, and residual data that indicates differences between the coded block and the prediction block. Intra-coded blocks are coded according to an intra-coding mode and residual data. For further compression, the residual data may be transformed from the pixel domain to a transform domain. These result in residual transform coefficients, which may be quantized. The quantized transform coefficients may initially be arranged in a two-dimensional array. The quantized transform coefficients may be scanned to generate a one-dimensional vector of transform coefficients.Further compression can be achieved by applying entropy coding, such video compression techniques being described in further detail below.

[0029] To ensure that the encoded video can be accurately decoded, the video is encoded and decoded according to a corresponding video coding standard, including Advanced Video Coding (AVC), also known as International Telecommunications 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, 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) is working on a video coding standard called Versatile Video Coding (VVC). VVC is included in Working Drafts (WDs), including JVET-K1001-v4 and JVET-K1002-v1.

[0030] To code a video image, the image is first partitioned and the partitions are coded into a bitstream. Various image partitioning schemes are available. For example, an image can be partitioned into normal slices, dependent slices, tiles, and / or partitioned according to Wavefront Parallel Processing (WPP). For simplicity, HEVC constrains the encoder to only use normal slices, dependent slices, tiles, WPP, and combinations thereof when partitioning slices into groups of CTBs for video coding. Such partitioning can be applied to support Maximum Transfer Unit (MTU) size matching, 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 partitioned into two packets through a process called fragmentation.

[0031] A normal slice, also simply called a slice, is a subdivision of an image that can be reconstructed independently of other normal slices in the same image, despite some interdependencies due to loop filtering processes. Each normal slice is encapsulated in its own network abstraction layer (NAL) unit for transmission. Also, to support independent reconstruction, the dependency of intra-picture prediction (intra-sample prediction, motion information prediction, coding mode prediction) and entropy coding across slice boundaries can be disabled. Such independent reconstruction supports parallelization. For example, normal slice-based parallelization uses only minimal inter-processor or inter-core communication. However, because each normal slice is independent, a separate slice header is associated with each slice. The use of normal slices can incur substantial coding overhead due to the bit cost of the slice header per slice and the lack of prediction across slice boundaries. Also, normal slices can be used to support meeting MTU size requirements. Specifically, because regular slices may be encapsulated in separate NAL units and coded independently, each regular slice should be smaller than the MTU in the MTU scheme to avoid fragmenting the slice into multiple packets. Therefore, the parallelization goal and the MTU size matching goal may impose conflicting requirements on the slice layout in a picture.

[0032] Dependent slices are similar to normal slices, but have shortened slice headers that allow splitting on picture treeblock boundaries without breaking intra-picture prediction. Dependent slices thus allow normal slices to be fragmented into multiple NAL units, which provides reduced end-to-end delay by allowing parts of a normal slice to be sent before the coding of the entire normal slice is complete.

[0033] A tile is a subdivision of an image created by horizontal and vertical boundaries that produce columns and rows of tiles. 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 in the first tile is coded in raster scan order before proceeding to the CTB in the next tile. As with normal slices, tiles break the intra-picture prediction dependency and the entropy decoding dependency. However, tiles may not be included in separate NAL units, and thus tiles may not be used for MTU size matching. Each tile may be processed by one processor / core, and inter-processor / inter-core communication used for intra-picture prediction between processing units that decode adjacent tiles may be limited to conveying shared slice headers (when adjacent tiles are in the same slice) and performing loop filtering related sharing of reconstructed samples and metadata. If 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 satisfied: 1) all coded treeblocks in a slice belong to the same tile; and 2) all coded treeblocks in a tile belong to the same slice.

[0034] In WPP, a picture is split into multiple single-row CTBs. The entropy decoding and prediction mechanism can use data from the CTBs of other rows. Parallel processing is possible through parallel decoding of multiple CTB rows. For example, the current row can be decoded in parallel with the previous row. However, the decoding of the current row is delayed by two CTBs from the decoding process of the previous row. This delay ensures that data for the CTBs above the current CTB and the CTBs to the right of the current CTB in the current row are available before the current CTB is coded. This approach looks like a wavefront when represented graphically. This staggered start allows parallelization up to as many processors / cores as the picture contains CTB rows. Since intra-picture prediction is allowed between adjacent treeblock rows in a picture, inter-processor / inter-core communication to enable intra-picture prediction can be significant. WPP splitting takes into account the NAL unit size. Therefore, WPP does not support MTU size matching. However, regular slices can be used with WPP to achieve MTU size matching if necessary, with some coding overhead.

[0035] A tile may also include a motion constrained tile set (MCTS), which is a tile set designed such that associated motion vectors are constrained to point to full sample locations in the MCTS and fractional sample locations that require only full sample locations in the MCTS for interpolation. Also, the use of motion vector candidates for temporal motion vector prediction derived from blocks outside the MCTS is not allowed. Thus, each MCTS can be decoded independently without the presence of tiles not included in the MCTS. A temporal MCTS supplemental enhancement information (SEI) message can be used to indicate and signal the presence of MCTS in the bitstream. 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 compliant bitstream of the MCTS. The information includes multiple extraction information sets, each defining multiple MCTSs and including replacement video parameter set (VPS), sequence parameter set (SPS), and picture parameter set (PPS) raw bytes sequence payload (RBSP) bytes used in 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) can be rewritten or replaced, and the slice header can be updated since 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.

[0036] The tiling and slicing mechanisms described above provide considerable flexibility to support MTU size matching and parallel processing. However, MTU size matching is becoming less important due to the ever-increasing speed and reliability of telecommunication networks. For example, one of the main uses of MTU size matching is to assist in displaying error-concealed pictures. An error-concealed picture is a decoded picture that is created from a coded picture transmitted when there is some data loss. Such data loss may include the loss of some slices of the coded picture, or errors in a reference picture used by the coded picture (e.g., the reference picture is also an error-concealed picture). An error-concealed picture can be created by estimating an erroneous slice and displaying a correct slice, for example, by copying a slice corresponding to the erroneous slice from a previous picture in a video sequence. An error-concealed picture can be generated when each slice is contained in a single NAL unit. However, if a slice is fragmented across multiple NAL units (e.g., without MTU size matching), the loss of one NAL unit may corrupt multiple slices. The generation of error concealment pictures is less important in modern network environments because packet loss does not occur often, and modern network speeds allow the system to completely omit erroneous pictures without causing significant video freezes, since the delay between an erroneous picture and a subsequent error-free picture is generally small. Also, the process of estimating the quality of an error concealment picture may be complex, and therefore it may be preferable to simply omit erroneous pictures. Therefore, video conversation applications, such as video conferencing and video telephony, and even broadcasting applications, generally forgo the use of error concealment pictures.

[0037] Since error concealment pictures are not very useful, MTU size matching is not very useful. Also, continuing to support the MTU size matching paradigm when splitting may unnecessarily complicate the coding system and use wasted bits that could otherwise be omitted to increase coding efficiency. In addition, some tiling schemes (e.g., MCTS) allow for displaying a sub-picture of a picture. To display the sub-picture, slices within the region of interest are displayed and other slices are omitted. The region of interest may start at a location other than the top-left part of the picture and therefore may have an address offset by a variable value from the beginning of the picture. A splicer may be used to rewrite the slice header(s) of the region of interest to account for this offset in order to properly display the sub-picture. A slicing and tiling scheme that does not require such slice header rewriting would be beneficial. In addition, tile boundaries may not be treated as picture boundaries unless they are collocated with picture boundaries. However, treating tile boundaries as picture boundaries may increase coding efficiency in some cases by padding the boundaries and by relaxing constraints on motion vectors pointing to samples outside the boundaries of the reference picture. HEVC may also use a flag named end_of_slice_flag at the end of the coded data for each CTU to indicate if the end of a slice has been reached. AVC uses this flag at the end of the coded data for each macroblock (MB) for the same purpose. However, if the last CTU / MB is known through other mechanisms, coding this flag is unnecessary and a waste of bits. This disclosure provides mechanisms for addressing these and other problems in video coding techniques.

[0038] Various mechanisms are disclosed herein to reduce the processing overhead and increase coding efficiency associated with the above-mentioned slicing and tiling schemes. In one example, a slice is required to contain an integer number of tiles, and each slice is stored in a separate video coding layer (VCL) NAL unit. Furthermore, the number of tiles in a slice can be calculated based on the tile in the top left corner and the tile in the bottom right corner of the slice. The number of tiles can then be used to calculate other values ​​that can therefore be omitted from the bitstream. As a specific example, the address of each tile in the bitstream is an entry point offset from the beginning of the slice, and therefore from the beginning of the VCL NAL unit. The number of entry point offsets can be calculated as one less than the number of tiles (because the first tile has an offset of zero and is therefore omitted). The number of entry point offsets can then be used when retrieving the entry point offsets for the tiles from the slice header corresponding to the slice. Furthermore, the CTUs in a tile can be addressed as a function of the tile identifier (ID) that contains the corresponding CTU. The address of the CTU can then be explicitly signaled or derived based on the tile ID and the calculated tile number, depending on the embodiment. Furthermore, knowledge of the number of tiles in a VCL NAL unit and the number of CTUs in a tile allows the decoder to determine the last CTU in the VCL NAL unit. Thus, the end_of_slice_flag, which was previously included in each CTU to indicate the last CTU in a slice, can be omitted from the bitstream, resulting in a savings of one bit for each CTU in the entire video sequence. These and other examples are described in more detail below.

[0039] 1 is a flow chart of an example operational method 100 for coding a video signal. Specifically, a video signal is encoded by an encoder. The encoding process compresses the video signal by using various mechanisms to reduce the video file size. The smaller file size allows the compressed video file to be transmitted to a user with reduced 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, allowing the decoder to consistently reconstruct the video signal.

[0040] At step 101, a video signal is input to the 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 video. The video file may include both audio and video components. The video component includes a series of image frames that, when viewed in sequence, give the visual impression of motion. A frame includes pixels represented in terms of brightness, referred to herein as the luma component (or luma sample), and color, referred to herein as the chroma component (or color sample). In some examples, the frame may also include depth values ​​to support three-dimensional displays.

[0041] At step 103, the video is divided into blocks. The division includes 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 given size (e.g., 64 pixels by 64 pixels). The CTUs contain both luma and chroma samples. A coding tree may be used 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 division mechanism varies depending on the content of the video frame.

[0042] At step 105, various compression mechanisms are used to compress the image blocks partitioned at step 103. For example, inter-prediction and / or intra-prediction may be used. Inter-prediction is designed to take advantage of the fact that objects in a common scene tend to appear in multiple consecutive frames. Thus, a block depicting an object in a reference frame does not need to be repeatedly described in adjacent frames. In particular, an object such as a table may remain in a fixed position across multiple frames. Thus, the table may be described once and adjacent frames may refer back to the reference frame. A pattern matching mechanism may be used to match objects across multiple frames. Also, moving objects may be represented across multiple frames, for example due to object motion or camera motion. As a specific example, a video may show a car moving across the screen across multiple frames. To describe such motion, a motion vector may be used. A motion vector is a two-dimensional vector that provides an offset from the coordinates of an object in one frame to the coordinates of that object in the reference frame. Hence, inter-prediction may encode an image block in a current frame as a set of motion vectors that point to an offset from a corresponding block in a reference frame.

[0043] Intra prediction encodes blocks within a common frame. Intra prediction exploits the fact that luma and chroma components tend to cluster together within a frame. For example, some green patches in a tree tend to be located adjacent to similar green patches. Intra prediction uses a number of directional prediction modes (e.g., 33 in HEVC), planar mode, and direct current (DC) mode. The directional modes indicate that the current block is similar / same as the samples of neighboring blocks in the corresponding direction. The planar modes indicate that a series of blocks (e.g., planes) along a row / column may be interpolated based on the neighboring blocks at the end of the row. The planar modes effectively indicate a smooth transition of brightness / color across the row / column by using a relatively constant slope in changing the values. The DC mode is used for boundary smoothing and indicates that the block is similar / same as the average value for all neighboring blocks samples related to the angular direction of the directional prediction mode. Thus, intra prediction blocks can represent image blocks as various related prediction mode values ​​instead of actual values. Also, inter-prediction blocks can represent image blocks as motion vector values ​​instead of actual values. In either case, the prediction block may not represent the image block exactly in some cases. The difference is stored in a residual block. To further compress the file, a transformation may be applied to the residual block.

[0044] Various filtering techniques may be applied in step 107. In HEVC, filters are applied according to an in-loop filtering scheme. The block-based prediction described above may result in the creation of a blocky image at the 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 noise suppression filters, deblocking filters, adaptive loop filters, and sample adaptive offset (SAO) filters to the block / frame. These filters mitigate such blocking artifacts so that the encoded file can be accurately reconstructed. Furthermore, these filters mitigate artifacts in the reconstructed reference block so that the artifacts are less likely to create further artifacts in subsequent blocks that are encoded based on the reconstructed reference block.

[0045] Once the video signal has been segmented, compressed, and filtered, the resulting data is coded into a bitstream at step 109. The bitstream includes the data described above and 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 upon request. 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 be performed sequentially and / or simultaneously across multiple frames and blocks. The order shown in FIG. 1 is presented for clarity and ease of explanation and is not intended to limit the video coding process to any particular order.

[0046] At step 111, a decoder receives the bitstream and begins the decoding process. Specifically, the decoder uses an entropy decoding scheme to convert the bitstream into corresponding syntax and video data. At step 111, the decoder uses the syntax data from the bitstream to determine the partitioning of the frame. This partitioning should match the result of the block partitioning at step 103. The entropy encoding / decoding used at step 111 is now described. The encoder makes many choices during the compression process, such as selecting a block partitioning scheme from several possible choices based on the spatial location of values ​​in the input image(s). Signaling the exact choice may use a number of bins. As used herein, a bin is a binary value that is treated as a variable (e.g., a bit value that can change depending on the context). Entropy coding allows the encoder to discard options that are clearly not viable for a particular case, leaving a set of possible options. A codeword is then assigned to each possible option. The length of the codeword is based on the number of possible options (e.g., one bin for two options, two bins for three to four options, etc.). The encoder then encodes a codeword for the selected option. This scheme reduces the size of the codeword because it is only as large as desired to uniquely indicate a selection from a small subset of possible options, rather than a selection from a set of all possible options, which may be large. The decoder then decodes the selection by determining the set of possible options in a similar manner to the encoder. By determining the set of possible options, the decoder can read the codeword to determine the selection made by the encoder.

[0047] In step 113, the decoder performs block decoding. Specifically, the decoder uses an inverse transform to generate a residual block. The decoder then uses the residual block and a corresponding prediction block to reconstruct an image block according to the partition. The prediction block may include both intra-prediction blocks and inter-prediction blocks generated by the encoder in step 105. The reconstructed image block is then positioned in 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 described above.

[0048] At step 115, filtering is performed on the frames of the reconstructed video signal in a manner similar to step 107 in the encoder. 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, at step 117, the video signal may be output to a display for viewing by an end user.

[0049] FIG. 2 is a schematic diagram of an example coding and decoding (codec) system 200 for video coding. Specifically, the codec system 200 provides functionality to support the execution of the operational method 100. The codec system 200 is generalized to show components used in both an encoder and a decoder. The codec system 200 receives and splits a video signal, as described with respect to steps 101 and 103 of the operational method 100, which results in a split video signal 201. When acting as an encoder, the codec system 200 then compresses the split video signal 201 into a coded bitstream, as described with respect to steps 105, 107, and 109 of the method 100. When acting as a decoder, the codec system 200 generates an output video signal from the bitstream, as described with respect to steps 111, 113, 115, and 117 of the 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 format and context adaptive binary arithmetic coding (CABAC) component 231. These components are coupled as shown. In FIG. 2, the black lines indicate the movement of data to be coded / decoded, and the dashed lines indicate the movement of control data that controls the operation of the other components. All of these components of the codec system 200 may be present in an encoder. A decoder may include a subset of these components of the codec system 200.For example, the decoder may include an intra-picture prediction component 217, a motion compensation component 219, a scaling and inverse transform component 229, an in-loop filter component 225, and a decoded picture buffer component 223. These components are described herein.

[0050] The partitioned video signal 201 is a captured video sequence partitioned into blocks of pixels by a coding tree. The coding tree uses various partitioning modes to subdivide the blocks of pixels into smaller blocks of pixels. These blocks can then be further subdivided into smaller blocks. The blocks can be referred to as nodes on the coding tree. Larger parent nodes are partitioned into smaller child nodes. The number of times a node is partitioned is referred to as the depth of the node / coding tree. The partitioned blocks can be included in a coding unit (CU) in some cases. For example, a CU can be part of a CTU that includes a luma block, a red-difference chroma (Cr) block(s), and a blue-difference chroma (Cb) block(s) along with corresponding syntax instructions for the CU. Partitioning modes can include a binary tree (BT), a ternary tree (TT), and a quad tree (QT) that are used to partition a node into two, three, or four child nodes, respectively, of different shapes depending on the partitioning mode used. 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.

[0051] The general coder control component 211 is configured to make decisions related to the coding of images of a video sequence into a bitstream according to application constraints. For example, the general 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 general coder control component 211 also manages buffer utilization in light of transmission rate to mitigate buffer under-run and over-run issues. To manage these issues, the general coder control component 211 manages segmentation, prediction, and filtering by other components. For example, the general coder control component 211 may dynamically increase compression complexity to increase resolution and bandwidth usage, or decrease compression complexity to decrease resolution and bandwidth usage. Thus, the general coder control component 211 controls other components of the codec system 200 to balance video signal reconstruction quality with bitrate concerns. The general coder control component 211 generates control data that controls the operation of other components. The control data is also forwarded to the Header Format and CABAC component 231 to be encoded into the bitstream to signal parameters for decoding at the decoder.

[0052] 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 partitioned 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 provide temporal prediction. The codec system 200 may perform multiple coding passes, for example to select an appropriate coding mode for each block of video data.

[0053] The motion estimation component 221 and the motion compensation component 219 may be highly integrated, but are illustrated separately for conceptual purposes. Motion estimation performed by the motion estimation component 221 is a process of generating motion vectors, which estimate motion for a video block. A motion vector may indicate, for example, the displacement of an object being coded relative to a predictive block. A predictive block is a block that is found to closely match a block being 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 metrics. HEVC uses 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. A CU may be coded as a prediction unit (PU) that includes predictive data and / or a transform unit (TU) that includes transformed residual data for the CU. The motion estimation component 221 generates the motion vectors, PUs, and TUs by using a rate-distortion analysis as part of a rate-distortion optimization process. For example, the motion estimation component 221 can determine multiple reference blocks, multiple motion vectors, etc. for a current block / frame, and can select the reference block, motion vector, etc. with the best rate-distortion performance. The best rate-distortion performance balances both the quality of the video reconstruction (e.g., the amount of data lost due to compression) and the coding efficiency (e.g., the size of the final encoding).

[0054] In some examples, the codec system 200 may calculate values ​​for sub-integer pixel positions of the reference picture 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 picture. Thus, the motion estimation component 221 may perform motion search for full-pixel positions and fractional pixel positions and output motion vectors with fractional pixel accuracy. The motion estimation component 221 calculates a motion vector for a PU of a video block in an inter-coded slice by comparing the position of the PU with the position of a predictive block of the reference picture. The motion estimation component 221 outputs the calculated motion vector to the header format and CABAC component 231 for encoding as motion data, and to the motion compensation component 219 as motion.

[0055] The motion compensation performed by the motion compensation component 219 may include fetching or generating a prediction block based on the motion vector determined by the motion estimation component 221. Again, in some examples, the motion estimation component 221 and the motion compensation component 219 may be functionally integrated. Upon receiving the motion vector for the PU of the current video block, the motion compensation component 219 may locate the prediction block to which the motion vector points. A residual video block is then formed by subtracting pixel values ​​of the prediction block from pixel values ​​of the current video block being coded to form pixel difference values. In general, 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 prediction block and the residual block are forwarded to the transform scaling and quantization component 213.

[0056] The split video signal 201 is also sent to an intra picture estimation component 215 and an intra picture prediction component 217. As with 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 illustrated separately for conceptual purposes. The intra picture estimation component 215 and the intra picture prediction component 217 intra predict the current block with respect to a block 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. In particular, the intra picture estimation component 215 determines an 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 to encode the current block from a plurality of tested intra prediction modes. The selected intra prediction mode is then forwarded to the header format and CABAC component 231 for encoding.

[0057] For example, the intra picture estimation component 215 calculates rate-distortion values ​​for various tested intra prediction modes using a rate-distortion analysis and selects the 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 a coding block and the original uncoded block that was coded to generate the coding block, and the bit rate (e.g., number of bits) used to generate the coding block. The intra picture estimation component 215 calculates a ratio from the distortion and rate for the various coding blocks and determines 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 the depth block of the depth map using a depth modeling mode (DMM) based on rate-distortion optimization (RDO).

[0058] The intra-picture prediction component 217 may generate a residual block from the prediction block based on the selected intra-prediction mode determined by the intra-picture estimation component 215 when implemented on an encoder, or may read the residual block from the bitstream when implemented on a decoder. The residual block includes the value difference 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.

[0059] 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 to generate a video block having 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 a 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 includes applying scaling factors to the residual information such that information of different frequencies 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. This quantization process may reduce the bit depth associated with some or all of the coefficients. The degree of quantization may be changed 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 format and CABAC component 231 to be encoded into the bitstream.

[0060] The scaling and inverse transform component 229 applies the inverse operations of the transform scaling and quantization component 213 to aid in motion estimation. The scaling and inverse transform component 229 applies inverse scaling, transformation, and / or quantization to reconstruct a residual block in the pixel domain for later use as a reference block, which may be, for example, a predictive block for another current block. The motion estimation component 221 and / or the motion compensation component 219 may calculate a reference block by adding the residual block back to the corresponding predictive block, for use in motion estimation of a later block / frame. A filter is applied to the reconstructed reference block to mitigate artifacts created during the scaling, quantization, and transformation. Such artifacts may otherwise result in inaccurate predictions (and create further artifacts) when subsequent blocks are predicted.

[0061] The filter control analysis component 227 and the in-loop filter component 225 apply filters to the residual block and / or to the reconstructed image block. 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. A filter may then be applied to the reconstructed image block. In some examples, a filter may be applied to the residual block instead. As with the other components of 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 the reconstructed reference block are applied to a particular spatial region and include multiple parameters to adjust how such filters are applied. The filter control analysis component 227 analyzes the reconstructed reference block to determine where such filters should be applied and sets the corresponding parameters. Such data is forwarded to the header format 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.

[0062] When operating as an encoder, the filtered reconstructed image blocks, residual blocks, and / or prediction blocks are stored in the decoded picture buffer component 223 for later use in motion estimation as described above. When operating as a decoder, the decoded picture buffer component 223 stores and forwards the reconstructed and filtered blocks as part of the output video signal towards a display. The decoded picture buffer component 223 may be any memory device capable of storing prediction blocks, residual blocks, and / or reconstructed image blocks.

[0063] The header format and CABAC component 231 receives data from various components of the codec system 200 and encodes the data into a coded bitstream for transmission towards a decoder. In particular, the header format and CABAC component 231 generates various headers that 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 the information desired by the decoder to reconstruct the original segmented video signal 201. Such information may also include an intra prediction mode index table (also referred to as a codeword mapping table), definitions of the coding context for various blocks, indications pointing to the most probable intra prediction mode, indications pointing to the segmentation information, etc. Such data may be encoded by using entropy coding. For example, the information may be encoded by using context adaptive variable length coding (CAVLC), CABAC, syntax-based context-adaptive binary arithmetic coding (SBAC), probability interval partitioning entropy (PIPE) coding, or other entropy coding techniques. After entropy coding, the coded bitstream may be transmitted to another device (e.g., a video decoder) or archived for later transmission or retrieval.

[0064] 3 is a block diagram illustrating an example of a video encoder 300. The video encoder 300 may be used to implement the encoding functionality of the codec system 200 and / or to perform steps 101, 103, 105, 107, and / or 109 of the method of operation 100. The encoder 300 splits an input video signal, resulting in a split video signal 301 that is substantially similar to the split video signal 201. The split video signal 301 is then compressed and encoded into a bitstream by components of the encoder 300.

[0065] Specifically, the segmented 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 segmented 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 the 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 format and CABAC component 231 .

[0066] 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 for use 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 as described 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.

[0067] 4 is a block diagram illustrating an example of a video decoder 400. The video decoder 400 may be used to implement the decoding functionality of the codec system 200 and / or to perform steps 111, 113, 115, and / or 117 of the method of operation 100. The decoder 400 receives a bitstream, for example from the encoder 300, and generates a reconstructed output video signal based on the bitstream for display to an end user.

[0068] 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 use header information to provide a context for interpreting additional data encoded as codewords in the bitstream. The decoded information includes any information desired to decode the video signal, such as general control data, filter control data, partitioning information, motion data, prediction data, and quantized transform coefficients from the residual blocks. The quantized transform coefficients are forwarded to the inverse transform and quantization component 429 for reconstruction into the residual blocks. The inverse transform and quantization component 429 may be similar to the inverse transform and quantization component 329.

[0069] 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 uses the prediction mode to locate a reference block in 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 the in-loop filter component 425. The decoded picture buffer component 423 and the in-loop filter component 425 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, the residual block and / or the 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 generates a prediction block using a motion vector from a reference block, and applies a residual block to the result to reconstruct an image block. The resulting reconstructed block may also be forwarded to the decoded picture buffer component 423 via the in-loop filter component 425. The decoded picture buffer component 423 continues to store further reconstructed image blocks, which may be reconstructed into frames via the partition information. Such frames may also be arranged into a sequence. The sequence is output to a display as a reconstructed output video signal.

[0070] 5 is a schematic diagram illustrating an example of a bitstream 500 including a coded video sequence. For example, the bitstream 500 may be generated by the codec system 200 and / or the encoder 300 for decoding by the codec system 200 and / or the decoder 400. As another example, the bitstream 500 may be generated by the encoder at step 109 of the method 100 for use by the decoder at step 111.

[0071] The bitstream 500 includes a sequence parameter set (SPS) 510, a number of picture parameter sets (PPS) 512, a number of slice headers 514, and image data 520. 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 each picture. Thus, there may be one PPS 512 per picture in a video sequence. The PPS 512 may indicate coding tools, quantization parameters, offsets, picture-specific coding tool parameters (e.g., filter control), etc. available for slices in the corresponding picture. The slice header 514 includes parameters specific to each slice in a picture. Thus, there may be one slice header 514 per slice in a video sequence. 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, and so on.

[0072] The image data 520 includes video data coded according to inter-prediction and / or intra-prediction and corresponding transformed and quantized residual data. Such image data 520 is sorted according to the partition used to divide the image prior to encoding. For example, an image in the image data 520 is divided into slices 521. Each slice 521 is further divided into tiles 523. The tiles 523 are further divided into CTUs 527. The CTUs 527 are further divided into coding blocks based on a coding tree. The coding blocks can then be coded / decoded according to a prediction mechanism. An image / picture can include one or more slices 521. One slice header 514 is used per slice 521. Each slice 521 can include one or more tiles 523, and the tiles 523 can include multiple CTUs 527.

[0073] Each slice 521 may be a rectangle defined by a tile 523 in the upper left corner and a tile 523 in the lower right corner. Unlike in other coding systems, slices 521 may not traverse the entire width of the picture. Slices 521 are the smallest units that can be displayed separately by a decoder. Thus, dividing slices 521 into smaller units allows sub-pictures to be generated with sufficient granularity to display desired regions of the picture. For example, in a virtual reality (VR) context, a picture may contain data for the entire visible sphere, but a user may only see sub-pictures on a head-mounted display. Smaller slices 521 allow such sub-pictures to be signaled separately. Slices 521 are also typically signaled in separate VCL NAL units 533. Slices 521 may also not allow prediction based on other slices 521, which allows each slice 521 to be coded independently of the other slices 521.

[0074] A slice 521 is divided into an integer number of tiles 523. A tile 523 is a division of a slice 521 created by horizontal and vertical boundaries. The tiles 523 may be coded in raster scan order and may or may not allow prediction based on other tiles 523, depending on the example. Each tile 523 may have a unique tile ID 524 within the picture. The tile ID 524 is a numeric identifier that may be used to distinguish one tile 523 from another. The tile ID 524 may take the value of a tile index that increases numerically in raster scan order. The raster scan order is left to right and top to bottom. The tile ID 524 may also use other numeric values. However, the tile ID 524 should always increase in raster scan order to support the calculations described herein. For example, the boundaries of a slice 521 may be determined according to the tile ID 524 of the tile 523 at the top left corner of the slice 521 and the tile ID 524 of the tile 523 at the bottom right corner of the slice 521. If the tile ID 524 is a value different from the tile index, a conversion mechanism may be signaled within the bitstream 500, such as within the PPS 512. Furthermore, each tile 523 may be associated with an entry point offset 525. The entry point offset 525 indicates the location of the first bit of coded data associated with the tile 523. The first tile 523 may have an entry point offset 525 of zero, and each further tile 523 may have an entry point offset 525 equal to the number of bits of coded data in the preceding tile 523. Therefore, the number of entry point offsets 525 may be estimated to be one less than the number of tiles 523.

[0075] The tiles 523 are further divided into CTUs 527. The CTUs 527 are portions of the tiles 523 that may be further subdivided by a coding tree structure into coding blocks, which may be encoded by an encoder and decoded by a decoder. The CTUs 527 are each associated with a CTU address 529. The CTU address 529 represents a location of the corresponding CTU 527 in the bitstream 500. Specifically, the CTU address 529 may represent a location of the corresponding CTU 527 in the VCL NAL unit 533. In some examples, the CTU address 529 of the CTU 527 may be explicitly signaled, for example, in the PPS 512. In other examples, the CTU address 529 may be derived by the decoder. For example, the CTU address 529 may be assigned based on the tile ID 524 of the tile 523 that includes the corresponding CTU 527. In such a case, the decoder can determine the tiles 523 in the slice 521 based on the tile IDs 524 of the top-left and bottom-right tiles 523. The decoder can then use the determined tiles 523 in the slice 521 to determine the number of CTUs 527 in the slice 521. The decoder can then determine the CTU addresses 529 using the known tile IDs 524 and the number of CTUs 527. In addition, because the decoder knows the number of CTUs 527, the flag indicating whether each CTU 527 is the last CTU 527 in the VCL NAL unit 533 can be omitted. This is because the number of CTUs 527 in the slice 521 are those contained in the VCL NAL unit 533, and by knowing the number, the decoder can determine which CTU 527 is the last CTU 527 in the VCL NAL unit 533. However, in some examples, padding bits may be placed after the last CTU 527 in the tile 523 to help distinguish between tiles 523.As can be seen, signaling slice 521 boundaries based on tile ID 524 can enable a decoder to estimate a significant amount of data, which can then be omitted from the bitstream 500 to increase coding efficiency.

[0076] Bitstream 500 is located in VCL NAL units 533 and non-VCL NAL units 531. NAL units are coded data units sized to be placed as the payload of a single packet for transmission over a network. VCL NAL units 533 are NAL units that contain coded video data. For example, each VCL NAL unit 533 may contain data for one slice 521, including corresponding tiles 523, CTUs 527, and coding blocks. Non-VCL NAL units 531 are NAL units that contain supporting syntax but do not contain coded video data. For example, non-VCL NAL units 531 may include SPS 510, PPS 512, slice header 514, etc. Thus, a decoder receives bitstream 500 in discrete VCL NAL units 533 and non-VCL NAL units 531. In streaming applications, a decoder may decode current video data without waiting to receive the entire bitstream 500. Thus, tile ID 524, entry point offset 525, and CTU address 529 enable a decoder to accurately locate video data within VCL NAL unit 533 for fast decoding, parallel processing, and other video display mechanisms. Thus, calculating tile ID 524, entry point offset 525, and / or CTU address 529 enables the implementation of efficient decoding and display mechanisms while reducing the size of bitstream 500 and thus increasing coding efficiency.

[0077] 6 is a schematic diagram illustrating an example of an image 600 partitioned for coding. For example, the image 600 may be encoded into and decoded from the bitstream 500, e.g., by the codec system 200, the encoder 300, and / or the decoder 400. Furthermore, the image 600 may be partitioned to support encoding and decoding according to the method 100.

[0078] Image 600 can be divided into slices 621, tiles 623, and CTUs 627, which may be substantially similar to slices 521, tiles 523, and CTUs 527, respectively. In FIG. 6, slices 621 are depicted with bold lines and alternating white background and shading to graphically distinguish slices 621 from one another. Tiles 623 are depicted with dashed lines. The boundaries of tiles 623 that lie on the boundaries of slices 621 are depicted as bold dashed lines, and the boundaries of tiles 623 that do not lie on the boundaries of slices 621 are depicted as less bold dashed lines. The boundaries of CTUs 627 are depicted with less bold solid lines, except where the boundaries of CTUs 627 are covered by the boundaries of tiles 623 or slices 621. In this example, image 600 includes 9 slices 621, 24 tiles 623, and 216 CTUs 627.

[0079] As shown, slices 621 are rectangular with boundaries that may be defined by contained tiles 623. Slices 621 may not extend across the entire width of image 600. Tiles 623 may be generated within slices 621 according to rows and columns. CTUs 627 may then be partitioned from tiles 623 to produce a division of image 600 suitable for being sub-divided into coding blocks for coding according to inter-prediction and / or intra-prediction.

[0080] This can be used to improve video coding systems. For example, slices are designed such that the CTUs contained in a slice may not simply be a set of CTUs of a picture in the CTU raster scan order of the picture. Rather, a slice is defined as a set of CTUs that cover a rectangular area of ​​a picture. Each slice is in its own NAL unit. The addresses of the CTUs contained in the slice can be signaled by signaling in the slice header the CTU addresses of the top left and bottom right CTUs in the raster scan order of the slice. Furthermore, slices are designed to contain, and only contain, a set of complete tiles that cover a rectangular area of ​​a picture. Each slice is in its own NAL unit. Thus, the purpose of having more than one slice may be to put a set of tiles that cover a rectangular area of ​​a picture into the NAL unit. In some cases, there may be more than one slice in a picture, each of which may contain a set of complete tiles that cover a rectangular area. There may also be one other slice in the picture that covers the rest of the tiles of the picture. The area covered by this slice may be a rectangular area with holes covered by other slices. For example, for region of interest purposes, a picture may contain two slices, one slice containing a complete set of tiles that cover the region of interest, and the other slice containing the remaining tiles of the picture.

[0081] The address of the CTU included in the slice may be signaled explicitly or implicitly by the tile ID of the tile included in the slice. For efficient signaling, in some examples, only the tile ID of the top left and bottom right tiles may be signaled. For further improved signaling efficiency, a flag may be signaled indicating whether the slice contains a single tile, and if so, only one tile ID may be signaled. In other cases, all tile IDs included in the slice are signaled. In some examples, the tile ID value is assigned to be the same as the tile index in the picture. For derivation of the address of the CTU included in the slice, the length in bits for explicitly signaling the tile ID in the slice header may be derived according to the number of tiles in the picture (e.g., the logarithm to the base 2 of the number of tiles in the picture). The number of tiles in the picture may be explicitly signaled in the parameter set or derived according to the tile configuration signaled in the parameter set. In some examples, the length in bits to explicitly signal the tile ID in the slice header for derivation of the address of the CTU contained in the slice can be signaled in the parameter set. In some examples, the number of entry points, which is equal to the number of tiles in the slice minus one, is derived without being signaled in the slice header. In another example, signaling a per-CTU flag indicating whether that CTU is the end of a slice is avoided.

[0082] In some examples, slices and tiles are designed such that no rewriting of slice headers is required when extracting a set of tiles, such as a motion constrained tile set (MCTS), from a bitstream to create a conforming sub-bitstream. For example, tile IDs may be explicitly signaled for each tile in the parameter set in which the tile configuration is signaled. Each tile ID is unique within a picture. The tile IDs do not have to be contiguous within a picture. However, the tile IDs should be organized in an increasing order (e.g., monotonically increasing) in the direction of the tile raster scan of the picture. This can restrict the decoding order of slices within a picture to be of increasing tile ID values ​​for the top-left tile. If the tile ID is not explicitly signaled but is inferred to be the same as the tile index, the following can be used to signal tile ID values ​​in the slice header: A flag can be signaled indicating whether the slice is the first slice of the picture. When the flag indicates that the slice is the first slice of the picture, the signaling of the tile ID of the top-left tile of the slice can be omitted. This is because it can be assumed to be the tile with the smallest tile index (eg, the tile index of zero, assuming that tile indices start at zero).

[0083] In another example, a picture may contain zero or more MCTSs. An MCTS may contain one or more tiles. When a tile in a slice is part of an MCTS, the MCTS is constrained such that all tiles in the slice are part of the same MCTS. A slice may be further constrained such that the tile configurations of all pictures that contain tiles of an MCTS are the same with respect to the position and size of the tiles in the MCTS. In some examples, a slice is constrained such that an MCTS is exclusively contained within the slice. This has two consequences: in this case, each MCTS is in a separate NAL unit. Furthermore, each MCTS is in a rectangular shape.

[0084] Signaling of the MCTS may be as follows: A flag may be signaled in the slice header to indicate whether the slice contains a NAL unit with an MCTS in the access unit containing the corresponding slice; Other support information for the MCTS (e.g., profile, hierarchical and level information of the sub-bitstream resulting from extracting the MCTS) may be signaled in the SEI message; Alternatively, both the flag indication and the support information of the MCTS may be signaled in the SEI message; To enable signaling of treating the MCTS boundary as a picture boundary, a syntax element indicating whether all tile boundaries are treated the same as picture boundaries is signaled, e.g., in the parameter set in which the tile configuration is signaled; Additionally, a syntax element indicating whether all slice boundaries of a slice are treated the same as picture boundaries may be signaled in the slice header, e.g., when no other syntax element indicates that all tile boundaries are treated the same as picture boundaries.

[0085] Otherwise, only if the syntax does not indicate that all tile boundaries are treated the same as picture boundaries, a syntax element may be signaled indicating whether in-loop filtering operations may be applied across each tile boundary. In this case, treating the tile boundaries as picture boundaries indicates, among other aspects, that in-loop filtering operations cannot be applied across each tile boundary. In another example, a syntax element is signaled indicating whether in-loop filtering operations may be applied across each tile boundary, independent of an indication indicating whether all tile boundaries are treated the same as picture boundaries. In this case, treating the tile boundaries as picture boundaries indicates that in-loop filtering operations may still be applied across each tile boundary.

[0086] In some examples, MCTS boundaries are treated as picture boundaries. Furthermore, syntax elements in slice headers that indicate whether slice boundaries are treated the same as picture boundaries can also be made conditional on a flag that indicates whether the slice contains an MCTS. In some cases, the value of the flag that indicates whether an MCTS boundary should be treated as a picture boundary can be inferred if a flag in the slice header indicates that the slice contains an MCTS.

[0087] If a tile or slice boundary is indicated to be treated as a picture boundary, the following applies: In the derivation process for temporal luma motion vector prediction, the right and bottom picture boundary positions used in that process, pointed to by pic_height_in_luma_samples-1 and pic_width_in_luma_samples-1, respectively, are replaced with the tile or slice right and bottom boundary positions in units of luma samples, respectively. In the luma sample interpolation process, the left, right, top and bottom picture boundary positions used in that process, pointed to by 0, pic_height_in_luma_samples-1, 0, pic_width_in_luma_samples-1, respectively, are replaced with the tile or slice left, right, top and bottom boundary positions in units of luma samples, respectively. In the chroma sample interpolation process, the left, right, top, and bottom picture border locations used in the process, pointed to by 0, pic_height_in_luma_samples / SubWidthC-1, 0, pic_width_in_luma_samples / SubWidthC-1 respectively, are replaced with the left, right, top, and bottom border locations of the tile or slice in units of chroma samples, respectively.

[0088] The above mechanism can be implemented as follows: A slice is defined as an integer number of tiles that cover a rectangular region of a picture and are exclusively contained in a single NAL unit. A slice header is defined as a part of a coded slice that contains data elements for all tiles represented in the slice. A tile is defined as a set of CTUs of rectangular regions in a particular tile column and a particular tile row in a picture. A tile column is defined as a set of CTUs of rectangular regions with height equal to the height of the picture and width specified by a syntax element in the picture parameter set. A tile row is defined as a set of CTUs of rectangular regions with height specified by a syntax element in the picture parameter set and width equal to the width of the picture. A tile scan is defined as a particular set of orderings of CTUs that divide a picture, where CTUs are ordered consecutively in a CTU raster scan within a tile, whereas tiles within a picture are ordered consecutively in a raster scan of the tiles of the picture.

[0089] This section describes how a picture is divided into slices and tiles. A picture is divided into slices and tiles. A slice is a set of tiles that cover a rectangular area of ​​the picture. A tile is a set of CTUs that cover a rectangular area of ​​the picture.

[0090] If a picture is coded using three separate color planes (separate_color_plane_flag is equal to 1), a slice contains only CTUs of one color component identified by the corresponding value of color_plane_id, and each color component array of a picture contains slices with the same color_plane_id value. Coded slices with different values ​​of color_plane_id in a picture may be interleaved with each other, under the constraint that for each value of color_plane_id, the coded slice NAL units with that value of color_plane_id shall be in the order of increasing CTU addresses in tile scan order relative to the first CTU of each coded slice NAL unit. Note that when separate_color_plane_flag is equal to 0, each CTU of a picture is contained in exactly one slice. When separate_color_plane_flag is equal to 1, each CTU of one color component is contained in exactly one slice (e.g., information about each CTU of a picture is present in exactly three slices, and these three slices have different values ​​of color_plane_id).

[0091] The following divisions of the processing elements in this specification form a spatial or component-wise division: division of each picture into components; division of each component into CTBs; division of each picture into tile columns; division of each picture into tile rows; division of each tile column into tiles; division of each tile row into tiles; division of each tile into CTUs; division of each picture into slices; division of each slice into tiles; division of each slice into CTUs; division of each CTU into CTBs; a CTB is incomplete at the right component boundary if the component width is not an integer multiple of the CTB size and if the component height is not an integer multiple of the CTB size. Division of each CTB into coding blocks, except that a CTB is incomplete at the bottom component boundary; division of each CTU into coding units, except that a CTU is incomplete at the right picture boundary if the picture width in luma samples is not an integer multiple of the luma CTB size, and a CTU is incomplete at the bottom picture boundary if the picture height in luma samples is not an integer multiple of the luma CTB size; division of each coding unit into transform units; division of each coding unit into coding blocks; division of each coding block into transform blocks; and division of each transform unit into transform blocks.

[0092] The inputs to the derivation process for neighboring block availability are the luma position (xCurr, yCurr) of the top-left sample of the current block relative to the top-left luma sample of the current picture and the luma position (xNbY, yNbY) covered by the neighboring block relative to the top-left luma sample of the current picture. The output of this process is the availability of a neighboring block covering position (xNbY, yNbY), denoted as availableN. The neighboring block availability availableN is derived as follows: If one or more of the following conditions are true: the top_left_tile_id of the slice containing the neighboring block is different in value from the top_left_tile_id of the slice containing the current block, or the neighboring block is included in a different tile than the current block, then availableN is set equal to false.

[0093] The CTB raster and tile scanning process is as follows: A list ColWidth[i], for i in the range 0 to num_tile_columns_minus1 inclusive, describing the width of the i-th tile column in CTB units, is derived as follows: if(uniform_tile_spacing_flag) for(i=0;i<=num_tile_columns_minus1;i++) ColWidth[i]=((i+1)*PicWidthInCtbsY) / (num_tile_columns_minus1+1)- (i*PicWidthInCtbsY) / (num_tile_columns_minus1+1) else { ColWidth[num_tile_columns_minus1]=PicWidthInCtbsY (6-1) for(i=0;i <num_tile_columns_minus1;i++){ ColWidth[i]=tile_column_width_minus1[i]+1 ColWidth[num_tile_columns_minus1]-=ColWidth[i] } } The list RowHeight[j], for j in the range 0 to num_tile_rows_minus1, inclusive, describing the height of the jth tile row in CTB units, is derived as follows: if(uniform_tile_spacing_flag) for(j=0;j<=num_tile_rows_minus1;j++) RowHeight[j]=((j+1)*PicHeightInCtbsY) / (num_tile_rows_minus1+1)- (j*PicHeightInCtbsY) / (num_tile_rows_minus1+1) else { RowHeight[num_tile_rows_minus1]=PicHeightInCtbsY (6-2) for(j=0;j <num_tile_rows_minus1;j++){ RowHeight[j]=tile_row_height_minus1[j]+1 RowHeight[num_tile_rows_minus1]-=RowHeight[j] } }

[0094] The list ColBd[i], for i in the range 0 to num_tile_columns_minus1+1 inclusive, describing the position of the i-th tile column boundary in CTB units, is derived as follows: for(ColBd[0]=0,i=0;i<=num_tile_columns_minus1;i++) ColBd[i+1]=ColBd[i]+ColWidth[i] (6-3) The list RowBd[j], for j ranging from 0 to num_tile_rows_minus1+1 inclusive, describing the location of the jth tile row boundary in CTB units, is derived as follows: for(RowBd[0]=0,j=0;j<=num_tile_rows_minus1;j++) RowBd[j+1]=RowBd[j]+RowHeight[j] (6-4) The list CtbAddrRsToTs[ctbAddrRs] of ctbAddrRs ranging from 0 to PicSizeInCtbsY-1 inclusive, describing the conversion from CTB addresses in the CTB raster scan of a picture to CTB addresses in the tile scan, is derived as follows: for(ctbAddrRs=0;ctbAddrRs <PicSizeInCtbsY;ctbAddrRs++){ tbX=ctbAddrRs%PicWidthInCtbsY tbY=ctbAddrRs / PicWidthInCtbsY for(i=0;i<=num_tile_columns_minus1;i++) if(tbX>=ColBd[i]) tileX=i for(j=0;j<=num_tile_rows_minus1;j++) (6-5) if(tbY>=RowBd[j]) tileY=j CtbAddrRsToTs[ctbAddrRs]=0 for(i=0;i <tileX;i++) CtbAddrRsToTs[ctbAddrRs]+=RowHeight[tileY]*ColWidth[i] for(j=0;j <tileY;j++) CtbAddrRsToTs[ctbAddrRs]+=PicWidthInCtbsY*RowHeight[j] CtbAddrRsToTs[ctbAddrRs]+=(tbY-RowBd[tileY])*ColWidth[tileX]+tbX-ColBd[tileX] }

[0095] The list CtbAddrRsToTs[ctbAddrRs] of ctbAddrTs in the range 0 to PicSizeInCtbsY-1 inclusive, describing the conversion from CTB addresses in the tile scan to CTB addresses in the CTB raster scan of the picture, is derived as follows: for(ctbAddrRs=0;ctbAddrRs <PicSizeInCtbsY;ctbAddrRs++) (6-6) CtbAddrTsToRs[CtbAddrRsToTs[ctbAddrRs]]=ctbAddrRs The list TileId[ctbAddrTs], for ctbAddrTs ranging from 0 to PicSizeInCtbsY-1 inclusive, describing the conversion from CTB addresses to tile IDs in a tile scan, is derived as follows: for(j=0,tileIdx=0;j<=num_tile_rows_minus1;j++) for(i=0;i<=num_tile_columns_minus1;i++,tileIdx++) for(y=RowBd[j];y <RowBd[j+1];y++) (6-7) for(x = ColBd[i];x <ColBd[i+1];x++) TileId[CtbAddrRsToTs[y*PicWidthInCtbsY+x]]= explicit_tile_id_flag?tile_id_val[i][j]:tileIdx The list NumCtusInTile[tileIdx], for tileIdx ranging from 0 to PicSizeInCtbsY-1 inclusive, which describes the conversion from tile index to number of CTUs within a tile, is derived as follows: for(j=0,tileIdx=0;j<=num_tile_rows_minus1;j++) for(i=0;i<=num_tile_columns_minus1;i++,tileIdx++) (6-8) NumCtusInTile[tileIdx]=ColWidth[i]*RowHeight[j]

[0096] The set TileIdToIdx[tileId] for the set of NumTilesInPic tileId values that describe the conversion from tile ID to tile index, and the list FirstCtbAddrTs[tileIdx] for tileIdx in the range from 0 to NumTilesInPic - 1 inclusive that describe the conversion from tile ID to the CTB address in the tile scan of the first CTU within the tile, are derived as follows: for(ctbAddrTs = 0, tileIdx = 0, tileStartFlag = 1; ctbAddrTs < PicSizeInCtbsY; ctbAddrTs++){ if(tileStartFlag){ TileIdToIdx[TileId[ctbAddrTs]] = tileIdx FirstCtbAddrTs[tileIdx] = ctbAddrTs (6 - 9) tileStartFlag = 0 } tileEndFlag = ctbAddrTs == PicSizeInCtbsY - 1 || TileId[ctbAddrTs + 1] != TileId[ctbAddrTs] if(tileEndFlag){ tileIdx++ tileStartFlag = 1 } } For i in the range from 0 to num_tile_columns_minus1 inclusive, the value of ColumnWidthInLumaSamples[i] that describes the width of the i-th tile column in luma sample units is set equal to ColWidth[i] << CtbLog2SizeY. For j in the range from 0 to num_tile_rows_minus1 inclusive, the value of RowHeightInLumaSamples[j] that describes the height of the j-th tile row in luma sample units is set equal to RowHeight[j] << CtbLog2SizeY.

[0097] The picture parameter set RBSP syntax is as follows: [Table 1]

[0098] The slice header syntax is modified as follows: [Table 2]

[0099] The slice_data() syntax is: [Table 3]

[0100] Picture parameter set RBSP semantics are as follows: single_tile_in_pic_flag is set equal to 1 to describe that there is only one tile in each picture that references the PPS. single_tile_in_pic_flag is set equal to zero to describe that there is more than one tile in each picture that references the PPS. Bitstream conformance may require that the value of single_tile_in_pic_flag be the same for all PPSs activated in a coded video sequence (CVS). num_tile_columns_minus1+1 describes the number of tile columns the picture is divided into. num_tile_columns_minus1 is assumed to be in the range from 0 to PicWidthInCtbsY-1, inclusive. If not present, the value of num_tile_columns_minus1 is inferred to be equal to zero. num_tile_rows_minus1+1 describes the number of tile rows the picture is divided into. num_tile_rows_minus1 is assumed to be in the range from zero to PicHeightInCtbsY-1, inclusive. If not present, the value of num_tile_rows_minus1 is inferred to be equal to zero. The variable NumTilesInPic is set equal to (num_tile_columns_minus1+1)*(num_tile_rows_minus1+1).

[0101] When single_tile_in_pic_flag is equal to zero, NumTilesInPic is greater than zero. tile_id_len_minus1+1 describes the number of bits used to represent the syntax element tile_id_val[i][j] in the PPS, if present, and the syntax elements top_left_tile_id and bottom_right_tile_id in the slice header that references the PPS, if present. The value of tile_id_len_minus1 is in the range of Ceil(Log2(NumTilesInPic)) to 15, inclusive. explicit_tile_id_flag is set equal to 1 to describe that the tile ID of each tile is explicitly signaled. explicit_tile_id_flag is set to zero to describe that the tile ID is not explicitly signaled. tile_id_val[i][j] describes the tile ID of the tile in the i-th tile column and j-th tile row. The length of tile_id_val[i][j] is tile_id_len_minus1+1 bits.

[0102] For any integer m in the range from zero to num_tile_columns_minus1, inclusive, and any integer n in the range from zero to num_tile_rows_minus1, inclusive, tile_id_val[i][j] is not equal to tile_id_val[m][n] if i is not equal to m or j is not equal to n, and tile_id_val[i][j] is less than tile_id_val[m][n] if j*(num_tile_columns_minus1+1)+i is less than n*(num_tile_columns_minus1+1)+m. uniform_tile_spacing_flag is set equal to 1 to describe that the tile column borders, and similarly the tile row borders, are uniformly distributed throughout the picture. uniform_tile_spacing_flag is set equal to zero to describe that the tile column boundaries and similarly the tile row boundaries are not uniformly distributed across the picture but may be explicitly signaled with the syntax elements tile_column_width_minus1[i] and tile_row_height_minus1[i]. If not present, the value of uniform_tile_spacing_flag is inferred to be equal to 1. tile_column_width_minus1[i]+1 describes the width of the ith tile column in CTB units. tile_row_height_minus1[i]+1 describes the height of the ith tile row in CTB units.

[0103] The following variables are derived by invoking the CTB raster and tile scanning conversion process: a list ColWidth[i] for i ranging from 0 to num_tile_columns_minus1, inclusive, describing the width of the ith tile column in CTB units; a list RowHeight[j] for j ranging from 0 to num_tile_rows_minus1, inclusive, describing the height of the jth tile row in CTB units; a list ColBd[i] for i ranging from 0 to num_tile_columns_minus1+1, inclusive, describing the location of the ith tile column border in CTB units; a list RowBd[j] for j ranging from 0 to num_tile_rows_minus1+1, inclusive, describing the location of the jth tile row border in CTB units; A list of ctbAddrRs in the range 0 to PicSizeInCtbsY-1, inclusive, describing the conversion from CTB addresses in the tile scan to CTB addresses in the CTB raster scan of the picture; a list of ctbAddrTsToRs[ctbAddrTs] of ctbAddrTs in the range 0 to PicSizeInCtbsY-1, inclusive, describing the conversion from CTB addresses in the tile scan to CTB addresses in the CTB raster scan of the picture; a list of ctbAddrTs in the range 0 to PicSizeInCtbsY-1, inclusive, describing the conversion from CTB addresses in the tile scan to tile IDs; a list of tileIdx in the range 0 to PicSizeInCtbsY-1, inclusive, describing the conversion from tile indexes to numbers of CTUs within a tile; a list of NumCtusInTile[tileIdx] of tileIdx in the range 0 to PicSizeInCtbsY-1, inclusive, describing the conversion from tile indexes to numbers of CTUs within a tile; Set TileIdToIdx[tileId] for a set of tileId values;a list FirstCtbAddrTs[tileIdx], for tileIdx in the range 0 to NumTilesInPic-1, inclusive, describing the conversion from tile IDs to CTB addresses in the tile scan of the first CTU in the tile; a list ColumnWidthInLumaSamples[i], for i in the range 0 to num_tile_columns_minus1, inclusive, describing the width of the ith tile column in luma samples; and a list RowHeightInLumaSamples[j], for j in the range 0 to num_tile_rows_minus1, inclusive, describing the height of the jth tile row in luma samples.

[0104] 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, are all greater than 0. tile_boundary_treated_as_picture_boundary_flag is set equal to 1 to describe that each tile boundary is treated the same as a picture boundary in the decoding process for pictures that reference a PPS. tile_boundary_treated_as_picture_boundary_flag is set equal to zero to describe that each tile boundary may or may not be treated the same as a picture boundary in the decoding process for pictures that reference a PPS. If not present, the value of tile_boundary_treated_as_picture_boundary_flag is inferred to be equal to 1. loop_filter_across_tiles_enabled_flag is set equal to 1 to describe that in-loop filtering operations may be performed across tile boundaries in pictures that reference the PPS. loop_filter_across_tiles_enabled_flag is set equal to zero to describe that in-loop filtering operations are not performed across tile boundaries in pictures that reference the PPS. In-loop filtering operations include deblocking filters, sample adaptive offset filters, and adaptive loop filter operations. If not present, the value of loop_filter_across_tiles_enabled_flag is inferred to be equal to zero.

[0105] Slice header semantics are as follows: If present, the value of the slice header syntax element slice_pic_parameter_set_id shall be the same in all slice headers of a coded picture. slice_pic_parameter_set_id describes the value of pps_pic_parameter_set_id for the PPS in use. The value of slice_pic_parameter_set_id is in the range of 0 to 63, inclusive. single_tile_in_slice_flag is set equal to 1 to specify that there is only one tile in the slice. single_picture_in_pic_flag is set equal to zero to describe the presence of more than one tile in the slice. top_left_tile_id describes the tile ID of the tile in the top-left corner of the slice. The length of top_left_tile_id is tile_id_len_minus1+1 bits. The value of top_left_tile_id is not equal to the value of top_left_tile_id of any other coded slice NAL unit of the same coded picture. If there is more than one slice in a picture, the decoding order of slices in a picture is by increasing value of top_left_tile_id. bottom_right_tile_id describes the tile ID of the tile in the bottom right corner of the slice. The length of bottom_right_tile_id is tile_id_len_minus1+1 bits. If not present, the value of bottom_right_tile_id is inferred to be equal to top_left_tile_id.

[0106] The variables NumTileRowsInSlice, NumTileColumnsInSlice, and NumTilesInSlice are derived as follows: deltaTileIdx=TileIdToIdx[bottom_right_tile_id]-TileIdToIdx[top_left_tile_id] NumTileRowsInSlice=(deltaTileIdx / (num_tile_columns_minus1+1))+1 (7-25) NumTileColumnsInSlice=(deltaTileIdx%(num_tile_columns_minus1+1))+1 NumTilesInSlice=NumTileRowsInSlice*NumTileColumnsInSlice

[0107] slice_type describes the coding type of the slice according to Table 4. [Table 4] If nal_unit_type has a value in the range of TBD, inclusive, e.g., the picture is an Intra Random Access Picture (IRAP) picture, slice_type is equal to 2. log2_diff_ctu_max_bt_size describes the difference between the luma CTB size and the maximum luma size (width or height) of a coding block that can be partitioned using bisection. The value of log2_diff_ctu_max_bt_size is in the range from zero to CtbLog2SizeY-MinCbLog2SizeY, inclusive. If log2_diff_ctu_max_bt_size is not present, the value of log2_diff_ctu_max_bt_size is inferred to be equal to 2.

[0108] The variables MinQtLog2SizeY, MaxBtLog2SizeY, MinBtLog2SizeY, MaxTtLog2SizeY, MinTtLog2SizeY, MaxBtSizeY, MinBtSizeY, MaxTtSizeY, MinTtSizeY, and MaxMttDepth are derived as follows: MinQtLog2SizeY=(slice_type==I)?MinQtLog2SizeIntraY:MinQtLog2SizeInterY (7-26) MaxBtLog2SizeY=CtbLog2SizeY-log2_diff_ctu_max_bt_size (7-27) MinBtLog2SizeY=MinCbLog2SizeY (7-28) MaxTtLog2SizeY=(slice_type==I)? 5:6 (7-29) MinTtLog2SizeY=MinCbLog2SizeY (7-30) MinQtSizeY=1<<MinQtLog2SizeY (7-31) MaxBtSizeY=1<<MaxBtLog2SizeY (7-32) MinBtSizeY=1<<MinBtLog2SizeY (7-33) MaxTtSizeY=1<<MaxTtLog2SizeY (7-34) MinTtSizeY=1<<MinTtLog2SizeY (7-35) MaxMttDepth=(slice_type==I)?max_mtt_hierarchy_depth_intra_slices:max_mtt_hierarchy_depth_inter_slices (7-36) dep_quant_enabled_flag is set equal to zero to describe that dependent quantization is disabled. dep_quant_enabled_flag is set equal to 1 to describe that dependent quantization is enabled. sign_data_hiding_enabled_flag is set equal to zero to describe that sign bit hiding is disabled. sign_data_hiding_enabled_flag is set equal to 1 to describe that sign bit hiding is enabled. If sign_data_hiding_enabled_flag is not present, it is inferred to be equal to 0. slice_boundary_treated_as_pic_boundary_flag is set equal to 1 to describe that each slice boundary of a slice is treated the same as a picture boundary in the decoding process. slice_boundary_treated_as_pic_boundary_flag equal to 0 describes that each tile boundary may or may not be treated the same as a picture boundary in the decoding process. If not present, the value of slice_boundery_treated_as_pic_boundery_flag is inferred to be equal to 1. offset_len_minus1+1 describes the length in bits of the entry_point_offset_minus1[i] syntax element. The value of offset_len_minus1 ranges from 0 to 31, inclusive. entry_point_offset_minus1[i]+1 describes the i-th entry point offset, in bytes, represented by offset_len_minus1+1 bits. The slice data following the slice header consists of NumTilesInSlice subsets with subset index values ​​ranging from 0 to NumTilesInSlice-1, inclusive. The first byte of the slice data is considered to be byte zero. If present, an emulation prevention byte appearing in the slice data portion of a coded slice NAL unit is counted as part of the slice data for the purposes of subset identification.

[0109] Subset zero contains the bytes of the coded slice segment data from 0 to entry_point_offset_minus1[0], inclusive, and subset k contains the bytes of the coded slice data from firstByte[k] to lastByte[k], inclusive, for k in the range 1 to NumTilesInSlice-2, inclusive, where firstByte[k] and lastByte[k] are:

number

[0110] General slice data semantics are as follows: end_of_tile_one_bit is equal to 1. For each tile, the variables LeftBoundaryPos, TopBoundaryPos, RightBoundaryPos and BotBoundaryPos are derived as follows: If tile_boundary_treated_as_pic_boundary_flag is equal to true, the following applies: tileColIdx=CurrTileIdx / (num_tile_columns_minus1+1) (7-39) tileRowIdx=CurrTileIdx%(num_tile_columns_minus1+1) (7-40) LeftBoundaryPos=ColBd[tileColIdx]< <CtbLog2SizeY (7-41) RightBoundaryPos=((ColBd[tileColIdx]+ColWidth[tileColIdx])< <CtbLog2SizeY)-1 (7-42) TopBoundaryPos=RowBd[tileRowIdx]< <CtbLog2SizeY (7-43) BotBoundaryPos=((RowBd[tileRowIdx]+RowHeight[tileRowIdx])< <CtbLog2SizeY)-1 (7-44) Otherwise, if slice_boundary_treated_as_pic_boundary_flag is equal to true, the following applies: sliceFirstTileColIdx=TileIdToIdx[top_left_tile_id] / (num_tile_columns_minus1+1) (7-45) sliceFirstTileRowIdx=TileIdToIdx[top_left_tile_id]%(num_tile_columns_minus1+1) (7-46) sliceLastTileColIdx=TileIdToIdx[bottom_right_tile_id] / (num_tile_columns_minus1+1 (7-47) sliceLastTileRowIdx=TileIdToIdx[bottom_right_tile_id]%(num_tile_columns_minus1+1 (7-48) LeftBoundaryPos=ColBd[sliceFirstTileColIdx]< <CtbLog2SizeY (7-49) RightBoundaryPos=((ColBd[sliceLastTileColIdx]+ColWidth[sliceLastTileColIdx])< <CtbLog2SizeY)-1 (7-50) TopBoundaryPos=RowBd[sliceFirstTileRowIdx]< <CtbLog2SizeY (7-51) BotBoundaryPos=((RowBd[sliceLastTileRowIdx]+RowHeight[sliceLastTileRowIdx])< <CtbLog2SizeY)-1 (7-52) Otherwise (slice_boundary_treated_as_pic_boundary_flag is equal to FALSE), the following applies: LeftBoundaryPos=0 (7-53) RightBoundaryPos=pic_width_in_luma_samples-1 (7-54) TopBoundaryPos=0 (7-55) BotBoundaryPos=pic_height_in_luma_samples-1 (7-56)

[0111] The derivation process for temporal luma motion vector prediction is as follows: If yCb>>CtbLog2SizeY is equal to yColBr>>CtbLog2SizeY, yColBr is less than pic_height_in_luma_samples, and xColBr is less than pic_width_in_luma_samples, then the following applies:

[0112] The variable colCb describes the luma coding block that covers the modified position given by ((xColBr>>3)<<3, (yColBr>>3)<<3) in 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 derivation process for the co-located motion vector is called with currCb, colCb, (xColCb, yColCb), refIdxLX, and control parameter controlParaFlag set equal to 0 as inputs, and the output is assigned to mvLXCol and availableFlagLXCol. If yCb>>CtbLog2SizeY is equal to yColBr>>CtbLog2SizeY, yColBr is less than or equal to BotBoundaryPos, and xColBr is less than or equal to RightBoundaryPos, the following applies: The variable colCb describes the luma coding block that covers a modified position given by ((xColBr>>3)<<3,(yColBr>>3)<<3) in 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 derivation process for the collocated motion vectors is called with currCb, colCb, (xColCb, yColCb), refIdxLX, and the control parameter controlParaFlag set equal to 0 as inputs, and the output is assigned to mvLXCol and availableFlagLXCol.

[0113] In some examples, the derivation process for temporal luma motion vector prediction is as follows: If yCb>>CtbLog2SizeY is equal to yColBr>>CtbLog2SizeY, yColBr is less than pic_height_in_luma_samples, and xColBr is less than pic_width_in_luma_samples, then the following applies: The variable colCb describes the luma coding block that covers a modified position given by ((xColBr>>3)<<3,(yColBr>>3)<<3) in 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 derivation process for the co-located motion vector is called with currCb, colCb, (xColCb, yColCb), refIdxLX, and the control parameter controlParaFlag set equal to 0 as input, and the output is assigned to mvLXCol and availableFlagLXCol. If yCb>>CtbLog2SizeY is equal to yColBr>>CtbLog2SizeY, then the following applies: xColCtr=Min(xColCtr,RightBoundaryPos) and yColCtr=Min(yColCtr,BotBoundaryPos). The variable colCb describes the luma coding block that covers the modified position given by ((xColBr>>3)<<3,(yColBr>>3)<<3) in the co-located picture specified by ColPic. The luma position (xColCb, yColCb) is set equal to the top-left sample of the collocated luma coding block specified by colCb relative to the top-left luma sample of the collocated picture specified by ColPic.The derivation process for the collocated motion vectors is called with currCb, colCb, (xColCb, yColCb), refIdxLX, and the control parameter controlParaFlag set equal to 0 as inputs, and the output is assigned to mvLXCol and availableFlagLXCol.

[0114] The luma sample interpolation process is as follows: The inputs to this process are: luma position in full samples (xIntL, yIntL); luma position in fractional samples (xFracL, yFracL); and the luma reference sample array refPicLXL. The output of this process is the predicted luma sample value predSampleLXL. The variables shift1, shift2, and shift3 are derived as follows: The variable shift1 is set equal to Min(4,BitDepthY-8), the variable shift2 is set equal to 6, and the variable shift3 is set equal to Max(2,14-BitDepthY). The predicted luma sample value predSampleLXL is derived as follows: If both xFracL and yFracL are equal to 0, the value of predSampleLXL is derived as follows: predSampleLXL=refPicLXL[xIntL][yIntL]< <shift3 (8-228) Otherwise, if xFracL is not equal to 0 and yFracL is equal to 0, then the value of predSampleLXL is derived as follows: predSampleLXL= (fL[xFracL,0]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL-3)][yIntL]+ fL[xFracL][1]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL-2)][yIntL]+ fL[xFracL][2]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL-1)][yIntL]+ fL[xFracL][3]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL)][yIntL]+ fL[xFracL][4]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+1)][yIntL]+ fL[xFracL][5]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+2)][yIntL]+ fL[xFracL][6]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+3)][yIntL]+ fL[xFracL][7]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+4)][yIntL])>>shift1 (8-228)

[0115] Otherwise, if xFracL is equal to 0 and yFracL is not equal to 0, then the value of predSampleLXL is derived as follows: predSampleLXL= (fL[yFracL,0]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL-3)]+ fL[yFracL][1]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL-2)]+ L[yFracL][2]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL-1)]+ fL[yFracL][3]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL)]+ fL[yFracL][4]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL+1)]+ fL[yFracL][5]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL+2)]+ fL[yFracL][6]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL+3)]+ fL[yFracL][7]*refPicLXL[xIntL][Clip3(TopBoundaryPos,BotBoundaryPos,yIntL+4)])>>shift1 (8-228)

[0116] Otherwise, if xFracL is not equal to 0 and yFracL is not equal to 0, then the value of predSampleLXL is derived as follows: A sample array temp[n], for n=0...7, is derived as follows: yPosL=Clip3(TopBoundaryPos,BotBoundaryPos,yIntL+n-3) (8-228) temp[n] = (fL[xFracL,0]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL-3)][yPosL]+ fL[xFracL][1]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL-2)][yPosL]+ fL[xFracL][2]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL-1)][yPosL]+ fL[xFracL][3]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL)][yPosL]+ fL[xFracL][4]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+1)][yPosL]+ fL[xFracL][5]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+2)][yPosL]+ fL[xFracL][6]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+3)][yPosL]+ fL[xFracL][7]*refPicLXL[Clip3(LeftBoundaryPos,RightBoundaryPos,xIntL+4)][yPosL])>>shift1 (8 - 228)

[0117] The predicted luminance sample value predSampleLXL is derived as follows: predSampleLXL=(fL[yFracL][0]*temp[0]+ fL[yFracL][1]*temp[1]+ fL[yFracL][2]*temp[2]+ fL[yFracL][3]*temp[3]+ fL[yFracL][4]*temp[4]+ fL[yFracL][5]*temp[5]+ fL[yFracL][6]*temp[6]+ fL[yFracL][7]*temp[7])>>shift2 (8 - 228)

Table 5

[0118] The chroma sample interpolation process is as follows: The inputs to this process are: chroma position in full samples (xIntC, yIntC); chroma position in 1 / 8 fractional samples (xFracC, yFracC); and the chroma reference sample array refPicLXC. The output of this process is the predicted chroma sample value predSampleLXC. The variables shift1, shift2, shift3, picWC, and picHC are derived as follows: The variable shift1 is set equal to Min(4,BitDepthC-8), the variable shift2 is set equal to 6, and the variable shift3 is set equal to Max(2,14-BitDepthC). The variables lPos, rPos, tPos, and bPos are set as follows: lPos=LeftBoundaryPos / SubWidthC (8-228) rPos=(RightBoundaryPos+1) / SubWidthC (8-228) tPos=TopBoundaryPos / SubHeightC (8-228) bPos=(BotBoundaryPos+1) / SubHeightC (8-228) The predicted chroma sample value predSampleLXC is derived as follows: If both xFracC and yFracC are equal to 0, the value of predSampleLXC is derived as follows: predSampleLXC=refPicLXC[xIntC][yIntC]< <shift3 (8-228) Otherwise, if xFracC is not equal to 0 and yFracC is equal to 0, then the value of predSampleLXC is derived as follows: predSampleLXC=(fC[xFracC][0]*refPicLXC[Clip3(lPos,rPos,xIntC-1)][yIntC]+ fC[xFracC][1]*refPicLXC[Clip3(lPos,rPos,xIntC)][yIntC]+ fC[xFracC][2]*refPicLXC[Clip3(lPos,rPos,xIntC+1)][yIntC]+ C[xFracC][3]*refPicLXC[Clip3(lPos,rPos,xIntC+2)][yIntC])>>shift1 (8-228)

[0119] Otherwise, if xFracC is equal to 0 and yFracC is not equal to 0, then the value of predSampleLXC is derived as follows: redSampleLXC=(fC[yFracC][0]*refPicLXC[xIntC][Clip3(tPos,bPos,yIntC-1)]+ fC[yFracC][1]*refPicLXC[xIntC][Clip3(tPos,bPos,yIntC)]+ fC[yFracC][2]*refPicLXC[xIntC][Clip3(tPos,bPos,yIntC+1)]+ fC[yFracC][3]*refPicLXC[xIntC][Clip3(tPos,bPos,yIntC+2)])>>shift1 (8-228) Otherwise, if xFracC is not equal to 0 and yFracC is not equal to 0, then the value of predSampleLXC is derived as follows: A sample array temp[n], for n=0...3, is derived as follows: yPosC=Clip3(tPos,bPos,yIntC+n-1) (8-228) temp[n]=(fC[xFracC][0]*refPicLXC[Clip3(lPos,rPos,xIntC-1)][yPosC]+ fC[xFracC][1]*refPicLXC[Clip3(lPos,rPos,xIntC)][yPosC]+ fC[xFracC][2]*refPicLXC[Clip3(lPos,rPos,xIntC+1)][yPosC]+ fC[xFracC][3]*refPicLXC[Clip3(lPos,rPos,xIntC+2)][yPosC])>>shift1 (8-228)

[0120] The predicted chroma sample value predSampleLXC is derived as follows: predSampleLXC=(fC[yFracC][0]*temp[0]+ fC[yFracC][1]*temp[1]+ fC[yFracC][2]*temp[2]+ fC[yFracC][3]*temp[3])>>shift2 (8-228) [Table 6]

[0121] The Context-Based Adaptive Binary Arithmetic Coding (CABAC) parsing process for slice data is as follows: The initialization process is called when starting to parse a CTU, which is the first CTU in a tile. Note that the beginning of slice data is also covered by this statement, since each beginning of slice data is the beginning of a tile.

[0122] In another example, the CTB raster and tile scan process is as follows: A list ColWidth[i], for i ranging from 0 to num_tile_columns_minus1 inclusive, describing the width of the i-th tile column in CTU units, is derived as follows: if(uniform_tile_spacing_flag) for(i=0;i<=num_tile_columns_minus1;i++) ColWidth[i]=((i+1)*PicWidthInCtbsY) / (num_tile_columns_minus1+1)- (i*PicWidthInCtbsY) / (num_tile_columns_minus1+1) else { ColWidth[num_tile_columns_minus1]=PicWidthInCtbsY (6-1) for(i=0;i <num_tile_columns_minus1;i++){ ColWidth[i]=tile_column_width_minus1[i]+1 ColWidth[num_tile_columns_minus1]-=ColWidth[i] } }

[0123] The list RowHeight[j], for j ranging from 0 to num_tile_rows_minus1 inclusive, describing the height of the jth tile row in CTUs, is derived as follows: if(uniform_tile_spacing_flag) for(j=0;j<=num_tile_rows_minus1;j++) RowHeight[j]=((j+1)*PicHeightInCtbsY) / (num_tile_rows_minus1+1)- (j*PicHeightInCtbsY) / (num_tile_rows_minus1+1) else { RowHeight[num_tile_rows_minus1]=PicHeightInCtbsY (6-2) for(j=0;j <num_tile_rows_minus1;j++){ RowHeight[j]=tile_row_height_minus1[j]+1 RowHeight[num_tile_rows_minus1]-=RowHeight[j] } }

[0124] The list ColBd[i], for i in the range 0 to num_tile_columns_minus1+1 inclusive, describing the position of the i-th tile column boundary in CTB units, is derived as follows: for(ColBd[0]=0,i=0;i<=num_tile_columns_minus1;i++) ColBd[i+1]=ColBd[i]+ColWidth[i] (6-3)

[0125] The list RowBd[j], for j ranging from 0 to num_tile_rows_minus1+1 inclusive, describing the location of the jth tile row boundary in CTB units, is derived as follows: for(RowBd[0]=0,j=0;j<=num_tile_rows_minus1;j++) RowBd[j+1]=RowBd[j]+RowHeight[j] (6-4)

[0126] The list CtbAddrRsToTs[ctbAddrRs] of ctbAddrRs ranging from 0 to PicSizeInCtbsY-1 inclusive, describing the conversion from CTB addresses in the CTB raster scan of a picture to CTB addresses in the tile scan, is derived as follows: for(ctbAddrRs=0;ctbAddrRs <PicSizeInCtbsY;ctbAddrRs++){ tbX=ctbAddrRs%PicWidthInCtbsY tbY=ctbAddrRs / PicWidthInCtbsY for(i=0;i<=num_tile_columns_minus1;i++) if(tbX>=ColBd[i]) tileX=i for(j=0;j<=num_tile_rows_minus1;j++) (6-5) if(tbY>=RowBd[j]) tileY=j CtbAddrRsToTs[ctbAddrRs]=0 for(i=0;i <tileX;i++) CtbAddrRsToTs[ctbAddrRs]+=RowHeight[tileY]*ColWidth[i] for(j=0;j <tileY;j++) CtbAddrRsToTs[ctbAddrRs]+=PicWidthInCtbsY*RowHeight[j] CtbAddrRsToTs[ctbAddrRs]+=(tbY-RowBd[tileY])*ColWidth[tileX]+tbX-ColBd[tileX] }

[0127] The list CtbAddrRsToTs[ctbAddrRs] of ctbAddrTs in the range 0 to PicSizeInCtbsY-1 inclusive, describing the conversion from CTB addresses in the tile scan to CTB addresses in the CTB raster scan of the picture, is derived as follows: for(ctbAddrRs=0;ctbAddrRs <PicSizeInCtbsY;ctbAddrRs++) (6-6) CtbAddrTsToRs[CtbAddrRsToTs[ctbAddrRs]]=ctbAddrRs

[0128] The list TileId[ctbAddrTs], for ctbAddrTs ranging from 0 to PicSizeInCtbsY-1 inclusive, describing the conversion from CTB addresses to tile IDs in a tile scan, is derived as follows: for(j=0,tileIdx=0;j<=num_tile_rows_minus1;j++) for(i=0;i<=num_tile_columns_minus1;i++,tileIdx++) for(y=RowBd[j];y <RowBd[j+1];y++) (6-7) for(x = ColBd[i];x <ColBd[i+1];x++) TileId[CtbAddrRsToTs[y*PicWidthInCtbsY+x]]=tileIdx

[0129] The list NumCtusInTile[tileIdx], for tileIdx ranging from 0 to PicSizeInCtbsY-1 inclusive, which describes the conversion from tile index to number of CTUs within a tile, is derived as follows: for(j=0,tileIdx=0;j<=num_tile_rows_minus1;j++) for(i=0;i<=num_tile_columns_minus1;i++,tileIdx++) (6-8) NumCtusInTile[tileIdx]=ColWidth[i]*RowHeight[j]

[0130] The set TileIdToIdx[tileId], for the set of NumTilesInPic tileId values ​​that describes the conversion from tile ID to tile index, and the list FirstCtbAddrTs[tileIdx], for tileIdx in the range 0 to NumTilesInPic-1 inclusive that describes the conversion from tile ID to CTB address in the tile scan of the first CTU in the tile, are derived as follows: for(ctbAddrTs=0,tileIdx=0,tileStartFlag=1;ctbAddrTs <PicSizeInCtbsY;ctbAddrTs++){ if(tileStartFlag) { TileIdToIdx[TileId[ctbAddrTs]]=tileIdx FirstCtbAddrTs[tileIdx]=ctbAddrTs (6-9) tileStartFlag=0 } tileEndFlag = ctbAddrTs == PicSizeInCtbsY - 1 || TileId[ctbAddrTs + 1] != TileId[ctbAddrTs] if (tileEndFlag) { tileIdx++ tileStartFlag = 1 } }

[0131] For i in the range from 0 to num_tile_columns_minus1 including both ends, the value of ColumnWidthInLumaSamples[i] that describes the width of the i-th tile column in luma sample units is set equal to ColWidth[i] << CtbLog2SizeY. For j in the range from 0 to num_tile_rows_minus1 including both ends, the value of RowHeightInLumaSamples[j] that describes the height of the j-th tile row in luma sample units is set equal to RowHeight[j] << CtbLog2SizeY.

[0132] The picture parameter set RBSP syntax is as follows:

Table 7

[0133] The syntax of the slice header is as follows::

Table 8

[0134] Slice header semantics are as follows: If present, the value of the slice header syntax element slice_pic_parameter_set_id shall be the same in all slice headers of a coded picture. slice_pic_parameter_set_id describes the value of pps_pic_parameter_set_id for the PPS in use. The value of slice_pic_parameter_set_id shall be in the range of 0 to 63, inclusive. first_slice_in_pic_flag is set equal to 1 to describe that the slice is the first slice of the picture in decoding order. first_slice_in_pic_flag is set equal to 0 to describe that the slice is not the first slice of the picture in decoding order. single_tile_in_slice_flag is set equal to 1 to specify that there is only one tile in the slice. single_picture_in_pic_flag equal to 0 describes that there is more than one tile in the slice. top_left_tile_id describes the tile ID of the tile in the top left corner of the slice. The length of top_left_tile_id is Ceil(Log2((num_tile_rows_minus1+1)*(num_tile_columns_minus1+1))) bits. The value of top_left_tile_id is not equal to the value of top_left_tile_id of any other coded slice NAL unit of the same coded picture. If not present, the value of top_left_tile_id is inferred to be equal to zero. If there is more than one slice in a picture, the decoding order of slices within a picture is by increasing values ​​of top_left_tile_id. bottom_right_tile_id describes the tile ID of the tile in the bottom right corner of the slice. The length of bottom_right_tile_id is Ceil(Log2((num_tile_rows_minus1+1)*(num_tile_columns_minus1+1))) bits.If not present, the value of bottom_right_tile_id is inferred to be equal to top_left_tile_id.The variables NumTileRowsInSlice, NumTileColumnsInSlice, and NumTilesInSlice are derived as follows: deltaTileIdx=TileIdToIdx[bottom_right_tile_id]-TileIdToIdx[top_left_tile_id] NumTileRowsInSlice=(deltaTileIdx / (num_tile_columns_minus1+1))+1 (7-25) NumTileColumnsInSlice=(deltaTileIdx%(num_tile_columns_minus1+1))+1 NumTilesInSlice=NumTileRowsInSlice*NumTileColumnsInSlice

[0135] all_tiles_mcts_flag is set equal to 1 to describe that all tiles in the slice are part of an MCTS that contains only tiles in the slice for the current access unit, and the MCTS boundaries (which are collocated with the slice boundaries of the slice) are treated the same as picture boundaries. all_tiles_mcts_flag is set equal to 0 to describe that the above described by all_tiles_mcts_flag equal to 1 may or may not be true. slice_boundary_treated_as_pic_boundary_flag is set equal to 1 to describe that each slice boundary of the slice is treated the same as a picture boundary in the decoding process. slice_boundary_treated_as_pic_boundary_flag set equal to 0 is to describe that each tile boundary may or may not be treated the same as a picture boundary in the decoding process. If not present, the value of slice_boundery_treated_as_pic_boundery_flag is inferred to be equal to 1. Each subset includes all the coded bits of all the CTUs in the slice that are in the same tile.

[0136] 7 is a schematic diagram of an example of a video coding device 700. The video coding device 700 is suitable for implementing examples / embodiments of the disclosure as described herein. The video coding device 700 includes a downstream port 720, an upstream port 750, and / or a transceiver unit (Tx / Rx) 710, which includes a transmitter and / or a receiver for communicating data upstream and / or downstream over a network. The video coding device 700 also includes a processor 730 including a logic unit and / or a central processing unit (CPU) for processing data, and a memory 732 for storing data. The video coding device 700 may also include electrical components, optical-electrical (OE) components, electrical-optical (EO) components, and / or wireless communication components coupled to the upstream port 750 and / or the downstream port 720 for data communication over an electrical, optical, or wireless communication network. Video coding device 700 may also include input and / or output (I / O) devices 760 for communicating data to and from a user. I / O devices 760 may include output devices, such as, for example, a display for displaying video data, speakers for outputting audio data, etc. I / O devices 760 may also include input devices, such as, for example, a keyboard, mouse, trackball, etc., and / or corresponding interfaces for interacting with such output devices.

[0137] The processor 730 is implemented by hardware and software. The processor 730 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 730 communicates with downstream ports 720, Tx / Rx 710, upstream ports 750, and memory 732. The processor 730 includes a coding module 714. The coding module 714 implements the above-disclosed embodiments, such as methods 100, 800, and 900, which may use the bitstream 500 and / or the image 600. The coding module 714 may also implement any other method / mechanism described herein. Additionally, the coding module 714 may implement the codec system 200, the encoder 300, and / or the decoder 400. For example, when acting as an encoder, coding module 714 may divide an image into slices, divide the slices into tiles, divide the tiles into CTUs, divide the CTUs into blocks, and then encode the blocks. Additionally, coding module 714 may implicitly signal the number of tiles in a slice, the number of entry point offsets for tiles in a slice, the CTU addresses of the tiles, the last CTU in the slice, and / or other data by signaling slice boundaries based on the tile IDs of the first and last tiles in the slice. When acting as a decoder, coding module 714 may reconstruct such data based on the first and last tiles in a slice, thus increasing coding efficiency. Thus, coding module 714 allows video coding device 700 to provide additional functionality and / or coding efficiency when dividing and coding video data. Thus, coding module 714 improves the functionality of video coding device 700 while addressing problems unique to video coding techniques.Additionally, the coding module 714 transitions the video coding apparatus 700 into a different state. Alternatively, the coding module 714 can be implemented as instructions stored in the memory 732 and executed by the processor 730 (e.g., as a computer program product stored on a non-transitory medium).

[0138] Memory 732 may comprise one or more memory types, such as, for example, a disk, a tape drive, a solid state drive, read only memory (ROM), random access memory (RAM), flash memory, ternary content addressable memory (TCAM), static random access memory (SRAM), etc. Memory 732 may be used as an overflow data storage device to store such programs when such programs are selected for execution, and to store instructions and data retrieved during program execution.

[0139] 8 is a flow chart of an example of a method 800 for encoding an image, such as image 600, into a bitstream, such as bitstream 500. Method 800 may be used by an encoder, such as codec system 200, encoder 300, and / or video coding device 700, when performing method 100.

[0140] Method 800 may begin when an encoder receives a video sequence including multiple images 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 prior to encoding. In step 801, an image is partitioned into multiple slices. The slices are partitioned into multiple tiles. The tiles are partitioned into multiple CTUs. The CTUs are further partitioned into coding blocks.

[0141] At step 803, each slice is encoded into a separate VCL NAL unit in the bitstream. A slice includes (one or more) tiles, CTUs, and coding blocks. Thus, the tiles, CTUs, and coding blocks of each slice are also encoded into the corresponding VCL NAL unit. The bitstream includes multiple VCL NAL units that include multiple slices from different images in the video sequence. As described above, a slice includes an integer number of tiles. Thus, each VCL NAL unit in the multiple VCL NAL units includes a single slice of image data that is divided into an integer number of tiles.

[0142] Note that steps 805 and 807 may occur before, after, and / or during step 803. For clarity of explanation, steps 805 and 807 are treated separately. In step 805, tiles in each slice are assigned tile IDs. Additionally, addresses are assigned to CTUs. For example, addresses of CTUs in a VCL NAL unit may be assigned based on the tile ID corresponding to the tile that contains the CTU.

[0143] In step 807, a value indicating the number of tiles in the corresponding slice, and therefore in each VCL NAL unit, is coded in the bitstream. For example, the number of tiles in a VCL NAL unit may be included in the PPS or the non-VCL NAL unit that includes the slice header that corresponds to the slice. In another example, the number of tiles may be omitted from the bitstream because the decoder may be able to determine the number of tiles in a VCL NAL unit based on the top-left and bottom-right tiles in the corresponding slice, which may be signaled in the non-VCL NAL unit that includes the slice header. Entry point offsets for the tiles are also coded in the bitstream. For example, the entry point offsets for the tiles may be coded in a slice header associated with the slice. The entry point offsets each point to the start position of the corresponding tile in the VCL NAL unit. The number of entry point offsets is not explicitly signaled in the bitstream because the number of entry point offsets may be determined as one less than the number of tiles. In some examples, the addresses of the CTUs in the VCL NAL unit may also be explicitly signaled in the slice header. In another example, the addresses of the CTUs in the VCL NAL unit are omitted from the bitstream to support the determination of the CTU addresses at the decoder based on the tile ID of the first tile contained in the VCL NAL unit. As described above, the CTUs encoded in step 803 do not need to include a flag indicating the last CTU in the VCL NAL unit because the decoder can determine the number of CTUs in the VCL NAL unit based on knowledge of the number of tiles in the slice. However, the VCL NAL unit may be encoded to include padding bits immediately after the last CTU in each tile to support maintaining a separation between the image data associated with each tile.

[0144] In step 809, a bitstream is transmitted without the number of entry point offsets, and decoding of tiles is supported according to the estimation that the number of entry point offsets for tiles is one less than the number of tiles in a VCL NAL unit.

[0145] 9 is a flow chart of an example of a method 900 for decoding an image, such as image 600, from a bitstream, such as bitstream 500. Method 900 may be used by a decoder, such as codec system 200, decoder 400, and / or video coding device 700, when performing method 100.

[0146] Method 900 may begin when a decoder begins to receive a bitstream of coded data representing a video sequence, e.g., as a result of method 800. At step 901, the bitstream is received at the decoder. The bitstream includes a number of VCL NAL units, each of which includes image data divided into a number of tiles. As described above, each slice of an image includes an integer number of tiles. Each slice is also included in a separate VCL NAL unit. Thus, each VCL NAL unit includes an integer number of tiles. Furthermore, each tile is divided into a number of CTUs, which are further divided into a number of coding blocks.

[0147] In step 903, the decoder determines the number of tiles in the VCL NAL unit. For example, the number of tiles in a VCL NAL unit can be obtained from a non-VCL NAL unit that includes a corresponding slice header. In another example, the slice header can include data indicating the top-left and bottom-right tiles in the slice. This data can be used to determine the number of tiles in the slice, and therefore in the VCL NAL unit. The decoder can then use the number of tiles in the slice to determine the number of entry point offsets for the tiles. For example, the number of entry point offsets for the tiles is one less than the number of tiles in the VCL NAL unit. As described above, each entry point offset points to the start of the corresponding tile in the VCL NAL unit. The number of entry point offsets may not be explicitly signaled in the bitstream to increase compression and therefore coding efficiency.

[0148] At step 905, the decoder obtains an entry point offset for the tile from the bitstream based on the number of entry point offsets. For example, the entry point offset for the tile may be obtained from a slice header associated with the slice.

[0149] As described above, image data is coded as multiple CTUs included in each of the tiles. Furthermore, addresses of the CTUs in the VCL NAL unit may be assigned based on the tile ID corresponding to the tile. Thus, in step 907, the decoder may determine the tile ID of the tile and the address of the CTU based on the tile ID. In some examples, the tile ID is explicitly signaled, for example, in the PPS and / or slice header. In other examples, the decoder may determine the tile ID based on the tile IDs of the top-left tile and the bottom-right tile of the slice. Also, in some cases, the address of the CTU in the VCL NAL unit is explicitly signaled in the slice header. In other examples, the decoder may determine the address of the CTU in the VCL NAL unit based on the tile ID of the first tile (e.g., the top-left tile) included in the VCL NAL unit.

[0150] In step 909, the decoder decodes the tiles at the entry point offsets to generate a reconstructed image. For example, the decoder can decode the CTUs using the entry point offsets of the tiles and the CTU addresses, which are either explicitly signaled in the slice header or estimated based on the tile ID. The decoder can then forward the reconstructed image to the display as part of the reconstructed video sequence. In some examples, the decoder may not need to look for a flag that points to the last CTU in the VCL NAL unit, because such a flag may be omitted from the VCL NAL unit. In such a case, the decoder can determine the number of CTUs in the VCL NAL unit based on knowledge of the number of tiles in the slice. In some examples, the decoder can separate tiles in the VCL NAL unit based on padding bits immediately following the last CTU in each tile.

[0151] 10 is a schematic diagram of an example of a system 1000 for coding a video sequence of images, such as image 600, into a bitstream, such as bitstream 500. System 1000 may be implemented by an encoder and a decoder, such as codec system 200, encoder 300, decoder 400, and / or video coding device 700. System 1000 may also be used when performing methods 100, 800, and / or 900.

[0152] The system 1000 includes a video encoder 1002. The video encoder 1002 has a partitioning module 1001 that partitions an image into a plurality of tiles. The video encoder 1002 further has an encoding module 1003 that encodes the tiles into a bitstream of at least one VCL NAL unit, encodes a number of tiles in the VCL NAL unit in the bitstream, and encodes entry point offsets for the tiles in the bitstream, each of the entry point offsets indicating a start position of a corresponding tile in the VCL NAL unit, and the number of entry point offsets is not explicitly signaled in the bitstream. The video encoder 1002 further has a transmission module 1005 that transmits a bitstream without the number of entry point offsets to support decoding the tiles according to an estimation that the number of entry point offsets for the tiles is one less than the number of tiles in the VCL NAL unit. The video encoder 1002 may further be configured to perform any of the steps of the method 800.

[0153] The system 1000 also includes a video decoder 1010. The video decoder 1010 includes a receiving module 1011 for receiving a bitstream including a VCL NAL unit including image data divided into a plurality of tiles. The video decoder 1010 further includes a determining module 1013 for determining a number of tiles in the VCL NAL unit and determining a number of entry point offsets for the tiles as one less than the number of tiles in the VCL NAL unit, each entry point offset pointing to a start position of a corresponding tile in the VCL NAL unit, and the number of entry point offsets is not explicitly signaled in the bitstream. The video decoder 1010 further includes an obtaining module 1015 for obtaining an entry point offset for the tile based on the number of entry point offsets. The video decoder 1010 further includes a decoding module 1017 for decoding the tiles at the entry point offsets to generate a reconstructed image. The video decoder 1010 may further be configured to perform any of the steps of the method 900.

[0154] A first component is directly coupled to a second component when there are no intervening components, other than lines, traces, or other media, between the first and second components. A first component is indirectly coupled to a second component when there are intervening components, other than lines, traces, or other media, between the first and second components. The term "coupled" and variations thereof include both directly coupled and indirectly coupled. Use of the term "about" means a range that includes ±10% of the following number, unless otherwise specified.

[0155] 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 of such methods is merely exemplary. Similarly, additional steps may be included in such methods, and certain steps may be omitted or combined in methods consistent with various embodiments of the present disclosure.

[0156] Although several embodiments have been presented in this disclosure, it will be understood that the disclosed systems and methods may be embodied in numerous other specific forms without departing from the spirit or scope of the disclosure. The examples herein should be considered as illustrative rather than limiting, and the intention is not to be limited to the details given herein. For example, the various elements or components may be combined or integrated in other systems, or certain features may be omitted or not implemented.

[0157] Additionally, the techniques, systems, subsystems, and methods described and illustrated as separate or distinct in various embodiments may be combined or integrated with other systems, components, techniques, or methods without departing from the scope of the present disclosure. Other examples of variations, substitutions, and alterations will be apparent to those skilled in the art and may be made without departing from the spirit and scope of the present disclosure. Further embodiments of the present invention are provided below, and it should be noted that the numbering used in the following sections does not necessarily follow the numbering used in the preceding sections. Embodiment 1. A method implemented in a decoder, comprising: receiving, by a receiver of the decoder, a bitstream including a coded slice network abstraction layer (NAL) unit including slice data for a slice divided into a plurality of tiles; deriving, by a processor of the decoder, a number of entry point offsets for the tiles, the number of entry point offsets being not explicitly signaled in the bitstream, the number of entry point offsets being one less than the number of tiles in the slice, each entry point offset pointing to an offset between two start positions of two tiles within the coded slice NAL unit; obtaining, by the processor, the entry point offset for the tile based on the number of entry point offsets; reconstructing, by the processor, the tiles based on the entry point offset to generate a reconstructed image. How to have that. Embodiment 2. The method of embodiment 1, wherein the entry point offset for the tile is obtained from a slice header associated with the slice. Embodiment 3. A method as described in any of embodiments 1 to 2, wherein the bitstream includes a plurality of coded slice NAL units, each of which includes slice data for a single slice divided into an integer number of tiles. Embodiment 4. A method according to any one of embodiments 1 to 3, wherein the slice is coded as a plurality of coding tree units (CTUs) contained in each of the tiles, and the addresses of the CTUs within the slice are assigned based on a tile index corresponding to the tile. Embodiment 5. A method as described in any one of embodiments 1 to 4, wherein reconstructing the tile includes reconstructing the CTU based on an address of the CTU in the slice that is explicitly signaled in the slice header. Embodiment 6. Reconfiguring the tiles comprises: determining, by the processor, the address of the CTU in the slice based on a tile index of a first tile in the slice; reconfiguring, by the processor, the CTU based on the address of the CTU; 5. The method of any one of claims 1 to 4, comprising: Embodiment 7. A method according to any of embodiments 1 to 6, wherein the bitstream does not include a flag indicating the last CTU in the slice, and the coded slice NAL unit includes padding bits immediately after the last CTU of each tile in the slice. Embodiment 8. The method of any one of embodiments 1 to 7, further comprising transmitting, by the processor, the reconstructed image to a display as part of a reconstructed video sequence. Embodiment 9. A method implemented in an encoder, comprising: Dividing an image into at least one slice and dividing the at least one slice into a plurality of tiles by a processor of the encoder; encoding, by the processor, the tile into at least one coded slice network abstraction layer (NAL) unit of a bitstream; encoding, by the processor, in the bitstream entry point offsets for the tiles, each entry point offset indicating an offset between two start positions of two tiles in the coded slice NAL unit, the number of entry point offsets being not explicitly signaled in the bitstream, and the number of entry point offsets being one less than the number of the tiles in the slice; How to have that.

[0023] Embodiment 10. A transmitter of the encoder transmits the bitstream without the number of entry point offsets. 10. The method of embodiment 9, further comprising: Embodiment 11. A method according to any of embodiments 9 to 10, wherein the addresses of CTUs in the slice are omitted from the bitstream and support determining the addresses of the CTUs at a decoder based on the tile index of the first tile in the slice. Embodiment 12. A method for storing an encoded bitstream, comprising: Dividing the image into at least one slice, and dividing the at least one slice into a plurality of tiles, by a processor; encoding, by the processor, the tiles into a bitstream of at least one coded slice network abstraction layer (NAL) unit; encoding, by the processor, in the bitstream entry point offsets for the tiles, each entry point offset indicating an offset between two start positions of two tiles in the coded slice NAL unit, the number of entry point offsets being one less than the number of tiles in the slice and not explicitly signaled in the bitstream; storing the bitstream on a non-transitory storage medium; How to have that. Embodiment 13. A receiver configured to receive a coded video bitstream, comprising: a memory coupled to the receiver, the memory storing instructions; a processor coupled to the memory and configured to execute the instructions stored in the memory, such that the processor performs the method according to any one of claims 1 to 11; A coding device having the following construction. Embodiment 14. A coder having processing circuitry for carrying out the method according to any one of embodiments 1 to 11. Embodiment 15. A computer program having a program code for performing the method according to any one of embodiments 1 to 11 when the computer program is run on a computer or processor. Embodiment 16. A method for implementing a method according to any one of embodiments 1 to 11, comprising: a processor; a receiver coupled to the processor; and a transmitter coupled to the processor, the processor, the receiver, and the transmitter configured to perform the method according to any one of embodiments 1 to 11. Video coding device. Embodiment 17. A non-transitory computer-readable medium having a computer program for use by a video coding device, the computer program having computer-executable instructions stored on the non-transitory computer-readable medium that, when executed by a processor, causes the video coding device to perform a method according to any one of embodiments 1 to 11. Embodiment 18. A method for coding a bitstream including a coded slice network abstraction layer (NAL) unit including slice data of a slice divided into a plurality of tiles, comprising: a derivation unit configured to derive a number of entry point offsets for the tiles, the number of entry point offsets being not explicitly signaled in the bitstream, the number of the entry point offsets being one less than a number of the tiles in the slice, each entry point offset indicating an offset between two start positions of two tiles in the coded slice NAL unit; and an obtaining unit configured to obtain the entry point offset for the tile based on the number of entry point offsets; a reconstruction unit configured to reconstruct the tiles based on the entry point offset to generate a reconstructed image; A decoding device having the above configuration. Embodiment 19. A method for generating a pixel value of a pixel value by dividing an image into at least one slice, the method comprising: is a coding unit, encoding the tile into at least one coded slice network abstraction layer (NAL) unit of a bitstream; encoding entry point offsets for the tiles in the bitstream, each entry point offset indicating an offset between two start positions of two tiles in the coded slice NAL unit, the number of entry point offsets being not explicitly signaled in the bitstream, and the number of the entry point offsets being one less than the number of the tiles in the slice; A coding unit configured as follows: An encoding device having the following construction.

Claims

1. A method implemented in a decoder, comprising: receiving, by a receiver of the decoder, a bitstream including a coded slice network abstraction layer (NAL) unit including slice data for a slice divided into a plurality of tiles; deriving, by a processor of the decoder, a number of entry point offsets for the tiles, the number of the entry point offsets being one less than the number of tiles in the slice, each entry point offset indicating an offset between two start positions of two tiles within the coded slice NAL unit; obtaining, by the processor, the entry point offset for the tile based on the number of entry point offsets; reconstructing, by the processor, the tiles based on the entry point offset to generate a reconstructed image. Having said that, The slice is coded as a plurality of coding tree units (CTUs) contained in each of the tiles, and addresses of the CTUs within the slice are assigned based on a tile index corresponding to the tile; Reconfiguring the tiles further comprises: determining, by the processor, the address of the CTU in the slice based on a tile index of a first tile in the slice; reconfiguring, by the processor, the CTU based on the address of the CTU; Including, method.

2. The method of claim 1 , wherein the entry point offset for the tile is obtained from a slice header associated with the slice.

3. 3. The method of claim 1, wherein the bitstream includes a plurality of coded slice NAL units, each of which includes slice data for a single slice divided into an integer number of tiles.

4. 2. The method of claim 1, wherein the entry point offset for the tile is obtained from a slice header associated with the slice, and reconstructing the tile includes reconstructing the CTU based on an address of the CTU in the slice that is explicitly signaled in the slice header.

5. 5. The method of claim 1, wherein the bitstream does not include a flag indicating the last CTU in the slice, and the coded slice NAL unit includes padding bits immediately after the last CTU of each tile in the slice.

6. 6. The method of claim 1, further comprising transmitting, by the processor, the reconstructed image to a display as part of a reconstructed video sequence.

7. A method implemented in an encoder, comprising: Dividing an image into at least one slice and dividing the at least one slice into a plurality of tiles by a processor of the encoder; encoding, by the processor, the tile into at least one coded slice network abstraction layer (NAL) unit of a bitstream; encoding, by the processor, entry point offsets for the tiles in the bitstream, each entry point offset indicating an offset between two start positions of two tiles in the coded slice NAL unit, and the number of entry point offsets is not explicitly signaled in the bitstream. Having said that, The slice is coded as a plurality of coding tree units (CTUs) contained in each of the tiles, and addresses of the CTUs within the slice are assigned based on a tile index corresponding to the tile; The method further comprises: determining, by the processor, the address of the CTU in the slice based on a tile index of a first tile in the slice; reconfiguring, by the processor, the CTU based on the address of the CTU; Including, method.

8. transmitting, by a transmitter of the encoder, the bitstream that does not have the number of entry point offsets. The method of claim 7 further comprising:

9. 9. A method according to claim 7, wherein addresses of CTUs within the slice are omitted from the bitstream, supporting determination of the addresses of the CTUs at a decoder based on a tile index of a first tile in the slice.

10. A method for transmitting an encoded bitstream, comprising the steps of: Storing at least one bitstream in at least one storage device, said bitstream being generated according to a method according to any one of claims 7 to 9, Obtaining one or more bitstreams from the at least one storage device; transmitting the one or more bitstreams to a destination device; How to have that.

11. a receiver configured to receive the coded video bitstream; a memory coupled to the receiver, the memory storing instructions; a processor coupled to said memory and configured to execute the instructions stored in said memory, such that said processor performs a method according to any one of claims 1 to 9; A coding device having the following construction.

12. A coder comprising processing circuitry for carrying out the method according to any one of claims 1 to 9.

13. A computer program having a program code for performing the method according to any one of claims 1 to 9, when the computer program runs on a computer or processor.

14. A method for transmitting a signal from a processor to a receiver coupled to the processor, the receiver and the transmitter being configured to perform a method according to any one of claims 1 to 9. Video coding device.

15. 10. A non-transitory computer readable medium having a computer program for use by a video coding device, the computer program having computer executable instructions stored on the non-transitory computer readable medium that, when executed by a processor, causes the video coding device to perform a method according to any one of claims 1 to 9.

Citation Information

Patent Citations

  • Video Data Stream Concept

    JP2015526006A

  • Video encoding and decoding method and apparatus using same

    US20140376643A1