Methods for encoding images, devices for encoding images into coded video bitstreams, non-temporary computer-readable storage media, computer programs, and data structures.

By deriving tile information from slice headers, the method enhances video compression efficiency, addressing bandwidth and storage challenges in video coding.

JP7892930B2Active Publication Date: 2026-07-22HUAWEI TECH CO LTD
View PDF 1 Cites 0 Cited by

Patent Information

Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
HUAWEI TECH CO LTD
Filing Date
2025-06-04
Publication Date
2026-07-22

AI Technical Summary

Technical Problem

Existing video coding technologies face challenges in efficiently compressing video data for streaming and storage due to limited bandwidth and memory resources, necessitating improved compression techniques without sacrificing image quality.

Method used

The method involves deriving the number of tiles in a slice from the slice header based on specific conditions, using an image header structure to control slice addresses and tile presence, and reconstructing slices using this information, thereby enhancing compression efficiency.

Benefits of technology

This approach improves video compression efficiency by optimizing the use of slice headers and tile-based addressing, allowing for more effective data representation and reduced bandwidth requirements.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 0007892930000041
    Figure 0007892930000041
  • Figure 0007892930000042
    Figure 0007892930000042
  • Figure 0007892930000043
    Figure 0007892930000043
Patent Text Reader

Abstract

To provide a method of decoding a picture from a video bitstream, implemented by a decoding device, a program, an encoder, a decoder, and a non-transitory computer readable medium.SOLUTION: A method includes: a step of receiving a bitstream including a slice header of a current slice and data representing the current slice, and obtaining a parameter used to derive the number of tiles in the current slice from the slice header when a condition is satisfied, the condition including that the slice address of the current slice is not an address of the last tile in the picture where the current slice located; and a step of reconstructing the current slice using the number of tiles in the current slice and the data representing the current slice.SELECTED DRAWING: Figure 14
Need to check novelty before this filing date? Find Prior Art

Description

Technical Field

[0001] Embodiments of the present disclosure generally relate to the field of image processing, and more specifically, to simplifying signaling slice header syntax elements.

Background Art

[0003] Even for relatively short videos, the amount of video data required can be significant, and as a result, difficulties can arise when the data is to be streamed or otherwise communicated over a communication network with limited bandwidth capacity. Therefore, video data is generally compressed before being communicated over modern telecommunications networks. The size of the video can also be a problem when the video is stored on a storage device, as the memory resources may be limited. Video compression devices often use software and / or hardware at the source to encode the video data before transmission or storage, thereby reducing the amount of data required to represent the digital video image. The compressed data is then received at the destination by a video decompression device that decodes the video data. Improved compression and decompression techniques that improve the compression ratio without sacrificing much or any image quality are desirable, as network resources are limited and the demand for higher video quality is increasing.

Summary of the Invention

[0004] Embodiments of this disclosure provide apparatus and methods for encoding and decoding as described in an independent claim.

[0005] The present invention provides the following:

[0006] A method for decoding an image from a video bitstream, implemented by a decoding device, wherein the bitstream includes a slice header for the current slice and data representing the current slice, the method comprising: a step of obtaining a parameter (e.g., um_tiles_in_slice_minus1) used to derive the number of tiles in the current slice from the slice header if a condition is met, the condition being that the slice address (e.g., slice_address) for the current slice is not the address of the last tile in the image in which the current slice is located; and a step of reconstructing the current slice using the number of tiles in the current slice and data representing the current slice.

[0007] In this method, as described above, determining that the slice address of the current slice is the address of the last tile in the image may include determining that the value obtained by subtracting the slice address of the current slice from the number of tiles in the image is equal to 1.

[0008] In this method, as described above, determining that the slice address of the current slice is not the address of the last tile in the image may include determining that the value obtained by subtracting the slice address of the current slice from the number of tiles in the image (e.g., NumTilesInPic) is greater than 1.

[0009] Therefore, according to the present invention, the presence of an image header structure in the slice header can be used to control the presence of slice addresses and the number of tiles in the slice indication. If a single slice exists in an image, the slice address must be equal to the first tile in that image, and the number of tiles in the slice must be equal to the number of tiles in that image. This can thus improve compression efficiency.

[0010] In the method described above, the current slice parameter values ​​can be inferred to be equal to the default values ​​when the condition is not met.

[0011] In the method described above, the default value can be equal to 0.

[0012] In the method described above, slice addresses may be tile-based.

[0013] In the method described above, the conditions may further include a step of determining whether the current slice is in raster scan mode.

[0014] In the method described above, the step of reconstructing the current slice using the number of tiles in the current slice may include the step of determining the scan order of the coding tree units in the current slice using the number of tiles in the current slice, and the step of reconstructing the coding tree units in the current slice using the scan order.

[0015] The present invention further provides a method for encoding a video bitstream, which is implemented by an encoding device, wherein the bitstream includes a slice header for a current slice and data representing the current slice, the method comprising the steps of: encoding a parameter used to derive the number of tiles in the current slice from the slice header if a condition is met, the condition being that the slice address of the current slice is not the address of the last tile in the image in which the current slice is located; and reconstructing the current slice using the number of tiles in the current slice and the data representing the current slice.

[0016] The present invention further provides an apparatus for decoding an image from a video bitstream, wherein the bitstream includes a slice header for the current slice and data representing the current slice, and the apparatus includes an acquisition unit configured to acquire a parameter used to derive the number of tiles in the current slice from the slice header if a condition is met, the condition being that the slice address of the current slice is not the address of the last tile in the image where the current slice is located, and a reconstruction unit configured to reconstruct the current slice using the number of tiles in the current slice and data representing the current slice. The present invention further provides an apparatus for encoding an image from a coded video bitstream, wherein the bitstream includes a slice header for the current slice and data representing the current slice, and the apparatus includes an encoding unit configured to encode a parameter used to derive the number of tiles in the current slice from the slice header if a condition is met, the condition being that the slice address of the current slice is not the address of the last tile in the image where the current slice is located, and a reconstruction unit configured to reconstruct the current slice using the number of tiles in the current slice and data representing the current slice.

[0017] The present invention further provides an encoder including a processing circuit for performing the video bitstream encoding method described above.

[0018] The present invention further provides a decoder including a processing circuit for performing the video bitstream decoding method described above.

[0019] The present invention further provides a computer program product that includes program code for performing the above-described method of encoding a video bitstream or the above-described method of decoding a video bitstream, when executed on a computer or processor, respectively.

[0020] The present invention further provides a decoder comprising one or more processors and a non-temporary computer-readable storage medium coupled to the processors and storing a program for execution by the processors, wherein the program, when executed by the processors, constitutes a decoder that performs a method for decoding a video bitstream as described above.

[0021] The present invention further provides an encoder comprising one or more processors and a non-temporary computer-readable storage medium coupled to the processors and storing a program for execution by the processors, wherein the program, when executed by the processors, configures the encoder to perform a method for encoding a video bitstream as described above.

[0022] The present invention further provides a non-temporary computer-readable medium that, when executed by a computer device, holds program code that causes the computer device to perform the above-described method for encoding or decoding a video bitstream.

[0023] The present invention further provides a non - transitory storage medium including a video bitstream, where the bitstream includes a slice header of a current slice and data representing the current slice. Here, the slice header includes a slice address of the current slice. Here, when a condition is satisfied, the slice header further includes parameters used to derive the number of tiles within the current slice from the slice header, and the condition includes that the slice address of the current slice is not the address of the last tile within the image where the current slice is located.

[0024] Details of one or more embodiments are set forth in the accompanying drawings and the description below. Other features, objects, and advantages will be apparent from the description, drawings, and claims.

Brief Description of the Drawings

[0025] In the following, embodiments of the present invention will be described in more detail with reference to the accompanying figures and drawings. [Figure 1A] It is a block diagram showing an example of a video coding system configured to implement an embodiment of the present invention. [Figure 1B] It is a block diagram showing another example of a video coding system configured to implement an embodiment of the present invention. [Figure 2] It is a block diagram showing an example of a video encoder configured to implement an embodiment of the present invention. [Figure 3] It is a block diagram showing an exemplary structure of a video decoder configured to implement an embodiment of the present invention. [Figure 4] It is a block diagram showing an example of an encoding device or a decoding device. [Figure 5] It is a block diagram showing another example of an encoding device or a decoding device. [Figure 6] It is a diagram showing an example of an image divided into CTUs. [Figure 7]This figure shows an example of a raster scan order. [Figure 8] This figure shows examples of tiles, slices, and sub-images. [Figure 9] As an example, this figure shows the raster scan order in a CTU image and a single slice within the image. [Figure 10] This diagram illustrates an image divided into 12 tiles and 3 slices. [Figure 11] An example cylinder of the LMCS architecture. [Figure 12] This is a block diagram showing an exemplary structure of a content supply system 3100 that realizes a content distribution service. [Figure 13] This is a block diagram showing the structure of an example terminal device. [Figure 14] This figure shows a flowchart of a video bitstream decoding method according to an embodiment of the present disclosure. [Figure 15] This figure shows a flowchart of a video bitstream decoding method according to an embodiment of the present disclosure. [Figure 16] This figure shows a decoder for decoding a video bitstream according to an embodiment of the present disclosure. [Figure 17] This figure shows an encoder for encoding a video bitstream according to an embodiment of the present disclosure. Hereinafter, the same reference numerals refer to the same or at least functionally equivalent features unless otherwise specified. [Modes for carrying out the invention]

[0026] The following description refers to accompanying drawings that form part of this disclosure and illustrate specific embodiments of the invention or specific ways in which embodiments of the invention can be used. It is understood that embodiments of the invention may be used in other ways and may include structural or logical modifications not shown in the drawings. Therefore, the following detailed description should not be construed as limiting, and the scope of the invention is defined by the appended claims.

[0027] For example, disclosures relating to a described method may also apply to a corresponding device or system configured to perform the method, and vice versa. For example, if one or more steps of a particular method are described, the corresponding device may include one or more such units, e.g., functional units, to perform the described steps of the one or more steps of the method (e.g., one unit performing the one or more steps, or multiple units each performing one or more of the steps), even if the units are not explicitly described or shown in the drawings. On the other hand, for example, if a particular apparatus is described based on one or more units, e.g., functional units, the corresponding method may include one such step (e.g., one step performing the function of one or more units, or multiple steps each performing the function of one or more of the units), even if the steps are not explicitly described or shown in the drawings. Furthermore, unless otherwise specifically noted, it is understood that the features of the various exemplary embodiments and / or aspects described herein may be combined with each other.

[0028] Video coding typically refers to the processing of a set of images that make up a video or video sequence. In the field of video coding, the terms “frame” or “image” are sometimes used as synonyms instead of the term “image.” Video coding (or coding in general) consists of two parts: video encoding and video decoding. Video encoding is performed on the source side and typically involves processing the original video image (e.g., by compression) to reduce the amount of data required to represent the video image (for more efficient storage and / or transmission). Video decoding is performed on the destination side and typically involves the reverse processing compared to the encoder to reconstruct the video image. Embodiments referring to “coding” of video images (or images in general) shall be understood to be relating to the “encoding” or “decoding” of the video image or each video sequence. The combination of the encoding and decoding parts is also called a codec (coding and decoding).

[0029] In lossless video coding, the original video image can be reconstructed, meaning the reconstructed video image is of the same quality as the original video image (assuming there is no transmission loss or other data loss during storage or transmission). In lossy video coding, further compression is performed, for example by quantization, to reduce the amount of data representing the video image, but this cannot be fully reconstructed in the decoder; that is, the quality of the reconstructed video image is lower or degraded compared to the quality of the original video image.

[0030] Several video coding standards belong to the group of “lossy hybrid video codecs” (i.e., combining spatial and temporal prediction in the sample domain with 2D transform coding to apply quantization in the transform domain). Each image in a video sequence is typically divided into a set of non-overlapping blocks, and coding is typically performed at the block level. In other words, in the encoder, video is typically processed, i.e., encoded, at the block (video block) level by generating predicted blocks using, for example, spatial (intra-image) prediction and / or temporal (inter-image) prediction, subtracting the predicted blocks from the current block (the block currently being processed / will be processed) to obtain residual blocks, transforming the residual blocks and quantizing the residual blocks in the transform domain to reduce (compress) the amount of data that will be transmitted. Meanwhile, in the decoder, the reverse processing compared to the encoder is applied to the encoded or compressed blocks to reconstruct the current blocks for representation. Furthermore, the encoder and decoder processing loop are repeated, resulting in both producing the same predictions (e.g., intra and inter predictions) and / or reconstructions for processing subsequent blocks, i.e., for coding.

[0031] Embodiments of the video coding system 10, video encoder 20, and video decoder 30 will be described below with reference to Figures 1A to 3.

[0032] Figure 1A is a schematic block diagram showing an exemplary coding system 10, for example, a video coding system 10 (or simply coding system 10) that may use the technology of the present disclosure. The video encoder 20 (or simply encoder 20) and video decoder 30 (or simply decoder 30) of the video coding system 10 represent examples of devices that may be configured to perform the technology according to the various examples described in the present disclosure.

[0033] As shown in Figure 1A, the coding system 10 includes a source device 12 configured to provide encoded image data 21 to a destination device 14, for example, to decode the encoded image data 21.

[0034] The source device 12 includes an encoder 20 and, optionally, an image source 16, a preprocessor (or preprocessing unit) 18, such as an image preprocessor 18, and a communication interface or communication unit 22.

[0035] The image source 16 may include or be any type of image capture device, e.g., a camera that captures images of the real world, and / or any type of image generation device, e.g., a computer graphics processor that generates computer-animated images, or any other type of device that acquires and / or provides images of the real world, computer-generated images (e.g., screen content, virtual reality (VR) images), and / or any combination thereof (e.g., augmented reality (AR) images). The image source may be any type of memory or storage that stores any of the aforementioned images.

[0036] To distinguish it from the processing performed by the preprocessor 18 and the preprocessing unit 18, the image or image data 17 may also be referred to as the raw image or raw image data 17.

[0037] The preprocessor 18 is configured to receive (raw) image data 17 and to perform preprocessing on the image data 17 to obtain a preprocessed image 19 or preprocessed image data 19. The preprocessing performed by the preprocessor 18 may include, for example, cropping, color format conversion (e.g., RGB to YCbCr), color correction, or denoising. It can be understood that the preprocessing unit 18 may be an optional component.

[0038] The video encoder 20 is configured to receive pre-processed image data 19 and to provide encoded image data 21 (further details are described below, for example, with reference to Figure 2).

[0039] The communication interface 22 of the source device 12 may be configured to receive encoded image data 21 via the communication channel 13 and to transmit the encoded image data 21 (or any further processed version thereof) to another device, such as the destination device 14 or any other device, for storage or direct reconstruction.

[0040] The destination device 14 includes a decoder 30 (e.g., a video decoder 30), and may also optionally include a communication interface or communication unit 28, a post-processor 32 (or post-processing unit 32), and a display device 34.

[0041] The communication interface 28 of the destination device 14 is configured to receive encoded image data 21 (or any further processed version thereof) directly from, for example, the source device 12 or from any other source, such as a storage device, such as an encoded image data storage device, and to provide the encoded image data 21 to the decoder 30.

[0042] Communication interfaces 22 and 28 may be configured to transmit or receive encoded image data 21 or encoded data 13 between the source device 12 and the destination device 14 via a direct communication link, for example, a direct wired or wireless connection, or via any type of network, for example, a wired or wireless network or any combination thereof, or any type of private and public network or any combination thereof.

[0043] The communication interface 22 may be configured to process the encoded image data, for example, by packaging the encoded image data 21 into an appropriate format, for example, into a packet, and / or by using any kind of transmission encoding or processing for transmission over a communication link or communication network.

