RESIDUAL AND COEFFICIENT CODING FOR VIDEO CODING

MX434409BActive Publication Date: 2026-05-19BEIJING DAJIA INTERNET INFORMATION TECH CO LTD

Patent Information

Authority / Receiving Office
MX · MX
Patent Type
Patents
Current Assignee / Owner
BEIJING DAJIA INTERNET INFORMATION TECH CO LTD
Filing Date
2023-03-22
Publication Date
2026-05-19

AI Technical Summary

Technical Problem

Existing video coding technologies, such as VVC, face inefficiencies in residual and coefficient coding due to complex logic for determining binary codewords and context models, leading to increased computational requirements and reduced performance, especially for high bit-depth profiles.

Method used

Implementing fixed or variable sets of binary codewords for syntax elements like abs_remainder and dec_abs_level, using methods such as fixed Rice parameters, truncated Rice binarization, and k-th order Exp-Golomb binarization, to simplify the encoding process and reduce computational complexity.

Benefits of technology

Improves video decoding efficiency by reducing the need for complex logic in determining codewords, enhancing performance, especially for high bit-depth profiles, and optimizing the encoding of transform coefficients and residual blocks.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure MX434409B0
    Figure MX434409B0
Patent Text Reader

Abstract

Methods, devices, and non-transient, computer-readable storage media are provided for video decoding. A decoder can receive a video stream. The decoder can receive a control flag at the segment header level. The decoder can receive at least one syntax element at the segment header level. The decoder can subject the video bitstream to entropy decoding based on the control flag and the syntax element(s).
Need to check novelty before this filing date? Find Prior Art

Description

[0002] This description refers to video encoding and compression. More specifically, this description refers to improvements and simplifications of residual and coefficient coding for video encoding. BACKGROUND OF THE INVENTION

[0003] Various video coding techniques can be used to compress video data. Video coding is performed according to one or more video coding standards. Examples of video coding standards include Versatile Video Coding (VVC), Joint Scan Test Model (JEM) coding, High Efficiency Video Coding (H.265 / HEVC), Advanced Video Coding (H.264 / AVC), Moving Picture Expert Group (MPEG) coding, and similar standards. Video coding typically uses predictive methods (e.g., inter-prediction, intra-prediction, and similar methods) that take advantage of redundancy present in the images or video sequences. A major goal of video coding techniques is to compress video data into a format that uses a lower bit rate while avoiding or minimizing video quality degradation. SUMMARY OF THE INVENTION

[0004] The examples in the present description provide methods and apparatus for residual and coefficient coding in video coding.

[0005] In accordance with a first aspect of the present description, a method for video decoding is provided. The method may include a decoder that receives a video bitstream. The decoder may also receive a control flag at a segment header level. The control flag may signal whether a Rice parameter is enabled for a transform bypass segment. The decoder may also receive at least one syntax element at the segment header level. The syntax element(s) are signaled for the transform bypass segment and indicate the Rice parameter. The decoder may also subject the video bitstream to entropy decoding based on the control flag and the syntax element(s).

[0006] It should be understood that the above general descriptions and the following detailed descriptions are provided only by way of examples and explanations and are not intended to limit the present description. BRIEF DESCRIPTION OF THE DRAWINGS

[0007] The accompanying drawings, which are incorporated into and form part of this specification, illustrate examples that are consistent with this disclosure and, together with the description, serve to explain the principles of disclosure.

[0008] Figure 1 is a block diagram of an encoder, according to an example in the present description.

[0009] Figure 2 is a block diagram of a decoder, according to an example in the present description.

[0010] Figure 3A is a diagram illustrating the block divisions in a multi-type tree structure, according to an example in the present description.

[0011] Figure 3B is a diagram illustrating the block divisions in a multi-type tree structure, according to an example in the present description.

[0012] Figure 3C is a diagram illustrating the block divisions in a multi-type tree structure, according to an example in the present description.

[0013] Figure 3D is a diagram illustrating block divisions in a multi-type tree structure, according to an example in the present description.

[0014] Figure 3E is a diagram illustrating the block divisions in a multi-type tree structure, according to an example in the present description.

[0015] Figure 4 is an illustration of an image diagram with 18 by 12 luminance CTUs, according to an example in the present description.

[0016] Figure 5 is an illustration of an image with 18 by 12 luminance CTUs, according to an example in the present description.

[0017] Figure 6A is an illustration of an example of an unpermitted split of ternary tree (TT) and binary tree (BT) in VTM, according to an example in the present description.

[0018] Figure 6B is an illustration of an example of an impermissible division of TT and BT in VTM, according to an example in the present description.

[0019] Figure 6C is an illustration of an example of an impermissible division of TT and BT in VTM, according to an example in the present description.

[0020] Figure 6D is an illustration of an example of an impermissible division of TT and BT in VTM, according to an example in the present description.

[0021] Figure 6E is an illustration of an example of an impermissible division of TT and BT in VTM, according to an example in the present description.

[0022] Figure 6F is an illustration of an example of an impermissible division of TT and BT in VTM, according to an example in the present description.

[0023] Figure 6G is an illustration of an example of an impermissible division of TT and BT in VTM, according to an example in the present description.

[0024] Figure 6H is an illustration of an example of an impermissible division of TT and BT in VTM, according to an example in the present description.

[0025] Figure 7 is an illustration of a residual encoding structure for transform blocks, according to an example in the present description.

[0026] Figure 8 is an illustration of a residual encoding structure for transform omission blocks, according to an example in the present description.

[0027] Figure 9 is an illustration of two scalar quantifiers, according to an example in the present description.

[0028] Figure 10A is an illustration of a state transition, according to an example in the present description.

[0029] Figure 10B is an illustration of a quantifier selection, according to an example in the present description.

[0030] Figure 11 is an illustration of a template used to select probability models, according to the present description.

[0031] Figure 12 is an illustration of an example of a block coded in palette mode, according to the present description. / β / υιλι

[0032] Figure 13 is an illustration of a use of the palette predictor to signal palette inputs, according to the present description.

[0033] Figure 14A is an illustration of a horizontal cross-sectional scan, according to the present description.

[0034] Figure 14B is an illustration of a vertical cross-sectional scan, according to the present description.

[0035] Figure 15A is an illustration of a subblock-based index map scan for a palette, according to the present description.

[0036] Figure 15B is an illustration of a sub10 block-based index map scan for a palette, according to the present description.

[0037] Figure 16 is a method for decoding a video signal, according to an example in the present description.

[0038] Figure 17 is a method for decoding a video signal, according to an example in the present description.

[0039] Figure 18 is a diagram illustrating a computing environment along with a user interface, according to an example in the present description. DETAILED DESCRIPTION OF THE INVENTION

[0040] The exemplary embodiments, examples of which are illustrated in the accompanying drawings, will be referred to in detail below. The following description refers to the accompanying drawings, in which the same numbers in different drawings represent identical or similar elements, unless otherwise specified. The implementations presented in the following description of the exemplary embodiments do not represent all implementations consistent with the disclosure. Rather, they are only examples of apparatus and methods consistent with aspects related to the disclosure described in the accompanying claims.

[0041] The terminology used herein is intended to describe the particular forms only and not to limit the scope of this description. As used herein and in the appended claims, the singular forms “a,” “one,” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. The term “and / or,” as used herein, is also intended to refer to all possible combinations of one or more of the enumerated elements associated with it.

[0042] It is understood that, although the terms “first,” “second,” “third,” etc., may be used herein to describe various types of information, information should not be limited by such terms. These terms are used only to distinguish one type of information from another. For example, without departing from the scope of this description, first information may be referred to as second information; likewise, second information may also be referred to as first information. As used herein, the term “if” may be understood to mean “when,” “after,” or “in response to a judgment,” depending on the context.

[0043] The first version of the HEVC standard was finalized in October 2013, offering approximately a 50% reduction in bit rate or equivalent perceptual quality compared to the previous-generation H.264 / MPEG AVC video coding standard. While the HEVC standard offers significant coding improvements over its predecessor, there is evidence that superior coding efficiency can be achieved with other encoding tools compared to HEVC. Therefore, both VECG and MPEG began exploring new coding technologies for future video coding standardization. In October 2015, ITU-T VECG and ISO / IEC MPEG formed a Joint Video Exploration Team (JVET) to begin a significant study of advanced technologies that could enable substantial improvements in coding efficiency.The JVET developed a reference software called the Joint Exploration Model (JEM) by integrating several additional coding tools, in addition to the HEVC test model (HM).

[0044] In October 2017, ITU-T and ISO / IEC issued a joint Call for Proposals (CfP) for video compression with capabilities exceeding those of HEVC. In April 2018, 23 responses to the CfP were received and evaluated at the tenth JVET meeting, demonstrating a compression efficiency gain of approximately 40% compared to HEVC. Based on these evaluation results, JVET launched a new project to develop the next-generation video coding standard called Versatile Video Coding (VVC). In the same month, a reference software source code, called the VVC Test Model (VTM), was established to demonstrate a reference implementation of the VVC standard.

[0045] Like HEVC, VVC takes as its starting point the block-based hybrid video coding framework.

[0046] Figure 1 shows a general diagram of a block-based video encoder for the VVC. Specifically, Figure 1 shows a typical encoder 100. The encoder 100 has video input 110, motion compensation 112, motion estimation 114, intra / inter mode decision 116, block predictor 140, adder 128, transform 130, quantization 132, prediction-related information 142, intra-prediction 118, image buffer 120, inverse quantization 134, inverse transform 136, adder 126, memory 124, loop filter 122, entropy coding 138, and bitstream 144.

[0047] In the encoder 100, a video frame is divided into a plurality of video blocks for processing. For each given video block, a prediction is formed based on either an inter-prediction or an intra-prediction approach.

[0048] A prediction residual, which represents the difference between an actual video block, part of video input 110 and its predictor, part of block predictor 140, is sent to a transform 130 from adder 128. The transform coefficients are then sent from Transform 102 to a Quantizer 132 for entropy reduction. Subsequently, the quantized coefficients are fed to an Entropy Coding 138 to generate a compressed video bitstream. As shown in Figure 1, information related to prediction 142 and derived from an intra / inter mode decision, such as information about video block division, motion vectors (MV), reference frame index, and intra-prediction mode, is also fed through Entropy Coding 138 and stored in a compressed bitstream 144. The compressed bitstream 144 includes a video bitstream.

[0049] In the encoder 100, decoder-related circuitry is also required for pixel reconstruction for prediction purposes. First, a prediction residual is reconstructed via an Inverse Quantization 134 and an Inverse Transform 136. This reconstructed prediction residual is combined with a Block Predictor 140 to generate unfiltered reconstructed pixels for a current video block.

[0050] Spatial prediction (or “intra-prediction”) uses pixels from the samples of contiguous blocks already encoded (called reference samples) in the same video frame as the current video block to predict the current video block.

[0051] Time prediction (also referred to as “inter-prediction”) uses reconstructed pixels from already encoded video frames to predict the current video block. Time prediction reduces the inherent time redundancy in the video signal. The time prediction signal for a given encoding unit (CU) or encoding block is typically signaled by one or more MVs, which indicate the amount and direction of movement between the current CU and its time reference. In addition, if multiple reference frames are supported, a reference frame index is also sent, which is used to identify which reference frame in the reference frame storage the time prediction signal originates from.

[0052] Motion estimation 114 takes video input 110 and a signal from picture buffer 120 and sends a motion estimation signal to motion compensation 112. Motion compensation 112 takes video input 110, a signal from picture buffer 120, and a motion estimation signal from motion estimation 114 and sends a motion compensation signal to intra / inter mode decision 116.

[0053] After performing the spatial and / or temporal prediction, an intra / inter mode decision 116 in the encoder 100 chooses the best prediction mode, for example, based on the speed distortion optimization method. The block predictor 140 is then subtracted from the current video block, and the resulting prediction residual is decorrelated using the transform 130 and quantization 132. The resulting quantized residual coefficients are inversely quantized using inverse quantization 134, and inversely transformed using inverse transform 136, to form the reconstructed residual, which is then added back to the prediction block to form the reconstructed CU signal.An additional loop filter 122, such as an unblocking filter, a sample-adaptive deviation (SAO), and / or an adaptive loop filter (ALF), can be applied to the rebuilt CU before placing it in the image buffer's reference image storage 120 and using it to encode future video blocks. To form the output video bitstream 144, the encoding mode information (inter or intra), prediction mode information, motion information, and quantized residual coefficients are sent to the entropy encoding unit 138 for further compression and packaging to form the bitstream.

[0054] Figure 1 shows the block diagram of a generic hybrid block-based video coding system. The input video signal is processed block by block (called coding units (CUs)). In VTM-1.0, a CU can be up to 128 x 128 pixels. However, unlike HEVC, which divides blocks only on the basis of quaternary trees, in VVC, a coding tree unit (CTU) is divided into several CUs to accommodate various local characteristics based on quaternary / binary / ternary trees. By definition, the coding tree block (CTB) is an N x N block of samples for some value of N, such that fragmenting a component into several CTBs is a split.The CTU includes a CTB of luminance samples, two corresponding CTBs of chrominance samples for an image with three sample arrays, or a CTB of samples for a monochrome image or an image encoded using three separate color planes and syntax structures used to encode the samples. Furthermore, HEVC eliminates the concept of a multiple-split unit type; that is, the separation of the CU, prediction unit (PU), and transform unit (TU) no longer exists in VVC. Instead, each CU is always used as the basic unit for both prediction and transform without further division. In the multi-type tree structure, a CTU is first split into a quaternary tree structure. Then, each leaf node of the quaternary tree can also be split into a binary and ternary tree structure.As shown in Figures 3A, 3B, 3C, 3D and 3E, there are five types of separation: quaternary division, horizontal binary division, vertical binary division, horizontal ternary division and vertical ternary division.

[0055] Figure 3A shows a diagram illustrating the quaternary partitioning of a block in a multi-type tree structure. Figure 3B shows a diagram illustrating the vertical binary partitioning of a block in a multi-type tree structure. Figure 3C shows a diagram illustrating the horizontal binary partitioning of a block in a multi-type tree structure, according to the present description. Figure 3D shows a diagram illustrating the vertical ternary partitioning of a block in a multi-type tree structure. Figure 3E shows a diagram illustrating the horizontal ternary partitioning of a block in a multi-type tree structure.

[0056] In Figure 1, spatial and / or temporal prediction can be performed. Spatial prediction (or “intra-prediction”) uses pixels from previously encoded contiguous block samples (called reference samples) in the same video image / segment to predict the current video block. Spatial prediction reduces the inherent spatial redundancy in the video signal. Temporal prediction (also referred to as “inter-prediction” or “motion-compensated prediction”) uses reconstructed pixels from previously encoded video images to predict the current video block. Temporal prediction reduces the inherent temporal redundancy in the video signal. A temporal prediction signal for a given CU is usually signaled by one or more motion vectors (MVs) that indicate the amount and direction of motion between the current CU and its temporal reference.Similarly, if multiple reference images are supported, a reference image index is also sent, which is used to identify which reference image in the reference image storage the temporal prediction signal originates from. After spatial and / or temporal prediction, the mode decision block in the encoder chooses the best prediction mode, for example, based on the velocity distortion optimization method. The prediction block is then subtracted from the current video block, and the prediction residual is decorrelated using the transform and quantization. The quantized residual coefficients are then subjected to inverse quantization and inverse transform to form the reconstructed residual, which is subsequently added back to the prediction block to form the reconstructed CU signal.Additional loop filtering, such as an unblocking filter, adaptive off-sample (SAO) filter, and / or adaptive loop filter (ALF), can be applied to the reconstructed CU before it is placed in the reference image storage and used to encode future video blocks. To form the output video bitstream, both an encoding mode (inter or intra), as well as prediction mode information, motion information, and quantized residual coefficients are sent to the entropy encoding unit for further compression and packaging to form the bitstream.

