Chroma quantization in video coding

JP2026031996A5Pending Publication Date: 2026-03-13APPLE INC
View PDF 0 Cites 0 Cited by

Patent Information

Authority / Receiving Office
JP · JP
Patent Type
Applications
Current Assignee / Owner
Filing Date
2025-11-06
Publication Date
2026-03-13

AI Technical Summary

Technical Problem

Existing video codecs lack the flexibility to independently control chroma quantization parameters across various color formats and sampling schemes, which is crucial for improving coding efficiency and user experience in professional and consumer applications.

Method used

A method is introduced to signal additional quantization-group-specific chroma QP offset values, allowing each quantization group to specify its own set of chroma QP offset values, which are used in conjunction with luma QP values from higher levels in the video coding hierarchy to determine chroma QP values for pixel blocks.

Benefits of technology

This approach enhances coding efficiency and user experience by allowing more flexible control over chroma quantization, accommodating diverse color formats and sampling schemes without increasing bitstream size.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 00000000_0000_ABST
    Figure 00000000_0000_ABST
Patent Text Reader

Abstract

To provide a method and decoder for signaling quantization group-specific additional chroma quantization parameter (QP) offset values.SOLUTION: The method includes each quantization group explicitly specifying its own set of chroma QP offset values or specifying a table of possible sets of chroma QP offset values in a header area of the picture, each quantization group using an index to select an entry from the table to determine its own set of chroma QP offset values, and using the quantization group-specific chroma QP offset values to determine chroma QP values for the blocks in the quantization group in addition to the chroma QP offset values already specified for higher levels of the video coding hierarchy.SELECTED DRAWING: Figure 7
Need to check novelty before this filing date? Find Prior Art

Description

[Technical Field]

[0001] Claiming the benefit of prior application This application claims the benefit of U.S. Provisional Patent Application No. 61 / 875,664, filed September 9, 2013. U.S. Provisional Patent Application No. 61 / 875,664 is incorporated herein by reference. [Background technology]

[0002] The next-generation High Efficiency Video Coding (HEVC / H.265) standard, jointly developed by the ITU and ISO MPEG, introduces several new video coding tools to improve video coding efficiency compared to previous video coding standards and technologies, such as MPEG-2, MPEG-4 Part 2, MPEG-4 AVC / H.264, VC1, and VP8, among others. In its initial version, the new standard supports the encoding of 8- or 10-bit YUV4:2:0 material using three well-defined profiles: Main, Main10, and Main Still Picture. However, work is underway to support other color sampling formats and color spaces, including YUV4:2:2, YUV4:4:4, and RGB4:4:4, among others, as well as sample precision (bit depth) beyond 10 bits. Coding of such material is of great interest for a variety of professional applications, such as cinema applications, capture, video editing, archiving, and medical imaging, as well as for a variety of consumer applications, such as screen content compression and sharing, remote computing, and gaming, among others.

[0003] Until recently, existing video codecs have mostly prioritized coding the luma component of an image. Coding parameters controlling the coding characteristics and quality of luma information are primarily provided at lower levels of the video coding hierarchy, such as the slice, coding tree block, coding unit, or transform block level in HEVC. Control and tuning parameters for all other components, related to modifying luma control parameters, can be primarily provided at higher levels, such as the sequence, picture parameter set, or slice level. For example, in MPEG-4 AVC, luma quantization and the corresponding quantization parameters (QPs) are controlled at the macroblock level using signaled parameters. In the picture parameter set, one offset is provided for each chroma component. Each chroma QP offset controls the QP value of the corresponding chroma component relative to the luma QP within each macroblock. However, this relationship is fixed for the entire picture. If one wanted to change the quality in the luma or chroma area, the relationship was so tight that the other component was also affected. HEVC also offered a little additional control, as it allows separate chroma quantization offset signaling per slice. However, using multiple slices may not be desirable or functional in some applications, and the control offered is still somewhat coarse.

[0004] Depending on the application and content, being able to independently control the quality of some color components can be crucial to improving overall quality, compression ratios, and overall user experience. For example, some areas may be characterized by texture differences or noise characteristics among the color components, while emphasizing color edges may be somewhat more important than enhancing that information in luminance. Also, for 4:4:4 applications such as video display sharing and remote computing, it may be desirable to encode RGB content, where the importance, and therefore the desired control, of the red and blue components tends to be greater than that of the chroma components in the YUV domain. Also, one may wish to encode mixed video content, which is a combination of synthetic content and natural images or video, such as in computer graphics and computer applications. In this scenario, having the ability to control the chroma quantization parameter could significantly impact coding performance and subjective quality, given the differences in the characteristics of the natural and synthetic content and the possibility that the natural content was originally a 4:2:0 image that was upconverted for display in 4:4:4.

[0005] What is needed is a method that allows for more control over chroma quantization parameters compared to existing codecs, and allows for this support to be extended to all common color formats (e.g., YUV, RGV, YCoCg, or YCoCg-R) and all common color sampling schemes (e.g., 4:2:0, 4:2:2, 4:4:4, or 4:4:4:4), as well as various bit depths for each component. Such a method should allow for signaling and modifying chroma QP offset information within a coding block in a more flexible manner, without imposing any restrictions on color formats or sampling formats. Summary of the Invention

[0006] To provide a video coding system that allows for more flexible specification of chroma quantization parameters (QPs), some embodiments of the present invention provide a method for signaling additional quantization-group-specific chroma QP offset values. In some embodiments, each quantization group explicitly specifies its own set of chroma QP offset values. In some embodiments, a table of possible sets of chroma QP offset values ​​is specified in a picture or slice header area, and each quantization group uses an index to select an entry from the table to determine its own set of chroma QP offset values. The chroma QP offset values ​​at the quantization group level are then used to determine chroma QP values ​​for pixel blocks or pixel groups within the quantization group. In some embodiments, the chroma QP values ​​of the quantization group are used together with the luma QP and chroma QP offset values ​​of the blocks already specified at higher levels in the video coding hierarchy.

[0007] Some embodiments associate chroma QP offset specifications with quantization groups (QGs) that contain one or more video data units. In some embodiments, each QG is associated with its own set of chroma QP offset specifications, and in some embodiments, the set of chroma QP offset specifications associated with a QG is coded or incorporated into the coding structure of the video data units in the QG.

[0008] To further reduce overhead or bit usage, some embodiments specify all available offset values ​​for individual components, or combined values ​​for both components, at a higher level, e.g., in the sequence parameter set (SPS), picture parameter set (PPS), or current slice header. In some embodiments, the higher-level syntax header (SPS / PPS / slice header) lists various possible offset values ​​in a table format, with each entry in the table assigned an index. Then, at the coding unit / quantization group level, some embodiments specify only the index of the desired quantization offset value. Such an offset may be independent of the offset value specified in the PPS or slice header, or conversely, may be added to the offset value specified in the PPS or slice header. To reduce bitstream size, some embodiments limit the number of entries in the table to a maximum value.

[0009] In other embodiments, the encoder uses a different method to select and assign additional quantization group-specific chroma QP offset values. In some embodiments, the encoder performs a pre-analysis step in which it performs a region-level analysis. In some embodiments, it identifies different regions in an image made up of different video content types. In some embodiments, different regions with different types of video content are assigned different chroma QP offset values ​​or placed in different quantization groups. In some embodiments, it distinguishes graphics content from actual video content. In some embodiments, it distinguishes 4:4:4 video content originally coded in 4:4:4 format from 4:4:4 video content upsampled from 4:2:0 format. In some embodiments, it distinguishes video content that may have originally been at a different bit depth. In some embodiments, these characteristics of the video content, in addition to their relationships across color components and rate control information, are used to determine the quantization levels or quantization relationships between all color components.

[0010] The above Summary is intended to serve as a brief introduction to some embodiments of the present invention. It is not intended to introduce or outline all of the inventive subject matter disclosed herein. The following Detailed Description and the Figures referred to in the Detailed Description will provide detailed descriptions of the embodiments described in the Summary and other embodiments. Therefore, a complete review of the Summary, Detailed Description, and Figures is necessary to understand all embodiments described herein. [Brief explanation of the drawings]