[0044] A communication interface 28, which forms the counterpart to communication interface 22, may be configured, for example, to receive transmitted data and process the transmitted data using any kind of corresponding transmit decoding or processing and / or depackaging to obtain encoded image data 21.

[0045] Both communication interfaces 22 and 28 may be configured as unidirectional or bidirectional communication interfaces, as indicated by the arrows of the communication channel 13 pointing from the source device 12 to the destination device 14 in Figure 1A, and may be configured, for example, to send and receive messages, to establish connections, and to confirm and exchange any other information related to communication links and / or data transmission, such as the transmission of encoded image data.

[0046] The decoder 30 is configured to receive encoded image data 21 and to provide decoded image data 31 or decoded image 31 (further details are described below, for example, based on Figure 3 or Figure 5).

[0047] The post-processor 32 of the destination device 14 is configured to post-process the decoded image data 31 (also called reconstructed image data), for example, the decoded image 31, to obtain post-processed image data 33, for example, the post-processed image 33. The post-processing performed by the post-processing unit 32 may include, for example, color format conversion (e.g., YCbCr to RGB), color correction, cropping, or resampling, or any other processing, for example, to prepare the decoded image data 31 for display by the display device 34.

[0048] The display device 34 of the destination device 14 is configured to receive post-processed image data 33 for displaying the image to, for example, a user or viewer. The display device 34 may be any type of display for representing the reconstructed image, for example, an integrated or external display or monitor, or may include such a display. The display may include, for example, a liquid crystal display (LCD), an organic light-emitting diode (OLED) display, a plasma display, a projector, a microLED display, a liquid crystal on silicon (LCoS), a digital optical processor (DLP), or any other type of display.

[0049] Although Figure 1A shows the source device 12 and the destination device 14 as separate devices, embodiments of the devices may include both or both of their functions, i.e., the source device 12 or its corresponding function and the destination device 14 or its corresponding function. In such embodiments, the source device 12 or its corresponding function and the destination device 14 or its corresponding function may be implemented using the same hardware and / or software, or by separate hardware and / or software, or any combination thereof.

[0050] As will be apparent to those skilled in the art based on this description, the presence and (exact) division of functions in different units or functions within source device 12 and / or destination device 14, as shown in Figure 1A, may vary depending on the actual device and application.

[0051] The encoder 20 (e.g., video encoder 20) or the decoder 30 (e.g., video decoder 30), or both the encoder 20 and the decoder 30, may be implemented via processing circuits, such as those shown in Figure 1B, including one or more microprocessors, digital signal processors (DSPs), application-specific integrated circuits (ASICs), field-programmable gate arrays (FPGAs), discrete logic, hardware, dedicated video coding components, or any combination thereof. The encoder 20 may be implemented via processing circuit 46 to embody various modules described in relation to the encoder 20 in Figure 2 and / or any other encoder systems or subsystems described herein. The decoder 30 may be implemented via processing circuit 46 to embody various modules described in relation to the decoder 30 in Figure 3 and / or any other decoder systems or subsystems described herein. The processing circuits may be configured to perform various operations, as will be described later. When the technology is partially implemented in software, as shown in Figure 5, the device may store instructions for the software in a suitable non-temporary computer-readable storage medium and execute the instructions using one or more processors in hardware to perform the technology of the disclosure. Either the video encoder 20 or the video decoder 30 may be integrated as part of a combined encoder / decoder (codec) within a single device, for example, as shown in Figure 1B.

[0052] The source device 12 and destination device 14 may include any type of handheld or stationary device, such as a notebook or laptop computer, mobile phone, smartphone, tablet or tablet computer, camera, desktop computer, set-top box, television, display device, digital media player, video gaming console, video streaming device (such as a content service server or content distribution server), broadcast receiver device, broadcast transmitter device, etc., and may use or not use an operating system. In some cases, the source device 12 and destination device 14 may support wireless communication. Therefore, the source device 12 and destination device 14 may be wireless communication devices.

[0053] In some cases, the video coding system 10 shown in Figure 1A is merely an example, and the techniques of this disclosure can be applied to video coding configurations (e.g., video encoding or video decoding) that do not necessarily involve any data communication between an encoding device and a decoding device. In other examples, data is retrieved from local memory and streamed over a network. A video encoding device may encode and store the data in memory, and / or a video decoding device may decode and retrieve the data from memory. In some examples, encoding and decoding are performed by devices that do not communicate with each other but simply encode the data into memory and / or retrieve and decode the data from memory.

[0054] For ease of explanation, embodiments of the present invention are described herein by reference to, for example, High Efficiency Video Coding (HEVC) or Multipurpose Video Coding (VVC) reference software, next-generation video coding standards developed by the ITU-T Video Coding Expert Group (VCEG) and the ISO / IEC Motion Picture Expert Group (MPEG) Joint Collaboration Team on Video Coding (JCT-VC). Those skilled in the art will understand that embodiments of the present invention are not limited to HEVC or VVC.

[0055] [Encoder and encoding methods] Figure 2 shows a schematic block diagram of an exemplary video encoder 20 configured to implement the technology of the present disclosure. In the example of Figure 2, the video encoder 20 includes an input 201 (or input interface 201), a residual calculation unit 204, a transformation processing unit 206, a quantization unit 208, an inverse quantization unit 210, an inverse transformation processing unit 212, a reconstruction unit 214, a loop filter unit 220, a decoded image buffer (DPB) 230, a mode selection unit 260, an entropy encoding unit 270, and an output 272 (or output interface 272). The mode selection unit 260 may include an inter-prediction unit 244, an intra-prediction unit 254, and a segmentation unit 262. The inter-prediction unit 244 may include a motion estimation unit and a motion compensation unit (not shown). The video encoder 20 shown in Figure 2 may also be referred to as a hybrid video encoder or a video encoder with a hybrid video codec.

[0056] The residual calculation unit 204, the conversion processing unit 206, the quantization unit 208, and the mode selection unit 260 may be referred to as forming the forward signal path of the encoder 20, while the inverse quantization unit 210, the inverse conversion processing unit 212, the reconstruction unit 214, the buffer 216, the loop filter 220, the decoded image buffer (DPB) 230, the inter-prediction unit 244, and the intra-prediction unit 254 may be referred to as forming the reverse signal path of the video encoder 20. The reverse signal path of the video encoder 20 corresponds to the signal path of the decoder (see video decoder 30 in Figure 3). The inverse quantization unit 210, the inverse conversion processing unit 212, the reconstruction unit 214, the loop filter 220, the decoded image buffer (DPB) 230, the inter-prediction unit 244, and the intra-prediction unit 254 are also referred to as forming the “built-in decoder” of the video encoder 20.

[0057] [Images and Image Classification (Images and Blocks)] The encoder 20 may be configured to receive, for example, an image 17 (or image data 17), for example, an image from a series of images forming a video or video sequence, via the input 201. The received image or image data may be a pre-processed image 19 (or pre-processed image data 19). For brevity, the following description will refer to it as image 17. Image 17 may also be referred to as the current image or the image being coded (particularly in video coding to distinguish the current image from other images, for example, previously encoded and / or decoded images of the same video sequence, i.e., the video sequence that also includes the current image). A (digital) image is, or can be considered, a two-dimensional array or matrix of samples with intensity values. A sample in an array may also be called a pixel (an abbreviation for image element) or pelle. The number of samples in the horizontal and vertical (or axis) directions of the array or image defines the size and / or resolution of the image. To represent color, typically three color components are used; that is, an image may be represented by or contain a three-sample array. In the RGB format or color space, an image contains corresponding red, green, and blue sample arrays. However, in video coding, each pixel is typically represented in luminance and chrominance format or color space, for example, YCbCr, which includes a luminance component represented by Y (sometimes L is used instead) and two chrominance components represented by Cb and Cr. The luminance (or abbreviated as luma) component Y represents brightness or the intensity of the gray level (for example, in a grayscale image), and the two chrominance (or abbreviated as chroma) components Cb and Cr represent chromaticity or color information components. Thus, an image in YCbCr format includes a luminance sample array of luminance sample values ​​(Y) and two chrominance sample arrays of chrominance values ​​(Cb and Cr). An image in RGB format can be converted to or transformed into YCbCr format, and vice versa; this process is also known as color conversion or transformation. If the image is monochrome, the image may contain only the luminance sample array. Thus, an image may be, for example, an array of luma samples in monochrome format, or an array of luma samples and two corresponding arrays of chroma samples in 4:2:0, 4:2:2, and 4:4:4 color formats.

[0058] Embodiments of the video encoder 20 may include an image segmentation unit (not shown in Figure 2) configured to segment an image 17 into a plurality of (typically non-overlapping) image blocks 203. These blocks may also be referred to as root blocks, macroblocks (H.264 / AVC), coding tree blocks (CTB), or coding tree units (CTU) (H.265 / HEVC and VVC). The image segmentation unit may use the same block size for all images and corresponding grids that define the block size in the video sequence, or it may vary the block size between images or subsets or groups of images to segment each image into a corresponding block.

[0059] In a further embodiment, the video encoder may be configured to directly receive blocks 203 of the image 17, for example, one, some, or all of the blocks that make up the image 17. The image blocks 203 may also be referred to as the current image block or the encoded image block.

[0060] Similar to Image 17, here too, image block 203 is smaller in dimensions than Image 17, but is or can be considered to be a two-dimensional array or matrix of samples having intensity values ​​(sample values). In other words, block 203 may contain, for example, one sample array (e.g., a lumar array for monochrome image 17, or a lumar or chromar array for color images), or three sample arrays (e.g., a lumar and two chromar arrays for color image 17), or any other number and / or type of arrays depending on the applied color format. The number of samples in the horizontal and vertical (or axis) directions of block 203 defines the size of block 203. Thus, the block may be, for example, an M×N (M columns × N rows) array of samples, or an M×N array of conversion coefficients.

[0061] An embodiment of the video encoder 20, as shown in Figure 2, may be configured to encode the image 17 block by block, for example, encoding and prediction may be performed for each block 203.

[0062] The embodiment of the video encoder 20 shown in Figure 2 may be further configured to segment and / or encode an image by using slices (also referred to as video slices), where the image may be segmented or encoded using one or more slices (usually non-overlapping), and each slice may contain one or more blocks (e.g., CTUs).

[0063] Embodiments of the video encoder 20, as shown in Figure 2, may be further configured to segment and / or encode an image by using tile groups (also referred to as video tile groups) and / or tiles (also referred to as video tiles), the image may be segmented or encoded using one or more tile groups (usually non-overlapping), each tile group may include, for example, one or more blocks (e.g., CTUs) or one or more tiles, each tile may be, for example, rectangular in shape and may include one or more blocks (e.g., CTUs), for example, a complete block or a partial block.

[0064] [Residual calculation] The residual calculation unit 204 may be configured to calculate the residual block 205 (also referred to as residual 205) based on the image block 203 and the prediction block 265 (further details regarding the prediction block 265 will be provided later), for example, by subtracting the sample value of the prediction block 265 from the sample value of the image block 203 for each sample (for each pixel) to obtain the residual block 205 in the sample region.

[0065] [conversion] The transformation processing unit 206 may be configured to apply a transformation, such as a discrete cosine transform (DCT) or discrete sine transform (DST), to the sample values ​​of the residual block 205 to obtain transformation coefficients 207 in the transformation domain. The transformation coefficients 207 may also be called transformation residual coefficients and represent the residual block 205 in the transformation domain.

[0066] The conversion processing unit 206 may be configured to apply an integer approximation of the DCT / DST, such as the conversion specified for H.265 / HEVC. Compared to the orthogonal DCT conversion, such an integer approximation is typically scaled by a specific coefficient. Additional scaling coefficients are applied as part of the conversion process to preserve the norm of the residual blocks processed by the forward and inverse conversions. The scaling coefficients are typically selected based on specific constraints, such as a scaling coefficient that is a power of 2 with respect to the shift operation, the bit depth of the conversion coefficients, or a trade-off between accuracy and implementation cost. For example, a specific scaling coefficient may be specified for the inverse conversion by the inverse conversion processing unit 212 (and the corresponding inverse conversion by the inverse conversion processing unit 312 in the video decoder 30, for example), and a corresponding scaling coefficient for the forward conversion by the conversion processing unit 206 in the encoder 20 may be specified accordingly.

[0067] Embodiments of the video encoder 20 (each a conversion processing unit 206) may be configured to encode or compress conversion parameters, such as one or more conversion types, for example, directly or via an entropy encoding unit 270, before outputting them, so that, for example, the video decoder 30 can receive and use the conversion parameters for decoding.

[0068] [Quantization] The quantization unit 208 may be configured to quantize the transformation coefficient 207 to obtain the quantization coefficient 209, for example, by applying scalar quantization or vector quantization. The quantization coefficient 209 may also be referred to as the quantization transformation coefficient 209 or the quantization residual coefficient 209.

[0069] The quantization process can reduce the bit depth associated with some or all of the 207 conversion coefficients. For example, n-bit conversion coefficients may be rounded to m-bit conversion coefficients during quantization, where n is greater than m. The degree of quantization can be changed by adjusting the quantization parameter (QP). For example, in the case of scalar quantization, different scaling may be applied to achieve finer or coarser quantization. Smaller quantization step sizes correspond to finer quantization, while larger quantization step sizes correspond to coarser quantization. Applicable quantization step sizes can be indicated by the quantization parameter (QP). The quantization parameter may be, for example, an index to a predefined set of applicable quantization step sizes. For example, a small quantization parameter may correspond to finer quantization (smaller quantization step size), a large quantization parameter may correspond to coarser quantization (larger quantization step size), or vice versa. Quantization may involve division by the quantization step size, and the corresponding inverse quantization and / or dequantization by, for example, the inverse quantization unit 210 may involve multiplication by the quantization step size. Embodiments conforming to some standards, e.g., HEVC, may be configured to use a quantization parameter to determine the quantization step size. Generally, the quantization step size can be calculated based on a quantization parameter using a fixed-point approximation of the equations, which involves division. Additional scaling factors can be introduced for quantization and dequantization to restore the norm of the residual block, which may be altered due to the scaling used in the fixed-point approximation of the equations for the quantization step size and quantization parameter. In one example implementation, the scaling of the inverse transform and dequantization may be combined. Alternatively, a customized quantization table may be used and signaled, for example, from encoder to decoder in a bitstream. Quantization is an irreversible operation, and the loss increases with increasing quantization step size.

[0070] Embodiments of the video encoder 20 (each a quantization unit 208) may be configured to encode and output quantization parameters (QP), for example, directly or via an entropy encoding unit 270, so that, for example, the video decoder 30 may receive and apply the quantization parameters for decoding.

[0071] [Dequantization] The inverse quantization unit 210 is configured to apply the inverse quantization of the quantization unit 208 to the quantization coefficients, for example, by applying the inverse of the quantization scheme applied by the quantization unit 208 based on or using the same quantization step size as the quantization unit 208, thereby obtaining the dequantization coefficient 211. The dequantization coefficient 211 may also be called the dequantization residual coefficient 211, and is typically not identical to the transformation coefficient due to the loss due to quantization, but corresponds to the transformation coefficient 207.

[0072] [Inverse transformation]

[0073] The inverse transformation processing unit 212 is configured to apply the inverse transformation of the transformation applied by the transformation processing unit 206, for example, the inverse discrete cosine transform (DCT) or the inverse discrete sine transform (DST) or other inverse transformations, to obtain the reconstructed residual block 213 (or the corresponding dequantization coefficient 213) in the sample region. The reconstructed residual block 213 may also be referred to as the transformation block 213.