[0057] Figure 2 shows a general block diagram of a video decoder for the VVC. Specifically, Figure 2 shows a block diagram of the typical decoder 200. The decoder 200 has bit stream 210, entropy decoding 212, inverse quantization 214, inverse transform 216, adder 218, intra / inter mode selection 220, intra-prediction 222, memory 230, loop filter 228, motion compensation 224, picture buffer 226, prediction-related information 234, and video output 232.

[0058] Decoder 200 is similar to the reconstruction-related section residing in encoder 100 of Figure 1. In decoder 200, an incoming video bitstream 210 is first decoded via Entropy Decoding 212 to derive the quantized coefficient levels and prediction-related information. The quantized coefficient levels are then processed via Inverse Quantization 214 and Inverse Transform 216 to obtain a reconstructed prediction residual. A block prediction mechanism implemented in an Intra / Inter Mode Selector 220 is configured to perform either Intra-Prediction 222 or Motion Compensation 224 based on the decoded prediction information.An unfiltered reconstructed pixel set is obtained by adding the reconstructed prediction residual from the Inverse Transform 216 and a predictive result generated by the block prediction mechanism, using an adder 218.

[0059] The reconstructed block can also be subjected to Loop Filtering 228 before being stored in Picture Buffer 226, which functions as a reference image store. The reconstructed video in Picture Buffer 226 can be sent to drive a display device and can also be used to predict future video blocks. In situations where Loop Filtering 228 is activated, a filtering operation is performed on those reconstructed pixels to derive a Reconstructed Video Output 232.

[0060] Figure 2 shows a general block diagram of a block-based video decoder. The video bitstream is first subjected to entropy decoding in the entropy decoding unit. The encoding mode and prediction information are sent to the spatial prediction unit (if inter-coding is used) or the temporal prediction unit (if inter-coding is used) to form the prediction block. The residual transform coefficients are sent to the inverse quantization unit and the inverse transform unit to reconstruct the residual block. The prediction block and the residual block are then summed. The reconstructed block may also undergo loop filtering before being stored in the reference image storage.Subsequently, the reconstructed video in the reference image storage is sent to trigger a display device, and is also used to predict future video blocks.

[0061] In general, the basic intra-prediction scheme applied in the VVC is the same as for the HEVC, except that several modules are further expanded and / or improved, e.g., subdivision intra-coding mode (ISP), expanded intra-prediction with wide-angle intra-directions, position-dependent intra-prediction combination (PDPC), and 4-lead intra-interpolation.

[0062] Image division, mosaic groups, mosaics and various CTUs in WC

[0063] In VVC, a tile is defined as a rectangular region of several CTUs within a specific tile column and a specific tile row in an image. A tile group is a group of an integer number of tiles from an image that are contained exclusively within a single NAL unit. Essentially, the concept of a tile group is the same as that of a segment, as defined in HEVC. For example, images are divided into tile groups and tiles. A tile is a sequence of several CTUs that span a rectangular region of an image. A tile group contains a series of tiles from an image. Two tile group modes are supported: the raster scan tile group mode and the rectangular tile group mode. In the raster scan tile group mode, a tile group contains a sequence of tiles in the raster scan of an image.In rectangular tile group mode, a tile group contains a series of tiles from an image that together form a rectangular region of the image. The tiles within a rectangular tile group are found in the tile group's tile raster scan order.

[0064] Figure 4 shows an example of splitting a raster scan mosaic into groups, where the image is divided into 12 individual mosaics and 3 groups of raster scan mosaics. Figure 4 includes mosaics 410, 412, 414, 416, and 418. Each mosaic has 18 CTUs. More specifically, Figure 4 shows an image with several luminance CTUs of 18 by 12 that is split into 12 individual mosaics and 3 groups of (informative) mosaics. The three groups of mosaics are as follows: (1) the first group of mosaics includes mosaics 410 and 412, (2) the second group of mosaics includes mosaics 414, 416, 418, 420 and 422, and (3) the third group of mosaics includes mosaics 424, 426, 428, 430 and 432.

[0065] Figure 5 shows an example of rectangular tile grouping of an image, where the image is divided into 24 tiles (6 tile columns and 4 tile rows) and 9 rectangular tile groups. Figure 5 includes tiles 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 550, 552, 554, and 556. More specifically, Figure 5 shows an image with several luminance CTUs of 18 by 12 that is divided into 24 tiles and 9 (informative) tile groups. A mosaic group contains mosaics, and a mosaic contains several CTUs.The 9 groups of rectangular mosaics include: (1) the two mosaics 510 and 512, (2) the two mosaics 514 and 516, (3) the two mosaics 518 and 520, (4) the four mosaics 522, 524, 534 and 536, (5) the four groups of mosaics 526, 528, 538 and 540, (6) the four mosaics 530, 532, 542 and 544, (7) the two mosaics 546 and 548, (8) the two mosaics 550 and 552, and (9) the two mosaics 554 and 556.

[0066] Large block transforms with high-frequency zero conversion in WC

[0067] In VTM4, large block transforms are enabled, with a size of up to 64 x 64, which is primarily useful for higher resolution videos, such as 1080p and 4K streams. The high-frequency transform coefficients are set to zero for transform blocks that have a size (width or height, or both width and height) equal to 64, so that only the low-frequency coefficients are retained. For example, for a transform block M x N, where M is the block width and N is the block height, when M equals 64, only the leftmost 32 columns of transform coefficients are retained. Similarly, when N equals 64, only the top 32 rows of transform coefficients are retained. When using transform skip mode for a large block, the entire block is used without converting any values ​​to zero.

[0068] Virtual Pipeline Data Units (VPDUs) in WC

[0069] Virtual pipeline data units (VPDUs) are defined as non-overlapping units in an image. In hardware decoders, multiple consecutive VPDUs are processed by multiple pipeline stages simultaneously. The VPDU size is roughly proportional to the buffer size in most pipeline stages, so it is important that VPDUs remain small. In most hardware decoders, the VPDU size can be set to the maximum transform block (TB) size. However, in VVC, the ternary tree (TT) and binary tree (BT) splitting can lead to increased VPDU sizes.

[0070] To preserve the size of VPDUs as 64x64 luminance samples, the following normative division restrictions (with syntax signaling modification) are applied in VTM5:

[0071] TT separation is not permitted for a CU with a width or height, or both a width and a height, equal to 128. For a 128xN CU with N < 64 (i.e., width equal to 128 and height less than 128), horizontal BT division is not permitted. For an Nx128 CU with N < 64 (i.e., height equal to 128 and width less than 128), vertical BT division is not permitted.

[0072] Figures 6A, 6B, 6C, 6D, 6E, 6F, 6G and 6H show examples of TT and BT partitions not allowed in VTM.

[0073] Encoding of transform coefficients in WC

[0074] The encoding of transform coefficients in VVC is similar to the encoding in HEVC and VVC are similar because both use non-overlapping coefficient groups (also called CGs or subblocks). However, there are also some differences between them. In HEVC, each CG of coefficients has a fixed size of 4x4. In VVC Draft 6, the CG size depends on the TB size. As a result, various CG sizes (1x16, 2x8, 8x2, 2x4, 4x2, and 16x1) are available in VVC. The CGs within an encoding block, and the transform coefficients within a CG, are encoded according to predefined scan orders.

[0075] To restrict the maximum number of context-coded (CCB) digits per pixel, the TB area and the video component type (e.g., luminance versus chrominance) are used to derive the maximum number of CCB digits for a TB. The maximum number of CCB digits is equal to Bozize*1.75. Here, TB_zosize indicates the number of samples within a TB after the coefficient has been zeroed out. It is important to note that the coded_sub_block_flag, which is an indicator of whether a CG contains a non-zero coefficient, is not counted for the CCB count.

[0076] Zeroing a coefficient is an operation performed on a transform block to set the coefficients located in a certain region of the transform block to zero. For example, in the current version of VVC, a 64x64 transform has an associated zeroing operation. As a result, all transform coefficients located outside the upper-left 32x32 region within the 64x64 transform block must have a value of zero. In fact, in the current version of VVC, for any transform block larger than 32 along a certain dimension, a zeroing operation is performed on the coefficients along that dimension to make the coefficients located beyond the upper-left 32x32 region have a value of 0.

[0077] In VVC transform coefficient encoding, a variable, remBinsPassl, is first set to the maximum allowed number of context-coded digits (MCCB). During the encoding process, the variable is reduced by one each time a context-coded digit is signaled. Even if remBinsPassl is greater than or equal to four, a coefficient is first signaled using the syntax of sig_coeff_flag, abs_level_gt1_flag, par_level_flag, and abs_level_gt3_flag, all of which use context-coded digits in the first step. The remaining portion of the coefficient level information is encoded with the syntax element abs_remainder using the Golomb-Rice code and derivation-coded digits in the second step.When the remBinsPassl becomes less than 4 during encoding in the first step, a current coefficient is not encoded in the first step but is instead encoded directly in the second step using the dec_abs_level syntax element with the Golomb-Rice code and derivation-encoded digits. The Rice parameter derivation process for dec_abs_level[ ] is derived as specified in Table 3. After all the aforementioned level-coding steps, the sign flags for all scan positions with sig_coeff_flag equal to 1 are finally encoded as derivation digits. This process is depicted in Figure 7 (described later). The remBinsPassl is reset for each TB.The transition from using context-coded digits for sig_coeff_flag, abs_level_gt1_flag (abs_level_gtx_flag[O]), par_level_flag, and abs_level_gt3_flag (abs_level_gtx_flag[1]) to using derivation-coded digits for the other coefficients occurs at most once per TB. For a coefficient subblock, if the remBinsPassl is less than 4 before encoding its first coefficient, the entire coefficient subblock is encoded using derivation-coded digits.

[0078] Figure 7 shows an illustration of the residual encoding structure for the transform blocks.

[0079] The unified (equal) derivation of the Rice parameter (RicePara) is used to signal the syntax of abs_remainder and dec_abs_level. The only difference is that the base level, baseLevel, is set to a value of 4 and 0 to encode abs_remainder and dec_abs_level, respectively. The Rice parameter is determined based not only on the sum of the absolute levels of the five contiguous transform coefficients of the local template, but also on the corresponding base level, as shown below: RicePara = RiceParTable[ max(min( 31, sumAbs - 5 * baseLevel), 0) ]