[0011] The novel features of the invention are set forth in the appended claims, but for purposes of illustration, certain embodiments of the invention are set forth in the following drawings. [Figure 1] FIG. 1 shows a hierarchical video coding structure 100 containing chroma quantization groups, each with its own set of chroma QP offset specifications. [Figure 2a] FIG. 10 illustrates several methods for encoding a set of chroma QP offset values ​​for a chroma quantization group. [Figure 2b] FIG. 10 illustrates several methods for encoding a set of chroma QP offset values ​​for a chroma quantization group. [Figure 2c] FIG. 10 illustrates several methods for encoding a set of chroma QP offset values ​​for a chroma quantization group. [Figure 3] FIG. 1 illustrates an exemplary picture header or picture parameter set (PPS) specifying chroma quantization group definitions. [Figure 4] FIG. 10 illustrates an exemplary coding tree unit that may be in a chroma quantization group. [Figure 5] FIG. 10 illustrates the specification of additional chroma QP offsets within a quantization group. [Figure 6] A diagram illustrating the specification of additional chroma QP offsets within a quantization group using another method for specifying chroma QP offset values ​​for two chroma components. [Figure 7] FIG. 1 conceptually illustrates a process for determining chroma QP values ​​from a video bitstream that allows for additional chroma QP offset specifications. [Figure 8] FIG. 10 illustrates a hierarchical video coding structure that includes a table of possible chroma QP offset values ​​in a high-level header. [Figure 9] FIG. 10 illustrates an exemplary picture header or picture parameter set (PPS) that encodes a table of chroma QP offsets. [Figure 10] FIG. 10 illustrates a picture header that predictively encodes each entry in the chroma QP offset table. [Figure 11] FIG. 10 illustrates an example coding tree unit that may be in a quantization group that uses an index to look up chroma QP offset values ​​from a table in a picture header. [Figure 12] FIG. 10 illustrates a quantization group that uses an index to select an entry in a table of chroma QP offset values. [Figure 13] FIG. 1 conceptually illustrates a process for determining chroma QP values ​​from a video bitstream that implements additional chroma QP offset specifications using a table of possible chroma QP offset values. [Figure 14] FIG. 10 shows pseudocode for a picture header including options for how to specify additional chroma QP offset values. [Figure 15] FIG. 10 illustrates a pseudocode implementation for a transform unit that can specify chroma QP offset values ​​for quantization groups using one of three different methods. [Figure 16] FIG. 1 illustrates an exemplary segmentation and classification of an image. [Figure 17] FIG. 17 conceptually illustrates a process 1700 for analyzing various regions of an image and assigning chroma QP offsets accordingly. [Figure 18] FIG. 1 illustrates a typical video encoder. [Figure 19] FIG. 1 illustrates a typical video decoder. [Figure 20] FIG. 1 conceptually illustrates an electronic system in which some embodiments of the present invention may be implemented. DETAILED DESCRIPTION OF THE INVENTION

[0012] In the following description, numerous details are set forth for purposes of explanation. However, it will be understood by those skilled in the art that the present invention may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order not to obscure the description of the present invention with unnecessary detail.

[0013] To provide a video coding system that allows for more flexible specification of chroma quantization parameters (chroma QPs), some embodiments of the present invention provide a method for signaling additional quantization-group-specific chroma QP offset values. In some embodiments, each quantization group explicitly specifies its own set of chroma QP offset values. In some embodiments, a table of possible sets of chroma QP offset values ​​is specified in a picture or slice header area, and each quantization group uses an index to select an entry from the table to determine its respective set of chroma QP offset values. The quantization-group-level chroma QP offset values ​​are then used to determine the chroma QP value for each block within the quantization group. In some embodiments, the quantization group chroma QP values ​​are used together with the block's luma QP and chroma QP offset values ​​already specified at higher levels in the video coding hierarchy.

[0014] Section I below describes methods for specifying additional saturation QP offset values. Specifically, Section Ia describes methods for explicitly specifying additional saturation QP offset values ​​within a quantization group, and Section Ib describes methods for specifying a table of possible saturation QP offset values. Section II then describes various systems and methods for identifying additional saturation QP offset values ​​and assigning them to various regions of an image. Section III describes video encoder and decoder systems that implement some embodiments of the present invention, and Section IV describes computer systems on which some embodiments of the present invention may be implemented.

[0015] I. Specifying an additional saturation QP offset a. Specify additional chroma QP offsets within a quantization group Some embodiments of the present invention provide methods for specifying chroma quantization parameter offset values ​​(chroma QP offsets) for encoding a sequence of video. The methods associate chroma QP offset designations with chroma quantization groups, each of which encompasses one or more video data units (e.g., coding units in HEVC). In some embodiments, a set of chroma QP offset designations associated with a chroma quantization group are coded or incorporated into the coding structure of the video data units in the chroma quantization group. In some embodiments, the chroma QP offset designation for a chroma quantization group is applied in addition to other chroma QP offset designations specified for a video coding structure located at a higher level of the video coding hierarchy (e.g., a slice or picture) that encompasses the chroma quantization group. In some embodiments, chroma QP offsets from various levels are applied together (e.g., by adding them to the luma QP value) to determine a chroma quantization parameter (chroma QP).

[0016] In some embodiments, in addition to a luma quantization group (luma QG), a chroma quantization group (chroma QG) is defined. The luma QG also encompasses one or more video data units, but the luma QG is intended to specify a luma quantization parameter (luma QP). In some embodiments, a chroma QG may overlap or encompass one or more luma QGs. In other words, different regions within a chroma QG may belong to different luma QGs and therefore may have different luma QPs.

[0017] In accordance with some embodiments of the present invention, FIG. 1 illustrates a hierarchical video coding structure 100 in which chroma quantization groups (chroma QGs) are included, with each group having its own set of chroma QP offset specifications. The hierarchical video coding structure 100 includes multiple pictures 101-103. Among them, picture 102 includes multiple slices 111-113. Slice 112 includes multiple chroma QGs 121-123. Picture 102 has a picture parameter set (PPS) 132 that includes a set of chroma QP offset specifications. Chroma QGs 121-123 are associated with chroma QP offset sets 141-143, respectively.

[0018] Hierarchical video coding structure 100 corresponds to a sequence of video images. The sequence of video images is composed of layers of video data units at various levels of the hierarchy, with video data units at higher levels encompassing one or more video data units at lower levels. For example, a group of pictures (GOP) is a video data unit at a higher hierarchical level than a picture, a picture is a video data unit at a higher hierarchical level than a slice of a picture, a slice is a video data unit at a higher hierarchical level than a coding tree unit, and so on. In some embodiments, at least some parameters specified for a higher-level video data unit are applicable to lower-level video data units encompassed by the higher-level video data unit. For example, in some embodiments, a picture-level chroma QP offset specification for picture 102 (from PPS 132) is applicable to all chroma QGs (e.g., chroma QGs 121-123) encompassed by picture 102.

[0019] In some embodiments, the video coding structure 100 is encoded as a bitstream. Such a bitstream is based on established video coding formats, such as the HEVC / H.265 standard or the MPEG-4 AVC / H.264 standard. A picture based on the H.265 standard can include one or more slices, and each slice can have one or more coding tree units (CTUs). Each CTU may be further subdivided into blocks. H.265 also allows the definition of luma quantization groups for quantizing and dequantizing the luma component. Each quantization group allows the derivation of luma quantization parameters specific to the video data units within the quantization group. Once derived, the luma quantization parameters are used to quantize the luma DCT coefficients. Under the H.265 standard, a chroma quantization parameter is derived from the luma quantization parameter based on an offset value provided in the picture layer or slice layer of an H.265-compliant bitstream. The video coding structure 100 provides chroma QP offset signaling or specification in addition to the picture / slice layer chroma QP offsets allowed by the H.265 standard.

[0020] Chroma QGs 141-143 are defined ranges within video coding structure 100. Each of QGs ​​141-143 is associated with its own set of chroma QP offset values ​​141-143. In some embodiments, a quantization group may be a group of video data units that share the same set of QP values. In some embodiments, signaling for a chroma QP offset within a QG applies to all video data units within the QG. In some embodiments, the QP offset is applied starting from the first signaled chroma residual information and continuing thereafter. Any area preceding the signaling is not associated with the signaled chroma QP offset. In other words, a QG may be "fragmented."

[0021] In some embodiments, QG (chroma or luma) may be defined at different levels or depths of the video coding hierarchy, such as coding tree units, coding units, or transform units, which are supported by HEVC. In some embodiments, the definition of QG for chroma QP offsets inherits the definition of QG for the luma component, if available.

[0022] In some embodiments, the depth, level, and size of a QG (chroma or luma) can be flexibly specified in the bitstream and can vary from picture to picture. For example, one picture (e.g., 101) can specify its chroma QG at the top level of the coding quadtree (i.e., the QG is a CTU), while another picture (e.g., 103) can specify its chroma QG at a lower level of the coding quadtree (e.g., the QG is a coding block of the quadtree). In some embodiments, a higher-level parameter (e.g., a PPS or slice header) specifies at which level of the video coding hierarchy the picture's QG will be defined.

[0023] FIG. 1 also illustrates how the offset specified by the saturation QG is used to calculate the saturation QP value. In some embodiments, as shown in FIG. 1, a first set of saturation QP offset parameters is already signaled in the PPS 132 (and / or the header of the slice 112). In some embodiments, saturation QP offset values ​​specified at levels above the saturation QG (e.g., the PPS and / or slice header) are ignored if the QG specifies its own saturation QP offset value. In some embodiments, the saturation QP offset syntax elements at higher levels and the saturation QP offset at the QG level are considered together to reduce overhead. That is, the adaptation of the saturation QP value is performed while associating both sets of parameters simultaneously, and the signaled information may be considered a "secondary" offset. In some embodiments, the saturation QP value for the current saturation QG is calculated as follows: QPchroma[i]=QPluma+QPoffset_pps[i]+QPoffset_quant_group[i] (1) (i=0 for the first saturation component; i=1 for the second saturation component) where QPluma is the QP of the luma component corresponding to the current chroma quantization group, QPoffset_pps[i] is the QP offset of the i-th chroma component from the current PPS (or slice header), and QPoffset_quant_group[i] is the additional offset signaled at the QG level for that component. QPoffset_pps[i]+QPoffset_quant_group[i] thus constitutes the overall chroma QP offset for the i-th chroma component.