[0074] [Rebuild] The reconstruction unit 214 (e.g., an adder or summer 214) is configured to add the transformed block 213 (i.e., the reconstructed residual block 213) to the predicted block 265 by adding the sample value of the reconstructed residual block 213 and the sample value of the predicted block 265 for each sample, thereby obtaining the reconstructed block 215 in the sample region.

[0075] [filtering] The loop filter unit 220 (or, for short, the "loop filter" 220) is configured to filter the reconstructed block 215 to obtain a filtered block 221, or, more generally, to filter the reconstructed samples to obtain filtered samples. The loop filter unit is configured, for example, to smooth pixel transitions or otherwise improve video quality. The loop filter unit 220 may include one or more loop filters, such as a deblocking filter, a sample-adaptive offset (SAO) filter, or one or more other filters, e.g., a bilateral filter, an adaptive loop filter (ALF), a sharpening, smoothing or coordinating filter, or any combination thereof. Although the loop filter unit 220 is shown in Figure 2 as being within a loop filter, in other configurations, the loop filter unit 220 may be implemented as a post-loop filter. The filtered block 221 may also be referred to as the filtered reconstructed block 221.

[0076] Embodiments of the video encoder 20 (each a loop filter unit 220) may be configured to encode the loop filter parameters (such as sample adaptive offset information) for example, directly or via an entropy encoding unit 270, before outputting them, so that, for example, the decoder 30 may receive and apply the same loop filter parameters or the respective loop filters for decoding.

[0077] [Decoded image buffer] The decoded image buffer (DPB) 230 may be a memory that stores a reference image for encoding video data by the video encoder 20, or generally reference image data. The DPB 230 may be made up of any of the various memory devices, such as dynamic random access memory (DRAM), including synchronous DRAM (SDRAM), magnetoresistive RAM (MRAM), resistive RAM (RRAM®), or other types of memory devices. The decoded image buffer (DPB) 230 may be configured to store one or more filtered blocks 221. The decoded image buffer 230 may be further configured to store other previously filtered blocks of the same current image or a different image, for example, a previously reconstructed image, for example, a previously reconstructed and filtered block 221, for example, to provide a fully previously reconstructed, i.e., decoded image (and corresponding reference blocks and samples) and / or a partially reconstructed current image (and corresponding reference blocks and samples) for interpretation. The decoded image buffer (DPB) 230 may be configured to store, for example, one or more unfiltered reconstructed blocks 215, or generally, unfiltered reconstructed samples, or any other further processed versions of the reconstructed blocks or samples, if the reconstructed blocks 215 have not been filtered by the loop filter unit 220.

[0078] [Mode Selection (Classification and Prediction)] The mode selection unit 260 includes a segmentation unit 262, an inter-prediction unit 244, and an intra-prediction unit 254, and is configured to receive or acquire original image data, e.g., the original block 203 (the current block 203 of the current image 17), and reconstructed image data, e.g., filtered and / or unfiltered reconstructed samples or blocks from the same (current) image and / or one or more previously decoded images, e.g., from a decoded image buffer 230 or other buffers (e.g., a line buffer not shown). The reconstructed image data is used as reference image data for prediction, e.g., inter-prediction or intra-prediction, to acquire prediction blocks 265 or predictor factors 265.

[0079] The mode selection unit 260 may be configured to determine or select a segmentation and prediction mode (e.g., intra or inter prediction mode) for the current block prediction mode (excluding segmentation), and to generate a corresponding prediction block 265, which is used for calculating the residual block 205 and for reconstructing the reconstructed block 215.

[0080] Embodiments of the mode selection unit 260 may be configured to select a segmentation and prediction mode (e.g., from those supported by or available to the mode selection unit 260) that provides the best match, or in other words, minimum residual (minimum residual meaning better compression for transmission or storage), or minimum signaling overhead (minimum signaling overhead meaning better compression for transmission or storage), or both, or a balanced combination. The mode selection unit 260 may be configured to determine the segmentation and prediction mode based on rate distortion optimization (RDO), i.e., to select a prediction mode that provides minimum rate distortion. In this context, terms such as “best,” “minimum,” and “optimal” do not necessarily refer to general “best,” “minimum,” and “optimal,” but may refer to the achievement of a termination or selection criterion where a value exceeds or falls below a threshold or other constraint, potentially leading to a “suboptimal selection” but reducing complexity and processing time.

[0081] In other words, the partitioning unit 262 may be configured to partition block 203 into smaller block partitions or subblocks (which also form blocks) by repeatedly using, for example, quadtree partitioning (QT), binary tree partitioning (BT), or ternary tree partitioning (TT), or any combination thereof, and to perform predictions for each block partition or subblock, the mode selection includes selecting the tree structure of the partitioned block 203, and the prediction mode is applied to each block partition or subblock.

[0082] The following describes in more detail the segmentation (e.g., by the segmentation unit 260) and prediction processing (by the inter-prediction unit 244 and the intra-prediction unit 254) performed by the example video encoder 20.

[0083] [Partitioning] The partitioning unit 262 may partition (or divide) the current block 203 into smaller partitions, for example, smaller blocks of a square or rectangular size. These smaller blocks (which may also be called subblocks) may be further partitioned into even smaller partitions. This is also called tree partitioning or hierarchical tree partitioning, where, for example, the root block at root tree level 0 (hierarchy level 0, depth 0) may be recursively partitioned, for example, into 2 or more blocks of nodes at the next lowest tree level, for example, tree level 1 (hierarchy level 1, depth 1), and these blocks may be further partitioned into 2 or more blocks at the next lowest level, for example, tree level 2 (hierarchy level 2, depth 2), until partitioning ends, for example, when a termination criterion is met, for example, when the maximum tree depth or minimum block size is reached. Blocks that are not further partitioned are also called leaf blocks or leaf nodes of the tree. A tree that uses partitioning into two divisions is called a binary tree (BT), a tree that uses partitioning into three divisions is called a ternary tree (TT), and a tree that uses partitioning into four divisions is called a quadary tree (QT).

[0084] As previously mentioned, the term “block” as used herein may refer to a portion of an image, particularly a square or rectangular portion. For example, with reference to HEVC and VVC, a block may be, or correspond to, a coding tree unit (CTU), a coding unit (CU), a prediction unit (PU), and a transformation unit (TU), and / or correspond to a corresponding block, e.g., a coding tree block (CTB), a coding block (CB), a transformation block (TB), or a prediction block (PB).

[0085] For example, a coding tree unit (CTU) may be a CTB of luminal samples in an image having three sample arrays, two corresponding CTBs of chromal samples, or a CTB of samples in an image coded using three distinct color planes and syntax structures used to code a monochrome image or samples. Correspondingly, a coding tree block (CTB) may be an N×N block of samples for some value N, such that the division of components into CTBs is a partitioning. A coding unit (CU) may be a coding block of luminal samples, two corresponding coding blocks of chromal samples in an image having three sample arrays, or a coding block of samples in an image coded using three distinct color planes and syntax structures used to code a monochrome image or samples, or may include these. Correspondingly, a coding block (CB) may be an M×N block of samples for some values ​​of M and N, such that the division of CTBs into coding blocks is a partitioning.

[0086] For example, in an embodiment following HEVC, a coding tree unit (CTU) may be partitioned into CUs by using a quadtree structure, which is shown as a coding tree. The decision of whether to use inter-image (temporal) prediction or intra-image (spatial) prediction to code an image area is made at the CU level. Each CU may be further partitioned into one, two, or four PUs, according to the PU partitioning type. Within a single PU, the same prediction process is applied, and the relevant information is sent to the decoder on a PU basis. After obtaining residual blocks by applying the prediction process based on the PU partitioning type, the CU can be partitioned into transformation units (TUs) according to another quadtree structure, similar to the coding tree for the CU.

[0087] For example, in embodiments conforming to the latest video coding standard currently under development, known as Multipurpose Video Coding (VVC), combined quadtree and binary tree (QTBT) segmentation is used, for example, to segment coding blocks. In the QTBT block structure, CUs can be either square or rectangular in shape. For example, a coding tree unit (CTU) is first segmented by a quadtree structure. The quadtree leaf nodes are further segmented by a binary or ternary (or triple) tree structure. The leaf nodes of the segmented tree are referred to as coding units (CUs), and their segmentation is used for prediction and transformation processing without any further segmentation. This means that CUs, PUs, and TUs have the same block size within the QTBT coding block structure. In parallel, multiple segmentations, such as ternary tree segmentation, may be used in conjunction with the QTBT block structure.

[0088] In one example, the mode selection unit 260 of the video encoder 20 may be configured to perform any combination of the classification techniques described herein.

[0089] As described above, the video encoder 20 is configured to determine or select the best or most optimal prediction mode from a set of prediction modes (for example, predetermined). The set of prediction modes may include, for example, an intra-prediction mode and / or an inter-prediction mode.

[0090] [Intra prediction] The set of intra-prediction modes may include 35 different intra-prediction modes, for example, non-directional modes such as DC (or mean) mode and planar mode, or directional modes, for example, as defined in HEVC, or 67 different intra-prediction modes, for example, non-directional modes such as DC (or mean) mode and planar mode, or directional modes, for example, as defined in VVC.

[0091] The intra-prediction unit 254 is configured to generate an intra-prediction block 265 according to an intra-prediction mode from a set of intra-prediction modes, using reconstructed samples of adjacent blocks of the same current image.

[0092] The intra-prediction unit 254 (or generally the mode selection unit 260) is further configured to output intra-prediction parameters (or generally information indicating the intra-prediction mode selected for a block) to the entropy encoding unit 270 in the form of syntax elements 266 so that they are included in the encoded image data 21, thereby allowing, for example, the video decoder 30 to receive and use the prediction parameters for decoding.

[0093] [Interface prediction] The set of interpretation modes (or possible interpretation modes) depends on the available reference image (i.e., a previous, at least partially decoded image stored in, for example, DPB230) and other interpretation parameters, such as whether the entire reference image or only a portion of it, e.g., the search window area around the current block area, was used to find the best-matching reference block, and / or whether pixel interpolation, e.g., half / semi-perpetual and / or quarter-perpetual interpolation, was applied.

[0094] In addition to the prediction modes described above, skip mode and / or direct mode may also be applied.

[0095] The interpretation unit 244 may include a motion estimation (ME) unit and a motion compensation (MC) unit (neither of which are shown in Figure 2). The motion estimation unit may be configured to receive or acquire, for motion estimation, an image block 203 (the current image block 203 of the current image 17) and a decoded image 231, or at least one or more previously reconstructed blocks, e.g., one or more other / different reconstructed blocks of previously decoded images 231. For example, a video sequence may include the current image and the previously decoded image 231, or in other words, the current image and the previously decoded image 231 may be part of a set of images that make up the video sequence, or may make up that sequence.

[0096] The encoder 20 may be configured, for example, to select a reference block from multiple reference blocks of the same or different images among multiple other images, and to provide the motion estimation unit with an offset (spatial offset) between the reference image (or reference image index) and / or the position (x, y coordinates) of the reference block and the position of the current block as interpretation parameters. This offset is also called a motion vector (MV).

[0097] The motion compensation unit is configured to acquire, for example, interprediction parameters and perform interprediction based on or using those interprediction parameters to acquire interprediction blocks 265. Motion compensation performed by the motion compensation unit may involve fetching or generating prediction blocks based on motion / block vectors determined by motion estimation and optionally performing interpolation to sub-pixel precision. Interpolation filtering may generate additional pixel samples from known pixel samples, thus potentially increasing the number of candidate prediction blocks that can be used to code image blocks. Upon receiving the motion vector for the current image block's PU, the motion compensation unit may locate the prediction block pointed to by the motion vector in one of the reference image lists.

[0098] The motion compensation unit can also generate syntax elements associated with blocks and video slices, which are used by the video decoder 30 when decoding image blocks of video slices. In addition to or alternative to slices and their respective syntax elements, tile groups and / or tiles, as well as their respective syntax elements, may be generated or used.

[0099] [Entropy coding] The entropy encoding unit 270 is configured to apply, for example, an entropy encoding algorithm or scheme (e.g., variable-length coding (VLC) scheme, context-adaptive VLC scheme (CAVLC), arithmetic coding scheme, binaryization, context-adaptive binary arithmetic coding (CABAC), syntax-based context-adaptive binary arithmetic coding (SBAC), probabilistic interval partitioned entropy (PIPE) coding, or another entropy encoding method or technique), or bypass (uncompressed), to the quantization coefficients 209, inter-prediction parameters, intra-prediction parameters, loop filter parameters, and / or other syntax elements, and to obtain encoded image data 21 that can be output via output 272 in the form of an encoded bitstream 21, for example, so that the video decoder 30 may receive and use the parameters for decoding. The encoded bitstream 21 may be transmitted to the video decoder 30 or stored in memory for later transmission or retrieval by the video decoder 30.

[0100] Other structural variations of the video encoder 20 can be used to encode a video stream. For example, a non-conversion-based encoder 20 can directly quantize the residual signal without a conversion processing unit 206 for a particular block or frame. In another implementation, the encoder 20 may have a quantization unit 208 and an inverse quantization unit 210 combined into a single unit.

[0101] [Decoder and decoding methods] Figure 3 shows an example of a video decoder 30 configured to implement the technology of the present disclosure. The video decoder 30 is configured to receive encoded image data 21 (e.g., encoded bitstream 21), which has been encoded by, for example, an encoder 20, and to obtain a decoded image 331. The encoded image data or bitstream includes information for decoding the encoded image data, such as data representing image blocks of encoded video slices (and / or tile groups or tiles) and associated syntax elements.

[0102] In the example in Figure 3, the decoder 30 includes an entropy decoding unit 304, an inverse quantization unit 310, an inverse transformation processing unit 312, a reconstruction unit 314 (e.g., an aggregater 314), a loop filter 320, a decoded image buffer (DPB) 330, a mode application unit 360, an interpretation unit 344, and an intraprediction unit 354. The interpretation unit 344 may be or include a motion compensation unit. In some examples, the video decoder 30 may perform a decoding coding path that is generally the reverse of the encoding path described in relation to the video encoder 100 from Figure 2.

[0103] As described with respect to encoder 20, the inverse quantization unit 210, inverse processing unit 212, reconstruction unit 214, loop filter 220, decoded image buffer (DPB) 230, inter-prediction unit 344, and intra-prediction unit 354 are also referred to as forming the “built-in decoder” of video encoder 20. Thus, the inverse quantization unit 310 may have the same function as the inverse quantization unit 110, the inverse processing unit 312 may have the same function as the inverse processing unit 212, the reconstruction unit 314 may have the same function as the reconstruction unit 214, the loop filter 320 may have the same function as the loop filter 220, and the decoded image buffer 330 may have the same function as the decoded image buffer 230. Accordingly, the descriptions provided for each unit and function of video encoder 20 apply to the respective units and functions of video decoder 30.

[0104] [Entropy decoding] The entropy decoding unit 304 is configured to parse the bitstream 21 (or generally the encoded image data 21) and, for example, perform entropy decoding on the encoded image data 21 to obtain any or all of the following: for example, quantization coefficients 309 and / or decoded coding parameters (not shown in Figure 3), for example, inter-prediction parameters (e.g., reference image index and motion vector), intra-prediction parameters (e.g., intra-prediction mode or index), transformation parameters, quantization parameters, loop filter parameters, and / or other syntax elements. The entropy decoding unit 304 may be configured to apply a decoding algorithm or scheme corresponding to the encoding scheme described with respect to the entropy encoding unit 270 of the encoder 20. The entropy decoding unit 304 may be further configured to provide the inter-prediction parameters, intra-prediction parameters, and / or other syntax elements to the mode application unit 360, and other parameters to other units of the decoder 30. The video decoder 30 may receive the syntax elements at the video slice level and / or video block level. In addition to or alternative to slices and their respective syntax elements, tile groups and / or tiles, as well as their respective syntax elements, may be received and / or used.