[0080] The syntax and associated semantics of the residual encoding in the current draft specification of VVC are illustrated in Table 1 and Table 2, respectively. The manner in which Table 1 should be read is illustrated in the appendix section of this invention, which can also be found in the VVC specification. Table 1. Syntax of the residual encoding / β / υιλι residual_coding( χθ, yO, log2TbWidth, log2TbHeight, ddx ) { Descriptor if( sps_mts_enabled_flag && cu_sbt_flag && ddx = = 0 && log2TbWidth = = 5 && log2TbHeight < 6 ) log2ZoTbWidth = 4 else log2ZoTbWidth = Min( log2TbWidth, 5 ) if( sps_mts_enabled_flag && cu_sbt_flag && ddx = = 0 && log2TbWidth < 6 && log2TbHeight = = 5 ) log2ZoTbHeight = 4 else log2ZoTbHeight = Min( log2TbHeight, 5 ) if( log2TbWidth > 0 ) last_sig_coeff_x_prefix ae(v) if( log2TbHeight > 0 ) last_sig_coeff_y_prefix ae(v) if( last_slg_coeff_x_prefix > 3 ) last_sig_coeff_x_suffix ae(v) if( last_sig_coeff_y_prefix > 3 ) last_sig_coeff_y_suffix ae(v) log2TbWidth = log2ZoTbWidth log2TbHeight = log2ZoTbHeight remBinsPassl = (( 1 « (log2TbWidth + log2TbHeight)) * 7 ) » 2 log2SbW = ( Min( log2TbWldth, log2TbHeight) < 2 ? 1 : 2 ) log2SbH = log2SbW if( log2TbWidth + log2TbHeight > 3 ) if( log2TbWidth < 2 ) { log2SbW = log2TbWidth log2SbH = 4 - log2SbW} else if( log2TbHeight < 2 ) { log2SbH = log2TbHeight log2SbW = 4 - log2SbH} numSbCoeff = 1 « (log2SbW + log2SbH ) lastScanPos = numSbCoeff lastSubBlock = ( 1 « (log2TbWidth + log2TbHeight - ( log2SbW + log2SbH )))-1 do { if( lastScanPos = = 0 ) { lastScanPos = numSbCoeff lastSubBlock- - ) lastScanPos— xS = DiagScanOrder[ log2TbWidth - log2SbW ][ log2TbHeight - log2SbH ] [ lastSubBlock ][ 0 ] yS = DiagScanOrder[ log2TbWidth - log2SbW ][ log2TbHelght - log2SbH ] [ lastSubBlock ][ 1 ] xC = ( xS « log2SbW) + DiagScanOrder[ log2SbW ][ log2SbH ][ lastScanPos ][ 0 ] yC = ( yS « log2SbH ) + DiagScanOrder[ log2SbW][ log2SbH ][ lastScanPos ][ 1 ]} while( ( xC != LastSignificantCoeffX ) | | ( yC != LastSignificantCoeffY )) if( lastSubBlock = = 0 && log2TbWidth >= 2 && log2TbHeight >= 2 && !transform_skip_flag[ xO ][ yO ][ cldx ] && lastScanPos > 0 ) LfnstDcOnly = 0 if( (lastSubBlock > 0 && log2TbWidth >= 2 && log2TbHeight >= 2) | | (lastScanPos > 7 && ( log2TbWidth = = 2 log2TbWidth = = 3 ) && log2TbWidth = = log2TbHeight)) LfnstZeroOutSIgCoeffFIag = 0 if((lastSubBlock > 0 | | lastScanPos > 0 ) && cldx = = 0 ) MtsDcOnly = 0 QState = 0 for( i = lastSubBlock; i >= 0; i— ) { startQStateSb = QState xS = DiagScanOrder[ log2TbWidth - log2SbW ][ log2TbHeight - log2SbH ] [ ¡ ][ 0 ] yS = DiagScanOrder[ log2TbWidth - log2SbW ][ log2TbHeight - log2SbH ] [ ¡ ][ 1 ] inferSbDcSigCoeffFIag = 0 if( i < lastSubBlock && i > 0 ) { sb_coded_flag[ xS ][ yS ] ae(v) inferSbDcSigCoeffFIag = 1} if( sb coded flag[ xS ][ yS ] && ( xS > 3 || yS > 3 ) && cldx == 0) MtsZeroOutSigCoeffFIag = 0 firstSigScanPosSb = numSbCoeff lastSigScanPosSb = -1 firstPosModeO = (i = = lastSubBlock ? lastScanPos : numSbCoeff - 1 ) firstPosModel = firstPosModeO for( n = firstPosModeO; n >= 0 && remBinsPassl >= 4;n—){ xC = ( xS « log2SbW) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS « log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( sb_coded_flag[ xS ][ yS ] && ( n > 0 | | linferSbDcSigCoeffFIag ) && ( xC != LastSignificantCoeffX | yC != Last SignificantCoeffY )) { sig_coeff_flag[ xC ][ yC ] ae(v) remBinsPassl — if( sig_coeff_flag[ xC ][ yC ]) inferSbDcSigCoeffFIag = 0} if( sig_coeff_flag[ xC ][ yC ]) { abs_level_gtx_flag[ n ][ 0 ] ae(v) remBinsPassl — if( abs_level_gtx_flag[ n ][ 0 ]) { par_level_flag[ n ] ae(v); remBinsPassl- - abs_level_gtx_flag[ n ][ 1 ] ae(v) remBinsPassl - -} if( lastSigScanPosSb = = -1 ) lastSigScanPosSb = n firstSigScanPosSb = n} AbsLevelPassl [ xC ][ yC ] = sig_coeff_flag[ xC ][ yC ] + par_level_flag[ n ] + abs_level_gtx_flag[ n ][ 0 ] + 2 * abs_level_gtx_flag[ n ][ 1 ] if( sh_dep_quant_used_flag ) QState = QStateTransTable[ QState ][ AbsLevelPassl [ xC ][ yC ] & 1 ] firstPosModel = n - 1} for( n = firstPosModeO; n > firstPosModel; n— ) { xC = ( xS « log2SbW) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS « log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( abs_level_gtx_flag[ n ][ 1 ]) abs remainderj n ] ae(v) AbsLevel[ xC ][ yC ] = AbsLevelPassl [ xC ][ yC ] +2 * abs_remainder[ n ]} for( n = firstPosModel; n >= 0;n— ) { xC = ( xS « log2SbW) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS « log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( sb_coded_flag[ xS ][ yS ]) dec_abs_level[ n ] ae(v) if( AbsLevel[ xC ][ yC ] > 0 ) { if( lastSigScanPosSb = = -1 ) lastSigScanPosSb = n firstSigScanPosSb = n}; if( sh_dep_quant_used_flag ) QState = QStateTransTable[ QState ][ AbsLevel[ xC ][ yC ] & 1 ]} signHiddenFlag = sh_sign_data_hiding_used_flag && (lastSigScanPosSb - firstSigScanPosSb > 3 ? 1 : 0 ) for( n = numSbCoeff - 1; n >= 0; n- - ) { xC = ( xS « log2SbW) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS « log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( ( AbsLevelf xC ][ yC ] > 0 ) && (¡signHiddenFlag | | ( n != firstSigScanPosSb ))) coeff_sign_flag[ n ] ae(v)} if( sh_dep_quant_used_flag) { QState = startQStateSb for( n = numSbCoeff - 1;n >= 0: n- - ) { xC = ( xS « log2SbW) + DiagScanOrderf log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS « log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( AbsLevelf xC ][ yC ] > 0 ) TransCoeffLevelf xO ][ yO ][ cldx ][ xC ][ yC ] = ( 2 * AbsLevelf xC ][ yC ] - ( QState > 1 ? 1 : 0 ) ) * (1 - 2 * coeff_sign_flag[ n ]) QState = QStateTransTable[ QState ][ AbsLevel[ xC ][ yC ] & 1 ]} else { sumAbsLevel = 0 for( n = numSbCoeff - 1; n >= 0: n- - ) { xC = ( xS « log2SbW) + DiagScanOrderf log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS « log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( AbsLevelf xC ][ yC ] > 0 ) { TransCoeffLevelf xO ][ yO ][ cldx ][ xC ][ yC ] = AbsLevelf xC ][ yC ] * (1 - 2 * coeff_sign_flag[ n ]); if( signHiddenFlag ) { sumAbsLevel += AbsLevelj xC ][ yC ] if( ( n = = firstSigScanPosSb ) && ( sumAbsLevel % 2 ) = = 1 )) TransCoeffLevel[ xO ][ yO ][ cldx ][ xC ][ yC ] = -TransCoeffLevelj xO ][ yO ][ cldx ][ xC ][ yC ]}}}}}} Table 2. Semantics of residual coding The matrix AbsLevel[xC][yC] represents an array of absolute values ​​of transform coefficient levels for the current transform block, and the matrix AbsLevelPassl[xC][yC] represents an array of partially reconstructed absolute values ​​of transform coefficient levels for the current transform block. The array indices xC and yC specify the location of the transform coefficient (xC, yC) within the current transform block. When the value of AbsLevel[xC][yC] is not specified in subclause 7.3.11.11, it is inferred to be 0. When the value of AbsLevelPassl[xC][yC] is not specified in subclause 7.3.11.11, it is inferred to be 0. The variables CoeffMin and CoeffMax, which specify the maximum and minimum values ​​of the transform coefficient, are derived as follows: CoeffMin = -( 1 << 15)(189) CoeffMax = (1 « 15)-1(190) The QStateTransTable[ ][ ] array is specified as follows: QStateTransTable[ ][ ] = {{ 0, 2}, { 2, 0}, {1,3}, { 3, 1}}(191) last_sig_coeff_x_prefix specifies the prefix of the column position of the last significant coefficient in the scan order within a transform block. Values ​​of last_sig_coeff_x_prefix must be in the range of 0 to ( log2ZoTbWidth << 1 ) - 1, inclusive. When last_sig_coeff_x_prefix is ​​not present, it is inferred to be equal to 0. Iast_sig_coeff_y_prefix specifies the row position prefix of the last significant coefficient in the scan order within a transform block. The values ​​of last_sig_coeff_y_prefix must be in the range of 0 to (log2ZoTbHeight « 1 ) - 1, inclusive. When last_sig_coeff_y_prefix is ​​not present, it is inferred to be equal to 0. Iast_sig_coeff_x_suffix specifies the suffix for the column position of the last significant coefficient in the scan order within a transform block. The values ​​of last_sig_coeff_x_suffix must be in the range of 0 to (1 « ((last_sig_coeff_x_prefix » 1)-1))-1, inclusive. The position of the last significant coefficient column in the scan order within a LastSignificantCoeffX transform block is derived as follows: If last_sig_coeff_x_suffix is ​​not present, the following applies: LastSignificantCoeffX = last_sig_coeff_x_prefix (192) Otherwise (last_sig_coeff_x_suffix is ​​present), the following applies: LastSignificantCoeffX = (1 « ((last_sig_coeff_x_prefix >> 1) - 1)) * (193) (2 + (last_sig_coeff_x_prefix & 1)) + last_sig_coeff_x_suffix. last_sig_coeff_y_suffix specifies the suffix of the row position of the last significant coefficient in the scan order within a transform block. The values ​​of last_sig_coeff_y_suffix must be in the range of 0 to (1 « ((last_sig_coeff_y_prefix >> 1) - 1)) - 1, inclusive. The row position of the last significant coefficient in the scan order within a LastSignificantCoeffY transform block is derived as follows: If last_sig_coeff_y_suffix is ​​not present, the following applies: LastSignificantCoeffY = last_sig_coeff_y_prefix (194) Otherwise (last_sig_coeff_y_suffix is ​​present), the following applies: LastSignificantCoeffY = (1 « ((last_sig_coeff_y_prefix >> 1 ) - 1 )) * (195) (2 + ( last_sig_coeff_y_prefix & 1 )) + last_sig_coeff_y_suffix sb_coded_flag[ xS ][ yS ] specifies the following for the subblock at location ( xS, yS ) within the current transform block, where a subblock is an array of transform coefficient levels: When sb_coded_flag[ xS ][ yS ] is equal to 0, it is inferred that all levels of the subblock transform coefficient at location ( xS, yS ) are equal to 0. When sb_coded_flag[ xS ][ yS ] is not present, it is inferred to be equal to 1. sig_coeff_flag[ xC ][ yC ] specifies, for the location of the transform coefficient ( xC, yC ) within the current transform block, whether the level of the corresponding transform coefficient at location ( xC, yC ) is non-zero, as follows: If sig_coeff_flag[ xC ][ yC ] is equal to 0, the level of the transformed coefficient at location ( xC, yC ) is set to a value equal to 0. Otherwise (sig_coeff_flag[ xC ][ yC ] is equal to 1), the level of the transform coefficient at location ( xC, yC ) has a non-zero value. When sig_coeff_flag[ xC ][ yC ] is not present, it is inferred as follows: If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 0 or sh_ts_residual_coding_disabled_flag is equal to 1, the following applies: - If (xC, yC) is the last significant location (LastSignificantCoeffX, LastSignificantCoeffY) in the scan order or all of the following conditions are true, then it follows that sig_coeff_flag[ xC ][ yC ] is equal to 1: - (xC&((1 « log2SbW) - 1), andC&((1 « log2SbH) - 1)) is equal to (0, 0). - inferSbDcSigCoeffFIag is equal to 1. - sb_coded_flag[ xS ][ yS ] is equal to 1. - Otherwise, it is inferred that sig_coeff_flag[ xC ][ yC ] is equal to 0. Otherwise (transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to 0), the following applies: - If all the following conditions are true, it follows that sig_coeff_flag[ xC ][ yC ] is equal to 1: - ( xC & ((1 « log2SbW) - 1 ), andC & ( (1 « log2SbH )-1)) is equal to ( (1 « log2SbW ) - 1, (1 « log2SbH ) - 1 ). - inferSbSigCoeffFIag is equal to 1. - sb_coded_flag[ xS ][ yS ] is equal to 1. - Otherwise, it is inferred that sig_coeff_flag[ xC ][ yC ] is equal to 0. abs level gtx flaqj n ][ j ] specifies whether the absolute value of the transform coefficient level (at scan position n) is greater than (j « 1 ) + 1. When abs_level_gtx_flag[ n ][ j ] is not present, it is inferred to be equal to 0. par_level_flag[ n ] specifies the level parity of the transform coefficient at scan position n. When par_level_flag[ n ] is not present, it is inferred to be equal to 0. abs_remainder[n] is the remaining absolute value of the level of a transform coefficient encoded with the Golomb-Rice code at scan position n. When abs_remainder[n] is not present, it is inferred to be equal to 0. It is a bitstream compliance requirement that the value of abs_remainder[ n ] be restricted in such a way that the corresponding value of TransCoeffLevelj xO ][ yO ][ cldx ][ xC ][ yC ] is in the range from CoeffMin to CoeffMax, inclusive. dec_abs_level[n] is an intermediate value that is encoded with the Golomb-Rice code at scan position n. Given the ZeroPos[n] value derived in Table 3 during the parsing of dec_abs_level[n], the absolute value of the level of the transform coefficient at location (xC, yC) AbsLevelj [xC][yC] is derived as follows: If dec_abs_level[ n ] is not present or is equal to ZeroPosj n ], AbsLevelj xC ][ yC ] is set to a value equal to 0. Otherwise, if dec_abs_level[ n ] is less than ZeroPosj n ], AbsLevelj xC ][ yC ] is set to a value equal to dec_abs_level[ n ] + 1; Otherwise (dec_abs_level[ n ] is greater than ZeroPosj n ]), AbsLevelj xC ][ yC ] is set to a value equal to dec_abs_level[ n ]. It is a bitstream compliance requirement that the value of dec_abs_level[ n ] be restricted in such a way that the corresponding value of TransCoeffLevelj xO ][ yO ][ cldx ][ xC ][ yC ] is in the range from CoeffMin to CoeffMax, inclusive. coeff_sign_flag[ n ] specifies the sign of the level of a transform coefficient for the scan position n, as follows: If coeff_sign_flag[ n ] is equal to 0, the level of the corresponding transform coefficient has a positive value. Otherwise (coeff_sign_flag[ n ] is equal to 1), the level of the corresponding transform coefficient has a negative value. When coeff_sign_flag[ n ] is not present, it is inferred to be equal to 0. The value of CoeffSignl_evel[ xC ][ yC ] specifies the sign of the level of a transform coefficient at location ( xC, yC ), as follows: If CoeffSignl_evel[ xC ][ yC ] is equal to 0, the level of the corresponding transform coefficient is equal to zero. Otherwise, if CoeffSignl_evel[ xC ][ yC ] is equal to 1, the level of the corresponding transform coefficient has a positive value. Otherwise (CoeffSignl_evel[ xC ][ yC ] is equal to -1), the level of the corresponding transform coefficient has a negative value. Table 3. Rice parameter derivation process for abs_remainder[ ] and dec_abs_level[ ] The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location ( xO, yO ) specifying the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient ( xC, yC ), the binary logarithm of the transform block width log2TbWidth and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] if( yC < (1 « log2TbHeight) - 1 ) locSumAbs+= AbsLevel[ xC + 1 ][yC + 1 ] (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} locSumAbs = Clip3( 0, 31, locSumAbs - baseLevel *5) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in the following table. When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) « cRiceParam Table 4. Specification of cRiceParam based on locSumAbs locSumAbs 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cRiceParam 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 2 locSumAbs 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 cRiceParam 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3

[0081] Residual coding for WC transform skip mode

[0082] Unlike HEVC, where a single residual coding scheme is designed to encode both transform coefficients and transform omission coefficients, in VVC two separate residual coding schemes are used for the transform coefficients and the transform omission coefficients (i.e., residuals), respectively.

[0083] In transform bypass mode, the statistical characteristics of the residual signal differ from those of the transform coefficients, and no energy compaction is observed around the low-frequency components. The residual encoding is modified to account for the different signal characteristics of the transform bypass (spatial) residual, which include:

[0084] the absence of signaling of the last x / y position;

[0085] coded_sub_block_flag coded for each subblock, except for subblock DC when all of the above flags are equal to 0;

[0086] the context modeling of sig_coeff_flag with two contiguous coefficients;

[0087] par_level_flag only uses one context model;

[0088] an additional greater than 5, 7, 9 indicators;

[0089] modified derivation of the Rice parameter for the remaining binarization; and

[0090] Context modeling for the sign flag is determined based on the left and top contiguous coefficient values, and the sign flag is parsed after sig_coeff_flag to keep all context-coded digits together.

[0091] As shown in Figure 8 (described later), the syntax elements sigcoefíflag, coefí sign flag, abs level gtl flag (abs_level_gtx_flag[OJ], par level flag are interleaved from one residual sample to another in the first step, followed by the bit planes abs Ievel gtX flag (abs_leveljgtx_flag[O], abs_leveljgtx_flag[1], abs_level_gtx_flag[2] and abs_level_gtx_flag[3]) in the second step, and the encoding of abs_remainder in the third step.

[0092] Step 1: sig_coeff_flag, coeff_sign_flag, abs_level_gt1_flag (abs_level_gtx_flag[O]), par_level_flag.

[0093] Step 2: abs_level_gt3_flag (abs_level_gtx_flag[O]), abs_level_gt5_flag (abs_level_gtx_flag[1 ]), abs_level_gt7_flag (abs_level_gtx_flag[2]), abs_level_gt9_flag (abs_level_gtx_flag[3]).

[0094] Step 3: abs_remainder.

[0095] Figure 8 shows an illustration of the residual encoding structure for transform omission blocks.

[0096] The syntax and associated semantics of the residual encoding for the transform omission mode in the current draft specification of VVC are illustrated in Table 5 and Table 2, respectively. The manner in which Table 5 is to be read is illustrated in the appendix section of this invention, which can also be found in the VVC specification. Table 5. Residual coding syntax for transform omission mode residual_ts_coding( xO, yO, log2TbWidth, log2TbHeight, cldx ) { Descriptor log2SbW = ( Min( log2TbWidth, log2TbHeight) < 2 ? 1 : 2 ) log2SbH = log2SbW if( log2TbWidth + log2TbHeight > 3 ) if( log2TbWidth < 2 ) { log2SbW = log2TbWidth log2SbH = 4 - log2SbW} else if( log2TbHeight < 2 ) { log2SbH = log2TbHeight log2SbW = 4 - log2SbH} numSbCoeff = 1 « (log2SbW + log2SbH ) lastSubBlock = ( 1 « (log2TbWidth + log2TbHeight - ( log2SbW + log2SbH )))-1 inferSbCbf = 1 RemCcbs = (( 1 « (log2TbWidth + log2TbHeight)) ‘ 7) » 2 for( i =0; i <= lastSubBlock; I++ ) { xS = DiagScanOrder[ log2TbWidth - log2SbW ][ log2TbHeight - log2SbH ][ i ][ 0 ] yS = DiagScanOrder[ log2TbWidth - log2SbW ][ log2TbHeight - log2SbH ][ i ][ 1 ] if( i != lastSubBlock | | ünferSbCbf) sb_coded_flag[ xS ][ yS ] ae(v) if( sb_coded_flag[ xS ][ yS ] && i < lastSubBlock) inferSbCbf = 0 / * Primer paso de escaneo * / inferSbSigCoeffFIag = 1 lastScanPosPassl =-1 for( n = 0; n <= numSbCoeff - 1 && RemCcbs >= 4; n++ ) { xC = ( xS « log2SbW) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS « log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] lastScanPosPassl = n if( sb_coded_flag[ xS ][ yS ] && ( n != numSbCoeff - 1 | | HnferSbSigCoeffFIag )) { sig_coeff_flag[ xC ][ yC ] ae(v) RemCcbs— if( sig_coeff_flag[ xC ][ yC ]) inferSbSigCoeffFIag = 0} CoeffSignLevel[ xC ][ yC ] = 0 if( sig_coeff_flag[ xC ][ yC ]) { coeff_sign_flag[ n ] ae(v) RemCcbs- - CoeffSignLevel[ xC ][ yC ] = ( coeff_sign_flag[ n ] > 0 ? -1 : 1 ) abs_level_gtx_flag[ n ][ 0 ] ae(v) RemCcbs- - if( abs_level_gtx_flag[ n ][ 0 ]) { par_level_flag[ n ] ae(v) RemCcbs- -}} AbsLevelPassl [ xC ][ yC ] = sig_coeff_flag[ xC ][ yC ] + par_level_flag[ n ] + abs_level_gtx_flag[ n ][ 0 ]} / * Más grande que el paso de escaneo X (numGtXFIags=5) * / lastScanPosPass2 = -1 for( n = 0; n <= numSbCoeff - 1 && RemCcbs >= 4; n++ ) { xC = ( xS « log2SbW) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 0 ] / β / υιλι yC = ( yS « log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] AbsLevelPass2[ xC ][ yC ] = AbsLevelPassl [ xC ][ yC ] for( j = 1; j < 5; j++ ) { if( abs_level_gtx_flag[ n ][ j - 1 ]) { abs_level_gtx_flag[ n ][j ] ae(v) RemCcbs- -} AbsLevelPass2[ xC ][ yC ] += 2 * abs_level_gtx_flag[ n ][ j ]} lastScanPosPass2 = n} Γ recordatorio de paso de escaneo 7 for( n = 0; n <= numSbCoeff - 1;n++ ) { xC = ( xS « log2SbW) + DiagScanOrderf log2SbW ][ log2SbH ][ n ][ 0 ] yC = ( yS « log2SbH ) + DiagScanOrder[ log2SbW ][ log2SbH ][ n ][ 1 ] if( ( n <= lastScanPosPass2 && AbsLevelPass2[ xC ][ yC ] >= 10) II ( n > lastScanPosPass2 && n <= lastScanPosPassl && AbsLevelPassl [ xC ][ yC ] >= 2 ) | | ( n > lastScanPosPassl && sb_coded_flag[ xS ][ yS ])) abs_remainder[ n ] ae(v) if( n <= lastScanPosPass2 ) AbsLevel[ xC ][ yC ] = AbsLevelPass2[ xC ][ yC ] + 2 * abs_remainder[ n ] else if(n <= lastScanPosPassl ) AbsLevel[ xC ][ yC ] = AbsLevelPassl [ xC ][ yC ] + 2 * abs_remainder[ n ] else { / * derivación 7 AbsLevel[ xC ][ yC ] = abs_remainder[ n ] if( abs_remainder[ n ]) coeff_sign_flag[ n ] ae(v); / β / υιλι } if( BdpcmFlag[ χθ ][ yO ][ cldx ] = = 0 && n <= lastScanPosPassl ){ absLeftCoeff = xC > 0 ? AbsLevel[ xC - 1 ][ yC ]) : 0 absAboveCoeff = yC > 0 ? AbsLevel[ xC ][ yC - 1 ]) : 0 predCoeff = Max( absLeftCoeff, absAboveCoeff) if( AbsLevel[ xC ][ yC ] = = 1 && predCoeff > 0 ) AbsLevel[ xC ][ yC ] = predCoeff else if( AbsLevel[ xC ][ yC ] > 0 && AbsLevel[ xC ][ yC ] <= predCoeff ) AbsLevel[ xC ][ yC ]- -} TransCoeffLevel[ xO ][ yO ][ cldx ][ xC ][ yC ] = (1 - 2 * coeff_sign_flag[ n ]) * AbsLevel[ xC ][ yC ]}}}