[0024] In some embodiments, the adaptation of the chroma QP value is based on chroma QP offset parameters from multiple levels of video coding hierarchy. For example, in some embodiments, the calculation of the chroma QP value considers chroma QP offset values ​​from the slice header as well as from the PPS. In some embodiments, the chroma QP value for chroma component i of the current QG is calculated as follows: QPchroma[i]=QPluma+QPoffset_pps[i] +QPoffset_slice[i]+QPoffset_quant_group[i] (2) where QPoffset_slice[i] is the QP offset of the i-th chroma component from the current slice header, QPoffset_pps[i] is the QP offset of the i-th chroma component from the current PPS, and the sum QPoffset_pps[i] + QPoffset_slice[i] + QPoffset_quantity_group[i] is the overall chroma QP offset for the i-th chroma component. In some embodiments, it is possible to optionally specify one or more additional chroma QP offset values ​​at other layers of the video coding hierarchy. To encode or decode a particular coding block, some embodiments use some or all of the chroma offset QP values ​​specified along each level of the video coding hierarchy that contains (or is applicable to) the particular coding block.

[0025] As mentioned above, the saturation QP value of a saturation QG is calculated by adding the saturation QP offset to the luma QP value applicable to the saturation QG. In some embodiments, the luma QP value corresponding to a saturation QG may vary within the saturation QG. This is because, due to overlap between the luma QG and the saturation QG, a saturation QG may contain coding units that fall into different luma QGs and therefore have different luma QP values. As a result, different coding units within a saturation QG may have different saturation QP values ​​(because the saturation QP offset applicable to the saturation QG is applied to different luma QP values ​​within the saturation QG).

[0026] In the example of FIG. 1 , chroma QG 121 has four corresponding luma QP values ​​(QP luma) because chroma QG 121 overlaps with four different luma QGs 171-174. These four luma QP values ​​for chroma QG 121 result in four possible chroma QP values ​​after applying the chroma QP offsets (QPoffset_pps, QPoffset_slice, QPoffset_quantity_group) from PPS offset 132 and QG1 offset 141. Thus, a coding unit within chroma QG 121 can have one of these four possible chroma QP values, depending on the underlying luma QG within which the coding unit resides. Similarly, chroma QG 123 overlaps with two different luma QGs 181-182, and a coding unit within chroma QG 123 can have one of two possible chroma QP values, depending on the underlying luma QG within which the coding unit resides.

[0027] On the other hand, chroma QG 122 has only one corresponding luma QP value because chroma QG 122 is entirely contained within luma QG 175 (or contains the exact same set of coding units as luma QG 175), so all coding units in chroma QG 122 have the same luma QP value after applying the chroma QP offset.

[0028] Because there are two chroma components for each luma component for most video coding formats (e.g., YCbCr), in some embodiments, each chroma QP offset for a quantization group is a set of values ​​that includes instructions for calculating two offset values ​​for the two chroma components. For some embodiments, Figures 2a-2c illustrate multiple methods for encoding the set of offset values ​​for the QG 141 of Figure 1. Some embodiments encode the set of chroma QP offset values ​​using only one of these methods. Some embodiments select different methods for different QGs based on the specific characteristics of the QGs.

[0029] Figure 2a illustrates a set of saturation QP offset values ​​as two independent offset values ​​241 and 242. These two values ​​are used directly as the saturation QP offsets for component [0] (251) and component [1] (252). In some embodiments, this method of encoding saturation QP offsets is selected when the two saturation components have little correlation with each other. Another example of this method of encoding saturation QP offset values ​​is described in more detail below with reference to Figure 5.

[0030] Figure 2b shows a set of offset values ​​that are coded as one value 243 that is used simultaneously as a saturation QP offset by both saturation components (253 and 254). In some embodiments, this method is selected when the two saturation components are very similar in their relationship to the luma component. Another example of this method for coding saturation QP offset values ​​is described in more detail below with reference to Figure 6.

[0031] 2c illustrates a set of offset values ​​that are coded as a direct offset value 244 and a differential value 245 based on the direct offset. In this example, the direct offset value 244 is directly applied as the saturation QP offset for the first saturation component (255), while the sum of the differential value 245 and the direct value 244 is used as the saturation QP offset for the second saturation component (256). In some embodiments, this method is selected when two saturation components differ in relation to the luma component by a small offset that can be inexpensively coded in a bitstream of only a few bits. This method codes the second saturation QP offset (for component [1]) in relation to the first saturation QP offset. That is, the second saturation QP offset is then predicted from the first saturation QP offset (for component [0]). In some embodiments, the saturation QP value for the first saturation component is calculated as follows: QPchroma[0]=QPluma+QPoffset_pps[0]+QPoffset_quant_group[0] (3)

[0032] The chroma QP value for the second chroma component is calculated as follows: QPchroma[1]=QPluma+QPoffset_pps[1]+QPoffset_quant_group[0] +QPoffset_quant_group[1] (4) (i=0 for the first saturation component; i=1 for the second saturation component)

[0033] As noted above, some embodiments use chroma QP offset values ​​from multiple different layers of a video coding hierarchy to derive a final chroma QP value. For some embodiments that use chroma QP offset values ​​from both the PPS and the slice header, the chroma QP value for the first chroma component is calculated as follows: QPchroma[0]=QPluma+QPoffset_pps[0]+QPoffset_slice[0] +QPoffset_quant_group[0] (5)

[0034] The chroma QP value for the second chroma component is calculated as follows: QPchroma[1]=QPluma+QPoffset_pps[1]+QPoffset_slice[1] +QPoffset_quant_group[0]+QPoffset_quant_group[1] (6)

[0035] As noted above, in some embodiments, the definition of the luma quantization group and / or the chroma quantization group is specified by parameters at the picture level. FIG. 3 illustrates an exemplary picture header or PPS 300 that specifies the definition of the chroma quantization group. The exemplary picture header 300 is associated with picture 102 of video coding structure 100. The picture header 300 is described by pseudocode modified from the H.265 standard to accommodate the additional chroma QP offset (i.e., the adaptation of the chroma QP value). In some embodiments, the pseudocode for a video standard (e.g., the H.265 standard or a modified standard) describes the operations required of a video decoder when processing a bitstream compliant with that video standard. The pseudocode also describes the operations required of a video encoder when generating a bitstream compliant with that video standard.

[0036] For illustrative purposes, pseudocode for picture header 300 is shown in Figure 3 as black lines 311-313. Lines 311-313 allow for additional chroma QP offset values ​​and define chroma quantization groups for chroma QP offsets in picture 102. Specifically, the parameter "additional_chroma_qp_offset" on line 311 informs the decoder that there will be additional chroma QP offset specifications in the bitstream. If this variable is not set for a particular picture, the bitstream will not include bits to specify additional chroma QP offsets for that picture to avoid wasting bits.

[0037] The parameter "chroma_qp_offset_max_depth" on line 313 defines the level (and therefore the size or hierarchical depth) of the chroma QP. This parameter can be set equal to the size of the entire coding tree unit (CTU) or as small as the size of the smallest possible coding unit in the bitstream. In some embodiments, additional chroma QP offsets can be specified and signaled at any desired level (e.g., at the CTU level, the chroma-defined quantization group level, the coding unit level, the transform unit level, etc.).

[0038] In some embodiments, instead of defining quantization groups specifically for chroma QP offsets, the bitstream uses the parameter "diff_cu_qp_delta_depth", which also defines quantization groups for luma QP. In some embodiments, if a parameter to define quantization groups is not available, the same QP for luma is assigned to the whole picture and no QP adaptation for luma is allowed.

[0039] 4 illustrates an example coding tree unit 400 that may be within a quantization group. The coding tree unit 400 is described by pseudocode modified from H.265 pseudocode to accommodate additional chroma QP offsets. The coding tree unit 400 is within a quantization group 122, which is within a slice 112 of a picture 102.

[0040] The pseudocode for coding tree unit 400 is shown in black lines 411-413, which are added to determine whether the coding tree unit is part of a QG. Specifically, line 411 uses the parameter "additional_chroma_qp_offset" (e.g., from picture header 300) to indicate whether additional chroma information is allowed. The parameter "chroma_qp_offset_max_depth" is compared to the variable "log2CbSize" to determine whether coding tree unit 400 is within a quantization group (e.g., quantization group 122). If so, the pseudocode sets the variable "IsCrCuQpOffsetCoded" to 0 in line 412. In some embodiments, this initializes the starting point of the chroma quantization group.

[0041] 5 is a diagram illustrating an additional chroma QP offset specification within QG 122. As discussed above with reference to FIGS. 3 and 4, QG 122 is defined by picture header 300 to include coding tree unit 400. The additional chroma QP offset is specified within transform unit 500 of coding tree unit 400. Transform unit 500 is described by pseudocode modified from H.265 pseudocode to accommodate the additional chroma QP offset.

[0042] Pseudocode for transform unit 500 is shown in black lines 511-519, which are added to specify additional chroma QP offsets. Specifically, line 511 uses the parameter "additional_chroma_qp_offset" to indicate whether additional chroma information is allowed. The variable "IsCrCuQpOffsetCoded" is used to indicate whether chroma QP offset information needs to be specified (or received) in transform unit 500. If the chroma QP offset values ​​for QG122 are already coded, there is no need to specify the chroma QP offset values ​​again.