[0105] [Dequantization] The inverse quantization unit 310 may be configured to receive quantization parameters (QP) (or information generally related to inverse quantization) and quantization coefficients from encoded image data 21 (for example, by an entropy decoding unit 304, e.g., by parsing and / or decoding), and to apply inverse quantization to the decoded quantization coefficients 309 based on the quantization parameters to obtain dequantization coefficients 311, which may also be called conversion coefficients 311. The inverse quantization process may include the use of quantization parameters determined by the video encoder 20 for each video block in a video slice (or tile or tile group) to determine the degree of quantization and, likewise, the degree of inverse quantization to be applied.

[0106] [Inverse transformation] The inverse transformation processing unit 312 may be configured to receive a dequantization coefficient 311, also referred to as a transformation coefficient 311, and to apply a transformation to the dequantization coefficient 311 in order to obtain a reconstructed residual block 213 in the sample region. The reconstructed residual block 213 may also be referred to as a transformation block 313. The transformation may be an inverse transformation, such as an inverse DCT, inverse DST, inverse integer transformation, or a conceptually similar inverse transformation process. The inverse transformation processing unit 312 may be further configured to receive transformation parameters or corresponding information from the encoded image data 21 (for example, by parsing and / or decoding by the entropy decoding unit 304) and determine the transformation to be applied to the dequantization coefficient 311.

[0107] [Rebuild] The reconstruction unit 314 (for example, an adder or summer 314) may be configured to add the reconstructed residual block 313 to the prediction block 365, for example, by adding the sample value of the reconstructed residual block 313 to the sample value of the prediction block 365 to obtain the reconstructed block 315 in the sample region.

[0108] [filtering] The loop filter unit 320 (located either within or after the coding loop) is configured to filter the reconstructed block 315 to obtain the filtered block 321, for example, to smooth pixel transitions or to improve video quality in other ways. The loop filter unit 320 may include one or more loop filters, such as a deblocking filter, a sample-adaptive offset (SAO) filter, or one or more other filters, such as a bilateral filter, an adaptive loop filter (ALF), a sharpening, smoothing filter, or a co-filter, or any combination thereof. Although the loop filter unit 320 is shown in Figure 3 as being within the loop filter, in other configurations, the loop filter unit 320 may be implemented as a post-loop filter.

[0109] [Decoded image buffer] The decoded video block 321 is then stored in the decoded image buffer 330, which stores the decoded image 331 as a reference image for subsequent motion compensation of other images and / or for outputting their respective displays.

[0110] The decoder 30 is configured to output a decoded image 331, for example via output 332, for presentation or viewing by the user.

[0111] [prediction] The inter-prediction unit 344 may be identical to the inter-prediction unit 244 (in particular, the motion compensation unit), and the intra-prediction unit 354 may be functionally identical to the intra-prediction unit 254, and performs segmentation or segmentation decisions and predictions based on segmentation and / or prediction parameters or respective information received from the encoded image data 21 (for example, by parsing and / or decoding by the entropy decoding unit 304). The mode application unit 360 may be configured to perform block-by-block predictions (intra or inter-predictions) based on the reconstructed image, block, or each sample (filtered or unfiltered) to obtain a predicted block 365.

[0112] If a video slice is coded as an intra-coded (I) slice, the intra-prediction unit 354 of the mode-applying unit 360 is configured to generate a prediction block 365 for the image block of the current video slice based on the signaled intra-prediction mode and data from previously decoded blocks of the current image. If a video image is coded as an intercoded (i.e., B or P) slice, the inter-prediction unit 344 (e.g., motion compensation unit) of the mode-applying unit 360 is configured to generate a prediction block 365 for the video block of the current video slice based on the motion vector and other syntax elements received from the entropy decoding unit 304. In inter-prediction, the prediction block may be generated from one of several reference images contained within one of several reference image lists. The video decoder 30 may construct reference frame lists, namely List 0 and List 1, based on the reference images stored in the DPB 330 using default construction techniques. The same or similar may apply to, or thereby to, embodiments that use tile groups (e.g., video tile groups) and / or tiles (e.g., video tiles) in addition to or as an alternative to slices (e.g., video slices). For example, video may be coded using I, P, or B tile groups and / or tiles.

[0113] The mode-applying unit 360 is configured to determine predictive information for a video block in the current video slice by parsing motion vectors or related information and other syntax elements, and uses the above predictive information to generate a predictive block for the current video block being decoded. For example, the mode-applying unit 360 uses some of the received syntax elements to determine the predictive mode used to code the video block in the video slice (e.g., intra or inter-predictive), the inter-predictive slice type (e.g., B-slice, P-slice, or GPB-slice), construction information for one or more of the reference image lists for the slice, motion vectors for each inter-encoded video block in the slice, the inter-predictive status for each intercoded video block in the slice, and other information for decoding the video block in the current video slice. The same or similar may apply to, or thereafter, embodiments that use tile groups (e.g., video tile groups) and / or tiles (e.g., video tiles) in addition to or alternative to slices (e.g., video slices). For example, video may be coded using I, P, or B tile groups and / or tiles.

[0114] An embodiment of the video decoder 30 shown in Figure 3 may be configured to segment and / or decode an image by using slices (also referred to as video slices), where the image may be segmented or decoded using one or more slices (usually non-overlapping), and each slice may contain one or more blocks (e.g., CTUs).

[0115] Embodiments of the video decoder 30 shown in Figure 3 may be configured to segment and / or decode an image by using tile groups (also referred to as video tile groups) and / or tiles (also referred to as video tiles), the image may be segmented or decoded using one or more tile groups (usually non-overlapping), each tile group may include, for example, one or more blocks (e.g., CTUs) or one or more tiles, each tile may be, for example, rectangular in shape and may include one or more blocks (e.g., CTUs), for example, a complete block or a partial block.

[0116] Other variations of the video decoder 30 can be used to decode encoded image data 21. For example, the decoder 30 can generate an output video stream without a loop filtering unit 320. For example, a non-transformation-based decoder 30 can directly dequantize the residual signal without an inverse transformation processing unit 312 for a particular block or frame. In another implementation, the video decoder 30 may have an inverse quantization unit 310 and an inverse transformation processing unit 312 combined into a single unit.

[0117] It should be understood that in encoder 20 and decoder 30, the processing result of the current stage may be further processed and then output to the next stage. For example, after interpolation filtering, motion vector derivation, or loop filtering, further operations such as clipping or shifting may be performed on the processing result of interpolation filtering, motion vector derivation, or loop filtering.

[0118] It should be noted that further operations may be applied to the derived motion vectors of the current block (including, but not limited to, control point motion vectors in affine mode, subblock motion vectors in affine, planar, and ATMVP modes, temporal motion vectors, etc.). For example, the value of a motion vector is restricted to a predefined range according to its representation bits. If the representation bits of the motion vector are bitDepth, the range is -2^(bitDepth-1) to 2^(bitDepth-1)-1, where "^" means exponentiation. For example, if bitDepth is set to equal 16, the range is -32768 to 32767, and if bitDepth is set to equal 18, the range is -131072 to 131071. For example, the value of a derived motion vector (e.g., the MV of four 4x4 subblocks in one 8x8 block) is restricted such that the maximum difference between the integer parts of the four 4x4 subblock MVs is less than or equal to N pixels, such as less than or equal to 1 pixel. Below, we provide two methods for restricting the motion vector according to bitDepth.

[0119] Method 1: Remove the overflow MSB (most significant bit) by performing the following operation.

number

[0120] For example, if the value of mvx is -32769 after applying equations (1) and (2), the resulting value is 32767. In computer systems, decimal numbers are stored as two's complement.

[0121] The two's complement of -32769 is 1,0111,1111,1111,1111 (17 bits), and then the MSB is discarded, so the resulting two's complement is 0111,1111,1111,1111 (decimal is 32767). This is the same as the output obtained by applying equations (1) and (2).

[0122]

number

[0123] Method 2: Remove the overflow MSB by clipping the value.

number

number

[0124] Figure 4 is a schematic diagram of a video coding device 400 according to an embodiment of the present disclosure. The video coding device 400 is suitable for implementing the embodiments disclosed herein. In embodiments, the video coding device 400 may be a decoder, such as the video decoder 30 in Figure 1A, or an encoder, such as the video encoder 20 in Figure 1A.

[0125] The video coding device 400 includes an inlet port 410 (or input port 410) and a receiver unit (Rx) 420 for receiving data, a processor, logic unit, or central processing unit (CPU) 430 for processing the data, a transmitter unit (Tx) 440 and an exit port 450 (or output port 450) for transmitting data, and memory 460 for storing data. The video coding device 400 may also include optical / electrical (OE) components and electrical / optical (EO) components connected to the inlet port 410, receiver unit 420, transmitter unit 440, and exit port 450 for optical or electrical signal input or output.

[0126] The processor 430 is implemented by hardware and software. The processor 430 may be implemented as one or more CPU chips, cores (e.g., a multi-core processor), FPGAs, ASICs, and DSPs. The processor 430 communicates with an inlet port 410, a receiver unit 420, a transmitter unit 440, an exit port 450, and memory 460. The processor 430 includes a coding module 470. The coding module 470 implements the embodiments disclosed above. For example, the coding module 470 implements, processes, prepares, or provides various coding operations. Thus, the inclusion of the coding module 470 provides a substantial improvement to the functionality of the video coding device 400, resulting in the conversion of the video coding device 400 to different states. Alternatively, the coding module 470 is implemented as instructions stored in memory 460 and executed by the processor 430.

[0127] Memory 460 may include one or more disks, tape drives, and solid-state drives, and may be used as an overflow data storage device to store the program if the program is selected for execution, and to store instructions and data read during program execution. Memory 460 may be, for example, volatile and / or non-volatile, and may be read-only memory (ROM), random access memory (RAM), tertiary associative memory (TCAM), and / or static random access memory (SRAM).

[0128] Figure 5 is a simplified block diagram of the apparatus 500, which can be used as either or both of the source device 12 and destination device 14 from Figure 1, according to an exemplary embodiment.

[0129] The processor 502 in the device 500 may be a central processing unit. Alternatively, the processor 502 may be any other type of device or multiple devices capable of manipulating or processing information, whether currently existing or to be developed in the future. The disclosed implementation may be carried out using a single processor, e.g., processor 502, as shown, but speed and efficiency advantages may be realized using one or more processors.

[0130] The memory 504 in the device 500 may be a read-only memory (ROM) device or a random access memory (RAM) device in one implementation. Any other suitable type of storage device may be used as the memory 504. The memory 504 may contain code and data 506 accessed by the processor 502 using the bus 512. The memory 504 may further include an operating system 508 and an application program 510, the application program 510 including at least one program that enables the processor 502 to perform the method described herein. For example, the application program 510 may include applications 1 to N, the applications 1 to N further including video coding applications that perform the method described herein.

[0131] The device 500 may also include one or more output devices, such as a display 518. In one example, the display 518 may be a touch-sensitive display combining a display with a touch sensor element that can operate to detect touch input. The display 518 may be connected to the processor 502 via the bus 512.

[0132] Although described herein as a single bus, the bus 512 of the device 500 can consist of multiple buses. Furthermore, the secondary storage 514 may be directly connected to other components of the device 500 or accessed via a network, and may include a single integrated unit such as a memory card, or multiple units such as multiple memory cards. Thus, the device 500 can be implemented in a wide variety of configurations.

[0133] [Parameter Set] Parameter sets are fundamentally similar and share the same basic design goals (i.e., bitrate efficiency, error tolerance, and provision of a system layer interface). HEVC (H.265) has a hierarchy of parameter sets, including the Video Parameter Set (VPS), Sequence Parameter Set (SPS), and Image Parameter Set (PPS), which are similar to their counterparts in AVC and VVC. Each slice references a single active PPS, SPS, and VPS to access the information used to decode the slice. Since the PPS contains information that applies to all slices in an image, all slices in an image must reference the same PPS. Slices in different images can also reference the same PPS. Similarly, the SPS contains information that applies to all images in the same coded video sequence.

[0134] While PPS can differ for each individual image, it is common for many or all images in a coded video sequence to refer to the same PPS. Reusing parameter sets makes the bitrate more efficient because it avoids the need to send shared information multiple times. It is also loss-resistant because it allows the content of the parameter set to be carried over by several more reliable external communication links or frequently repeated within the bitstream to ensure that it is not lost.

[0135] [Parameter Set] Parameter sets are fundamentally similar and share the same basic design goals (i.e., bitrate efficiency, error tolerance, and provision of a system layer interface). HEVC (H.265) has a hierarchy of parameter sets, including the Video Parameter Set (VPS), Sequence Parameter Set (SPS), and Image Parameter Set (PPS), which are similar to their counterparts in AVC and VVC. Each slice references a single active PPS, SPS, and VPS to access the information used to decode the slice. Since the PPS contains information that applies to all slices in an image, all slices in an image must reference the same PPS. Slices in different images can also reference the same PPS. Similarly, the SPS contains information that applies to all images in the same coded video sequence.

[0136] While PPS can differ for each individual image, it is common for many or all images in a coded video sequence to refer to the same PPS. Reusing parameter sets makes the bitrate more efficient because it avoids the need to send shared information multiple times. It is also loss-resistant because it allows the content of the parameter set to be carried over by several more reliable external communication links or frequently repeated within the bitstream to ensure that it is not lost.

[0137] [Sequence Parameter Set (SPS)] SPS contains parameters that are applied to one or more layers of a coded video sequence and are not changed per image within the coded video sequence. Specifically, SPS includes signaling information for sub-images.

[0138] Some parts of the table below show snapshots of sub-image signaling for SPS in ITU JVET-Q2001-v11, and the download links are as follows. http: / / phenix.it-sudparis.eu / jvet / doc_end_user / documents / 17_Brussels / wg11 / JVET-Q2001-v11.zip. For the remainder of this application, this prior art document will be referred to as VVC Draft 8 for brevity.

[0139] [Table 1] [Table 2]

[0140] Several syntax elements in the SPS signal signal the position information and control flags for each sub-image. The position information for the i-th sub-image is: • subpic_ctu_top_left_x[i] indicates the horizontal component of the top-left coordinate of subimage i within the image, or • subpic_ctu_top_left_y[i] indicates the vertical component of the top-left coordinate of subimage i within the image, or • subpic_width_minus1[i] indicates the width of subimage i within the image, or • subpic_height_minus1[i] indicates the height of sub-image i within the image. Includes.

[0141] Some syntax elements indicate the number of sub-images within an image, e.g., sps_num_subpics_minus1.

[0142] The image is divided into rows of one or more tiles and columns of one or more tiles. A tile is a series of CTUs that cover a rectangular area of ​​the image. The CTUs within a tile are scanned in the raster scan order within that tile.

[0143] A slice consists of an integer number of complete tiles, or an integer number of consecutive complete CTU rows within an image tile. Therefore, each vertical slice boundary is always also a vertical tile boundary. It is also possible for the horizontal boundaries of a slice to consist of horizontal CTU boundaries within a tile, even if they are not tile boundaries: this occurs when a tile is divided into multiple rectangular slices, each consisting of an integer number of consecutive complete CTU rows within the tile.

[0144] Two slicing modes are supported: raster scan slicing mode and rectangular slicing mode. In raster scan slicing mode, a slice contains a series of complete tiles in the tile raster scan of the image. In rectangular slicing mode, a slice contains either a number of complete tiles that collectively form a rectangular region of the image, or a number of consecutive complete CTU rows of a single tile that collectively form a rectangular region of the image. Tiles within a rectangular slice are scanned in the tile raster scan order within the rectangular region corresponding to that slice.