[0097] Cuantificación

[0098] In the current version of VVC, the maximum QP value was increased from 51 to 63, and the initial QP signaling was modified accordingly. The initial SliceQpY value can be modified in the segment fraction layer when a non-zero slice_qp_delta value is encoded. For the transform bypass block, the minimum allowed value of the Quantization Parameter (QP) is defined as 4 because the quantization stage size becomes 1 when QP equals 4.

[0099] Furthermore, the same scalar quantization used in HEVC is used with a new concept called dependent scalar quantization. Dependent scalar quantization refers to an approach in which the set of permissible reconstruction values ​​for a transform coefficient depends on the values ​​of the transform coefficient levels that precede the current transform coefficient level in the reconstruction order. The main effect of this approach, compared to the conventional independent scalar quantization used in / β / υιλι HEVC involves packing admissible reconstruction vectors more densely in the N-dimensional vector space (N represents the number of transform coefficients in a transform block). That is, for a given average number of admissible reconstruction vectors per N-dimensional unit volume, the average distortion between an input vector and its nearest reconstruction vector is reduced. The dependent scalar quantization approach is implemented as follows: (a) defining two scalar quantizers with different reconstruction levels and (b) defining a process for switching between the two scalar quantizers.

[00100] The two scalar quantizers used, denoted by Q0 and Q1, are illustrated in Figure 9 (described later). The location of the available reconstruction levels is specified solely by a quantization stage size A. The scalar quantizer used (Q0 or Q1) is not explicitly signaled in the bitstream. Instead, the quantizer used for a current transform coefficient is determined by the parities of the transform coefficient levels that precede the current transform coefficient in the encoding or reconstruction order.

[00101] Figure 9 shows an illustration of the two scalar quantifiers used in the proposed dependent quantization approach.

[00102] As illustrated in Figures 10A and 10B (described later), the switching between the two scalar quantizers (Q0 and Q1) is accomplished through a defined state machine with four quantizer states (QState). The QState can take four different values: 0, 1, 2, 3. This value is determined solely by the parity of the transform coefficient levels that precede the current transform coefficient in the encoding or reconstruction order. At the start of inverse quantization for a transform block, the state is set to a value of 0. The transform coefficients are reconstructed in scan order (i.e., in the same order in which they undergo entropy decoding). After reconstructing a current transform coefficient, the state is updated as shown in Figure 10, where k denotes the value of the transform coefficient level.

[00103] Figure 10A shows a transition diagram illustrating a state transition for the proposed dependent quantization.

[00104] Figure 10B shows a table illustrating a selection of quantifiers for the proposed dependent quantification.

[00105] It also supports signaling both default and user-defined scale matrices. All DEFAULT mode scale matrices are flat, with 16 elements for all TB sizes. Currently, IBC and intra-encoding modes share the same scale matrices. Therefore, for USER_DEFINED matrices, the MatrixType and MatrixType_DC values ​​are updated as follows:

[00106] MatrixType: 30 = 2 (2 for intra and IBC / inter) χ 3 (Y / Cb / Cr components) χ 5 (square TB size: from 4x4 to 64*64 for luminance, from 2*2 to 32*32 for chrominance).

[00107] MatrixType_DC: 14 = 2 (2 para intra e IBC / inter χ 1 para el elemento Y) x 3 (tamaño deTB: 16*16, 32*32, 64*64) + 4 (2 para intra e IBC / inter * 2 para los componentis CB / Cr) χ 2 (tamaño deTB: 6*16, 32*32).

[00108] DC values ​​are coded separately for the following scale matrices: 16*16, 32*32, and 64*64. For TBs smaller than 8*8, all elements of a scale matrix are signaled. If the TBs are 8*8 or larger, only 64 elements in an 8*8 scale matrix are signaled as a base scale matrix. To obtain square matrices larger than 8*8, upward sampling is taken from the 8*8 base scale matrix (by doubling elements) to the corresponding square size (i.e., 16*16, 32*32, 64*64). When the high-frequency coefficients are zeroed for the 64-point transform, the corresponding high frequencies of the scale matrices are also zeroed. That is, if the width or height of the TB is greater than or equal to 32, only the left or upper half of the coefficients are maintained, and the remaining coefficients are assigned to zero.Furthermore, the number of signaled elements for the 64*64 scale matrix is ​​also reduced from 8*8 to three 4*4 submatrices, since the 4*4 elements in the bottom right are never used.

[00109] Context modeling for transform coefficient encoding

[00110] The selection of probability models for syntax elements related to the absolute values ​​of the transform coefficient levels depends on the values ​​of the absolute levels or the partially reconstructed absolute levels in a local proximity. The template used is illustrated in Figure 11 (described below).

[00111] Figure 11 shows an illustration of the template used to select probability models. The black box specifies the current scan position and the boxes with an “x” represent the local proximity used.

[00112] The selection of probability models depends on the sum of the absolute levels (or partially reconstructed absolute levels) in a local proximity and the number of absolute levels greater than 0 (given by the number of sig_coeff_flags equal to 1) in the local proximity. Context modeling and binarization depend on the following measures for local proximity:

[00113] numSig: the number of non-zero levels in the local proximity;

[00114] sumAbsl: the sum of the partially reconstructed absolute levels (absLevell) after the first step in the local proximity;

[00115] sumAbs: the sum of the absolute levels reconstructed in the local proximity; and

[00116] diagonal position (d): the sum of the horizontal and vertical coordinates of a current scan position within the transformed block.

[00117] Based on the values ​​of numSig, sumAbsl, and d, the probability models for encoding sig_coeff_flag, abs_level_gt1_flag, par_level_flag, and abs_level_gt3_flag are selected. The Rice parameter for binarizing abs_remainder and dec_abs_level is selected based on the values ​​of sumAbs and numSig.

[00118] In the current version of VVC, the reduced 32-point MTS (also referred to as RMTS32) is based on the omission of high-frequency coefficients and is used to reduce the computational complexity of 32-point DST-7 / DCT-8. Furthermore, it is accompanied by coefficient encoding changes that include all types of zero conversions (i.e., RMTS32 and the existing zero conversion for high-frequency components in DCT2). Specifically, the binarization of the last non-zero coefficient position encoding is based on the reduced TU size, and the context model selection for the last non-zero coefficient position encoding is determined by the original TU size. Additionally, 60 context models are used to encode the sig_coeff_flag of the transform coefficients.The selection of the context model index is based on a sum of a maximum of five previously and partially reconstructed absolute levels called locSumAbsPassl and on the dependent quantization state QState, as follows:.

[00119] If cldx equals 0, ctxlnc is derived as follows: / β / υιλι ctxlnc = 12 * Max( O, QState -1 ) + Min( ( locSumAbsPassl + 1)>>1,3) + (d<2 ? 8 : ( d < 5 ? 4 : 0))

[00120] Otherwise (cldx is greater than 0), ctxlnc is derived as follows: ctxlnc = 36 + 8 * Max( 0, QState - 1) + Min( ( locSumAbsPassl + 1)>>1,3) + (d<2 ? 4 : 0)

[00121] Palette Mode

[00122] The basic concept behind a palette mode is that the samples present in the CU are represented by a small set of representative color values. This set is referred to as the palette. It is also possible to indicate a color value to be excluded from the palette by signaling it as an escape color, for which the values ​​of three color components are signaled directly in the bitstream. This is illustrated in Figure 12.

[00123] Figure 12 shows an example of a block encoded in palette mode. Figure 12 includes the palette-encoded block 1210 and palette 1220.

[00124] In Figure 12, the palette size is 4. The first 3 samples use palette entries 2, 0, and 3, respectively, for reconstruction. The black sample represents an escape symbol. A CU-level flag, palette_escape_val_present_flag, indicates whether any escape symbols are present in the CU. If escape symbols are present, the palette size increases by one, and the last index is used to indicate the escape symbol. Therefore, in Figure 12, index 4 is assigned to the escape symbol.

[00125] To decode a pallet-coded block, the decoder must have the following information: pallet table and pallet indices.

[00126] If a palette index corresponds to the escape symbol, additional overloads are signaled to indicate the corresponding color values ​​of the sample.

[00127] In addition, on the encoder side, it is necessary to derive the appropriate palette for use with the CU.

[00128] For palette derivation for lossy encoding, a modified k-means grouping algorithm is used. The first sample in the block is added to the palette. Then, for each subsequent sample in the block, the sum of absolute differences (SADs) between the sample and each of the colors in the current palette is calculated. If the distortion for each of the / β / υιλι components is less than a threshold value for the palette entry corresponding to the minimum SAD, the sample is added to the group to which the palette entry belongs. Otherwise, the sample is added as a new palette entry. When the number of samples mapped to a group exceeds a threshold, a centroid for that group is updated and becomes the palette entry for that group.

[00129] In the next stage, the groups are sorted in descending order of use. Then, the palette entry corresponding to each entry is updated. Normally, the group's centroid is used as the palette entry. However, a rate distortion analysis is performed to determine if any palette predictor entry might be more suitable for use as the updated palette entry instead of the centroid, considering the cost of encoding the palette entries. This process continues until all groups are processed or the maximum palette size is reached. Finally, if a group has only one sample and the corresponding palette entry is not in the palette predictor, the sample is converted to an escape symbol. Additionally, duplicate palette entries are removed, and their groups are merged.

[00130] After palette derivation, each sample in the block is assigned the index of the nearest palette entry (in SAD). Subsequently, the samples are assigned to either 'INDEX' or 'COPY_ABOVE' mode. For each example where 'INDEX' or 'COPY_ABOVE' mode can be used, the cost of encoding the mode is calculated. The mode with the lowest cost is selected.

[00131] For encoding palette inputs, a palette predictor is maintained. The maximum palette size, as well as the palette predictor, are signaled in the SPS. The palette predictor is initialized at the beginning of each CTU row, each segment, and each tile.

[00132] For each entry in the palette predictor, a reuse indicator is signaled to show whether it is part of the current palette. This is illustrated in Figure 13.

[00133] Figure 13 shows the use of the palette predictor to signal palette inputs. Figure 13 includes the previous palette 1310 and the current palette 1320.

[00134] Reuse indicators are sent by encoding the run length of zeros. Then, the number of new palette entries is signaled using Golomb exponential code of order 0. Finally, the component values ​​for the new palette entries are signaled.

[00135] The palette indices are encoded by transpose scans, both horizontal and vertical, as shown in Figures 14A and 14B. The scan order is explicitly signaled in the bitstream using palette_transpose_flag.

[00136] Figure 14A shows a horizontal cross-sectional scan. Figure 14B shows a vertical cross-sectional scan.

[00137] To encode the palette indices, a line coefficient group (CG)-based palette mode is used, which divides a CU into several segments with 16 samples based on the cross-scan mode, as shown in Figures 15A and 15B, where the index runs, palette index values, and quantized colors for escape mode are syntactically and sequentially encoded / parsed for each CG.

[00138] Figure 15A shows a subblock-based index map exploration for the palette. Figure 15B shows a subblock-based index map exploration for the palette.

[00139] Palette indices are encoded using two main palette sample modes: 'INDEX' and 'COPY_ABOVE'. As explained earlier, the escape symbol is assigned an index equal to the maximum palette size. In 'COPY_ABOVE' mode, the palette index is copied from the sample in the previous row. In 'INDEX' mode, the palette index is explicitly signaled. The encoding order for palette execution in each segment is as follows:

[00140] For each pixel, a context-coded digit is signaled run_copy_flag = 0, which indicates whether the pixel has the same mode as the previous pixel, that is, whether the previous scanned pixel and the current pixel have the COPY_ABOVE execution type or the previous scanned pixel and the current pixel have the INDEX execution type and the same index value. Otherwise, run_copy_flag = 1 is signaled.

[00141] If the current and previous pixels have different modes, a context-coded digit is signaled using the `copy_above_palette_indices_flag`, indicating the pixel's execution type (INDEX or COPY_ABOVE). The decoder does not need to parse the execution type if the sample is in the first row (horizontal traverse) or the first column (vertical traverse), as INDEX mode is used by default. Similarly, the decoder does not need to parse the execution type if the previously parsed execution type is COPY_ABOVE.

[00142] After encoding the palette run of the pixels in a segment, the index values ​​for INDEX mode (palette_idx_idc) and quantized escape colors (palette_escape_val) are encoded by derivation.

[00143] Inefficiencies in video decoding

[00144] In VVC, when encoding transform coefficients, a unified (equal) derivation of the Rice parameter (RicePara) is used to signal the syntax for abs_remainder and dec_abs_level. The only difference is that the base level, baseLevel, is set to 4 and 0 to encode abs_remainder and dec_abs_level, respectively. The Rice parameter is determined not only by the sum of the absolute levels of the five contiguous transform coefficients in the local template, but also by the corresponding base level, as shown below:

[00145] RicePara = RiceParTable[ max(min(31, sumAbs - 5 * baseLevel), 0)]

[00146] In other words, the binary codewords for the syntax elements abs_remainder and dec_abs_level are determined adaptively according to the level information of the adjacent coefficients. Since this codeword determination is performed for each sample, additional logic is required to control this codeword adaptation in the coefficient encoding.

[00147] Similarly, when encoding the residual block in transform skip mode, the binary code words for the abs_remainder syntax elements are adaptively determined according to the level information of the contiguous residual samples.

[00148] In addition, when encoding syntax elements related to residual coding or transform coefficient coding, the selection of probability models depends on level information from contiguous levels, requiring additional logic and additional context models.

[00149] In the current design, the binarization of the escape samples is derived by invoking the third-order Exp-Golomb binarization process. There is room to further improve its performance.

[00150] In the current version of VVC, two different level mapping schemes are available and are applied to the normal transform and transform omission, respectively. Each level mapping scheme is associated with different conditions, mapping function, and mapping position. For blocks where the normal transform is applied, one level mapping scheme is used after the number of context-coded (CCB) digits exceeds the limit. The mapping position, denoted as ZeroPos[n], and the mapping result, denoted as AbsLevel[xC][yC], are derived as specified in Table 2. For blocks where transform omission is applied, another level mapping scheme is used before the number of context-coded (CCB) digits exceeds the limit. The mapping position, denoted as predCoeff, and the mapping result, denoted as AbsLevel[ xC ][ YC ], are derived as specified in Table 5.Such a non-unified design may not be optimal from a standardization point of view.

[00151] For HEVC profiles larger than 10 bits, `extended_precision_processing_flag` equal to 1 specifies that an extended dynamic range is used for coefficient parsing and inverse transform processing. In the current version of VVC, residual encoding for transform coefficients or transform-skipping encoding above 10 bits is reported to cause a significant reduction in performance. There is room for further performance improvement.

[00152] Proposed methods

[00153] This description proposes several methods to address the problems mentioned in the section on inefficiencies in video decoding. It is important to note that the following methods can be applied independently or in combination.

[00154] In accordance with the first aspect of the description, it is proposed to use a fixed set of binary codewords to encode certain syntax elements, for example, abs_remainder, in the residual encoding. The binary codewords can be formed using different methods. Some examples of such methods are mentioned below.

[00155] First, the same procedure is used to determine the code word for abs_remainder as is used in the current version of VVC, but always with a fixed Rice parameter selected (for example, 1, 2, or 3).

[00156] Secondly, fixed-length binarization.

[00157] Third, the truncated Rice binarization.

[00158] Fourth, the truncated binary (TB) binarization process.

[00159] Fifth, the Exp-Golomb binarization process of order k-th (EGk).

[00160] Sixth, the binarization of Exp-Golomb of limited k-th order.

[00161] In accordance with the second aspect of the description, it is proposed to use a fixed set of codewords to encode certain syntax elements, for example, abs_remainder and dec_abs_level, in the encoding of transform coefficients. The binary codewords can be formed using different methods. Some examples of such methods are mentioned below.

[00162] First, the same procedure is used to determine the code words for abs_remainder and dec_abs_level as is used in the current version of VVC, but with a fixed Rice parameter, for example 1, 2, or 3. The baseLevel value can still be different for abs_remainder and dec_abs_level, as used in the current version of VVC. (For example, the baseLevel value is set to 4 and 0 to encode abs_remainder and dec_abs_level, respectively.)

[00163] Secondly, the same procedure is used to determine the code words for abs_remainder and dec_abs_level as is used in the current version of VVC, but with a fixed Rice parameter, for example 1, 2, or 3. The baseLevels value for abs_remainder and dec_abs_level is selected to be the same, for example, both using 0 or both using 4.

[00164] Third, fixed-length binarization.

[00165] Fourth, the truncated Rice binarization.

[00166] Fifth, the truncated binary binarization process (TB).

[00167] Sixth, the Exp-Golomb binarization process of order k-th (EGk).

[00168] Seventh, the binarization of Exp-Golomb of limited k-th order.

[00169] In accordance with the third aspect of the description, it is proposed to use a single context for encoding syntax elements related to residual encoding or coefficient encoding (e.g., abs_level_gtx_flag) and context selection based on contiguous decoded level information can be eliminated.

[00170] In accordance with the fourth aspect of the description, it is proposed to use variable sets of binary codewords to encode certain syntax elements, for example, absyme i nder, in the residual encoding, and the selection of the binary codeword set is determined according to certain encoded information from the current block, for example, the quantization parameter (QP) associated with the TB / CB and / or the segment, the CU prediction modes (for example, IBC or intra or inter mode) and / or the segment type (for example, I segment, P segment, or B segment). Different methods can be used to derive the variable sets of binary codewords, with some exemplary methods described below.

[00171] First, the same procedure is used to determine the code word for abs_remainder as is used in the current version of VVC, but with different Rice parameters.

[00172] Secondly, the Exp-Golomb binarization process of order k-th (EGk).

[00173] Third, the binarization of Exp-Golomb of limited k-th order. Table 6. Determination of the Rice parameter based on the value of QP if(QPcu <TH1) { rice parameter = K0} else if(QPcu <TH2) { rice to meter = K1} else if(QPcu <TH3) { rice parameter = K2} else if(QPcu <TH4) { rice parameter = K3} else { rice parameter = K4}

[00174] The same methods described in the fourth aspect are also applicable to the efficient coding of transforms. According to the fifth aspect of the description, it is proposed to use variable sets of binary codewords to encode certain syntax elements, for example, abs_remainder and dec_abs_level, in the coding of transform coefficients. The selection of the binary codeword set is determined according to certain encoded information from the current block, for example, the quantization parameter (QP) associated with the TB / CB and / or the segment, the CU prediction modes (for example, IBC mode or intra or inter), and / or the segment type (for example, segment I, segment P, or segment B). Again, different methods can be used to derive the variable sets of binary codewords, with some exemplary methods described below.

[00175] First, the same procedure is used to determine the code word for abs_remainder as is used in the current version of VVC, but with different Rice parameters.

[00176] Secondly, the Exp-Golomb binarization process of order k-th (EGk).

[00177] Third, the binarization of Exp-Golomb of limited k-th order.

[00178] In the methods described above, different Rice parameters can be used to derive different sets of binary codewords. For a given block of residual samples, the Rice parameters used are determined according to the QP of the CU, denoted as QPcu, rather than contiguous level information. A specific example is illustrated in Table 6, where TH1 to TH4 are predefined thresholds that satisfy (TH1 < TH2 < TH3 < TH4), and where K0 to K4 are predefined Rice parameters. It is important to note that the same logic can be applied differently in practice. For example, certain equations, or a lookup table, can also be used to derive the same Rice parameters, as shown in Table 6, from a QP value of a current CU.

[00179] According to the fifth aspect of the description, a set of parameters and / or thresholds associated with the determination of codewords for the syntax elements of transform coefficient coding and / or transform-skipping residual coding are signaled in the bitstream. The determined codewords are used as binarization codewords when encoding the syntax elements through an entropy encoder, e.g., arithmetic coding.

[00180] It should be noted that the Rice parameter set and / or thresholds may constitute a complete set, or a subset of all parameters and thresholds associated with codeword determination for syntax elements. The parameter set and / or thresholds may be signaled at different levels in the video bitstream. For example, they may be signaled at the sequence level (e.g., the sequence parameter set), at the frame level (e.g., the frame parameter set and / or the frame header), at the segment level (e.g., the segment header), at the encoding tree unit (CTU) level, or at the encoding unit (CU) level.

[00181] In one example, the Rice parameter used to determine the codewords for encoding the abs_remainder syntax in transform-bypass residual encoding is signaled in the segment header, image header, PPS, and / or SPS. The signaled Rice parameter is used to determine the codeword for encoding the abs_remainder syntax when a CU is encoded in transform-bypass mode and the CU is associated with the aforementioned segment header, image header, PPS, and / or SPS, etc.

[00182] In accordance with the sixth aspect of the description, a set of parameters and / or thresholds associated with codeword determination, as illustrated in the first and second aspects, is used for the syntax elements of transform coefficient encoding and / or the residual transform omission encoding. Furthermore, different sets may be used, depending on whether the current block contains residual / luminance coefficients or residual / chrominance coefficients. The determined codewords are used as binarization codewords when encoding the syntax elements through an entropy encoder, for example, arithmetic encoding.

[00183] In one example, the codeword for abs_remainder associated with the transform residual encoding used in the current version of VVC is used for luminance and chrominance blocks, but the luminance block and the chrominance block use, respectively, different fixed Rice parameters, (e.g., K1 for the luminance block, K2 for the chrominance block, where K1 and K2 are integers)

[00184] According to the seventh aspect of the description, a set of parameters and / or thresholds associated with the determination of codewords for the syntax elements of transform coefficient encoding and / or transform-omit residual encoding are signaled in the bitstream. In addition, different sets can be signaled for the luminance and chrominance blocks. The determined codewords are used as binarization codewords when encoding the syntax elements through an entropy encoder, for example, arithmetic encoding.

[00185] The same methods described in the above aspects are also applicable to encoding escape values ​​in palette mode, e.g., palette_escape_val.

[00186] According to the eighth aspect of the description, different k-th Exp-Golomb binarization orders can be used to derive different sets of binary codewords for encoding escape values ​​in palette mode. In one example, for a given block of escape samples, the Exp-Golomb parameter used, i.e., the value of k, is determined according to the block's QP value, denoted as QPcu. The same example illustrated in Table 6 can be used to derive the value of the parameter k based on a given QP value of the block. Although that example indicates four different threshold values ​​(from TH1 to TH4), and five different k values ​​(from K0 to K4) can be derived based on those threshold values ​​and QPcu, it is important to note that the number of threshold values ​​is for illustrative purposes only.In practice, a different number of threshold values ​​can be used to divide the entire QP value range into a different number of QP value segments, and for each QP value segment, a different k value can be used to derive corresponding binary codewords to encode the escape values ​​of a block being encoded in palette mode. It is also important to note that the same logic can be applied differently in practice. For example, certain equations, or a lookup table, can be used to derive the same Rice parameters.

[00187] According to the ninth aspect of the description, a set of parameters and / or thresholds associated with codeword determination for the escape sample syntax elements are signaled in the bitstream. The determined codewords are used as binarization codewords when encoding the escape sample syntax elements through an entropy encoder, e.g., arithmetic encoding.

[00188] It is important to note that the Rice parameter set and / or thresholds may constitute a complete set, or a subset of all parameters and thresholds associated with codeword determination for syntax elements. The parameter set and / or thresholds may be signaled at different levels in the video bitstream. For example, they may be signaled at the sequence level (e.g., the sequence parameter set), at the image level (e.g., the image parameter set and / or the image header), at the segment level (e.g., the segment header), at the encoding tree unit (CTU) level, or at the encoding unit (CU) level.

[00189] In one example, according to the appearance, the k-th orders of the ExpGolomb binarization are used to determine the codewords for encoding the palette_escape_val syntax in palette mode, and the value of k is signaled in the bitstream to the decoder. The value of k can be signaled at different levels, for example, it can be signaled in the segment header, image header, PPS, and / or SPS, among others. The signaled ExpGolomb parameter is used to determine the codeword for encoding the palette_escape_val syntax when a CU is encoded as palette mode and the CU is associated with the aforementioned segment header, image header, PPS, and / or SPS, etc.

[00190] Harmonization of level mapping for transform omission mode and normal transform mode

[00191] In accordance with the tenth aspect of the description, the same condition is used to apply level mapping to both transform skip mode and normal transform mode. In one example, it is proposed to apply level mapping after the number of context-coded (CCB) digits exceeds the limit for both transform skip mode and normal transform mode. In another example, it is proposed to apply level mapping before the number of context-coded (CCB) digits exceeds the limit for both transform skip mode and normal transform mode.

[00192] In accordance with the eleventh aspect of the description, the same method for deriving the mapping position in level mapping is used for both transform omission mode and normal transform mode. In one example, it is proposed to apply the method for deriving the mapping position in level mapping that is used in transform omission mode to normal transform mode as well. In another example, it is proposed to apply the method for deriving the mapping position in level mapping that is used in normal transform mode to transform omission mode as well.

[00193] In accordance with the twelfth aspect of the description, the same level mapping method is applied to both transform omission mode and normal transform mode. In one example, it is proposed to apply the level mapping function used in transform omission mode to normal transform mode as well. In another example, it is proposed to apply the level mapping function used in normal transform mode to transform omission mode as well.

[00194] Simplifying the derivation of Rice parameters in residual coding

[00195] In accordance with the thirteenth aspect of the description, it is proposed to use simple logic, such as the shift or division operation, instead of the lookup table for deriving Rice parameters when encoding the abs_remainder / dec_abs_level syntax element using Golomb-Rice code. According to the current description, the lookup table, as specified in Table 4, can be eliminated. In one example, the parameter Rice cRiceParam is derived as: CRiceParam = (locSumAbs » n), where n is a positive number, for example 3. It is important to note that in practice, different logics can be used to obtain the same results, for example, a division operation by a value equal to 2 raised to the power of n. An example of the corresponding decoding process based on the VVC draft is illustrated below, where the crossed-out font shows steps or elements removed or suppressed from the decoding process. Table 7. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] if( yC < (1 « log2TbHeight) - 1 ) locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)} f( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} locSumAbs = Clip3( 0, 31, locSumAbs - baseLevel *5) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as follows: -Gomo- is specified in Table 4. cRiceParam = (locSumAbs » 3) When baseLevel is equal to 0, the variable ZeroPosf n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) « cRiceParam

[00196] In accordance with the fourteenth aspect of the description, it is proposed to use fewer contiguous positions for the derivation of Rice parameters in the encoding of the abs_remainder / dec_abs_level syntax element using the Golomb-Rice code. In one example, it is proposed to use only two contiguous positions for the derivation of Rice parameters in the encoding of the abs_remainder / dec_abs_level syntax element. The corresponding decoding process based on the VVC draft is illustrated below, where the crossed-out font shows the stages or elements removed or suppressed from the decoding process. Table 8. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] ¡f(xC < (1 « log2TbWidth) - 2 ) ¡f(yC < (1 « log2TbHeight)—47 locSumAbs += AbsLevel[xC + 1][yC + 1] (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if(yC < (1 « log2TbHeight) -2) locSumAbs += AbsLevel[ xC][yC + 2]} locSumAbs = Clip3( 0, 31, locSumAbs - baseLevel *52) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in Table 4. When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) « cRiceParam

[00197] In another example, it is proposed to use only one contiguous position for the derivation of Rice parameters in the encoding of the syntax element abs_remainder / dec_abs_level. The corresponding decoding process based on the VVC draft is illustrated below, where the crossed-out font shows the stages or elements removed or suppressed from the decoding process. Table 9. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 ¡f( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] iffxC < (1 « log2TbWidth) - 2 ) locSumAbs *= AbsLevelf xC + 2 ][ yC ] iffyC < (1 « log2TbHeight) -1) locSumAbs += AbsLevelf xC + 1 ][ yC + 1 ] (1494)} IffyC < (1 « log2TbHeight)—1){ locSumAbs += AbsLevelf xC ]f yC + 1 ] if(yC < (1 « log2TbHeight) -2) locSumAbs += AbsLevelf xC ][ yC + 2 ] locSumAbs = Clip3( 0, 31, locSumAbs - baseLevel ±5) / β / υιλι Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in the Table 4. When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) « cRiceParam

[00198] In accordance with the fifteenth aspect of the description, it is proposed to use different logic to adjust the value of locSumAbs based on the value of baseLevel for deriving Rice parameters in the encoding of the abs_remainder / dec_abs_level syntax element using Golomb-Rice code. In one example, the additional scaling and offset operations are applied in the form of “(locSumAbs - baseLevel * 5) * alpha + beta.” When alpha takes a value of 1.5 and beta takes a value of 1, the corresponding decoding process based on the VVC draft is illustrated as follows. Table 10. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC / ι / ι( ι1 ] if yC / β log2TbHeight) - 1 ) locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} locSumAbs = Clip30(Abs, 31, locSumAbs baseLevel *5) *1.5+1 ) Given the locSumAbs variable, the Rice cRiceParam parameter is derived as specified in Table 4. When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) << cRiceParam