[0043] If QG 122 has not yet coded a set of chroma QP offset values ​​(i.e., the variable "IsCrCuQpOffsetCoded" is 0), then in lines 512-517, transform unit 500 specifies chroma QP offset values ​​for the two chroma components. In this case, the transform unit specifies the set of chroma QP offsets as two independent signed values, each signaled with a magnitude ("cu_chroma_cmp0_qp_offset_abs" or "cu_chroma_cmp1_qp_offset_abs") and a sign flag ("cu_chroma_cmp0_qp_delta_sign_flag" and "cu_chroma_cmp0_qp_delta_sign_flag"). The pseudocode then sets the variable "IsCrCuQpOffsetCoded" to 1, indicating that chroma QP offset values ​​for this quantization group have already been specified.

[0044] As discussed above with reference to Figures 2a-2b, in alternative embodiments, the quantization group specifies chroma QP offset values ​​for the two chroma components in a different manner. Figure 6 illustrates the specification of additional chroma QP offsets in QG122 using an alternative method for specifying chroma QP offset values ​​for the two chroma components. Figure 6 shows transform unit 600 described by pseudocode similar to that for transform unit 500, with the only difference being that lines 611-616 specify only one chroma QP offset value (magnitude + sign) for both chroma components. In some embodiments, since the importance of the two color components will remain the same in most cases, specifying one chroma QP offset value for both chroma components is sufficient. Signaling of one or two such parameters could be predetermined or signaled at various higher syntax levels, such as the SPS, PPS, or slice header.

[0045] For some embodiments, Figure 7 conceptually illustrates a process 700 for determining chroma QP values ​​from a video bitstream that allows for additional chroma QP offset specifications. In some embodiments, process 700 is performed by a video decoder that uses the process to dequantize chroma components when decoding a video bitstream for display. In some embodiments, the process begins when the decoder receives a video bitstream and begins decoding a particular video picture for display or other purposes.

[0046] At 705, process 700 processes parameters in a picture header or PPS of a particular video picture. As described above with reference to Figure 3, in some embodiments, the picture header or PPS of a video picture includes a flag (e.g., "additional_chroma_qp_offset") to determine whether additional chroma QP offsets are allowed for the video picture. The picture header or PPS also identifies the layer of the video hierarchy (e.g., by setting the variable "chroma_qp_offset_max_depth") at which the additional chroma QP offsets are to be defined.

[0047] Next, the process identifies (at 710) a higher-level chroma QP offset value. In some embodiments, this higher-level chroma QP offset value is a picture-level offset coded in the picture header (or as part of the PPS). In some embodiments, this higher-level chroma QP offset value is a slice-level offset coded in the slice header. Some embodiments identify multiple higher-level chroma QP offset values, including both picture-level and slice-level chroma QP offset values.

[0048] The process then determines (at 720) whether additional chroma QP offsets are allowed or available for this particular video picture and / or slice. If additional chroma QP offsets are not available, the process proceeds to 750. If additional chroma QP offsets are available, the process proceeds to 730.

[0049] At 730, the process determines whether the start of a saturation quantization group has been reached. In some embodiments, the process checks whether it is located at a level of the video hierarchy that has been identified as a saturation quantization group. If the process is not located at the start of a saturation quantization group (e.g., already located within a saturation quantization group), the process proceeds to 750. If the process is located at the start of a saturation quantization group, the process proceeds to 740. Examples of operations 720 and 730 are discussed with reference to FIG. 4 above.

[0050] The process identifies a chroma QP offset value for the chroma quantization group at 740. In some embodiments, the chroma QP offset is explicitly coded within the chroma quantization group, as discussed above with reference to Figures 5 and 6.

[0051] The process then (at 750) identifies luma QP values ​​for the saturation quantization groups. As noted above, in some embodiments, the luma QP values ​​are set according to the luma quantization groups, which may or may not be the same as the saturation quantization groups. Depending on the signaling, there may be more or fewer luma quantization groups than saturation quantization groups. In some embodiments, a luma quantization group may contain multiple saturation quantization groups, or vice versa. In some embodiments, the saturation and luma quantization groups may overlap each other. Thus, different coding units within the same saturation quantization group may have different luma QPs based on the luma quantization group.

[0052] Next, the process calculates (at 760) the chroma QP value. For a decoder, some embodiments calculate the chroma QP value from the identified luma QP value and the identified individual chroma QP offsets. In some embodiments, this is achieved by adding all of the identified chroma QP offsets (from the slice / picture level and the QG level) to the luma QP value, as shown above as equations (1) through (6).

[0053] The process then determines (at 770) whether the end of the picture has been reached (if the higher level chroma QP offsets are for the entire picture) or the end of the slice has been reached (if the higher level chroma QP offsets are for a slice). If so, process 700 ends. If not, process 700 returns to 730 to process the next quantization group.

[0054] As described above with reference to Figures 1 through 6, chroma QP values ​​are predictively coded by using offsets from luma QP values. In some embodiments, the offset values ​​themselves are also predictively coded by offsets from each other, e.g., a QG-level offset is an offset from a slice- and / or picture-level offset, and / or an offset value for one chroma component is coded as an offset from another chroma component. In some embodiments, the chroma QP offset is further predicted from chroma values ​​or offsets of neighboring coding units or coding blocks, or from chroma values ​​or offsets of co-located coding units or coding blocks in neighboring video pictures, since they are likely to be sufficiently similar to the coding units or coding blocks of the current chroma quantization group. In some embodiments, no prediction is performed for at least some quantization groups. In such cases, the chroma QP value is explicitly coded (rather than as an offset) so that the QP parameter for the luma component is ignored (since it does not need to be offset from luma).

[0055] In some embodiments, a flag is used to indicate that a set of chroma QP offset values ​​from an adjacent quantization group will be used for the current quantization group. In some embodiments, this adjacent quantization group is spatially located to the left or above the current quantization group. For example, in some embodiments, a flag "cu_qp_update_signal" is used to indicate whether chroma QP offset values ​​from an adjacent quantization group will be used. In some embodiments, the flag "cu_qp_update_signal" is signaled before the "cu_chroma_qp_offset_abs" parameter in line 612 of FIG. 6.

[0056] If the flag is '1', the current quantization group will provide updates to specify its own saturation QP offset values. If the flag is '0', the current quantization group will not update its own set of saturation QP offset values, but will inherit saturation QP offset values ​​from the last specified set of saturation QP offset values ​​(e.g., from the adjacent quantization group to the left) or from another previously specified saturation QP offset value (e.g., from the adjacent quantization group above or from another adjacent quantization group). If adjacent saturation QP offset values ​​are not available, some embodiments use default QP offset values ​​from the PPS and / or slice header.

[0057] In some embodiments, the flag "cu_qp_update_signal" may take on additional possible values ​​to handle different options for specifying saturation QP offset values. For example, in some embodiments, if the flag is "0," the saturation QP offset values ​​from the neighboring quantization group to the left are used; if the flag is "1," the saturation QP offset values ​​from the neighboring quantization group above are used; and if the flag is "2," the current quantization group will explicitly specify a new set of saturation QP offset values. Otherwise, the current quantization group will use default QP offset values ​​from the PPS and / or slice header. In some embodiments, the saturation QP offset values ​​inherited by the current quantization group are based on the average value of the saturation QP offset values ​​of at least two (e.g., left and above) neighboring quantization groups.

[0058] To further reduce overhead, some embodiments specify that these additional chroma QP offsets only fall within a small range of values, namely, values ​​between −x and x. Doing so alters the entropy coding process (in the case of Context Adaptive Binary Arithmetic (CABAC) coding or when using a “max-limited” universal variable length coding scheme) by changing the expected statistics of the information to be signaled. In some embodiments, the value (i.e., range) of x is predetermined for the entire sequence or signaled at a higher syntax level, such as the PPS, SPS, or slice header. Some embodiments achieve this by specifying x directly, or by specifying the value log2(x) if x is a power of 2. Some embodiments specify x by separating the magnitude, i.e., abs(x), from the sign of x. In CABAC, the value of abs(x) corresponds to the cMax parameter required in the binarization process.

[0059] b. Specify additional saturation QP offsets in the table To further reduce overhead and bit usage, some embodiments specify all possible offset values ​​for individual components, or combined values ​​for both components, in a higher-level syntax, such as in a sequence parameter set (SPS) or picture parameter set (PPS), or in the current slice header. In some embodiments, the higher-level header (SPS / PPS / slice header) lists the various possible offset values ​​in a table format, with each entry in the table assigned an index. Then, at the coding unit / quantization group level, some embodiments specify only the index of the desired quantization offset value. Such an offset may be independent of the offset value specified in the PPS or slice header, or conversely, may be added to the offset value specified in the PPS or slice header. To reduce bitstream size, some embodiments limit the number of entries in the table to a maximum value.

[0060] 8 illustrates a hierarchical video coding structure 800 that includes a table 890 of possible saturation QP offset values ​​coded in a high-level header. A lower-level saturation QG in the video coding structure then uses the index to select one of the possible saturation QP offset values ​​from table 890 to calculate a saturation QP value. Video coding structure 800 is similar to video coding structure 100. Video coding structure 800 includes multiple pictures 801-803. Among them, picture 802 includes multiple slices 811-812. Slice 811 includes multiple saturation QGs 821-823. Picture 802 has a picture parameter set (PPS) 831 that includes a set of saturation QP offset specifications applicable to all saturation QGs encompassed by picture 802. Also, as discussed above with reference to Figure 1 and equations (1) and (2), some embodiments specify a slice-level saturation QP offset (not shown) and specify that the adaptation of saturation QP values ​​is based on saturation QP offset parameters from multiple levels of the video coding hierarchy. Unlike saturation QGs 121-123 of Figure 1, which specify their own sets of saturation QP offset values, saturation QGs 821-823 each select a set of saturation QP offset values ​​from table 890.