[0145] A subimage contains one or more slices that collectively cover a rectangular region of the image. Therefore, each subimage boundary is always a slice boundary, and each vertical subimage boundary is always a vertical tile boundary.

[0146] One or both of the following conditions must be met for each sub-image and tile. - All CTUs within a sub-image belong to the same tile. - All CTUs within a tile belong to the same sub-image.

[0147] [Dividing an image into CTUs, slices, tiles, and sub-images]

[0148] [Classifying images into CTUs] The image is divided into a series of coding tree units (CTUs). The term CTB (coding tree block) is sometimes used interchangeably. The concept of a CTU is the same as that of HEVC. For an image with three sample arrays, a CTU consists of N×N blocks of chroma samples, along with two corresponding blocks of chroma samples. Figure 6 shows an example of an image divided into CTUs. The size of the CTUs within the frame should be the same, except for those at the image boundaries (where incomplete CTUs may exist).

[0149] [Dividing an image into tiles] When tiling is enabled, the image is divided into groups of rectangular CTUs separated by vertical and / or horizontal boundaries. The vertical and horizontal tile boundaries intersect the image from bottom to bottom and from left image boundary to right image boundary, respectively. The bitstream includes indications of the positions of these horizontal and vertical tile boundaries.

[0150] Figure 7 illustrates the division of an image into nine tiles. In this example, tile boundaries are indicated by thick dashed lines. In other words, Figure 7 shows a tile-based raster scan sequence of a CTU with nine tiles of different sizes within the image. Note that tile boundaries are indicated by thick dashed lines.

[0151] If there are more than one tile within the image, the CTU scan order will be changed. The CTU will be scanned according to the following rules: 1. Tiles are scanned from left to right and from top to bottom in a raster scan order referred to in this disclosure as the tile scan order. This means that starting with the top-left tile, all tiles in the same tile row are first scanned from left to right. Then, starting with the first tile in the second tile row (the tile row below), all tiles in the second tile row are scanned from left to right. This process is repeated until all tiles have been scanned. 2. Within a tile, CTUs are scanned in raster scan order. Within a row of CTUs, CTUs are scanned from left to right, and rows of CTUs are scanned from top to bottom. Figure 7 illustrates the scanning order of CTUs when tiles are present, with the number of CTUs inside indicating the scanning order.

[0152] The tile concept provides a way to partition an image in such a manner that each tile can be decoded independently of other tiles in the same image, where decoding refers to entropy, residual, and predictive decoding. Furthermore, using tiles, it becomes possible to partition an image into regions of similar size. This thus creates the possibility of processing image tiles in parallel, which is preferable in multi-core processing environments where each processing core is identical to the others.

[0153] The terms "processing order" and "scanning order" are used in this disclosure as follows:

[0154] Processing refers to the encoding or decoding of CTUs performed within an encoder or decoder. Scanning order indicates the indexing of specific segments within an image. The CTU scan order in a tile means how the CTUs within the tile are indexed, which may not be the same order in which the CTUs are processed.

[0155] [Dividing an image into slices] The concept of slicing provides a way to partition an image such that each slice is independently decodeable from other slices of the same image, where decoding refers to entropy, residuals, and predictive decoding. The difference from tiling is that slices can have more arbitrary shapes (more flexible in terms of partitioning possibilities), and the purpose of slice partitioning is not parallel processing, but rather packet size matching in the transmission environment and error tolerance.

[0156] A slice can consist of a complete image, as well as parts thereof. In HEVC, a slice contains multiple consecutive CTUs of an image in processing order. A slice is identified by starting with a CTU address that is signaled in the slice header, image parameter set, or some other unit.

[0157] In VVC Draft 8, a slice contains an integer number of complete tiles, or an integer number of consecutive CTU rows within a tile of an image. Therefore, each vertical slice boundary is always also a vertical tile boundary. A horizontal boundary of a slice can also contain a horizontal CTU boundary within a tile, even if it is not a tile boundary: this occurs when a tile is divided into multiple rectangular slices, each of which contains an integer number of consecutive complete CTU rows within the tile.

[0158] In some examples, there are two slicing modes: raster scan slice mode and rectangular slice mode. In raster scan slice mode, a slice contains a series of tiles in a tile raster scan of an image. In rectangular slice mode, a slice contains a number of tiles that collectively form a rectangular region of an image, or a slice contains a number of consecutive CTU rows of a single tile that collectively form a rectangular region of an image. Tiles within a rectangular slice are scanned in tile raster scan order within the rectangular region corresponding to that slice.

[0159] All slices of an image collectively form the entire image; that is, every CTU of an image must be contained within one of its multiple slices. Similar rules apply to tiles and sub-images.

[0160] [Dividing an image into sub-images] A subimage is a rectangular segment of an image. A subimage can be the entire image or a part of an image. A subimage is a segment of an image such that each subimage can be decoded independently of other subimages in the entire video sequence. In VVC Draft8, this is true if a subimage is shown in the bitstream; that is, if the indication of subpic_treated_as_pic_flag[i] is true for subimage i, then subimage i can be decoded independently of other subimages in the entire video sequence.

[0161] The difference between subimages and tiles or slices is that subimages create independently decodeable video sequences within a video sequence. In contrast, with tiles and slices, independent decoding is only guaranteed within a single image of the video sequence.

[0162] In VVC Draft8, a subimage contains one or more slices that collectively cover a rectangular region of the image. Therefore, each subimage boundary is always a slice boundary, and each vertical subimage boundary is always a vertical tile boundary.

[0163] Figure 8 provides an example of a tile, slice, and sub-image. In other words, Figure 8 shows an example of an image containing four tiles, i.e., two tile columns and two tile rows, four rectangular slices, and three sub-images. Sub-image 1 contains two slices.

[0164] In the example shown in Figure 8, the image is divided into 216 CTUs, 4 tiles, 4 slices, and 3 subimages. The value of sps_num_subpics_minus1 is 2, and the position-related syntax elements have the following values:

[0165] If sub-image 0, • subpic_ctu_top_left_x[0] is not signaled, but is inferred to be 0. • subpic_ctu_top_left_y[0] is not signaled, but is inferred to be 0. The value of subpic_width_minus1[0] is 8. The value of subpic_height_minus1[0] is 11.

[0166] In the case of sub-image 1, The value of subpic_ctu_top_left_x[1] is 9. The value of subpic_ctu_top_left_y[1] is 0. The value of subpic_width_minus1[1] is 8. The value of subpic_height_minus1[1] is 5.

[0167] In the case of sub-image 2, The value of subpic_ctu_top_left_x[2] is 9. The value of subpic_ctu_top_left_y[2] is 6. • subpic_width_minus1[2] is not signaled, but is inferred to be 8. • subpic_height_minus1[2] is not signaled, but is inferred to be 5.

[0168] [Tile signaling] The table below illustrates tile size signaling and tile coordinates within the image (from the VVC Draft8 image parameter set RBSP syntax table). [Table 3]

[0169] Tile partitioning information (address and dimensions of each tile) is typically included in the parameter set. In the example above, the indication (no_pic_partition_flag) is first included in the bitstream and indicates whether the image is partitioned into slices and tiles. If this indication is true (meaning the image is not partitioned into slices or tiles), it is inferred that the image is partitioned into only one slice and only one tile, and its boundary is aligned with the image boundary. Otherwise (if no_pic_partition_flag is false), the tile partitioning information is included in the bitstream.

[0170] The syntax element tile_column_width_minus1[i] indicates the width of the i'-th tile column. The syntax element tile_row_height_minus1[i] indicates the height of the i'-th tile row.

[0171] The height of tile rows and the width of tile columns can both be explicitly signaled or inferred within the bitstream. The syntax elements `num_exp_tile_columns_minus1` and `num_exp_tile_rows_minus1` indicate the number of tile columns and tile rows whose widths and heights are explicitly signaled, respectively. The widths and heights of the remaining tile columns and rows are inferred according to a function.

[0172] Tile indexing follows the "tile scan order in the image." Tiles in an image are ordered (scanned) according to the raster scan order, with the first tile in the upper left corner of the image being tile number 0, and the index increasing from left to right in each tile row, continuing from the last tile in a tile row to the leftmost tile in the next tile row (one row below the current tile row).

[0173] [Slice signaling] The table below illustrates the signaling of tile sizes and the coordinates of rectangular slices within the image (from the VVC Draft8 image parameter set RBSP syntax table). [Table 4]

[0174] In VVC Draft8, the following relationship exists between slices and tiles: a slice contains one or more complete tiles, or a tile contains one or more complete slices. Therefore, the coordinates and size of a slice are indicated by the wrt tile partitioning. In VVC Draft8, tile partitioning is first signaled within the image parameter set. Slice partitioning information is then signaled using tile mapping information.

[0175] In the table above, the syntax element num_slices_in_pic_minus1 indicates the number of slices inside the image. Tile_idx_delta[i] indicates the difference between the tile index of the first tile in the (i+1)th and i-th slices. For example, the index of the first tile in the first slice in the image is 0. If the tile index of the first tile in the second slice inside the image is 5, then Tile_idx_delta[0] will be equal to 5. In this context, the tile index is used as the address of the slice, i.e., the index of the first tile in the slice is the starting address of the slice.

[0176] slice_width_in_tiles_minus1[i] and slice_height_in_tiles_minus1[i] indicate the width and height of the i-th slice inside the image, expressed in terms of tiles.

[0177] In the table above, if both slice_width_in_tiles_minus1[i] and slice_height_in_tiles_minus1[i] are equal to 0 (indicating that the maximum dimensions of the i-th slice are one tile in height and one tile in width), then the syntax element num_exp_slices_in_tile[i] may be included in the bitstream. This syntax element indicates the number of slices inside the tile.

[0178] As explained earlier, according to VVC Draft8, a slice may contain multiple complete tiles, or a tile may contain multiple complete slices, and no other substitutes are allowed. According to the syntax table above, first, the number of tiles inside a slice is indicated (by including slice_width_in_tiles_minus1[i] and slice_height_in_tiles_minus1[i]). In addition, if the number of tiles inside a slice is equal to 1 according to the indication, the number of slices inside that tile is indicated (by num_exp_slices_in_tile[i]). Therefore, if both slice_width_in_tiles_minus1[i] and slice_height_in_tiles_minus1[i] are equal to 1, the actual size of the slice may be equal to or less than one tile.

[0179] The syntax element single_slice_per_subpic_flag, when true, indicates that a slice exists and that for all subimages in the slice, there is exactly one slice for each subimage (i.e., a subimage cannot be divided into more than one slice).

[0180] According to one alternative signaling method, the slice map (slice start address and slice size) is shown in VVC Draft8 according to the following steps: 1. First, a tile partitioning map is presented in the bitstream, where an index (which may be called tileIdx) is used to index all tiles in the image (according to the tile scan order in the image). After this stage, the index, coordinates, and size of each tile are known. 2. The number of slices in the image is signaled. In one example, the number of slices can be indicated by the num_slices_in_pic_minus1 syntax element. 3. For the first slice in the image, only the width and height of the slice are indicated by the number of tiles. The starting address of the first slice is not explicitly signaled, but rather inferred as tileIdx 0 (the first tile in the image is the first tile in the first slice of the image). 4. If the size of the first slice is equal to one tile in width and one tile in height, and if there are more than one CTU rows inside the tiles contained within the first slice, the num_exp_slices_in_tile[0] syntax element is signaled, which indicates how many slices are contained within that tile (called numSlicesInTile[0]). 5. For each slice in the image from the second to the last (including the second slice but excluding the last slice), the width and height of the slice are explicitly indicated by the number of tiles. The starting address of a slice may be explicitly indicated by the tile_idx_delta[i] syntax element, where i is the slice index. If the starting address is not explicitly signaled (for example, if the slices are signaled in an order that allows the starting position of the next slice to be inferred using the starting position and the width and height of the current slice), the starting address of the slice is then inferred via a function. 6. If the size of the nth slice (where n is a number between 2 and the number of slices in the image minus 1) is equal to one tile in width and one tile in height, and there is more than one CTU row in the tiles contained within the first slice, the num_exp_slices_in_tile[n] syntax element is signaled, which indicates how many slices are contained within that tile. 7. For the last slice in an image, the width and height of the slice are not explicitly signaled, but are inferred according to the number of tiles in the width of the image, the number of tiles in the height of the image, and the starting address of the last slice. The starting address of the last slice can be explicitly shown or inferred. The inference of the width and height of the last slice in an image can be performed according to the following two equations, which are taken from section 6.5.1 of VVC Draft8.

number

[0181] As can be seen from the stages described above, the width and height of the last slice are not signaled. Since these can be easily inferred if the starting address of the slice is known, it is desirable not to include the width and height of the last slice in the bitstream. As a result, efficient compression is achieved by not including redundant information in the bitstream.

[0182] The variables tileX, tileY, NumTileColumns, and NumTileRows in the above equation will be explained later.

[0183] [Section 6.5.1 of VVC Draft8] [6.5.1 Processes for CTB raster scanning, tile scanning, and sub-image scanning] For rectangular slices, the list NumCtusInSlice[i], which specifies the number of CTUs in the i-th slice for i (including both ends) within the range of 0 to num_slices_in_pic_minus1, the list SliceTopLeftTileIdx[i], which specifies the index of the top-left tile of the slice for i (including both ends) within the range of 0 to num_slices_in_pic_minus1, and the matrix CtbAddrInSlice[i][j], which specifies the image raster scan address of the j-th CTB in the i-th slice for i (including both ends) within the range of 0 to num_slices_in_pic_minus1 and j (including both ends) within the range of 0 to NumCtusInSlice[i]-1, are derived as follows:

number

number

number

[0184] Again, for completeness, the Recommendation ITU-T H.266 (ISO / IEC 23090-3:2020) on multipurpose video coding, cited via http: / / handle.itu.int / 11.1002 / 1000 / 14336 on August 29, 2020, quotes almost the same thing, and its contents are as follows:

[0185] If rect_slice_flag is equal to 1, the following are derived: NumCtusInSlice[i], a list specifying the number of CTUs in the i-th slice for i (including both ends) in the range 0 to num_slices_in_pic_minus1; SliceTopLeftTileIdx[i], a list specifying the tile index of the tile containing the first CTU in the slice for i (including both ends) in the range 0 to num_slices_in_pic_minus1; CtbAddrInSlice[i][j], a matrix specifying the image raster scan address of the j-th CTB in the i-th slice for i (including both ends) in the range 0 to num_slices_in_pic_minus1 and j (including both ends) in the range 0 to NumCtusInSlice[i]-1; and NumSlicesInTile[i], a variable specifying the number of slices in the tile containing the i-th slice.

number

number

number

number

number

[0186] Here, we refer to the text shown above in VVC Draft8.

[0187] The above step-by-step explanation of signaling for slice maps within an image is an example of signaling in VVC Draft8. More specifically, the explanation describes the case where rectangular slices are used, the number of slices per sub-image is not indicated as equal to 1, the image contains more than one tile, and the number of CTU rows within a tile is greater than 1. If some of these parameters are changed, other modes of slice map signaling can be used. For example, if it is indicated that there is only one slice per sub-image, the width and height of the slices are not explicitly signaled in the bitstream, but rather inferred to be equal to the width and height of the corresponding sub-image.