[00199] In accordance with the sixteenth aspect of the description, it is proposed to eliminate the trimming operations for deriving Rice parameters in the abs_remainder / dec_abs_level syntax element using Golomb-Rice code. According to the current description, an example of the decoding process in the VVC draft is illustrated below, where the crossed-out font shows the stages or elements removed or suppressed from the decoding process. Table 11. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. / β / υιλι Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] if( yC < (1 « log2TbHeight) - 1 ) locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} locSumAbs = Oj , locSumAbs - base Leve I *5) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as follows: as specified in / a Tfihlf} Λ rU f UWIm I· cRiceParam = (locSumAbs » 3) When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) « cRiceParam

[00200] According to the current description, an example of the decoding process in the VVC draft is illustrated below, where the crossed-out font shows the stages or elements removed or suppressed from the decoding process. Table 12. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] if( yC < (1 « log2TbHeight) - 1 ) locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} locSumAbs = Clip3Min(ft-31, locSumAbs - baseLevel * 5 ) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in Table 4. When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) « cRiceParam / β / υιλι

[00201] In accordance with the seventeenth aspect of the description, it is proposed to change the initial value of locSumAbs from 0 to a non-zero integer for the derivation of Rice parameters in the encoding of the abs_remainder / dec_abs_level syntax element using the GolombRice code. In an example, an initial value of 1 is assigned to locSumAbs, and the corresponding decoding process based on the VVC draft is illustrated below, where the strikethrough font shows the stages or elements removed or suppressed from the decoding process. Table 13. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 01 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] if( yC < (1 « log2TbHeight) - 1 ) locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} locSumAbs = Clip3( 0, 31, locSumAbs - baseLevel * 5 ) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in Table 4. When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) << cRiceParam

[00202] In accordance with the eighteenth aspect of the description, it is proposed to use the maximum value of contiguous position level values ​​instead of their sum for deriving Rice parameters in the encoding of the abs_remainder / dec_abs_level syntax element using the Golomb-Rice code. An example of the corresponding decoding process based on the VVC draft is illustrated below. Table 14. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += Max( AbsLevel[ xC + 1 ][ yC ], locSumAbs) if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += Max( AbsLevel[ xC + 2 ][ yC ], locSumAbs ) if( yC < (1 « log2TbHeight) - 1 ) locSumAbs += Max( AbsLevel[ xC + 1 ][ yC + 1 ], locSumAbs ) (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += Max( AbsLevel[ xC ][ yC + 1 ], locSumAbs) if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += Max( AbsLevel[ xC ][ yC + 2 ], locSumAbs)} locSumAbs = Clip3( 0, 31, locSumAbs - baseLevel ±-5) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in Table 4. When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) << cRiceParam

[00203] In accordance with the nineteenth aspect of the description, it is proposed to derive the Rice parameter based on the relative amplitude of each AbsLevel value in contiguous positions and the base level value, in the encoding of the abs_remainder / dec_abs_level syntax element using the Golomb-Rice code. In one example, the Rice parameter is derived based on how many of the AbsLevel values ​​in contiguous positions are greater than the base level. An example of the corresponding decoding process based on the VVC draft is illustrated below, where the strikethrough indicates steps or elements removed or suppressed from the decoding process. Table 15. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += (AbsLevel[ xC + 1 ][ yC ] > baseLevel? 1:0) if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += (AbsLevel[ xC + 2 ][ yC ] > baseLevel? 1:0) if( yC < (1 « log2TbHeight) - 1 ) locSumAbs += (AbsLevel[ xC + 1 ][ yC + 1 ] > baseLevel? 1:0) (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += (AbsLevel[ xC ][ yC + 1 ] > baseLevel? 1:0) if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += (AbsLevel[ xC ][ yC + 2 ] > baseLevel? 1:0)} locSumAbs = Clip3(0, 31, locSumAbs - baseLevel *5) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as follows:as-specified-in / a A TG f wJvfXY “Γ7 cRiceParam = locSumAbs When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) << cRiceParam

[00204] In another example, the Rice parameter is derived based on the sum of the (AbsLevel - baseLevel) values ​​for those contiguous positions whose AbsLevel values ​​are greater than the base level. An example of the corresponding decoding process based on the draft of VVC is illustrated below, where the crossed-out font shows steps or elements removed or suppressed from the decoding process. Table 16. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += Max( 0, AbsLevel[ xC + 1 ][ yC ] - baseLevel) if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += Max( 0, AbsLevel[ xC + 2 ][ yC ] - baseLevel) if( yC < (1 « log2TbHeight) - 1 ) locSumAbs += Max( 0, AbsLevel[ xC + 1 ][ yC + 1 ] - baseLevel) (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += Max( 0, AbsLevel[ xC ][ yC + 1 ] - baseLevel) if( yC < (1 << log2TbHeight) - 2 ) locSumAbs += Max( 0, AbsLevel[ xC ][ yC + 2 ] - baseLevel)} locSumAbs = GUp3Min(Q 31, locSumAbs - baseLevel * 5) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in the Table 4. When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) « cRiceParam

[00205] According to the current description, an example of the decoding process in the VVC draft is illustrated below, where the crossed-out font shows the stages or elements removed or suppressed from the decoding process. Table 17. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 ¡f( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] - baseLevel if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] - baseLevel if( yC < (1 « log2TbHeight) - 1 ) locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] - baseLevel (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] - baseLevel / β / υιλι if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevelj xC ][ yC + 2 ] - baseLevel} locSumAbs = Clip3( 0, 31, locSumAbs - baseLevel * 5) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in Table 4. When baseLevel is equal to 0, the variable ZeroPosj n ] is derived as follows: ZeroPosj n ] = ( QState < 2 ? 1:2) « cRiceParam

[00206] Simplification of the derivation of the position of the level mapping in the residual encoding

[00207] In accordance with the twentieth aspect of the description, it is proposed to remove QState from 5 the derivation of ZeroPosj n ] so that ZeroPosj n ] is derived solely from cRiceParam. An example of the corresponding decoding process based on the VVC draft is illustrated below, where the crossed-out font shows steps or elements removed or suppressed from the decoding process. Table 18. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevelj matrix x ][ y ] for the transform block with component index cldx and upper left luminance location ( xO, yO ), the variable locSumAbs is derived as specified by the following pseudocode: locSumAbs = 0 / β / υιλι if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] if( yC < (1 « log2TbHeight) - 1 ) locSumAbs+= AbsLevel[ xC + 1 ][yC + 1 ] (1494)} f( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} locSumAbs = Clip3( 0, 31, locSumAbs - baseLevel *5) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in Table 4. When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] =2 ( QState < 2 ? 1:2) « cRiceParam

[00208] In accordance with the twenty-first aspect of the description, it is proposed to derive ZeroPos[n] based on the value of locSumAbs. An example of the corresponding decoding process based on the VVC draft is illustrated below, where the crossed-out font shows steps or elements removed or suppressed from the decoding process. Table 19. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] if( yC < (1 « log2TbHeight) - 1 ) locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} locSumAbs = Clip3( 0, 31, locSumAbs - baseLevel *5 ) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in Table 4. When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = locSumAbs (QState < 2? 1:2) « cRiceParam

[00209] In accordance with the twenty-second aspect of the description, it is proposed to derive ZeroPos[n] based on the AbsLevel value of contiguous positions. In one example, ZeroPosj n] is derived based on the maximum value between the AbsLevelj (xC + 1)[yC] and AbsLevelj (xC)[yC + 1]. An example of the corresponding decoding process based on the VVC draft is illustrated below, where the crossed-out font shows steps or elements removed or suppressed from the decoding process. Table 20. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 ZeroPos[ n ] = 1 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] ZeroPos[n] = Max(AbsLevel[xC+1][yC],ZeroPos[n]) if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] if( yC < (1 « log2TbHeight) - 1 ) locSumAbs+= AbsLevel[ xC + 1). ][yC + 1] (1494)} ¡f( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + ZeroPos[n] = Max(AbsLevel[xC][yC+1], ZeroPos[n]) if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]}; locSumAbs= Clip3(O, 31, locSumAbs -- baseLevel *5) Given the locSumAbs variable, the Rice parameter cRiceParam is derived as specified in Table 4 . When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos [ n ] = ZeroPos [ n ] * 1.25 + 1 ZeroPosf n ] = ( QState < 2 ? 1 : 2 ) « cRiceParam ΡΓΓΡηη / Ρ7η7 / Β / γΐΛΐ

[00210] In accordance with the twenty-third aspect of the description, it is proposed to derive both cRiceParam and ZeroPos[n] based on the maximum value of all AbsLevel values ​​of contiguous positions. An example of the corresponding decoding process based on the VVC draft is illustrated below, where the crossed-out font shows steps or elements removed or suppressed from the decoding process. Table 21. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs = Max( AbsLevel[ xC + 1 ][ yC ], locSumAbs) if( xC < (1 « log2TbWidth) - 2 ) locSumAbs = Max( AbsLevel[ xC + 2 ][ yC ], locSumAbs ) if( yC < (1 « log2TbHeight) - 1 ) locSumAbs = Max{ AbsLevel[ xC + 1 ][ yC + 1 ], locSumAbs ) (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs = Max( AbsLevel[ xC ][ yC + 1 ], locSumAbs) if( yC < (1 « log2TbHeight) - 2 ) locSumAbs = Maxl AbsLevel[ xC ][ yC + 2 ], locSumAbs )} locSumAbs = Clip3 Max ( 0, 34 ¡ locSumAbs - baseLevel ) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as follows, as specified in Table 4: cRiceParam = Min( (locSumAbs » 2), 3) When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = locSumAbs (QState < 2? 1:2) « cRiceParam

[00211] The same methods described in the previous sections are also applicable to the derivation of predCoeff in the residual coding for the transform omission mode. In one example, the variable predCoeff is derived as follows: predCoeff = Max( absLeftCoeff, absAboveCoeff) + 1

[00212] Residual coding for transform coefficients

[00213] In this description, to address the issues noted in the section “Inefficiencies with video decoding,” methods are provided to simplify and / or further improve the existing residual encoding design. In general, the main attributes of the technologies proposed in this description are summarized below.

[00214] First, adjust the Rice parameter derivation used with normal residual coding based on the current design.

[00215] Secondly, change the binary methods used with normal residual encoding. / β / υιλι

[00216] Third, change the derivation of Rice parameters used with normal residual coding.

[00217] Derivation of Rice parameters in residual coding based on current design

[00218] In accordance with the twenty-fourth aspect of the description, it is proposed to use variable methods of Rice parameter derivation to encode certain syntax elements, for example, abs_remainder / dec_abs_level, in the residual encoding, and the selection is determined according to certain encoded information from the current block, for example, the quantization parameter or the encoding bit depth associated with the TB / CB and / or the segment / profile, and / or according to a new flag associated with the TB / CB / segment / image / sequence level, for example, extended_precision_processing_flag. Different methods can be used to derive the Rice parameter, with some exemplary methods described below.

[00219] First, cRiceParam = (cRiceParam << a) + (cRiceParam » b) + c, where a, b, and c are positive numbers, for example {a, b, c} = {1, 1, 0}. It is important to note that in practice, different logics can be used to obtain the same results, for example, a multiplication operation by a value equal to 2 raised to the power of n.

[00220] Second, cRiceParam = (cRiceParam << a) + b, where a and b are positive numbers, for example, {a, b} = {1, 1}. It is important to note that in practice, other logics can be used to obtain the same results, for example, a multiplication operation by a value equal to 2 raised to the power of n.

[00221] Third, cRiceParam = (cRiceParam*a ) +b, where a and b are positive numbers, for example, {a,b}= {1.5,0}. It is important to note that in practice, other logics can be used to obtain the same results, for example, a multiplication operation by a value equal to 2 raised to the power of n.

[00222] An example of the corresponding decoding process based on the VVC draft is illustrated below. Changes to the VVC draft are shown in Table 22 in bold and italics, and the strikethrough font indicates the stages or elements removed or suppressed from the decoding process. It is important to note that the same logic may be applied differently in practice. For example, certain equations, or a lookup table, may also be used to derive the same Rice parameters, such as from a BitDepth value of a current CU / sequence. Table 22. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 ¡f( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] if( yC < (1 « log2TbHeight) - 1 ) locSumAbs += AbsLevel [ xC + 1 ][ yC + 1 ] ( 1494 )} ; if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} ; locSumAbs = Clip3( 0, 31, locSumAbs -- baseLevel *5); Given the locSumAbs variable, the Rice parameter cRiceParam is derived as specified in Table 4 . / β / υιλι If extended_precision_processing_flag is equal to 1, the Rice parameter cRiceParam is specified as follows: if ( BitDepth < 11 ) { cRiceParameter = cRiceParameter} else if ( BitDepth < 13 ) { cRiceParam = cRiceParam + ( cRiceParam » 1 )} . else if(BitDepth < 15) { cRiceParam = cRiceParam « 1} else { cRiceParam = cRiceParam « 1+ (cRiceParam » 1)} When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) « cRiceParam

[00223] In another example, when BitDepth is greater than or equal to the predefined threshold (e.g., 10, 11, 12, 13, 14, 15, or 16), the Rice parameter cRiceParam is derived as: cRiceParam = (cRiceParam << a) + (cRiceParam >> b) + c, where a, b, and c are positive numbers, e.g., 1. The corresponding decoding process based on the VVC draft is illustrated below. Changes to the VVC draft are shown in Table 23 in bold and italics, and the strikethrough font shows the stages or elements removed or suppressed from the decoding process. It is important to note that the same logic may be applied differently in practice. For example, certain equations, or a lookup table, may also be used to derive the same parameters. Rice, such from a BitDepth value of a current CU / stream Table 23. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] if( yC < (1 « log2TbHeight) - 1 ) locSumAbs += AbsLevel[ xC + 1 ][ yC + 1 ] (1494)} if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} locSumAbs = Clip3( 0, 31, locSumAbs - baseLevel *5 ) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in Table 4. / β / υιλι The Rice parameter cRiceParam is specified as follows: iffBitDepth <11) { cRiceParam = cRiceParam} else IffBitDepth <13) { cRiceParam = cRiceParam + (cRiceParam » 1)} else if(BitDepth < 15) { cRiceParam = cRiceParam « 1} else { cRiceParam = cRiceParam « 1+ (cRiceParam » 1)} When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) << cRiceParam

[00224] Binary methods in residual encoding for profiles larger than 10 bits

[00225] In accordance with the twenty-fourth aspect of the description, it is proposed to use variable sets of Rice parameter derivations to encode certain syntax elements, for example, abs_remainder / dec_abs_level, in the residual encoding, and the selection is determined according to certain encoded information from the current block, for example, the quantization parameter or the encoding bit depth associated with the TB / CB and / or the segment / profile, and / or according to a new flag associated with the TB / CB / segment / image / sequence level, for example, extended_precision_processing_flag. Different methods can be used to derive the variable sets of binary codewords, with some exemplary methods described below.

[00226] First, the same procedure is used to determine the codeword for abs_remainder as in the current version of VVC, but always with a fixed Rice parameter selected (e.g., 2, 3, 4, 5, 6, 7, or 8). The fixed value may differ under different conditions according to certain encoded information in the current block, such as the quantization parameter or encoding bit depth associated with the TB / CB and / or segment / profile, and / or according to a syntax element associated with the TB / CB / segment / image / sequence level, such as rice_parameter_value. A specific example is illustrated in Table 24, where TH1 to TH4 are predefined thresholds that satisfy (TH1 < TH2 < TH3 < TH4), and where K0 to K4 are predefined Rice parameters. It is important to note that the same logic may be applied differently in practice.For example, certain equations, or a lookup table, can also be used to derive the same Rice parameters, as shown in Table 24, from a BitDepth value of a current CU / sequence.