[0061] Table 890 is an array containing multiple entries. Each entry stores a set of chroma QP offsets that can be selected by any quantization group in the picture. In this example, table 890 contains entries 891 through 895, which correspond to chroma QP offset sets A, B, C, D, and E, respectively. In some embodiments, each entry may be selected by any number of quantization groups, or none at all. In the example of FIG. 8, QG 822 and QG 823 both select QP offset set A (891), and QG 821 selects chroma QP offset set C (893). In some embodiments, the encoder determines which and how many chroma QP offset sets to include in the table to minimize bitrate.

[0062] Once the set of chroma QP offset values ​​is identified from table 890, the calculation of the chroma quantization parameters is similar to that of Figure 1. In the example of Figure 8, luma QP value 851 (from the four luma QGs overlapping chroma QG 821) is applicable to chroma QG 821, luma QP value 852 (from the same luma QG) is applicable to chroma QG 822, and luma QP value 853 (from the two luma QGs overlapping chroma QG 823) is applicable to QG 823. Adding luma QP value 851, chroma QP offset 831 (for picture 802 and / or slice 811), and chroma QP offset C (retrieved from table entry 893 for QG 821) results in chroma QP value 861 for QG 821. Adding luma QP value 852, chroma QP offset 831, and chroma QP offset A (retrieved from table entry 891) yields chroma QP value 862 for QG 822. Adding luma QP value 853, chroma QP offset 831, and chroma QP offset A (retrieved from table entry 891) yields chroma QP value 863 for QG 823.

[0063] In some embodiments, a table of chroma QP offsets is encoded within the header area of ​​a coded video picture. Figure 9 illustrates an exemplary picture header or PPS 900 that encodes the table 890. The picture header 900 is described by pseudocode modified from the H.265 standard to accommodate the additional chroma QP offsets.

[0064] The pseudocode for picture header 900 is shown by black lines 911-917, which are added to define the quantization groups for the chroma QP offsets as well as to encode table 890. Specifically, the parameter "additional_chroma_qp_offset" in line 911 informs the decoder that an additional chroma QP offset specification is planned for picture 802, and the parameter "chroma_qp_offset_max_depth" in line 913 defines the level (and thus the size or hierarchical depth) for the QPs in picture 802. Lines 914-916 of the pseudocode then define the chroma QP offset values ​​for each entry (891-895) of table 890. As shown, each entry in the table is assigned a chroma QP offset value for the first component (“chroma_cmp0_qp_offset[k]”) and a chroma QP offset value for the second component (“chroma_cmp1_qp_offset[k]”).

[0065] Because the two saturation components for each entry in the saturation QP offset table are likely to be correlated, in some embodiments, the saturation QP offset value of one saturation component is used to predict the saturation QP offset value of the other saturation component. In other words, for the kth entry in the table, if chroma_cmp0_qp_offset[k] represents the offset value of the first saturation component and chroma_cmp1_qp_offset[k] represents the offset value of the second saturation component, then the saturation QP offset for the second saturation component of the kth entry is calculated as follows: chroma_cmp1_qp_offset[k]=chroma_cmp0_qp_offset[k] +delta_chroma_cmp1_qp_offset[k] (7)

[0066] That is, instead of sending the full offset parameter, i.e., chroma_cmp1_qp_offset[k], some embodiments send a differential parameter, i.e., delta_chroma_cmp1_qp_offset[k], to calculate the offset for the second chroma QP offset, chroma_cmp1_qp_offset[k]. Figure 10 shows a picture header 1000 that encodes each entry (891-895) of chroma QP offset table 890 (at rows 1015 and 1016) as chroma_cmp0_qp_offset[k] and delta_chroma_cmp1_qp_offset[k] according to equation (7).

[0067] There are other ways to predictively code the chroma QP offset table to reduce bit usage. For example, in some embodiments, the entries in the chroma QP offset table are predictively coded with respect to each other, such that all but one entry is predicted from the other entries. One example is to code each entry following the first entry in the table as a differential value predicted from the previous entry in the table. In some embodiments, the first entry is an explicit QP. In some embodiments, the first entry is itself an offset and therefore also a differential.

[0068] 11 illustrates an example coding tree unit 1100 that may be in a quantization group that uses chroma QP offset values ​​from a table in a picture header. The coding tree unit 1100 is described by pseudocode modified from H.265 pseudocode to accommodate the additional chroma QP offset. The coding tree unit 1100 is in the quantization group 821 of slice 811. Slice 811 is in picture 802, and its header or PPS includes table 890. The pseudocode for coding tree unit 1100 is identical to the pseudocode for coding tree unit 400 of FIG. 4 because, in some embodiments, there is no difference between a coding tree unit in a quantization group that explicitly incorporates chroma QP offset values ​​and a coding tree unit in a quantization group that uses a set of chroma QP offset values ​​from a table.

[0069] Pseudocode for coding tree unit 1100 is shown in black lines 1111-1113, which are added to determine whether the coding tree unit is part of a QG. Specifically, line 1111 indicates whether additional chroma information is allowed using the parameter "additional_chroma_qp_offset." The parameter "chroma_qp_offset_max_depth" is compared to the variable "log2CbSize" to determine whether coding tree unit 1100 is within a chroma quantization group. For some embodiments, this also initializes the starting point of the chroma quantization group.

[0070] Figure 12 illustrates a quantization group that uses an index to select an entry in a table of chroma QP offset values. As discussed above, quantization group 821 includes coding tree unit 1100, which in turn includes transform unit 1200. In Figure 12, transform unit 1200 is described by pseudocode modified from H.265 pseudocode to accommodate the additional chroma QP offsets.

[0071] Pseudocode for transform unit 1200 is shown in black lines 1211-1214, which are added to specify additional chroma QP offsets. Specifically, line 1211 indicates whether additional chroma information is allowed using the parameter "additional_chroma_qp_offset." The variable "IsCrCuQpOffsetCoded" indicates whether chroma QP offset information needs to be specified (or received) in transform unit 1200. If chroma QP offsets for QG821 are already coded, there is no need to specify the chroma QP offset values ​​again. If QG821 does not already code a set of chroma QP offset values ​​(i.e., the variable "IsCrCuQpOffsetCoded" is 0), transform unit 1200 in line 1212 specifies an index "cu_chroma_qp_offset_table_index" to select an entry from table 890. In this example, the index value is set to select the chroma QP offset value stored in entry C (893) of table 890.

[0072] For some embodiments, Figure 13 conceptually illustrates a process 1300 for determining chroma QP offset values ​​from a video bitstream that implements additional chroma QP offset specifications using a table of possible chroma QP offset values. In some embodiments, process 1300 is performed by a video decoder that uses the process to dequantize chroma components when decoding a video bitstream for display or other purposes. In some embodiments, process 1300 begins when the decoder receives a video bitstream, and in some embodiments, begins decoding a particular video picture.

[0073] At 1305, process 1300 processes parameters in the picture header or PPS of a particular video picture. In some embodiments, the picture header includes a flag for determining whether additional chroma QP offsets are allowed for the video picture. The picture header also includes parameters for identifying a layer of the video hierarchy for which quantization groups for the additional chroma QP offsets are to be defined.

[0074] Next, the process identifies (at 1310) a higher-level chroma QP offset value. In some embodiments, this higher-level chroma QP offset value is a picture-level offset coded in the picture header (or as part of the PPS). In some embodiments, this higher-level chroma QP offset value is a slice-level offset coded in the slice header. In some embodiments, multiple higher-level chroma QP offset values ​​are identified, including both picture-level and slice-level chroma QP offset values.

[0075] The process then determines (at 1320) whether additional chroma QP offsets are allowed or available for this particular video picture or slice. If additional chroma QP offsets are not available, the process proceeds to 1350. If additional chroma QP offsets are available, the process proceeds to 1325 and receives chroma QP offset table entries from the bitstream.

[0076] Next, the process determines (at 1330) whether it has reached the start of a quantization group. In some embodiments, the process checks whether it is located at a level of the video hierarchy that has been identified as a quantization group. If the process is not located at the start of a quantization group (e.g., already located inside a QG), the process proceeds to 1350. If the process is located at the start of a quantization group, the process proceeds to 1335.

[0077] At 1335, the process determines whether there are any residual chroma coefficients to code. In some embodiments, if there are no residual chroma coefficients, then no offsets (or their associated indicators) are signaled at all. Signaling begins when the first non-zero transform coefficient for a chroma block is encountered, and from that point until the end of the chroma quantization group, the chroma QP offsets are active. The chroma QP offsets are 0 until the first non-zero transform coefficient of a chroma block is encountered (thus, regions with no chroma coefficients will not have chroma QP offset signaling). If there are residual chroma coefficients to code, the process proceeds to 1340. Otherwise, the process proceeds to 1350.