[0188] Sub-item 6.5.1 of VVC Draft8 specifies the scan order of the CTUs within slice i, where i is the slice index. The output matrix CtbAddrInSlice[i][n] of this sub-item specifies the scan order of the CTUs within slice i, where n is the CTU index between 0 and the number of CTUs in slice i. The value of CtbAddrInSlice[i][n] specifies the address of the nth CTU in slice i (in the raster scan order in the image).

[0189] Figure 9 shows the raster scan order in a CTU image ("CTU raster scan order in the image") and an example of one slice in the image (slice 5, i.e., the 5th slice in the image). In other words, Figure 9 shows the raster scan order of the CTU within the image, where the image consists of one tile and one sub-image.

[0190] According to this example, the value of CtbAddrInSlice is as follows: CtbAddrInSlice[4][0]=27 CtbAddrInSlice[4][1]=28 CtbAddrInSlice[4][2]=29 CtbAddrInSlice[4][3]=30 CtbAddrInSlice[4][4]=37 CtbAddrInSlice[4][5]=38 CtbAddrInSlice[4][6]=39 CtbAddrInSlice[4][7]=40

[0191] [Terminology used in this disclosure] • The “tile scan order in the image” as described in this disclosure. • The “CTU scan sequence within the tile” as described in this disclosure. • The “CTU scan sequence within the slice” as described in this disclosure. • The “CTU raster scan order in images” as described in this disclosure. • "Tile-based scan order of CTUs within the image" • "Scanning order" refers to the indexing of X in Y in the order in which the index increases. "Processing" means decoding or encoding in an encoder or decoder. Therefore, the processing order means the order in which X (e.g., CTU) is processed in the encoder or decoder.

[0192] In VVC Draft8, if there is more than one tile per image, the slice signaling is as follows:

[0193] 1. Determine the starting tile address of the slice by the number of tiles, using explicit instructions or inference. 2. For each slice, except for the last slice, signal how many tiles the slice contains. a. If it is determined that a slice contains only one tile, indicate how many slices are contained within the tile. 3. For the last slice in the image, infer the number of tiles in the slice if it is determined that the slice contains at least one complete tile.

[0194] In other words, in VVC Draft8, if the size of the last slice in the picture is larger than or equal to one tile in both the width and height dimensions, the size of the last slice is inferred and not signaled.

[0195] This can be seen from Table 1, where slice_width_in_tiles_minus1[i] and slice_height_in_tiles_minus1[i] (indicating the width and height of the i-th slice in terms of the number of tiles, respectively) are included in the bitstream if they are smaller than num_slices_in_pic_minus1 (due to the for-loop "for(i = 0; i < num_slices_in_pic_minus1; i++)"). Therefore, the width and height of the slice are not signaled when i is equal to num_slices_in_pic_minus1, i.e., for the last slice.

[0196] [Luma Mapping with Chroma Scaling (LMCS)] In VVC, a coding tool called Luma Mapping with Chroma Scaling (LMCS) is added as a new processing block before the loop filters. LMCS has two main components: 1) in-loop mapping of the luma component based on an adaptive piecewise linear model, and 2) luma-dependent chroma residual scaling is applied to the chroma component. Figure 11 shows the LMCS architecture from the decoder's perspective. The light blue shaded blocks in Figure 11 indicate where processing is applied to the mapped domains, including inverse quantization, inverse transform, luma intra prediction, and adding luma prediction along with luma residuals. The unshaded blocks in Figure 11 indicate where processing is applied to the original (i.e., unmapped) domains, including deblocking, loop filters such as ALF and SAO, motion-compensated prediction, chroma intra prediction, adding chroma prediction along with chroma residuals, and storing the decoded image as a reference image. The light yellow shaded block in Figure 11 represents the new LMCS function block, which includes forward and reverse mapping of the luma signal and the luma-dependent chroma scaling process. Like most other tools in VVC, LMCS can be enabled / disabled at the sequence level using the SPS flag.

[0197] Slice Header: A portion of a coded slice is represented in the slice, containing all the data elements associated with all tiles or CTU rows within the tile.

[0198] [Slice Header] [Table 5] [Table 3]

[0199] Table 3 illustrates a portion of the slice header syntax structure for VVC Draft8. Rows containing "..." indicate that some rows in the table have been omitted.

[0200] In a slice header, the syntax elements are as follows: The `picture_header_in_slice_header_flag` flag indicates whether the image header syntax structure exists in the slice header. If the image header syntax structure does not exist in the slice header, it must be included in the image header that must be contained within the bitstream. slice_address indicates the tile index of the first tile in the slice. num_tiles_in_slice_minus1 indicates the number of tiles contained in the slice.

[0201] Figure 10 illustrates an image divided into 12 tiles and 3 slices. In other words, Figure 10 shows an image with an 18×12 Luma CTU divided into 12 tiles and 3 raster scan slices.

[0202] In this example shown in Figure 10, the slice address and the num_tiles_in_slice_minus1 syntax element are assumed to have the following values ​​for each slice of the image: • Slice 1 • slice_address=0, and the slice start address is tile index 0. ·num_tiles_in_slice_minus1=1, meaning the slice consists of 2 tiles. • Slice 2 • slice_address=2, so the slice start address is tile index 2. Since num_tiles_in_slice_minus1 = 5, the slice consists of 5 tiles. • Slice 3 • slice_address=7, so the slice start address is tile index 7. Since num_tiles_in_slice_minus1 = 4, the slice consists of 4 tiles.

[0203] A slice_lmcs_enabled_flag equal to 1 indicates that chroma mapping with chroma scaling is enabled for the current slice. A slice_lmcs_enabled_flag equal to 0 indicates that chroma mapping with chroma scaling is not enabled for the current slice. If slice_lmcs_enabled_flag does not exist, it is inferred to be equal to 0.

[0204] The starting tile of a slice (the address of the slice in the image) and the number of tiles within the image can be indicated using two methods. If rect_slice_flag is equal to 1 (indicating that the slice of the image has a rectangular shape), the signaling mechanism shown in Table 1 is used. Table 1 represents a portion of the image parameter set. In this mechanism, the addresses and sizes of all slices of the image are signaled in the image parameter set before the first slice of the image in the bitstream. The bitstream has an order in which the information (image parameter set, slices of the image, and internal syntax elements such as syntax structure) is contained within (or parsed from) the bitstream.

[0205] Otherwise, if rect_slice_flag is equal to 0 (indicating that the image slice does not need to be rectangular in shape), the slice_address and num_tiles_in_slice_minus1 syntax elements in the slice header indicate the address and size of the slice.

[0206] [Image Header] [7.3.2.6 RBSP Syntax for Image Header] [Table 6]

[0207] The table above presents the image header syntax for VVC Draft8. It includes the image header structure and rbsp_trailing_bits(), which are filler bits that make the number of bits in the image header equal to a multiple of 8.

[0208] [Image Header Structure] [7.3.2.7 Syntax of Image Header Structure] [Table 7]

[0209] The image header structure contains syntax elements applicable to all slices of the image. Some of these syntax elements are included in the image header structure presented in the table above. For example, ph_lmcs_enabled_flag indicates whether the LMCS (Luma Mapping with Chroma Scaling) coding tool is enabled for a slice of the image. A ph_lmcs_enabled_flag equal to 1 specifies that Luma Mapping with Chroma Scaling is enabled for all slices associated with PH. A ph_lmcs_enabled_flag equal to 0 specifies that Luma Mapping with Chroma Scaling may be disabled for one, more, or all slices associated with PH. If it is not present, the value of ph_lmcs_enabled_flag is inferred to be equal to 0.

[0210] As can be seen from the above, an image header structure can exist in either a slice header or an image header. According to VVC Draft8, an image header structure must exist in either the slice header or the image header of an image. If an image header structure exists in an image header, then all slices of the image that reference that image header must not contain an image header structure. The reverse is also true: if an image header structure does not exist in an image header, and therefore the image header is not included in the bitstream of a particular image, then the image header structure must exist in the slice header of the slice of that image.

[0211] Furthermore, VVC Draft8 has another constraint: if the image header structure exists in the slice header, the image must consist of only one slice (i.e., the image cannot be divided into multiple slices).

[0212] The current VVC Draft8 is inefficient because slice_address and num_tiles_in_slice_minus1 are redundantly included in the bitstream in certain cases. The redundant inclusion of slice_address and num_tiles_in_slice_minus1 in the bitstream means that any slice header in the image may contain this syntax element, thus reducing compression efficiency and increasing the bitrate.

[0213] [Embodiment 1] According to one embodiment, the presence of the slice_address and num_tiles_in_slice_minus1 syntax elements in the slice header is controlled based on the presence of an image header structure in the slice header. [Table 8]

[0214] The present invention can be implemented as shown in the above table. According to the present invention, slice_address is included in the slice header when the condition in the 6th row is true. In other words, slice_address is included in the slice header in the following cases. · The number of tiles in the image is more than 1 and non-rectangular slices are allowed (rect_slice_flag = 0) and the image header structure does not exist within the slice header. Or, · (rect_slice_flag = 1) and the number of slices in the current sub-image is more than 1.

[0215] Otherwise, slice_address is not included in the slice header, and it can be inferred that its value is equal to 0.

[0216] In addition or alternatively, the presence of the num_tiles_in_slice_minus1 syntax element in the slice header can be controlled by the presence of the image header structure in the slice header. For example, num_tiles_in_slice_minus1 is not included in the slice header when there is an image header structure in the slice header.

[0217] Row 10 of the above table is · Indicates an implementation of the present invention where Rect_slice_flag is equal to 0, the number of tiles in the image is more than 1, and picture_header_in_slice_header_flag is equal to 0 and num_tiles_in_slice_minus1 is included in the slice header.

[0218] Otherwise, num_tiles_in_slice_minus1 is not included in the slice header, and it can be inferred that its value is equal to the number of tiles in the image minus 1.

[0219] As described above, there are bitstream compliance requirements in VVC Draft8 that limit the inclusion of the image header structure in the slice header. According to VVC Draft8, the image header structure can be included in the slice header when there is one slice per image.

[0220] According to the present invention, the presence of the image header structure in the slice header is used to control the presence of slice_address and the number of tiles in the slice indication. This is because when there is a single slice in the image, the slice address must be equal to the first tile in the image, and the number of tiles in the slice must be equal to the number of tiles in the image.

[0221] [Embodiment 2]

Table 9

[0222] In addition or alternatively, the presence of num_tiles_in_slice_minus1 in the slice header is controlled by the difference between the number of tiles in the image (e.g., NumTilesInPic in the above table) and slice_address.

[0223] More specifically, when the difference between the number of tiles in the image and slice_address is less than a threshold value, num_tiles_in_slice_minus1 is not included in the slice header, and its value is inferred to be equal to a predefined number. For example, when the difference between NumTilesInPic and slice_address is less than or equal to 1, num_tiles_in_slice_minus1 is not included in the bitstream, and its value is inferred to be equal to 0 (indicating that there is one tile in the current slice).

[0224] slice_address specifies the slice address of the slice.

[0225] If it does not exist, the value of slice_address is inferred to be equal to 0.

[0226] If rect_slice_flag is equal to 0, the following applies:

[0227] The slice address is the raster scan tile index of the first tile in the slice.

[0228] The length of slice_address is Ceil(Log2(NumTilesInPic)) bits.

[0229] The value of slice_address should be within the range of 0 to NumTilesInPic-1 (including both endpoints).

[0230] Otherwise (rect_slice_flag is equal to 1), the following applies:

[0231] The slice address is the slice index of the current slice's sub-image level, i.e., SubpicLevelSliceIdx[j], where j is the slice index of the current slice's image level. The length of slice_address is Ceil(Log2(NumSlicesInSubpic[CurrSubpicIdx])) bits. The value of slice_address should be within the range of 0 to NumSlicesInSubpic[CurrSubpicIdx]-1 (including both ends).

[0232] This is a bitstream conformance requirement to which the following constraints apply:

[0233] If rect_slice_flag is equal to 0 or sps_subpic_info_present_flag is equal to 0, the value of slice_address shall not be equal to the value of slice_address of any other coded slice NAL unit of the same coded picture.

[0234] Otherwise, the pair of values of subpic_id and slice_address shall not be equal to the pair of values of subpic_id and slice_address of any other coded slice NAL unit of the same coded picture.

[0235] The shape of the slices of the picture shall be such that each CTU, when decoded, has its entire left boundary and its entire upper boundary composed of the picture boundary or the boundary of a previously decoded CTU.

[0236] num_tiles_in_slice_minus1 + 1, if present, specifies the number of tiles in the slice. The value of num_tiles_in_slice_minus1 shall be within the range from 0 to NumTilesInPic - 1, inclusive. If not present, the value of num_tiles_in_slice_minus1 shall be inferred to be equal to 0.

[0237] The variable NumCtusInCurrSlice that specifies the number of CTUs in the current slice, and the list CtbAddrInCurrSlice[i] that specifies the picture raster scan address of the i-th CTB in the slice for i within the range from 0 to NumCtusInCurrSlice - 1, inclusive, are derived as follows.

Number

[0238] The variables SubpicLeftBoundaryPos, SubpicTopBoundaryPos, SubpicRightBoundaryPos, and SubpicBotBoundaryPos are derived as follows:

number

[0239] [Embodiment 3] [Table 10]

[0240] In addition, or alternatively, the presence of slice_lmcs_enabled_flag in the slice header is controlled based on the presence of an image header structure in the slice header. An exemplary implementation is included in row 15 of the table above.

[0241] More specifically, if the image header structure is included in the slice header, then slice_lmcs_enabled_flag is not included in the slice header. In addition, if it is not included in the slice header, the value of slice_lmcs_enabled_flag can be inferred according to the following rules. The value of slice_lmcs_enabled_flag is inferred to be equal to ph_lmcs_enabled_flag.

[0242] Alternatively, or in addition, if the value of slice_lmcs_enabled_flag is not present in the slice header, it can be inferred according to the following rules: The value of slice_lmcs_enabled_flag is inferred to be equal to ph_lmcs_enabled_flag if picture_header_in_slice_header_flag is equal to 1 (the image header structure is included in the slice header).

[0243] Alternatively, or in addition, if the value of slice_lmcs_enabled_flag is not present in the slice header, it can be inferred according to the following rules: The value of slice_lmcs_enabled_flag is inferred to be equal to 0 if picture_header_in_slice_header_flag is equal to 0.

[0244] The above embodiments can be implemented by replacing the conditions "!rect_slice_flag&&NumTilesInPic>1" in lines 6 and 10 with "!rect_slice_flag". In some exemplary implementations, if the value of rect_slice_flag is equal to 0 (indicating that slices in an image do not necessarily have to be rectangles), then the value of the NumTilesInPic syntax element must be greater than 0 (for example, the number of tiles in a slice must be greater than 1). In other words, the value of rect_slice_flag is simply equal to 0 if the number of tiles in an image is greater than 1. In such implementations, the conditions "!rect_slice_flag&&NumTilesInPic>1" and "!rect_slice_flag" will have the same result. Therefore, any condition that includes "!rect_slice_flag&&NumTilesInPic>1" (lines 6 and 10 in all of the above embodiments) can be replaced with "!rect_slice_flag".

[0245] The above embodiments can be implemented by replacing the conditions "!rect_slice_flag&&NumTilesInPic>1" in lines 6 and 10 with "!rect_slice_flag". In some exemplary implementation embodiments, when the value of rect_slice_flag is equal to 0 (indicating that each slice in the image contains one or more tiles) and when picture_header_in_slice_header_flag is equal to 0 (indicating that the number of slices in the image is greater than 1), NumTilesInPic must be greater than 1 when picture_header_in_slice_header_flag is equal to 0 and rect_slice_flag is equal to 0.

[0246] The following describes the application of the encoding and decoding methods shown in the embodiments described above, as well as the systems that use them.