[00227] Secondly, fixed-length binarization.

[00228] Third, the truncated Rice binarization.

[00229] Fourth, the truncated binary binarization process (TB).

[00230] Fifth, the Exp-Golomb binarization process of order k-th (EGk).

[00231] Sixth, the binarization of Exp-Golomb of limited k-th order. Table 24. Determination of the Rice parameter based on bit depth if(BitDepth <TH1) { rice parameter = K0} else if(BitDepth <TH2) { rice parameter = K1} else if(BitDepth <TH3) { rice parameter = K2} else if(BitDepth <TH4) { rice parameter = K3} else { rice parameter = K4}

[00232] In one example, when the new flag, for example, extended_precision_processing_flag, is equal to 1, the Rice parameter cRiceParam is set to n, where n is a positive number (for example, 2, 3, 4, 5, 6, 7, or 8). The set value can be different under five different conditions. An example of the corresponding decoding process based on the VVC draft is illustrated below. Changes to the VVC draft are shown in Table 25 in bold and italics, and the strikethrough font shows the stages or elements removed or suppressed from the decoding process. Table 25. Decoding Process The Rice parameter cRiceParam is derived as follows: If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to 0, the Rice parameter cRiceParam is set to a value equal to 1. If extended_precision_processing_flag is equal to 1, the Rice cRiceParam parameter is set to a value equal to 6. Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight as the inputs.

[00233] In another example, it is proposed to use only a fixed value for the Rice parameter in the encoding of the abs_remainder / dec_abs_level syntax element when the new flag, for example, extended_precision_processing_flag, is equal to 1. The corresponding decoding process is then illustrated based on the VVC draft. Changes in the VVC draft are shown in Table 26 in bold and italics, and the strikethrough font shows the steps or elements removed or suppressed from the decoding process. Table 26. Decoding Process The Rice parameter cRiceParam is derived as follows: If extended_precision_processing_flag is equal to 1, the Rice cRiceParam parameter is set to a value equal to 7. - If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to 0, the Rice parameter cRiceParam is set to a value equal to 1. - Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight as the inputs.

[00234] In yet another example, when BitDepth is greater than or equal to the predefined threshold (e.g., 10, 11, 12, 13, 14, 15, or 16), the Rice parameter cRiceParam is set to n, where n is a positive number, e.g., 4, 5, 6, 7, or 8. The fixed value may be different under different conditions. An example of the corresponding decoding process based on the VVC draft is illustrated below, where TH is a predefined threshold (e.g., 10, 11, 12, 13, 14, 15, or 16). Changes to the VVC draft are shown in Table 27 in bold and italics, and the strikethrough font shows the stages or elements removed or suppressed from the decoding process. Table 27. Decoding Process The Rice parameter cRiceParam is derived as follows: - If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to O, the Rice parameter cRiceParam is set to a value equal to 1. - If BitDepth is greater than TH, the Rice cRiceParam parameter is set to a value equal to 6. - Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight as the inputs.

[00235] In yet another example, it is proposed to use only a fixed value for the Rice parameter in the encoding of the abs_remainder / dec_abs_level syntax element when BitDepth is greater than a predefined threshold (e.g., 10, 11, 12, 13, 14, 15, or 16). The corresponding decoding process based on the VVC draft is illustrated below, where TH is a predefined threshold (e.g., 10, 11, 12, 13, 14, 15, or 16). Changes in the VVC draft are shown in Table 28 in bold and italics, and the strikethrough font shows the stages or elements removed or suppressed from the decoding process. Table 28. Decoding Process The Rice parameter cRiceParam is derived as follows: - If S / BitDepth is greater than TH, the Rice cRiceParam parameter is set to a value equal to 7. - If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to 0, the Rice parameter cRiceParam is set to a value equal to 1. - Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height / β / υιλι log2TbHeight as the inputs

[00236] Derivation of Rice parameters in residual coding

[00237] In accordance with the twenty-sixth aspect of the description, it is proposed to use variable methods of Rice parameter derivation to encode certain syntax elements, for example, abs_remainder / dec_abs_level, in the residual encoding, and the selection is determined according to certain encoded information from the current block, for example, the quantization parameter or the encoding bit depth associated with the TB / CB and / or the segment / profile, and / or according to a new flag associated with the TB / CB / segment / image / sequence level, for example, extended_precision_processing_flag. Different methods can be used to derive the Rice parameter, with some exemplary methods described below.

[00238] First, it is proposed to use counters to derive the Rice parameter. The counters are determined according to the value of the encoded coefficient and certain encoded information from the current block, for example, the component ID. A specific example is riceParameter = counter / a, where a is a positive number, for example, 4, and maintains 2 counters (divided by luminance / chrominance). These counters are reset to 0 at the beginning of each segment. Once encoded, the counter is updated if it is the first encoded coefficient in the sub-TU, as follows: if (coeffValue >= (3 << rice)) counter++ s¡ (((coeffValue « 1) < (1 « riceParameter)) && (counter > 0)) counter-;

[00239] Second, it is proposed to add a shift operation to the derivation of the Rice parameter in VVC. The shift is determined according to the value of the encoded coefficient. An example of the corresponding decoding process based on the VVC draft is illustrated below; the shift is determined according to the counters in Method 1. The changes in the VVC draft are shown in Table 29 in bold and italics, and the strikethrough font shows the stages or elements removed or suppressed from the decoding process. Table 29. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: Shift = max ( O , counter / 4 - 2 ) locSumAbs = 0 if ( xC < ( 1 « log2TbWidth ) - 1 ) { locSumAbs += AbsLevel [ xC + 1 ][ yC ] if ( xC < ( 1 « log2TbWidth ) - 2 ) locSumAbs += AbsLevel [ xC + 2 ][ yC ] if( yC < (1 «log2TbHeight)-1) locSumAbs+=AbsLevel[xC+1][yC+1](1494)}; if( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} ; locSumAbs = Clip3(0, 31, (locSumAbs - baseLevel * 5)»Shift); Given the locSumAbs variable, the Rice parameter cRiceParam is derived as specified in Table 4 . cRiceParameter = cRiceParameter+Shift When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: / β / υιλι ZeroPos [ η ] = ( QState < 2 ? 1 : 2 ) « cRiceParam

[00240] Third, it is proposed to add an offset operation to the derivation of the Rice parameter in VVC. The offset is determined according to certain encoded information from the current block, for example, the encoding bit depth associated with the TB / CB and / or the 5-segment profile (e.g., 14-bit or 16-bit profile). An example of the corresponding decoding process based on the VVC draft is illustrated below; the offset is determined according to the counters from Method 1. Changes to the VVC draft are shown in Table 30 in bold and italics, and the strikethrough font shows the stages or elements removed or suppressed from the decoding process. Table 30. Decoding Process The inputs for this process are the base level baseLevel, the color component index cldx, the luminance location (xO, yO) which specifies the upper left sample of the current transform block relative to the upper left sample of the current image, the scan location of the current coefficient (xC, yC), the binary logarithm of the transform block width log2TbWidth and the binary logarithm of the transform block height log2TbHeight. The output of this process is the Rice cRiceParam parameter. Given the AbsLevel[ x ][ y ] matrix for the transform block with component index cldx and upper left luminance location ( xO, yO ), the locSumAbs variable is derived as specified by the following pseudocode: Shift= max(0, (BitDepth - 8) / 2) locSumAbs = 0 if( xC < (1 « log2TbWidth) - 1 ) { locSumAbs += AbsLevel[ xC + 1 ][ yC ] if( xC < (1 « log2TbWidth) - 2 ) locSumAbs += AbsLevel[ xC + 2 ][ yC ] if( yC < (1 « log2TbHeight) - 1 ) / β / υιλι locSumAbs+= AbsLevel[ xC + 1 ][yC + 1 ] (1494)} ¡f( yC < (1 « log2TbHeight) - 1 ) { locSumAbs += AbsLevel[ xC ][ yC + 1 ] if( yC < (1 « log2TbHeight) - 2 ) locSumAbs += AbsLevel[ xC ][ yC + 2 ]} locSumAbs = Clip3( 0, 31, (locSumAbs - baseLevel * 5)»Shift) Given the variable locSumAbs, the Rice parameter cRiceParam is derived as specified in Table 4. cRiceParam = cRiceParam+Shift When baseLevel is equal to 0, the variable ZeroPos[ n ] is derived as follows: ZeroPos[ n ] = ( QState < 2 ? 1:2) << cRiceParam

[00241] Residual coding for omitting transform

[00242] In accordance with the twenty-seventh aspect of the description, it is proposed to use variable sets of binary codewords to encode certain syntax elements, for example, abs_remainder, in transform-skipping residual coding, and the selection is determined according to certain encoded information from the current block, for example, the quantization parameter or the encoding bit depth associated with the TB / CBy / or segment / profile, and / or according to a new flag associated with the TB / CB / segment / image / sequence level, for example, extended_precision_processing_flag. Different methods can be used to derive the variable sets of binary codewords, with some exemplary methods described below.

[00243] First, the same procedure is used to determine the codeword for abs_remainder as in the current version of VVC, but always with a fixed Rice parameter selected (e.g., 2, 3, 4, 5, 6, 7, or 8). The fixed value may differ under different conditions 15 according to certain encoded information in the current block, for example, the quantization parameter or encoding bit depth associated with the TB / CB and / or segment / profile, and / or according to a syntax element associated with the TB / CB / segment / image / sequence level, for example, rice_parameter_value. A specific example is illustrated in Table 7, where TH1 to TH4 are predefined thresholds that satisfy (TH1 < TH2 < TH3 < TH4), and where KO to K4 are predefined Rice parameters. It is important to note that the same logic may be applied differently in practice.For example, certain equations, or a lookup table, can also be used to derive the same Rice parameters, as shown in Table 7, from a BitDepth value of a current CU / sequence.

[00244] Secondly, fixed-length binarization.

[00245] Third, the truncated Rice binarization.

[00246] Fourth, the truncated binary (TB) binarization process.

[00247] Fifth, the Exp-Golomb binarization process of order k-th (EGk).

[00248] Sixth, the binarization of Exp-Golomb of limited k-th order.

[00249] An example of the corresponding decoding process based on the draft of The VVC is illustrated below; changes to the VVC draft are shown in Table 31 in bold and italics, and the strikethrough font indicates the stages or elements removed or suppressed from the decoding process. It is important to note that the same logic may be applied differently in practice. For example, certain equations, or a lookup table, may also be used to derive the same Rice parameters. Table 31. Decoding Process The Rice parameter cRiceParam is derived as follows: If S / transform_skip_flag[xO][ yO][ cldx ] is equal to 1 and shtsresidualcodingdisabledfíag is equal to O, the derivation process for the Rice parameter cRiceParam is specified below. if(BitDepth <11) { rice parameter = 1} else if(BitDepth <13) { rice parameter = 4} else if(BitDepth <15) { rice parameter = 6} else { rice parameter = 8} ---If transform skip flag[ xO ][ yO ][ cldx ] is equal to 1 and sh ts residual coding disabled fíag is equal to O, the Rice parameter cRiceParam is set to a value equal to 1. - Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight as the inputs.

[00250] In another example, it is proposed to use only a fixed value for the Rice parameter in the encoding of the absyemainder syntax element when the new flag, for example, extended_precision_processing_flag, is equal to 1. The corresponding decoding process is illustrated below based on the VVC draft. Changes in the VVC draft are shown in Table 32 in bold and italics, and the strikethrough font shows the stages or elements removed or suppressed from the decoding process. Table 32. Decoding Process The Rice parameter cRiceParam is derived as follows: - If extended_precision_processing_fiag is equal to 1, transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh ts residual coding disabled flag is equal to 0, the derivation process for the Rice parameter cRiceParam is specified as follows: if(BitDepth <11) { rice parameter = 1} else if(BitDepth <13) { rice parameter = 4} else if(BitDepth <15) { rice parameter = 6} else { rice parameter = 8} - If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to 0, the Rice parameter cRiceParam is set to a value equal to 1. - Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight as the inputs. / β / υιλι

[00251] In yet another example, when the new indicator, for example, extended_precision_processing_flag, is equal to 1, the Rice parameter cRiceParam is set to n, where n is a positive number (for example, 2, 3, 4, 5, 6, 7, or 8). The set value may be different under different conditions. An example of the corresponding decoding process 5 based on the VVC draft is illustrated below. Changes to the VVC draft are shown in Table 33 in bold and italics, and the strikethrough font shows the stages or elements removed or suppressed from the decoding process. Table 33. Decoding Process The Rice parameter cRiceParam is derived as follows: - S / ' extended_precision_processing_fiag is equal to 1, transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and shtsresidualcodingdisabledflag is equal to 0, the Rice parameter cRiceParam is set to a value equal to 7. If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to 0, the Rice parameter cRiceParam is set to a value equal to 1. - Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight as the inputs.

[00252] In yet another example, when BitDepth is greater than or equal to the predefined threshold (e.g., 10, 11, 12, 13, 14, 15, or 16), the Rice parameter cRiceParam is set to n, where n is a positive number, e.g., 4, 5, 6, 7, or 8. The fixed value may be different under different conditions. An example of the corresponding decoding process based on the VVC draft is illustrated below, where TH is a predefined threshold (e.g., 10, 11, 12, 13, 14, 15, or 16). Changes to the VVC draft are shown in Table 34 in bold and italics, and the strikethrough font shows the stages or elements removed or suppressed from the decoding process. Table 34. Decoding process / β / υιλι The Rice parameter cRiceParam is derived as follows: - If BitDepth is greater than TH, transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and shtsresidualcodingdisabledflag is equal to 0, the Rice parameter cRiceParam is set to a value equal to 7. - If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to 0, the Rice parameter cRiceParam is set to a value equal to 1. - Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight as the inputs.

[00253] In yet another example, a control flag is signaled in the segment header to indicate whether Rice parameter signaling for transform skip blocks is enabled or disabled. When the control flag is signaled as enabled, another syntax element for each transform skip segment is signaled to indicate that segment's Rice parameter. When the control flag is signaled as disabled (for example, set to a value equal to Ό), no other syntax element at a lower level is signaled to indicate the Rice parameter for the transform skip segment, and a default Rice parameter (for example, 1) is used for the entire transform skip segment. An example of the corresponding decoding process based on the VVC draft is illustrated below, where TH is a predefined value (for example, 0, 1, 2).The changes in the VVC draft are shown in Table 35 in bold and italics, and the strikethrough font indicates the stages or elements removed or suppressed from the decoding process. It is important to note that sh_ts_residual_coding_rice_index can be encoded in different ways and / or can have the maximum value. For example, u(n), an unsigned integer using n bits, and of(n), a fixed-pattern bit string using n bits written (from left to right), where the leftmost bit appears first, can also be used to encode / decode the same syntax element. Table 35. Segment Header Syntax slice_header() { Descriptor if( sps_transform_skip_enabled_flag && !sh_dep_quant_used_flag && !sh_sign_data_hiding_used_flag ) sh_ts_residual_coding_disabled_flag u(1) if(!sh_ts_residual_coding_disabled_flag ) { sh_ts_residual_coding_rice_flag u(1) if(sh_ ts_residual_ coding_rice_ flag ) sh_ts_residual_coding_r¡ce_¡ndex ue(v)}

[00254] sh_ts_residual_coding_rice_flag equal to 1 specifies that sh_ts_residual_coding_rice_index might be present in the current segment. sh_ts_residual_coding_rice_flag equal to 0 specifies that sh_ts_residual_coding_rice_index is not present in the current segment. When sh_ts_residual_coding_rice_flag is not present, it is inferred that the value of sh_ts_residual_coding_rice_flag is equal to 0.

[00255] sh_ts_residual_coding_rice_index specifies the Rice parameter used for the residual_ts_coding() syntax structure. Table 36. Decoding Process The Rice parameter cRiceParam is derived as follows: If shtsresidualcodingriceflag is equal to 1, transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh ts residual coding disabled flag is equal to 0, the Rice cRiceParam parameter is set to a value equal to (sh_ts_residual_coding_rice_index+TH). - If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to 0, the Rice parameter cRiceParam is set to a value equal to 1. - Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight as the inputs.