[0078] At 1340, the process selects one of the entries in the chroma QP offset table as storing a set of chroma QP offset values ​​for the quantization group. In some embodiments, this operation involves receiving an index from the bitstream and selecting an entry from the chroma QP offset table using the received index. In some embodiments, such as those that predictively encode the chroma QP offset values ​​in the table, this process includes recovering the chroma QP offset values ​​(for both chroma components) from predictions or difference values.

[0079] The process then (at 1350) identifies luma QP values ​​for the quantization groups. As noted above, in some embodiments, the luma QP values ​​are defined for the same quantization groups as the quantization groups for the chroma QP values. In some embodiments, the quantization groups for the luma QP and the quantization groups for the chroma QP are defined independently.

[0080] Next, the process calculates (at 1360) a chroma QP value. In some embodiments, the chroma QP value is calculated from the identified luma QP value and from each identified chroma QP offset. In some embodiments, this is accomplished by adding all identified chroma QP offsets (from the slice / picture level and the QG level) to the luma QP value, as shown in equations (1) through (6) above.

[0081] The process then determines (at 1370) whether the end of the picture has been reached (if the higher level chroma QP offset is for the entire picture) or the end of the slice has been reached (if the higher level chroma QP offset is for a slice). If so, process 1300 ends. If not, process 1300 returns to 1330 to process the next quantization group.

[0082] 5, 6, and 12 introduce multiple different methods that a quantization group can use to specify a set of chroma QP offset values. In some embodiments, quantization groups in different pictures or slices may use different methods to specify chroma QP offset values. In some embodiments, the encoder selects the best method it deems necessary for the current picture or slice, for increased flexibility and reduced coding overhead.

[0083] For some embodiments, Figure 14 illustrates pseudocode for a picture header 1400 that includes options for how to specify additional chroma QP offset values. Picture header 1400 is similar to picture header 900 in that it includes the flag "additional_chroma_qp_offset" (at line 1411) and the flag "chroma_qp_offset_max_depth" (at line 1413). Picture header 1400 also includes entries for chroma QP offset table 890 (at lines 1415-1417). However, unlike picture header 900, picture header 1400 also specifies the method by setting "chroma_qp_offset_method" (at line 1414).

[0084] Figure 15 shows a pseudocode implementation for a transform unit 1500 that can specify chroma QP offset values ​​for a quantization group using one of three different methods. If the method flag "chroma_qp_offset_method" is set to 0 (at line 1512), transform unit 1500 uses index "cu_chroma_qp_offset_table_index" to select an entry from table 890 and calculates the chroma QP offset value for QG 821 as in Figure 12. If the method flag is set to 1 (at line 1514), transform unit 1500 encodes two independent chroma QP offset values ​​for the two chroma components (using both magnitude and sign flags) as in Figure 5. If the method flag is set to 2 (at line 1522), transform unit 1500 encodes only one chroma QP offset value for both chroma components as in Figure 6.

[0085] II. Assigning additional chroma QP offsets In other embodiments, the encoder uses other methods to identify and assign additional chroma QP offset values. In some embodiments, the encoder analyzes images in a video sequence with the goal of identifying optimal QP values ​​for quantization (e.g., to optimally balance quality and bitrate). Some embodiments analyze various regions within an image with the goal of identifying quantization groups that can be optimally encoded with a common set of chroma QP values.

[0086] In some embodiments, a pre-analysis step is performed in which the encoder performs a region-level analysis (e.g., per NxM block when N=M=4, or based on object segmentation) to extract, for each color component within the region, intensity (e.g., luminance mean or value, and color saturation), hue, variance / activity / texture characteristics, noise characteristics, motion characteristics (e.g., motion vectors and / or predicted distortion values).

[0087] Because different types of video content may be combined within the same video stream or within the same video image, some embodiments identify different regions within an image of different video content types. In some embodiments, different regions with different types of video content are assigned different chroma QP offset values ​​or assigned to different quantization groups. Some embodiments distinguish graphics content from actual video content. Some embodiments distinguish 4:4:4 video content originally coded in 4:4:4 format from 4:4:4 video content upsampled from 4:2:0 format. Some embodiments distinguish video content that may have originally been at a different bit depth. Some embodiments use these characteristics of the video content, in addition to their relationships across color components and rate control information, to determine quantization levels or quantization relationships between all color components.

[0088] 16 illustrates an exemplary partitioning and classification of an image 1600. The image is partitioned into coding tree units, and each coding tree unit is subdivided into coding units. The various coding units of image 1600 are partitioned into four different chroma QP offset groups. In some embodiments, the four different chroma QP offset groups are signaled in the PPS, and the encoder can select the appropriate group, which will be signaled at the quantization group level. In some embodiments, the chroma QP offsets are explicitly signaled within each quantization group at the time of encoding.

[0089] The selection of the chroma QP offset value is determined by the relative visual complexity or texture between the luma and chroma components. The quantization groups of image 1600 are assigned to different categories 1611-1614 according to their level of texture. For example, areas that appear monotonous across all color components belong to the first category 1611, areas with high texture color components and monotonous luma belong to the second category 1612, areas with monotonous color information and high texture luma belong to the third category 1613, and areas with high texture across all three components belong to the fourth category 1614. In some embodiments, the encoder may create additional subcategories for each category based on motion and intensity. In some embodiments, additional categorization takes into account differences between the two chroma components themselves.

[0090] These categorizations could then be used to specify different sets of saturation QP offsets for different categories. For example, in some embodiments, the first category 1611 (all monotonic) is assigned a zero or negative QP offset. In this scenario, a negative saturation QP offset allows for improved saturation quality allocation in these regions, since the improved saturation quality may be more pronounced depending on the characteristics of all color components. For the second category 1612 (monotonic luma and highly textured color information), a larger, positive QP offset might be used. In this case, a larger saturation QP allows for better control of the saturation components so that they do not overwhelm the luma components, while some texture masking from the saturation information can still be used to ensure better subjective quality. For the third category 1613 (highly textured luma but monotonic saturation), some embodiments use a larger, negative saturation QP offset to help ensure slightly better color quality. Some other embodiments use a larger positive saturation QP offset to improve the effect of luma texture masking. For the fourth category 1614 (high texture across all three components), some embodiments use a zero or positive saturation QP offset to improve the effect of luma texture masking and avoid wasting bits on an insignificant improvement in subjective quality of saturation. Note that the exact saturation QP offset value assigned to a quantization group depends on the corresponding luma QP value for that quantization group. Other decisions may be made depending on subjective quality, objective quality, or bitrate determination mechanisms in other encoders.

[0091] In some embodiments, if a limited number of chroma QP offsets are permitted or desired (because apart from determining the regions and their desired QP offset sets, and the increased bit overhead that their specification may require), an additional decision is made based not only on the occurrence of each offset set but also on its perceived subjective or objective quality impact.

[0092] Since only the most significant offset sets are signaled at this time, some embodiments then use these criteria to "prune" the number of chroma QP offset sets that are likely to be signaled in the bitstream. Regions that fall into the "prune" category may still be assigned offset sets that are close enough to the desired value. Given some subjective or objective weighting process, this is a possible compromise whereby the specified chroma QP offsets are "sub-optimal" for all individual region types grouped together, but are likely to yield the best overall / aggregate performance given bitrate limitations.

[0093] For real-time applications where pre-analysis is not possible, some embodiments use a "pre-fixed (pre-fix) determination" of the QP offset. In some embodiments, the determination is made based on analysis of data from previous pictures that have already been coded. In some embodiments where the chroma QP offset is explicitly signaled for every quantization group, the determination is made on the fly or dynamically for every actively coded block based not only on its selected luma quantization parameter and its various spatio-temporal and color characteristics, but also on coding information from past blocks (i.e., what was the bitrate, the relationship between luma and chroma, or the introduced distortion of other similar or neighboring blocks that were previously coded). In some embodiments, the luma quantization parameter is derived together with the chroma QP offset, given the same types of bitrate and content characteristic relationships and conditions.

[0094] Some embodiments further improve the selection of a saturation QP offset for a current picture by examining its neighboring pictures. Specifically, some embodiments examine not only how these neighboring pictures were coded or will be coded, but also how these neighboring pictures are temporally related to the current picture and its regions. For example, if the current picture is to be coded as a "key" picture (e.g., as an intra or "periodic" refresh picture), some embodiments will code an additional saturation QP offset to improve the saturation quality of the current picture. Conversely, if the current picture is a disposable picture or a picture of less importance in the coding hierarchy, some embodiments will refrain from assigning an additional saturation QP offset in a manner that would result in a higher bitrate (or will not use an additional saturation QP offset at all). For other types of pictures, some embodiments use a more moderate change in the saturation QP offset to achieve a better compromise between bitrate and quality.

[0095] In some embodiments, different chroma QP offset parameters are specified for layers of different scalability, e.g., resolution, quality, bit depth, etc. Some embodiments apply additional chroma QP offsets to 3D / multiview applications where different chroma QP offsets are assigned to different views. For example, stereo masking could be considered for assigning and predicting chroma QP offsets to reduce overhead and maximize subjective quality in such systems.

[0096] For some embodiments, Figure 17 conceptually illustrates a process 1700 for analyzing various regions of an image and assigning chroma QP offsets accordingly, which in some embodiments is performed by a video encoder.