[0247] Figure 14 is a flowchart showing a method for decoding a video bitstream according to an embodiment of the present disclosure. The method shown in Figure 14 is a method for decoding an image from a video bitstream, which is implemented by a decoding device, wherein the bitstream includes a slice header for the current slice and data representing the current slice, and the method includes a step (step 1601) of obtaining a parameter used to derive the number of tiles in the current slice from the slice header if a condition is met, the condition being that the slice address of the current slice is not the address of the last tile in the image in which the current slice is located, and a step (step 1603) of reconstructing the current slice using the number of tiles in the current slice and data representing the current slice.

[0248] Figure 15 is a flowchart showing another encoding method for a video bitstream according to an embodiment of the present disclosure. The method shown in Figure 15 is a method for encoding a video bitstream, which is implemented by an encoding device, wherein the bitstream includes a slice header for a current slice and data representing the current slice, and the method includes a step (step 1701) of encoding a parameter used to derive the number of tiles in the current slice from the slice header if a condition is met, the condition being that the slice address of the current slice is not the address of the last tile in the image in which the current slice is located, and a step (step 1703) of reconstructing the current slice using the number of tiles in the current slice and the data representing the current slice.

[0249] Figure 16 shows an apparatus for decoding a video bitstream according to an embodiment of the present disclosure, namely a decoder (30). The apparatus shown in Figure 16 is an apparatus for decoding an image from a video bitstream, wherein the bitstream includes a slice header for the current slice and data representing the current slice, and the apparatus includes an acquisition unit (3001) configured to acquire parameters used to derive the number of tiles in the current slice from the slice header if a condition is met, the condition being that the slice address of the current slice is not the address of the last tile in the image in which the current slice is located, and a reconstruction unit (3003) configured to reconstruct the current slice using the number of tiles in the current slice and data representing the current slice.

[0250] Figure 17 shows an apparatus for encoding a video bitstream according to an embodiment of the present disclosure, namely an encoder (20). The apparatus shown in Figure 17 is an apparatus for encoding a coded video bitstream, wherein the bitstream includes a slice header for the current slice and data representing the current slice, and the apparatus (20) includes an encoding unit (2001) configured to encode a parameter used to derive the number of tiles in the current slice from the slice header if a condition is met, the condition being that the slice address of the current slice is not the address of the last tile in the image in which the current slice is located, and a reconstruction unit (2003) configured to reconstruct the current slice using the number of tiles in the current slice and data representing the current slice.

[0251] The video decoding device shown in Figure 16 may consist of the decoder 30 shown in Figures 1A, 1B, and 3, and the video decoder 3206 shown in Figure 13, or may be composed of these. Furthermore, the decoding device may consist of the video coding device 400 shown in Figure 4, the device 500 shown in Figure 5, and the terminal device 3106 shown in Figure 12. The encoding device shown in Figure 17 may consist of the encoder 20 shown in Figures 1A, 1B, and 3, or may be composed of these. Furthermore, the encoding device may consist of the video coding device 400 shown in Figure 4, the device 500 shown in Figure 5, and the capture device 3102 shown in Figure 12.

[0252] This disclosure further discloses the following figures. Figure 12 is a block diagram of a content supply system 3100 for realizing a content distribution service. This content supply system 3100 includes a capture device 3102, a terminal device 3106, and optionally a display 3126. The capture device 3102 communicates with the terminal device 3106 via a communication link 3104. The communication link may include the communication channel 13 described above. The communication link 3104 includes, but is not limited to, Wi-Fi®, Ethernet®, cable, wireless (3G / 4G / 5G), USB, or any combination thereof.

[0253] The capture device 3102 can generate data and encode the data by encoding methods as shown in the embodiments described above. Alternatively, the capture device 3102 may deliver the data to a streaming server (not shown), which encodes the data and sends the encoded data to the terminal device 3106. The capture device 3102 includes, but is not limited to, a camera, a smartphone or tablet, a computer or laptop, a video conferencing system, a PDA, an in-vehicle device, or any combination thereof. For example, as described above, the capture device 3102 may include a source device 12. If the data includes video, the video encoder 20 included in the capture device 3102 may actually perform the video encoding process. If the data includes audio (i.e., voice), the audio encoder included in the capture device 3102 may actually perform the audio encoding process. In some practical scenarios, the capture device 3102 delivers the encoded video and audio data by multiplexing them together. In other practical scenarios, for example in a video conferencing system, the encoded audio data and encoded video data are not multiplexed. The capture device 3102 separately distributes the encoded audio data and encoded video data to the terminal device 3106.

[0254] In the content supply system 3100, the terminal device 310 receives and reproduces the encoded data. The terminal device 3106 may be a device having data reception and restoration capabilities, such as a smartphone or tablet 3108, a computer or laptop 3110, a network video recorder (NVR) / digital video recorder (DVR) 3112, a TV 3114, a set-top box (STB) 3116, a video conferencing system 3118, a video surveillance system 3120, a personal digital assistant (PDA) 3122, an in-vehicle device 3124, or any combination thereof, all capable of decoding the encoded data described above. For example, as described above, the terminal device 3106 may include the destination device 14. If the encoded data includes video, the video decoder 30 included in the terminal device prioritizes performing video decoding. If the encoded data includes audio, the audio decoder included in the terminal device prioritizes performing audio decoding.

[0255] For terminal devices having a display, such as a smartphone or Pad 3108, a computer or laptop 3110, a network video recorder (NVR) / digital video recorder (DVR) 3112, a TV 3114, a personal digital assistant (PDA) 3122, or an in-vehicle device 3124, the terminal device can supply the decoded data to its display. For terminal devices without a display, such as an STB 3116, a video conferencing system 3118, or a video surveillance system 3120, an external display 3126 is internally contacted to receive and display the decoded data.

[0256] When each device in this system performs encoding or decoding, it can use an image encoding device or an image decoding device as shown in the above-described embodiment.

[0257] Figure 13 shows the structure of an example terminal device 3106. After the terminal device 3106 receives the stream from the capture device 3102, the protocol progression unit 3202 parses the transmission protocol of the stream. The protocol may include, but is not limited to, Real-Time Streaming Protocol (RTSP), Hypertext Transfer Protocol (HTTP), HTTP Live Streaming Protocol (HLS), MPEG-DASH, Real-Time Transport Protocol (RTP), Real-Time Messaging Protocol (RTMP), or any combination thereof.

[0258] After the protocol processing unit 3202 processes the stream, a stream file is generated. This file is output to the demultiplexing unit 3204. The demultiplexing unit 3204 can separate the multiplexed data into encoded audio data and encoded video data. As described above, in some real-world scenarios, for example, in a video conferencing system, the encoded audio data and encoded video data are not multiplexed. In this situation, the encoded data is sent to the video decoder 3206 and audio decoder 3208 without passing through the demultiplexing unit 3204.

[0259] This demultiplexing process generates a video elementary stream (ES), an audio ES, and optionally subtitles. The video decoder 3206 includes the video decoder 30 as described in the above embodiment, decodes the video ES using the decoding method shown in the above embodiment to generate video frames, and supplies this data to the synchronization unit 3212. The audio decoder 3208 decodes the audio ES to generate audio frames and supplies this data to the synchronization unit 3212. Alternatively, the video frames may be stored in a buffer (not shown in Figure 13) before being supplied to the synchronization unit 3212. Similarly, the audio frames may be stored in a buffer (not shown in Figure 13) before being supplied to the synchronization unit 3212.

[0260] The synchronization unit 3212 synchronizes video frames and audio frames and supplies video / audio to the video / audio display 3214. For example, the synchronization unit 3212 synchronizes the presentation of video and audio information. The information may be coded using timestamps for the presentation of coded audio and visual data, and timestamps for the delivery of the data stream itself.

[0261] The subtitle decoder 3210, if the stream contains subtitles, decodes the subtitles and synchronizes them with the video and audio frames, and supplies the video / audio / subtitles to the video / audio / subtitle display 3216.

[0262] The present invention is not limited to the system described above, and either the image encoding device or the image decoding device in the above-described embodiment can also be incorporated into other systems, such as a car system.

[0263] [Mathematical operators] The mathematical operators used in this disclosure are similar to those used in the C programming language. However, the results of integer division and arithmetic shift operations are more strictly defined, and additional operations such as exponentiation and real-valued division are defined. Numbering and counting generally start from 0, for example, “1st” is equivalent to the 0th, “2nd” is equivalent to the 1st, and so on.

[0264] [Arithmetic operators] The following arithmetic operators are defined as follows: [Table 11]

[0265] [Logical Operators] The following logical operators are defined as follows: x&&y: Boolean logic "and" of x and y The Boolean logic "or" of x and y ! Boolean logic "not" If x?y:zx is TRUE or not equal to 0, it becomes the value of y; otherwise, it becomes the value of z.

[0266] [Relational Operators] The following relational operators are defined as follows: > larger >= Above < Smaller <= Below = = equals != is not equal to

[0267] When a relational operator is applied to a syntax element or variable that has the value "na" (not applicable) assigned to it, the value "na" is treated as the distinct value of that syntax element or variable. The value "na" is considered not to be equal to any other value.

[0268] [bitwise operators] The following bitwise operators are defined as follows: & is a bitwise "and". When performing an operation on an integer term, the operation is performed on the two's complement representation of the integer value. When performing an operation on a binary term that contains fewer bits than another term, the shorter term is extended by adding higher bits equal to 0. | Bitwise "OR". When performing an operation on an integer term, the operation is performed on the two's complement representation of the integer value. When performing an operation on a binary term that contains fewer bits than another term, the shorter term is extended by adding higher bits equal to 0. ^ Bitwise "exclusive OR". When performing an operation on an integer term, the operation is performed on the two's complement representation of the integer value. When performing an operation on a binary term that contains fewer bits than another term, the shorter term is extended by adding higher bits equal to 0. x >> y Arithmetic right shift of the two's complement integer representation of x by the number of bits of y. This function is only defined for non - negative integer values of y. The bits shifted into the most significant bit (MSB) as a result of the right shift have the same value as the MSB of x before the shift operation. x << y Arithmetic left shift of the two's complement integer representation of x by the number of bits of y. This function is only defined for non - negative integer values of y. The bits shifted into the least significant bit (LSB) as a result of the left shift have a value equal to 0.

[0269] [Assignment operator] The following arithmetic operators are defined as follows. = Assignment operator ++ Increment, i.e., x++ is equivalent to x = x + 1. When used as an array index, it takes the value of the variable before the increment operation. -- Decrement, i.e., x-- is equivalent to x = x - 1. When used as an array index, it takes the value of the variable before the decrement operation. += Increment by the specified amount, i.e., x += 3 is equivalent to x = x + 3 and x += (-3) is equivalent to x = x + (-3). -= Decrement by the specified amount, i.e., x -= 3 is equivalent to x = x - 3 and x -= (-3) is equivalent to x = x - (-3).

[0270] [Range notation] The following notations are used to specify a range of values. x = y..z x takes integer values from y to z (including both ends), where x, y, and z are integers and z is greater than y.

[0271] [Mathematical functions] The following mathematical functions are defined. [Number] Asin(x) The inverse sine function, performs the operation on an argument x within the range from - 1.0 to 1.0 (including both ends), The output value is in radians and falls within the range of -π÷2 to π÷2 (including both ends). Atan(x) is the inverse trigonometric tangent function, The operation is performed on the argument x, and the output value is in radians and is within the range from -π÷2 to π÷2 (including both ends).

number

number

number

number

number

number

number

[0272] [Order of operations] If the order of precedence in an expression is not explicitly indicated using parentheses, the following rules apply: - Operations with higher priority are evaluated before any operations with lower priority. - Operations with the same priority are evaluated sequentially from left to right.

[0273] The following table specifies the order of operations from highest to lowest. A higher position in the table indicates a higher priority.

[0274] For operators also used in the C programming language, the order of precedence used herein is the same as that used in the C programming language. Table: Priority of operations from highest (top of table) to lowest (bottom of table) [Table 12]

[0275] [Explanation of logical operations] In the text, logical statements are mathematically described in the following format:

number

number

[0276] Each statement in the text "If...Otherwise,if...Otherwise,..." is immediately followed by "...as follows" or "the following applies" and then "If...". The last condition in "If...Otherwise,if...Otherwise" is always "Otherwise,...". Interleaved "If...Otherwise,if...Otherwise,..." statements can be identified by matching "...as follows" or "...the following applies" that end with "Otherwise,...".

[0277] In the text, logical operation statements are mathematically explained in the following format:

number

number

[0278] In the text, logical operation statements are mathematically explained in the following format:

number

[0279] While embodiments of the present invention have been described primarily in relation to video coding, it should be noted that embodiments of the coding system 10, encoder 20, and decoder 30 (and correspondingly system 10), as well as other embodiments described herein, may also be configured for still image processing or coding, i.e., processing or coding of individual images independent of any preceding or consecutive images, as in video coding. Generally, when image processing coding is limited to a single image 17, only the interprediction units 244 (encoder) and 344 (decoder) may not be available. All other functions (also referred to as tools or techniques) of the video encoder 20 and video decoder 30 may be equally used for still image processing, e.g., residual calculation 204 / 304, transformation 206, quantization 208, inverse quantization 210 / 310, (inverse) transformation 212 / 312, segmentation 262 / 362, intraprediction 254 / 354, and / or loop filtering 220, 320, as well as entropy coding 270 and entropy decoding 304.

[0280] For example, embodiments of encoder 20 and decoder 30, and functions described herein with reference to encoder 20 and decoder 30, may be implemented in hardware, software, firmware, or any combination thereof. If implemented in software, functions may be stored on a computer-readable medium or transmitted as one or more instructions or codes via a communication medium and executed by a hardware-based processing unit. The computer-readable medium may include a computer-readable storage medium corresponding to a tangible medium such as a data storage medium, or a communication medium including any medium that facilitates the movement of a computer program from one location to another, for example, according to a communication protocol. Thus, the computer-readable medium may generally correspond to (1) a non-temporary tangible computer-readable storage medium, or (2) a communication medium such as a signal or carrier wave. The data storage medium may be any available medium that can be accessed by one or more computers or one or more processors to obtain instructions, codes and / or data structures for implementation of the technology described herein. A computer program product may include a computer-readable medium.

[0281] As an example, and not an limitation, such computer-readable storage media may include RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, flash memory, or any other media that can be used to store desired program code in the form of instructions or data structures and that can be accessed by a computer. In addition, any connection is appropriate to be called a computer-readable medium. For example, if instructions are transmitted from a website, server or other remote source using coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL), or wireless technologies such as infrared, radio, and microwave, then coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies such as infrared, radio, and microwave are included in the definition of a medium. However, computer-readable storage media and data storage media should be understood to refer to non-temporary tangible storage media, not to include connections, carriers, signals, or other temporary media. As used herein, "disk and disc" includes compact discs (CDs), laser discs, optical discs, digital multipurpose discs (DVDs), floppy disks, and Blu-ray discs, where typically a "disk" reproduces data magnetically and a "disc" reproduces data optically using a laser. Any combination of the above should also be included within the scope of computer-readable media.

[0282] Instructions may be executed by one or more processors, such as one or more digital signal processors (DSPs), general-purpose microprocessors, application-specific integrated circuits (ASICs), field-programmable logic arrays (FPGAs), or other equivalent integrated or discrete logic circuits. Therefore, the term “processor” as used herein may refer to any of the aforementioned structures or any other structure suitable for implementing the technologies described herein. In addition, in some embodiments, the functions described herein may be provided within dedicated hardware and / or software modules configured for encoding and decoding, or incorporated into a combined codec. Furthermore, these technologies can be fully implemented in one or more circuits or logic elements.