[00256] Figure 16 shows a method for video decoding. The method can be applied, for example, to a decoder.

[00257] At stage 1610, the decoder can receive a video bitstream. The video bitstream may include encoded video information and information for decoding the encoded video information.

[00258] At stage 1612, the decoder can receive a control flag at a segment header level. The control flag can signal whether a Rice parameter is enabled for a transform bypass segment. For example, the control flag can be used to decode encoded video information, and the Rice parameter can be used to decode the syntax of abs_remainder and dec_abs_level.

[00259] At stage 1614, the decoder can receive at least one syntax element at the segment header level. The syntax element(s) can be signaled for the transform skip segment and indicate the Rice parameter. For example, a syntax element can be signaled for each transform skip segment to indicate the Rice parameter for that segment. In another example, when a syntax element is not signaled at a lower level to indicate the Rice parameter for the transform skip segment, a default Rice parameter is used for the entire transform skip segment.

[00260] In stage 1616, the decoder can subject the video bitstream to entropy decoding based on the control flag and the syntax element(s). For example, the decoder can use the control flag and the syntax element(s) to derive quantized coefficient levels and prediction-related information to decode the encoded video information.

[00261] The entropy coding of quantization indices for transform / transform omission blocks may be referred to as a transform / transform omission coefficient coding.

[00262] In one or more modes, an encoder may determine that a disabled residual encoding flag is equal to 0. The encoder may also signal a residual encoding Rice flag. The syntax element(s) may include the residual encoding Rice flag. The encoder may also determine that the residual encoding Rice flag is equal to 1. The encoder may also signal a residual encoding Rice index flag. The syntax element(s) include the residual encoding Rice index flag.

[00263] In one or more modes, a decoder may determine that a disabled residual encoding flag is equal to 0. The decoder may receive a residual encoding Rice flag. The syntax element(s) may include the residual encoding Rice flag. The decoder may also determine that the residual encoding Rice flag is equal to 1. The decoder may also receive a residual encoding Rice index flag. The syntax element(s) include the residual encoding Rice index flag.

[00264] In yet another example, a control flag is signaled in the sequence parameter set (or in the sequence parameter set range extension syntax) to indicate whether Rice parameter signaling for transform skip blocks is enabled or disabled. When the control flag is signaled as enabled, another syntax element for each transform skip segment is signaled to indicate the Rice parameter for that segment. When the control flag is signaled as disabled (for example, set to a value equal to Ό), no other syntax element at a lower level is signaled to indicate the Rice parameter for the transform skip segment, and a default Rice parameter (for example, 1) is used for the entire transform skip segment.An example of the corresponding decoding process based on the VVC draft is illustrated below, where TH is a predefined value (e.g., 0, 1, 2). Changes to the VVC draft are shown in Table 37 in bold and italics, and the strikethrough font indicates the stages or elements removed or suppressed from the decoding process. It is important to note that sh_ts_residual_coding_rice_¡dx can be encoded in different ways and / or can have the maximum value. For example, u(n), an unsigned integer using n bits, and of(n), a fixed-pattern bit string using n bits written (from left to right), where the leftmost bit appears first, can also be used to encode / decode the same syntax element. Table 37. RBSP Syntax of the Sequence Parameter Set seq_parameter_set_rbsp() { Descriptor sps_sign_data_hiding_enabled_flag u(1) sps ts residual coding rice present ¡n sh flag u(1) sps_virtual_boundaries_enabled_flag u(1)}

[00265] sps_ts_residual_coding_rice_present_in_sh_flag equal to 1 specifies that sh_ts_residual_coding_rice_idx might be present in SH syntax structures that reference the SPS. sps_ts_residual_coding_rice_present_in_sh_flag equal to 0 specifies that sh_ts_residual_coding_rice_idx is not present in SH syntax structures that reference the SPS. When ssps_ts_residual_coding_rice_present_in_sh_flag is not present, it is inferred that the value of sps_ts_residual_coding_rice_present_in_sh_flag is equal to 0. Table 38. Segment Header Syntax slice_header() { Descriptor if( sps_transform_skip_enabled_flag && !sh_dep_quant_used_flag && !sh_sign_data_hiding_used_flag ) sh_ts_residual_coding_disabled_flag u(1) if((!sh_ts_residual_coding_disabled_flag) && sps_ts_residual_coding_rice_enabled_flag ) sh_ ts_residual_ coding_rice_idx ue(v)}

[00266] sh_ts_residual_coding_rice_idx specifies the Rice parameter used for the residual_ts_coding() syntax structure. Table 39. Decoding Process The Rice parameter cRiceParam is derived as follows: - If S / spstsresidualcoding riceflag is equal to 1, transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh ts residual coding disabled flag is equal to 0, the Rice cRiceParam parameter is set to a value equal to (sh_ts_residual_coding_rice_index+TH). - If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to 0, the Rice parameter cRiceParam is set to a value equal to 1. - Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight as the inputs.

[00267] In yet another example, a syntax element is signaled for each transform omission segment to indicate the Rice parameter of that segment. An example of the corresponding decoding process based on the VVC draft is illustrated below. Changes in the VVC draft are shown in Table 40 in bold and italics, and the strikethrough font shows the stages or elements removed or suppressed from the decoding process. It is important to note that sh_ts_residual_coding_rice_idx can be encoded in different ways and / or can have the maximum value. For example, u(n), an unsigned integer using n bits, or of(n), a fixed-pattern bit string using n bits written (from left to right), where the leftmost bit appears first, can also be used to encode / decode the same syntax element. Table 40. Segment Header Syntax slice_header() { Descriptor if( sps_transform_skip_enabled_flag && !sh_dep_quant_used_flag && !sh_sign_data_hiding_used_flag ) sh_ts_residual_coding_disabled_flag u(1) if(!sh_ts_residual_coding_disabled_flag) sh_ ts_ resid ual_ coding_rice_ idx ue(v)}

[00268] sh_ts_residual_coding_rice_idx specifies the Rice parameter used for the residual_ts_coding() syntax structure. When sh ts residual coding rice idx is not present, it is inferred that the value of sh_ts_residual_coding_rice_idx is equal to 0. Table 41. Decoding Process The Rice parameter cRiceParam is derived as follows: - If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to 0, the Rice cRiceParam parameter is set to a value equal to sh_ts_residual_coding_rice_idx+1. - Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight as the inputs.

[00269] Figure 17 shows a method for video decoding. The method can be applied, for example, to a decoder.

[00270] In step 1710, the decoder may receive, in response to the determination that a disabled residual encoding flag is equal to 0, a residual encoding Rice flag. The syntax element(s) include the residual encoding Rice flag.

[00271] In step 1712, the decoder may receive, in response to the determination that the residual encoding Rice indicator is equal to 1, a residual encoding Rice index indicator. The syntax element(s) include the residual encoding Rice index indicator.

[00272] In yet another example, a control flag is signaled in the image parameter set range extension syntax / β / υιλι to indicate whether Rice parameter signaling for transform skip blocks is enabled or disabled. When the control flag is signaled as enabled, another syntax element is signaled to indicate the Rice parameter for that image. When the control flag is signaled as disabled (for example, set to a value of “0”), no other syntax element at a lower level is signaled to indicate the Rice parameter for the transform skip segment, and a default Rice parameter (for example, 1) is used for the entire transform skip segment. An example of the corresponding decoding process based on the VVC draft is illustrated below, where TH is a predefined value (for example, 0, 1, 2).The changes in the VVC draft are shown in Table 42 in bold and italics, and the strikethrough font indicates the stages or elements removed or suppressed from the decoding process. It is important to note that pps_ts_residual_coding_rice_¡dx can be encoded in different ways and / or can have the maximum value. For example, u(n), an unsigned integer using n bits, and of(n), a fixed-pattern bit string using n bits written (from left to right), where the leftmost bit appears first, can also be used to encode / decode the same syntax element. Table 42. Syntax of range extensions of image parameter sets pps_range_extensions() { Descriptor pps_ ts_ residual- coding_ rice_ flag uW if(pps ts residual coding rice flag) pps_ts_residual_coding_rice_idx ue(v)}

[00273] pps_ts_residual_coding_rice_flag equal to 1 specifies that pps_ts_residual_coding_rice_index might be present in the current image. pps_ts_residual_coding_rice_flag equal to 0 specifies that pps_ts_residual_coding_rice_index is not present in the current image. When pps_ts_residual_coding_rice_flag is not present, it is inferred that the value of pps_ts_residual_coding_rice_flag is equal to 0.

[00274] pps_ts_residual_coding_rice_idx specifies the Rice parameter used for the residual_ts_coding() syntax structure. Table 43. Decoding Process The Rice parameter cRiceParam is derived as follows: If ppstsresidualcodingriceflag is equal to 1, transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh ts residual coding disabled flag is equal to 0, the Rice cRiceParam parameter is set to a value equal to (pps_ts_residual_coding_rice_idx+TH). - If transform_skip_flag[ xO ][ yO ][ cldx ] is equal to 1 and sh_ts_residual_coding_disabled_flag is equal to 0, the Rice parameter cRiceParam is set to a value equal to 1. - Otherwise, the Rice parameter cRiceParam is derived by invoking the Rice parameter derivation process for abs_remainder[], as specified in Table 3, with the baseLevel variable set to a value equal to 4, the color component index cldx, the luminance location (xO, yO), the current coefficient scan location (xC, yC), the binary logarithm of the transform block width log2TbWidth, and the binary logarithm of the transform block height log2TbHeight as the inputs.

[00275] The methods described above may be implemented using an apparatus that includes one or more circuits, including application-specific integrated circuits (ASICs), digital signal processors (DSPs), digital signal processing devices (DSPDs), programmable logic devices (PLDs), field-programmable gate arrays (FPGAs), controllers, microcontrollers, microprocessors, or other electronic components. The apparatus 10 may use the circuits in combination with other hardware or software components to perform the methods described above. Each module, submodule, unit, or subunit described above may be implemented at least partially using one or more circuits.

[00276] Other examples of the description will be apparent to those skilled in the art from consideration of the specification and the practice of the description disclosed herein. The purpose of this request is to encompass any variation, use, or adaptation of the description while adhering to its general principles and including such deviations from the present description to the extent that they arise from known or customary practice in the art. The specification and examples are intended to be considered for illustrative purposes only.

[00277] It will be appreciated that the present description is not limited to the exact examples above described and illustrated in the accompanying drawings, and various modifications and changes may be made without departing from its scope.

[00278] Figure 18 shows an 1810 computing environment along with an 1860 user interface. The 1810 computing environment can be part of a data processing server. The 1810 computing environment includes an 1820 processor, an 1840 memory, and an 1850 I / O interface.

[00279] The 1820 processor typically controls the general operations of the 1810 computing environment, such as those associated with the display, data acquisition, data communications, and image processing. The 1820 processor may include one or more processors to execute instructions in order to perform all or some of the steps of the methods described above. In addition, the 1820 processor may include one or more modules that facilitate interaction between the 1820 processor and other components. The processor may be a Central Processing Unit (CPU), a microprocessor, a single-chip machine, a GPU, or similar.

[00280] 1840 memory is configured to store various types of data to support the operation of the 1810 computing environment. 1840 memory may include 1842 predefined software. Examples of such data include instructions for any application or method operated in an 1810 computing environment, video data sets, image data, etc. 1840 memory may be implemented using any type of volatile or non-volatile memory device, or a combination thereof, such as static random-access memory (SRAM), electrically erasable programmable read-only memory (EEPROM), erasable programmable read-only memory (EPROM), programmable read-only memory (PROM), read-only memory (ROM), magnetic memory, flash memory, magnetic disk, or optical disk.

[00281] The 1850 I / O interface provides an interface between the 1820 processor and peripheral interface modules, such as a keyboard, click wheel, buttons, and the like. Buttons may include, but are not limited to, a home button, a start scan button, and a stop scan button. The 1850 I / O interface can be coupled to an encoder and a decoder.

[00282] In some embodiments, a non-transient, computer-readable storage medium comprising a plurality of programs, such as those contained in 1840 memory, executable by the 1820 processor in the 1810 computing environment, is also provided for performing the methods described above. For example, the non-transient, computer-readable storage medium may be a ROM, RAM, CD-ROM, magnetic tape, floppy disk, optical data storage device, or the like.

[00283] The non-transient, computer-readable storage medium has stored a plurality of programs for execution through a computing device having one or more processors, wherein the plurality of programs, when executed through the processor(s), causes the computing device to perform the above-described method for motion prediction.

[00284] In some modalities, the 1810 computing environment can be implemented with one or more application-specific integrated circuits (ASICs), digital signal processors (DSPs), digital signal processing devices (DSPDs), programmable logic devices (PLDs), field-programmable gate arrays (FPGAs), graphics processing units (GPUs), controllers, microcontrollers, microprocessors, or other electronic components to perform the methods described above.

[00285] The description in this description is presented for illustrative purposes and is not intended to be exhaustive or limited to the present description. Various modifications, variations, and alternative implementations will be apparent to those skilled in the art who have the benefit of the teachings presented in the preceding descriptions and in the corresponding drawings.

[00286] The examples were chosen and described to explain the principles of the description and to enable other practitioners to understand the description for various implementations and to make the best use of the underlying principles and the various implementations with their various modifications in a manner appropriate for the specific intended use. It should therefore be understood that the scope of the description is not limited to the specific examples of the implementations described and is intended to include modifications and other implementations that fall within the scope of this description.

Claims

1. A method for video decoding, comprising: receiving, by means of a decoder, a video bitstream; receiving, by means of the decoder, a control flag at a segment header level, wherein the control flag is used to determine whether at least one syntax element related to a Rice parameter is flagged for a segment; in response to determining that at least one syntax element is flagged, receiving, by means of the decoder, the at least one syntax element at the segment header level, wherein the syntax element(s) are used to determine the Rice parameter; and subjecting the video bitstream to entropy decoding, by means of the decoder, based on the control flag and the syntax element(s).

2. The method according to claim 1, further comprising: receiving, by means of the decoder, a residual encoding Rice indicator at a Sequence Picture Set (SPS) level; wherein the control indicator is a disabled residual encoding indicator, and wherein receiving, by means of the decoder, the syntax element(s) at the segment header level comprises: in response to the determination that the disabled residual encoding indicator is equal to 0 and that the residual encoding Rice indicator is equal to 1, receiving a residual encoding Rice index indicator, wherein the syntax element(s) comprise the residual encoding Rice index indicator.

3. The method according to claim 2, wherein when the residual encoding Rice indicator is equal to 1, the residual encoding Rice indicator indicates that the residual encoding Rice index indicator is present in a current segment.

4. The method according to claim 2, wherein when the residual encoding Rice indicator is equal to 0, the residual encoding Rice indicator indicates that the residual encoding Rice index indicator is not present in a current segment.

5. The method according to claim 4 also comprises: in response to the determination that the residual encoding Rice indicator is not present, inferring that a value of the residual encoding Rice indicator is equal to 0.

6. The method according to claim 2, further comprising: setting the Rice parameter to a value equal to the value of the residual encoding Rice index indicator plus a predefined value in response to the determination that the residual encoding Rice indicator is equal to 1, a transform omission indicator is equal to 1, and the residual encoding disabled indicator is equal to 0.

7. The method according to claim 2, further comprising: setting the Rice parameter to a value equal to the value of the residual encoding Rice index indicator plus 1 in response to the determination that a transform omission indicator is equal to 1 and that the residual encoding disabled indicator is equal to 0.

8. A computing device, comprising: one or more processors; and a non-transient, computer-readable storage medium coupled to the one or more processors, wherein the one or more processors are configured to receive a video bitstream to perform the method in accordance with any one of claims 1 to 7.

9. A computer-readable storage medium that stores data for processing through a computing device having one or more processors, wherein the data, when processed through the processor(s), causes the computing device to receive a video bitstream to perform the method in accordance with any one of claims 1 to 7.