[0097] The process begins when a video picture is received (at 1710). The video picture may be a raw image in an uncompressed video stream or a decoded picture from a compressed video bitstream. The process then identifies (at 1720) regions within the picture that share common characteristics that allow coding units within the region to share a common set of chroma QP offset values. For example, some embodiments identify regions originally coded in 4:2:0 format as regions where higher QP values ​​(and thus positive chroma QP offsets) can be used to reduce bitrate. Conversely, some embodiments identify regions originally coded in 4:4:4 format as regions requiring lower QP values ​​(and thus lower or negative QP offset values) to maintain quality.

[0098] The process then (at 1730) analyzes the spatio-temporal characteristics of each region. In some embodiments, this analysis includes analyzing the region's texture / variance / activity, format (such as 4:4:4 or 4:2:0), noise, motion, bit depth, or other characteristics that may affect the relationship between luma and chroma or the relationship between the two chroma components.

[0099] The process then assigns (at 1740) a chroma QP offset value based on the analysis of the region. In some embodiments, the process first identifies an appropriate chroma QP value for the region based on the analysis performed at 1730, and then subtracts the selected luma QP value from the identified chroma QP value to determine a desired overall chroma QP offset value. Process 1740 also, in some embodiments, decomposes the overall chroma QP offset value into chroma QP offset values ​​at various levels of the video coding hierarchy (e.g., picture, slice, and quantization group). Some embodiments identify chroma QP offset values ​​for quantization groups by subtracting chroma QP offset values ​​for higher-level syntax elements from the overall chroma QP offset value. In some embodiments, this operation is performed by a rate controller, as described with reference to FIG. 18 below.

[0100] The process then populates (at 1750) a saturation QP offset table with the identified saturation QP offset values ​​for the quantization groups in the region. The process 1700 also encodes the corresponding index values ​​within the quantization groups, as discussed in Section Ib above. In some embodiments that explicitly specify saturation QP offset values, the process 1700 encodes the saturation QP offset values ​​within the quantization groups themselves, as discussed in Section Ia above.

[0101] The process then determines (at 1760) whether there are any more regions in the picture that have not yet been analyzed. If so, the process returns to 1720. If not, the process 1700 ends.

[0102] III.Video System 18 illustrates a general video encoder 1800 (e.g., an HEVC encoder) for some embodiments of the present invention. The encoder 1800 receives a video stream from a video source 1805 and produces a compressed and encoded bitstream 1895 that is to be stored and / or transmitted.

[0103] The video encoder includes a transform module 1810, a quantization module 1815, an entropy encoder 1820, an inverse quantization module 1825, an inverse transform module 1830, a deblocking filter 1840, a sample adaptive offset (SAO) filter 1845, a frame buffer 1850, a rate control module 1835, and a prediction module 1890. The prediction module 1890 includes a motion prediction module 1860, a motion compensation module 1865, an intra prediction module 1870, and a mode decision module 1880. The video encoder 1800 also includes a video display 1855 in some embodiments.

[0104] The quantization module 1815 is a module that quantizes transform coefficients (e.g., DCT) from the transform module 1810 using a quantization parameter. In some embodiments, the transform module 1810 may be completely bypassed (e.g., under a transform-bypass mode supported by HEVC), so that the quantization module 1815 receives image values ​​and image prediction error values ​​without transformation. The quantization module 1815 applies different QP values ​​to different regions / blocks for each color component. The QP values ​​used by the quantization module 1815 are coded into the bitstream 1895 as a luma QP value and a chroma QP offset. In some embodiments, the QP values ​​used by the quantization module 1815 are determined and provided by the rate control module 1835.

[0105] The rate control module 1835 controls the bitrate of the encoded video bitstream by controlling the QP values ​​used by the quantization module 1815 (and the inverse quantization module 1825). In some embodiments, the rate control module 1835 provides different QP values ​​to the quantization module 1815 for different quantization groups. To identify the most suitable QP values ​​(for luma and chroma) for quantization (e.g., the best balance between quality and bitrate for a given video sequence), the rate control module 1835 of some embodiments performs at least some of the analysis described in Section II above to arrive at a luma QP value for each luma quantization group and a set of chroma QP offset values ​​for each chroma quantization group. In some embodiments, the rate controller 1835 also uses the analysis to identify regions and assign (luma and chroma) quantization groups.

[0106] In some embodiments, the rate controller 1835 decomposes the set of chroma QP offset values ​​into sets of chroma QP offset values ​​at various levels of the video coding hierarchy. In some embodiments, at least some of the set of chroma QP offset values ​​are further decomposed into predictions between two chroma components as shown in equations (1) through (7) above. In some embodiments, the QP offset values ​​at lower levels are identified by subtracting the QP offset values ​​at higher levels from the overall chroma QP offset value. For example, in some embodiments, the chroma QP offset at a quantization group level is calculated as follows: QPoffset_quant_group[i]=QPchroma[i]-QPluma -QPoffset_pps[i]-QPoffset_slice[i] (8)

[0107] These sets of chroma QP offset values ​​are then provided to the entropy encoder 1820 to be encoded into the bitstream 1895. In some embodiments, the rate controller 1835 compiles a table of possible quantization group level offsets and provides the compiled table to the entropy encoder 1820.

[0108] The entropy encoder module 1820 performs entropy encoding (e.g., CABAC) on the quantized transform coefficients, parameters, and other information and packages them into the bitstream 1895. In some embodiments, the entropy encoder module 1820 receives chroma QP offset values ​​from the rate controller module 1835 and entropy encodes them into the bitstream. In some embodiments, the entropy encoder 1820 encodes the chroma QP offset values ​​as a table into the PPS area of ​​the picture, as described in Section Ib above. In some embodiments, the entropy encoder encodes the chroma QP offset values ​​into individual quantization groups, as described in Section Ia above.

[0109] The deblocking module 1840 is a loop filter module that improves the visual quality and prediction performance of a video codec system by smoothing sharp edges formed between coded blocks. In some embodiments, the deblocking module 1840 performs its deblocking operation using an overall saturation QP value calculated from all applicable saturation QP offsets (i.e., by including quantization group and picture / slice saturation QP offsets). In some other embodiments, the deblocking module 1840 considers only some specified saturation QP offsets or only considers saturation QP offsets from PPS or slice headers. Some embodiments control the deblocking process based on a signaled saturation QP offset value. For example, some embodiments adjust deblocking parameters to compensate for the saturation QP offset value. Deblocking may also be performed outside the loop as a post-process. In some embodiments, the calculated overall saturation QP value or some saturation QP offset is used by other types of in-loop or out-of-loop post-processing, such as SAO (e.g., SAO filter 1845), adaptive loop filter (ALF), or noise addition.

[0110] 19 illustrates a general video decoder 1900 (e.g., an HEVC decoder) for some embodiments of the present invention. The decoder 1900 receives a bitstream 1905, decodes it, and displays it via a display module 1965. The decoder 1900 includes an entropy decoder 1910, an inverse quantization module 1920, an inverse transform module 1930, an intra prediction module 1950, an inter prediction module 1980, a deblocking module 1960, an SAO module 1970, and a frame buffer 1975.

[0111] The entropy decoder module 1910 performs entropy decoding on the input bitstream to extract transform coefficients and parameters for other modules in the decoder 1900. Specifically, chroma quantization information stored in the input bitstream 1905 is extracted by the entropy decoder 1910 and sent to the inverse quantization module 1920. In some embodiments, the chroma quantization information includes an additional chroma QP offset value extracted from the PPS, a table in the slice header, or from the quantization group itself.

[0112] The deblocking module 1960 of the decoder 1900 performs a similar function to the deblocking module 1840 of the encoder 1800. Specifically, the deblocking module 1960 also performs the deblocking operation using a final saturation QP value calculated from all applicable saturation QP offsets (i.e., by including the quantization group and picture / slice saturation QP offsets). In some other embodiments, the deblocking module 1960 considers only a portion of the specified saturation QP offsets, or only a portion of the saturation QP offsets from the PPS or slice header. In some embodiments, the calculated overall saturation QP value or a portion of the saturation QP offsets is used by other types of in-loop or out-of-loop post-processing, such as SAO (i.e., SAO filter 1970), ALF, or noise addition.

[0113] IV. Electronic Systems Many of the features and applications described above are implemented as software processes specified as a set of instructions recorded on a computer-readable storage medium (also referred to as a computer-readable medium). When these instructions are executed by one or more computers or processing units (e.g., one or more processors, processor cores, or other processing units), they cause the processing units to perform the operations indicated in the instructions. Examples of computer-readable media include, but are not limited to, CD-ROMs, flash drives, random access memory (RAM) chips, hard drives, erasable programmable read-only memories (EPROMs), electrically erasable programmable read-only memories (EEPROMs), etc. Computer-readable media does not include carrier waves or electrical signals passing over wireless or wired connections.

[0114] As used herein, the term "software" is intended to include firmware resident in read-only memory and applications stored in magnetic storage devices that can be loaded into memory for processing by a processor. Also, in some embodiments, multiple software inventions may be implemented as subparts of a larger program while remaining separate software inventions. Also, in some embodiments, multiple software inventions may be implemented as individual programs. Finally, any combination of individual programs that together implement a software invention as described herein is within the scope of the present invention. In some embodiments, a software program, when installed to operate on one or more electronic systems, defines one or more specific machine implementations that perform the operations of the software program.