[0283] The technology of this disclosure may be implemented in a wide variety of devices or apparatus, including wireless handsets, integrated circuits (ICs), or sets of ICs (e.g., chipsets). While various components, modules, or units are described in this disclosure to highlight the functional aspects of devices configured to perform the disclosed technology, implementation by different hardware units is not necessarily required. Rather, as described above, various units may be combined into a codec hardware unit in conjunction with suitable software and / or firmware, or as described above, they may be provided by a collection of interoperable hardware units including one or more processors.

[0284] This disclosure discloses the following 21 further aspects:

[0285] (Item 1) A method for decoding a video or image bitstream, implemented by a decoding device, wherein the bitstream includes data representing a current slice, and the method comprises the steps of: obtaining the slice address of the current slice from the slice header of the bitstream, provided that an existence condition is met, the existence condition includes the absence of an image header syntax structure in the slice header; and reconstructing the current slice based on the slice address of the current slice.

[0286] (Item 2) An embodiment of the method according to Embodiment 1, wherein the absence of the image header syntax structure in the slice header includes the syntax element being equal to false, and the syntax element being equal to false specifies that the image header syntax structure is not present in the slice header.

[0287] (Item 3) An embodiment of the method according to embodiment 1 or 2, wherein the value of the slice address of the current slice is inferred to be equal to zero if the existence condition is not met.

[0288] (Item 4) An embodiment of a method for decoding a video or image bitstream implemented by a decoding device, wherein the bitstream includes data representing a current slice, and the method comprises the steps of: obtaining a parameter used to derive the number of tiles in the current slice from a slice header of the bitstream, provided that an existence condition is met, the existence condition includes the absence of the image header syntax structure in the slice header; and reconstructing the current slice based on the number of tiles in the current slice.

[0289] (Item 5) An embodiment of the method of Embodiment 4, wherein the absence of the image header syntax structure in the slice header includes the syntax element being equal to false, and the syntax element being equal to false specifies that the image header syntax structure is not present in the slice header.

[0290] (Item 6) An embodiment of the method according to embodiment 4 or 5, wherein the value of the parameter of the current slice is inferred to be equal to the total number of tiles in the image, which is the value of the current slice minus 1, if the existence condition is not met.

[0291] (Item 7) An embodiment of a method for decoding a video or image bitstream implemented by a decoding device, wherein the bitstream includes data representing a current slice, and the method comprises the steps of: obtaining a parameter used to derive the number of tiles in the current slice from a slice header of the bitstream, provided that an existence condition is met, the existence condition being that the slice address of the current slice is not the address of the last tile in the image in which the current slice is located; and reconstructing the current slice based on the number of tiles in the current slice.

[0292] (Item 8) An embodiment of the method of embodiment 7, wherein the slice address of the current slice is the address of the last tile in the image, wherein the value obtained by subtracting the slice address of the current slice from the number of tiles in the image is equal to 1.

[0293] (Item 9) An embodiment of the method according to embodiment 7 or 8, wherein the value of the parameter of the current slice is inferred to be equal to the default value if the existence condition is not met.

[0294] (Item 10) An embodiment of the method according to embodiment 9, wherein the default value is equal to 0.

[0295] (Item 11) An embodiment of a method for decoding a video or image bitstream implemented by a decoding device, wherein the bitstream includes data representing a current slice, and the method comprises the steps of: obtaining a parameter used to derive the number of tiles in the current slice from a slice header of the bitstream, provided that existence conditions are met, the existence conditions include: the slice address of the current slice is not the address of the last tile in the image in which the current slice is located; and the image header syntax structure is not present in the slice header; and reconstructing the current slice based on the number of tiles in the current slice.

[0296] (Item 12) An embodiment of the method according to embodiment 11, wherein the value of the parameter is inferred to be equal to a first default value if the slice address of the current slice is the address of the last tile in the image, or a second default value, and the image header syntax structure is not present in the slice header.

[0297] (Item 13) An embodiment of a method for decoding a video or image bitstream implemented by a decoding device, wherein the bitstream includes data representing a current slice, and the method comprises the steps of: obtaining a parameter (e.g., slice_lmcs_enabled_flag) used to specify whether chroma mapping with chroma scaling is enabled for the current slice from the slice header of the bitstream, provided that an existence condition is met, the existence condition includes the absence of the image header syntax structure in the slice header; and reconstructing the current slice based on the number of tiles in the parameter.

[0298] (Item 14) An aspect of the method of aspect 13, wherein the absence of the image header syntax structure in the slice header includes the syntax element being equal to false, and the syntax element being equal to false specifies that the image header syntax structure is not present in the slice header.

[0299] (Item 15) An embodiment of a method for encoding a video or image into a bitstream, which is implemented by an encoding device, wherein the bitstream includes data representing a current slice, and the method comprises the steps of: including the slice address of the current slice in the bitstream from the slice header of the bitstream, provided that an existence condition is met, the existence condition includes the absence of the image header syntax structure in the slice header; and reconstructing the current slice based on the slice address of the current slice.

[0300] (Item 16) An embodiment of a decoder (30) comprising a processing circuit for performing the method described in any one of embodiments 1 to 15.

[0301] (Item 17) An embodiment of a computer program product that, when executed on a computer or processor, includes program code for performing the method described in any one of the preceding embodiments.

[0302] (Item 18) An embodiment of a decoder, wherein the decoder is An embodiment comprising one or more processors and a non-temporary computer-readable storage medium coupled to the processors and storing a program for execution by the processors, wherein the program, when executed by the processors, configures the decoder to perform the method described in any one of the preceding embodiments 1 to 15.

[0303] (Item 19) A non-temporary computer-readable medium that, when executed by a computer device, holds program code that causes the computer device to execute the method described in any one of the preceding embodiments 1 to 15.

[0304] (Item 20)

[0305] An embodiment of an encoded bitstream for a video signal comprising multiple syntax elements, wherein the multiple syntax elements include picture_header_in_slice_header_flag, and flags (such as slice_lmcs_enabled_flag) are conditionally signaled within the slice header, at least based on the value of picture_header_in_slice_header_flag.

[0306] (Item 21) An embodiment of a non-temporary recording medium comprising an encoded bitstream decoded by an image decoding device, the bitstream being generated by dividing a frame of a video signal or image signal into a plurality of blocks, and comprising a plurality of syntax elements, wherein the plurality of syntax elements comprises rect_slice_flag or sps_num_subpics_minus1, and the flag (e.g., slice_lmcs_enabled_flag) is conditionally signaled in the slice header based at least on the value of picture_header_in_slice_header_flag. [Other possible items] [Item 1] A method for decoding an image from a video bitstream, implemented by a decoding device, wherein the bitstream includes a slice header for the current slice and data representing the current slice, and the method A step of obtaining a parameter used to derive the number of tiles in the current slice from the slice header if a condition is met, the condition being that the slice address of the current slice is not the address of the last tile in the image in which the current slice is located. A step of reconstructing the current slice using the number of tiles in the current slice and the data representing the current slice. A method that includes [a certain feature]. [Item 2] The method according to item 1, wherein the slice address of the current slice is the address of the last tile in the image, which includes determining that the number of tiles in the image minus the slice address of the current slice is equal to 1. [Item 3] The method according to item 1, wherein determining that the slice address of the current slice is not the address of the last tile in the image is determined by the number of tiles in the image minus the slice address of the current slice being greater than 1. [Item 4] The method according to any one of items 1 to 3, wherein the value of the parameter for the current slice is inferred to be equal to the default value when the condition is not met. [Item 5] The default value is equal to 0, as described in item 4. [Item 6] The slice address is in tile units, as described in any one of items 1 to 5. [Item 7] The method according to any one of items 1 to 6, further comprising the step of determining that the current slice is in raster scan mode. [Item 8] The method according to any one of items 1 to 7, wherein the step of reconstructing the current slice using the number of tiles in the current slice comprises the steps of determining the scan order of the coding tree units in the current slice using the number of tiles in the current slice, and reconstructing the coding tree units in the current slice using the scan order. [Item 9] A method for encoding a video bitstream, implemented by an encoding device, wherein the bitstream includes a slice header for the current slice and data representing the current slice, and the method is A step of encoding a parameter used to derive the number of tiles in the current slice from the slice header if a condition is met, the condition being that the slice address of the current slice is not the address of the last tile in the image in which the current slice is located. A step of reconstructing the current slice using the number of tiles in the current slice and the data representing the current slice. A method that includes [a certain feature]. [Item 10] A device for decoding an image from a video bitstream, wherein the bitstream includes a slice header for the current slice and data representing the current slice, and the device An acquisition unit configured to acquire a parameter used to derive the number of tiles in the current slice from the slice header if a condition is met, the condition being that the slice address of the current slice is not the address of the last tile in the image in which the current slice is located; A reconstruction unit configured to reconstruct the current slice using the number of tiles in the current slice and the data representing the current slice. A device equipped with the following features. [Item 11] A device for encoding a coded video bitstream, wherein the bitstream includes a slice header for the current slice and data representing the current slice, and the device An encoding unit configured to encode a parameter used to derive the number of tiles in the current slice from the slice header if a condition is met, wherein the condition includes that the slice address of the current slice is not the address of the last tile in the image in which the current slice is located. A reconstruction unit configured to reconstruct the current slice using the number of tiles in the current slice and the data representing the current slice. A device equipped with the following features. [Item 12] An encoder (20) comprising a processing circuit for performing the method described in item 9. [Item 13] A decoder (30) comprising a processing circuit for performing the method described in any one of items 1 to 8. [Item 14] A computer program product that, when run on a computer or processor, includes program code for performing any of the methods described in items 1 through 9. [Item 15] It is a decoder, One or more processors, A non-temporary computer-readable storage medium coupled to the processor and storing a program for execution by the processor, wherein the program, when executed by the processor, configures the decoder to perform the method described in any one of items 1 to 8. A decoder equipped with a decoder. [Item 16] It is an encoder, One or more processors, A non-temporary computer-readable storage medium coupled to the processor and storing a program for execution by the processor, wherein the program, when executed by the processor, configures the encoder to perform the method described in item 9. An encoder equipped with the following features. [Item 17] A non-temporary computer-readable medium that, when executed by a computer device, holds program code that causes the computer device to perform the method described in any one of items 1 to 9. [Item 18] A non-temporary storage medium including a video bitstream, wherein the bitstream includes a slice header for the current slice and data representing the current slice, and the slice header includes the slice address for the current slice. If the condition is met, the slice header further includes a parameter used to derive the number of tiles in the current slice from the slice header, the condition including that the slice address of the current slice is not the address of the last tile in the image in which the current slice is located, in a non-temporary storage medium.

Claims

1. A method for decoding an image, A step of receiving a video bitstream including the slice header of the current slice and data representing the current slice, wherein the slice header includes the picture_header_in_slice_header_flag and the chroma-scaling-based lumamapping (LMCS) related flag is conditionally present in the slice header. If the LMCS-related flag is not present in the slice header, the value of the LMCS-related flag is inferred by determining whether or not an image header structure exists in the slice header based on the value of picture_header_in_slice_header_flag. If it is determined that the value of picture_header_in_slice_header_flag indicates that the image header structure exists within the slice header, then the step is to determine that the value of the LMCS-related flag is equal to ph_lmcs_enabled_flag, wherein the video bitstream includes ph_lmcs_enabled_flag, and ph_lmcs_enabled_flag indicates whether LMCS is enabled for the image. If it is determined that the value of picture_header_in_slice_header_flag indicates that the image header structure does not exist within the slice header, then the step is to determine that the value of the LMCS-related flag is equal to 0, which indicates that LMCS is invalid for the current slice. A method that includes [a certain feature].

2. The method according to claim 1, wherein if the value of the LMCS-related flag is equal to 1, the value of the LMCS-related flag indicates that the LMCS is valid for the current slice.

3. The method according to claim 1 or 2, wherein if the value of ph_lmcs_enabled_flag is equal to 1, the value of ph_lmcs_enabled_flag indicates that LMCS is enabled for the image.

4. The method according to any one of claims 1 to 3, wherein if the value of ph_lmcs_enabled_flag is equal to 0, the value of ph_lmcs_enabled_flag indicates that LMCS is disabled for the image.

5. A step of performing LMCS on the current slice based on the value of the LMCS-related flag. The method according to any one of claims 1 to 4, further comprising:

6. A method for encoding images, A step of generating a video bitstream including a slice header for the current slice and data representing the current slice, wherein the slice header includes picture_header_in_slice_header_flag, and a chroma-scaling-based lumamapping (LMCS) related flag is conditionally signaled within the slice header, and if the LMCS related flag is not present in the slice header, the value of the LMCS related flag is inferred by determining whether an image header structure exists within the slice header based on the value of picture_header_in_slice_header_flag, and the picture_header_in_sl If the value of ce_header_flag is determined to indicate that the image header structure is present within the slice header, then the value of the LMCS-related flag is equal to ph_lmcs_enabled_flag, and the video bitstream includes ph_lmcs_enabled_flag, and ph_lmcs_enabled_flag indicates whether LMCS is enabled for the image, and the value of picture_header_in_slice_header_flag is determined to indicate that the image header structure is not present within the slice header, then the value of the LMCS-related flag is equal to 0, indicating that LMCS is disabled for the current slice. A method that includes [a certain feature].

7. The method according to claim 6, wherein if the value of the LMCS-related flag is equal to 1, the value of the LMCS-related flag indicates that the LMCS is enabled for the current slice.

8. The method according to claim 6 or 7, wherein if the value of ph_lmcs_enabled_flag is equal to 1, the value of ph_lmcs_enabled_flag indicates that LMCS is effective for the image.

9. The method according to any one of claims 6 to 8, wherein if the value of ph_lmcs_enabled_flag is equal to 0, the value of ph_lmcs_enabled_flag indicates that LMCS is disabled for the image.

10. A decoder comprising a processing circuit for performing the method according to any one of claims 1 to 5.

11. An encoder comprising a processing circuit for performing the method described in any one of claims 6 to 9.

12. It is a decoder, One or more processors, A non-temporary computer-readable storage medium coupled to the processor and storing a program for execution by the processor, wherein the program, when executed by the processor, configures the decoder to perform the method according to any one of claims 1 to 5. A decoder equipped with a decoder.

13. It is an encoder, One or more processors, A non-temporary computer-readable storage medium coupled to the processor and storing a program for execution by the processor, wherein the program, when executed by the processor, configures the encoder to perform the method according to any one of claims 6 to 9. An encoder equipped with the following features.

14. A method for generating an encoded video bitstream, A step of generating the encoded video bitstream, which includes the slice header of the current slice and data representing the current slice, wherein the slice header includes picture_header_in_slice_header_flag, and the lmapping with chroma scaling (LMCS) related flag is conditionally signaled within the slice header, and if the LMCS related flag is not present in the slice header, the value of the LMCS related flag is inferred by determining whether an image header structure exists within the slice header based on the value of picture_header_in_slice_header_flag, and the picture_header_in_s If the value of slice_header_flag is determined to indicate that the image header structure exists within the slice header, then the value of the LMCS-related flag is equal to ph_lmcs_enabled_flag, and the encoded video bitstream includes ph_lmcs_enabled_flag, and ph_lmcs_enabled_flag indicates whether LMCS is enabled for the image, and if the value of picture_header_in_slice_header_flag is determined to indicate that the image header structure does not exist within the slice header, then the value of the LMCS-related flag is equal to 0, indicating that LMCS is disabled for the current slice. A method for generating, comprising:

15. A computer program for causing a decoder to perform the method described in any one of claims 1 to 5.

16. A computer program for causing an encoder to perform the method described in any one of claims 6 to 9.