[0115] 20 conceptually illustrates an electronic system 2000 in which some embodiments of the present invention may be implemented. The electronic system 2000 may be a computer (e.g., a desktop computer, a personal computer, a tablet computer, etc.), a phone, a PDA, or any other type of electronic device. Such an electronic system may include various types of computer-readable media and interfaces for various other types of computer-readable media. The electronic system 2000 may include a bus 2005, a processing unit 2010, a graphics processing unit (GPU) 2015, a system memory 2020, a network 2025, a read-only memory 2030, a permanent storage device 2035, input devices 2040, and output devices 2045.

[0116] Bus 2005 collectively represents all system, peripheral, and chipset buses that communicatively connect the many internal devices of electronic system 2000. For example, bus 2005 communicatively connects processing unit 2010 to read-only memory 2030, GPU 2015, system memory 2020, and permanent storage device 2035.

[0117] From these various memory units, the processing unit 2010 retrieves instructions to execute and data to process in order to perform the processes of the present invention. The processing unit may be a single processor, or in another embodiment, a multi-core processor. Some instructions are passed to and executed by the GPU 2015. The GPU 2015 can offload various computations or complement the image processing provided by the processing unit 2010.

[0118] The read-only memory (ROM) 2030 stores static data and instructions needed by the processing unit 2010 and other modules of the electronic system. The permanent storage device 2035, on the other hand, is a read-write memory device. This device is a non-volatile memory unit that stores instructions and data even when the electronic system 2000 is turned off. In some embodiments of the invention, the permanent storage device 2035 is a mass storage device (such as a magnetic or optical disk and its corresponding disk drive).

[0119] In other embodiments, the permanent storage device is a removable storage device (such as a floppy disk, flash memory device, and the like and its corresponding disk drive). Like the permanent storage device 2035, the system memory 2020 is a read / write memory device. However, unlike the permanent storage device 2035, the system memory 2020 is a volatile read / write memory, such as a random access memory. The system memory 2020 stores some instructions and data needed by the processor at runtime. In some embodiments, the processes of the present invention are stored in the system memory 2020, the permanent storage device 2035, and / or the read-only memory 2030. For example, various memory units contain instructions for processing a multimedia clip according to some embodiments. From these various memory units, the processing unit 2010 retrieves instructions to execute and data to process in order to execute the processes of some embodiments.

[0120] The bus 2005 also connects to input devices 2040 and output devices 2045. The input devices 2040 allow a user to communicate information and select commands to the electronic system. The input devices 2040 include alphanumeric keyboards, pointer devices (also called "cursor control devices"), cameras (e.g., webcams), microphones or similar devices for receiving voice commands, etc. The output devices 2045 display images generated by the electronic system or otherwise output data. The output devices 2045 include printers and display devices, such as cathode ray tubes (CRT) or liquid crystal displays (LCD), as well as speakers or similar audio output devices. Some embodiments include devices such as a touchscreen that function as both an input and an output device.

[0121] 20, bus 2005 connects electronic system 2000 to network 2025 via a network adapter (not shown). In this manner, the computer may be part of a network of computers (such as a local area network ("LAN"), a wide area network ("WAN"), or an intranet), or may be part of a network of networks, such as the Internet. Any or all of the components of electronic system 2000 may be used in connection with the present invention.

[0122] Some embodiments include electronic components, such as a microprocessor, storage devices, and memory that store computer program instructions in a machine-readable or computer-readable medium (also referred to as a computer-readable storage medium, machine-readable media, or machine-readable storage media). Some examples of such computer-readable media include RAM, ROM, read-only compact discs (CD-ROMs), recordable compact discs (CD-Rs), rewritable compact discs (CD-RWs), read-only digital versatile discs (e.g., DVD-ROMs, dual-layer DVD-ROMs), various recordable / rewritable DVDs (e.g., DVD-RAM, DVD-RW, DVD+RW, etc.), flash memory (e.g., SD cards, miniSD cards, microSD cards, etc.), magnetic and / or solid-state hard drives, read-only and recordable Blu-Ray® discs, Ultra Density Optical Discs, any other optical or magnetic media, floppy disks, etc. The computer-readable medium may store a computer program executable by at least one processing unit and including a set of instructions for performing various operations. Examples of computer programs or computer code include machine code, such as produced by a compiler, and files containing higher-level code executed by a computer, electronic component, or microprocessor using an interpreter.

[0123] While the above discussion primarily refers to microprocessors or multi-core processors executing software, some embodiments are performed by one or more integrated circuits, such as application specific integrated circuits (ASICs) or field programmable gate arrays (FPGAs). In some embodiments, such integrated circuits execute instructions stored within the circuitry itself. In addition, some embodiments execute software stored within programmable logic devices (PLDs), ROM, or RAM devices.

[0124] In this specification and in any claims, the terms "computer," "server," "processor," and "memory" all refer to electronic or other technological devices. These terms exclude a human being or group of humans. In this specification, the terms display or display means mean a display on an electronic device. In this specification and in any claims, the terms "computer-readable medium," "computer-readable medium," and "machine-readable medium" are strictly limited to tangible, physical objects that store information in a form that can be read by a computer. These terms exclude any wireless signals, wired download signals, and any other ephemeral signals.

[0125] While the present invention has been described with reference to numerous specific details, those skilled in the art will recognize that the present invention may be embodied in other specific forms without departing from the spirit of the present invention. Additionally, several figures (including FIGS. 7, 13, and 17) conceptually illustrate processes. Specific operations in these processes may not occur in the exact order shown and described. Specific operations may not occur as a continuous sequence of operations, and different embodiments may perform different specific operations. Furthermore, processes may be implemented using multiple sub-processes or as part of a larger macroprocess. Accordingly, those skilled in the art will recognize that the present invention is not limited to the illustrative details set forth above, but rather is defined by the appended claims.

Claims

1. A method for decrypting a video picture, wherein the method is Receiving an encoded video picture in a bitstream having at least a first encoding level, a second encoding level, and a third encoding level, wherein the encoded video picture includes a first set of saturation quantization parameter (QP) offset values ​​in the first encoding level and a second set of saturation QP offset values ​​in the second encoding level, each of the first and second sets of saturation QP offset values ​​providing information about the saturation QP of video units included in the corresponding encoding level, and the encoded video picture further includes one or more saturation quantization groups (QG) in the third encoding level. Based on the information contained in the first coding level or the second coding level, a range parameter is determined that specifies a range of chroma QP offset values ​​for a specific chroma QG among the one or more chroma QGs in the third coding level. Using the range parameter, determine an additional set of saturation QP offset values ​​for the specific saturation QG, Using the aforementioned additional set of saturation QP offset values, calculate the saturation QP value corresponding to the specific saturation QG, A method that includes [a certain feature].

2. A method according to claim 1, wherein calculating the saturation QP value includes combining the saturation QP offset value in the additional set with one or more luminance QP values ​​corresponding to the specific saturation QG, method.

3. A method according to claim 2, wherein at least the specific saturation QG is associated with a plurality of luminance QP values, and calculating the saturation QP value of the specific saturation QG includes calculating a plurality of different saturation QP values ​​corresponding to the plurality of luminance QP values. method.

4. The method according to claim 2, wherein at least the specific saturation QG is associated with a single luminance QP value, and calculating the saturation QP value of the specific saturation QG includes calculating a single saturation QP value corresponding to the single luminance QP value. method.

5. The method according to claim 1, further, In the bitstream, a third saturation QP offset value corresponding to the third encoding level of the encoded video picture is received. A method that includes [a certain feature].

6. The method according to claim 1, wherein the encoded video picture includes a hierarchical encoding structure, and the first and second encoding levels have a higher hierarchy of encoding levels in the hierarchical encoding structure compared to the third encoding level. Calculating the chroma QP value corresponding to the specific chroma QG includes using the first chroma QP offset value. method.

7. The method according to claim 6, further, Using the first saturation QP offset value, calculate the saturation QP values ​​for the one or more saturation QG associated with the third encoding level of the encoded video picture. A method that includes [a certain feature].

8. The method according to claim 6, wherein the first coding level corresponds to a picture level, the second coding level corresponds to a slice level, and the third coding level corresponds to any one of the coding tree unit level, coding unit level, or transformation unit level. Calculating the saturation QP value corresponding to the specific saturation QG includes using the saturation QP offset value specified in the picture parameter set (PPS) of the encoded video picture. method.

9. The method according to claim 1, further, In the bitstream, one or more indices corresponding to the one or more saturation QG of the encoded video picture are received, For at least one of the 1 or more saturation QGs, a saturation QP offset value is selected from the additional set of saturation QP offset values ​​using the index corresponding to the at least one saturation QG. A method that includes [a certain feature].

10. The method according to claim 1, wherein the range parameter includes a parameter used in the binarization process, method.

11. The method according to claim 10, wherein the parameter used in the binarization process is the cMax parameter. method.

12. The method according to claim 11, wherein the encoded video picture is encoded using Context Adaptive Binary Arithmetic (CABAC) encoding. method.

13. The method according to claim 1, wherein the range parameter is specified using magnitude and reference numeral, method.

14. The method according to claim 1, further, Decoding the encoded video picture by calculating saturation QP values ​​corresponding to one or more saturation QGs of the encoded video picture, including calculating the saturation QP values ​​corresponding to the specific saturation QGs. A method that includes [a certain feature].