CN117529914A - 在视频编码中用于波前并行处理的基于历史的莱斯参数推导 - Google Patents
在视频编码中用于波前并行处理的基于历史的莱斯参数推导 Download PDFInfo
- Publication number
- CN117529914A CN117529914A CN202280042714.1A CN202280042714A CN117529914A CN 117529914 A CN117529914 A CN 117529914A CN 202280042714 A CN202280042714 A CN 202280042714A CN 117529914 A CN117529914 A CN 117529914A
- Authority
- CN
- China
- Prior art keywords
- ctu
- cidx
- statcoeff
- partition
- history counter
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 235000007164 Oryza sativa Nutrition 0.000 title claims abstract description 154
- 235000009566 rice Nutrition 0.000 title claims abstract description 154
- 238000012545 processing Methods 0.000 title claims abstract description 78
- 238000009795 derivation Methods 0.000 title claims abstract description 54
- 240000007594 Oryza sativa Species 0.000 title 1
- 238000005192 partition Methods 0.000 claims abstract description 168
- 241000209094 Oryza Species 0.000 claims abstract description 153
- 238000000034 method Methods 0.000 claims abstract description 148
- 230000004044 response Effects 0.000 claims description 31
- 238000006467 substitution reaction Methods 0.000 claims description 18
- 238000003491 array Methods 0.000 claims description 9
- 230000008569 process Effects 0.000 abstract description 87
- 238000013139 quantization Methods 0.000 description 74
- 230000007246 mechanism Effects 0.000 description 16
- 230000015654 memory Effects 0.000 description 11
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 8
- 230000004048 modification Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 8
- 230000003044 adaptive effect Effects 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 6
- 230000009466 transformation Effects 0.000 description 6
- 238000004422 calculation algorithm Methods 0.000 description 5
- 239000013598 vector Substances 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 230000006835 compression Effects 0.000 description 4
- 238000007906 compression Methods 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 4
- 238000000638 solvent extraction Methods 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 4
- 241000023320 Luma <angiosperm> Species 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical compound COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000002441 reversible effect Effects 0.000 description 3
- 230000000007 visual effect Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000000704 physical effect Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 101150071238 tut1 gene Proteins 0.000 description 1
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
在一些实施例中,视频解码器使用基于历史的莱斯参数推导以及波前并行处理(WPP)来根据视频的码流对视频进行解码。视频解码器访问表示视频的分区的二进制串,并处理分区中的每个编码树单元(CTU)以生成CTU中已解码的系数值。该过程包括:在对CTU进行解码之前,确定是否启用WPP且CTU是否是分区中的当前CTU行的第一个CTU;如果是,则将历史计数器设置为初始值。该过程进一步包括:通过基于历史计数器的值,计算CTU中的变换单元(TU)的莱斯参数,来对CTU进行解码;以及基于计算出的莱斯参数,将与CTU中的TU对应的二进制串解码成TU的系数值。
Description
相关申请的交叉引用
本申请要求于2021年8月26日提交的题为“在视频编码中用于波前并行处理的基于历史的莱斯参数推导(History-Based Rice Parameter Derivations for WavefrontParallel Processing in Video Coding)”的第63/260,600号美国临时申请、于2021年10月4日提交的题为“在视频编码中用于波前并行处理的基于历史的莱斯参数推导(History-Based Rice Parameter Derivations for Wavefront Parallel Processing in VideoCoding)”的第63/262,078号美国临时申请,以及于2021年10月1日提交的题为“VVC操作范围扩展的位深度范围表示(Representation of Bit Depth Range for VVC OperationRange Extension)”的第63/251,385号美国临时申请的优先权,以上申请的全部内容通过引用整体并入本文中。
技术领域
本公开总体上涉及用于视频处理的计算机实现的方法和系统。具体地,本公开涉及在视频编码中用于波前并行处理(Wavefront Parallel Processing)的基于历史的莱斯参数(Rice Parameter)推导。
背景技术
普遍存在的支持相机的设备,例如智能手机、平板电脑和计算机,使捕捉视频或图像变得比以往更加容易。然而,即使是短视频,其数据量也可能非常大。视频编码技术(包括视频编码和解码)使得视频数据能够压缩成更小的尺寸,从而使得各种视频能够进行存储和传输。视频编码已在范围广泛的应用(例如数字电视广播、互联网和移动网络上的视频传输、实时应用(例如视频聊天、视频会议)、DVD、蓝光光盘等)中使用。为了减少用于存储视频的存储空间和/或用于传输视频的网络带宽消耗,希望提高视频编码方案的效率。
发明内容
一些实施例涉及在视频编码中用于波前并行处理的基于历史的莱斯参数推导。在一个示例中,一种用于对视频进行解码的方法,包括:访问表示视频的分区的二进制串,分区包括多个编码树单元(CTU),多个CTU形成一个或多个CTU行;对于分区中的多个CTU中的每个CTU,在对CTU进行解码之前,确定启用并行编码且CTU是分区中的一个或多个CTU行之中的当前CTU行的第一个CTU;响应于确定启用并行编码且CTU是分区中的当前CTU行的第一个CTU,将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;对CTU进行解码,包括:基于历史计数器,计算CTU中的变换单元(TU)的莱斯参数,基于计算出的莱斯参数,将与CTU中的TU对应的二进制串解码成TU的系数值,和根据系数值确定CTU中的TU的像素值;以及输出视频的解码分区,解码分区包括分区中已解码的多个CTU。
在另一示例中,一种非暂时性计算机可读介质,其上存储有程序代码,程序代码能够由一个或多个处理设备执行以执行多个操作,多个操作包括:访问表示视频的分区的二进制串,分区包括多个编码树单元(CTU),多个CTU形成一个或多个CTU行;对于分区中的多个CTU中的每个CTU,在对CTU进行解码之前,确定启用并行编码且CTU是分区中的一个或多个CTU行之中的当前CTU行的第一个CTU;响应于确定启用并行编码且CTU是分区中的当前CTU行的第一个CTU,将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;对CTU进行解码,包括:基于历史计数器,计算CTU中的变换单元(TU)的莱斯参数,基于计算出的莱斯参数,将与CTU中的TU对应的二进制串解码成TU的系数值,和根据系数值确定CTU中的TU的像素值;以及输出视频的解码分区,解码分区包括分区中已解码的多个CTU。
在另一示例中,一种系统,包括处理设备以及通信地联接到处理设备的非暂时性计算机可读介质。处理设备配置成执行存储在非暂时性计算机可读介质中的程序代码,从而执行多个操作,多个操作包括:访问表示视频的分区的二进制串,分区包括多个编码树单元(CTU),多个CTU形成一个或多个CTU行;对于分区中的多个CTU中的每个CTU,在对CTU进行解码之前,确定启用并行编码且CTU是分区中的一个或多个CTU行之中的当前CTU行的第一个CTU;响应于确定启用并行编码且CTU是分区中的当前CTU行的第一个CTU,将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;对CTU进行解码,包括:基于历史计数器,计算CTU中的变换单元(TU)的莱斯参数,基于计算出的莱斯参数,将与CTU中的TU对应的二进制串解码成TU的系数值,和根据系数值确定CTU中的TU的像素值;以及输出视频的解码分区,解码分区包括分区中已解码的多个CTU。
在另一示例中,一种用于对视频进行编码的方法,包括:访问视频的分区,分区包括多个编码树单元(CTU),多个CTU形成一个或多个CTU行;处理视频的分区,以生成分区的二进制表示,该处理包括:对于分区中的多个CTU中的每个CTU,在对CTU进行编码之前,确定启用并行编码且CTU是分区中的一个或多个CTU行之中的当前CTU行的第一个CTU;响应于确定启用并行编码且CTU是分区中的当前CTU行的第一个CTU,将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;对CTU进行编码,包括:基于历史计数器,计算CTU中的变换单元(TU)的莱斯参数,和基于计算出的莱斯参数,将TU的系数值编码成与CTU中的TU对应的二进制表示;以及将分区的二进制表示编码到视频的码流中。
在另一示例中,一种非暂时性计算机可读介质,其上存储有程序代码,程序代码能够由一个或多个处理设备执行以执行多个操作,多个操作包括:访问视频的分区,分区包括多个编码树单元(CTU),多个CTU形成一个或多个CTU行;处理视频的分区,以生成分区的二进制表示,该处理包括:对于分区中的多个CTU中的每个CTU,在对CTU进行编码之前,确定启用并行编码且CTU是分区中的一个或多个CTU行之中的当前CTU行的第一个CTU;响应于确定启用并行编码且CTU是分区中的当前CTU行的第一个CTU,将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;对CTU进行编码,包括:基于历史计数器,计算CTU中的变换单元(TU)的莱斯参数,和基于计算出的莱斯参数,将TU的系数值编码成与CTU中的TU对应的二进制表示;以及将分区的二进制表示编码到视频的码流中。
在另一示例中,一种系统,包括处理设备以及通信地联接到处理设备的非暂时性计算机可读介质。处理设备配置成执行存储在非暂时性计算机可读介质中的程序代码,从而执行多个操作,多个操作包括:访问视频的分区,分区包括多个编码树单元(CTU),多个CTU形成一个或多个CTU行;处理视频的分区,以生成分区的二进制表示,该处理包括:对于分区中的多个CTU中的每个CTU,在对CTU进行编码之前,确定启用并行编码且CTU是分区中的一个或多个CTU行之中的当前CTU行的第一个CTU;响应于确定启用并行编码且CTU是分区中的当前CTU行的第一个CTU,将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;对CTU进行编码,包括:基于历史计数器,计算CTU中的变换单元(TU)的莱斯参数,和基于计算出的莱斯参数,将TU的系数值编码成与CTU中的TU对应的二进制表示;以及将分区的二进制表示编码到视频的码流中。
提及这些说明性实施例并不是为了限制或限定本公开,而是为了提供示例来帮助理解本公开。在具体实施方式中讨论了另外的实施例,且在具体实施方式中提供进一步的描述。
附图说明
当参考附图阅读以下具体实施方式时,会更好地理解本公开的特征、实施例和优点。
图1是示出配置成实现本文提出的实施例的视频编码器的示例的框图。
图2是示出配置成实现本文提出的实施例的视频解码器的示例的框图。
图3描述了根据本公开的一些实施例的视频中图片的编码树单元划分的示例。
图4描述了根据本公开的一些实施例的编码树单元的编码单元划分的示例。
图5描述了编码块的示例,其中,按照预定顺序来处理编码块的元素。
图6描述了用于计算位于变换单元边界附近的系数的局部求和变量的模板图案的示例。
图7描述了瓦片的示例,其中,对该瓦片启用波前并行处理。
图8描述了根据本公开的一些实施例的帧、该帧中包含的瓦片和编码树单元的示例,其中,对该帧、该帧中包含的瓦片和编码树单元计算历史计数器。
图9描述了根据本公开的一些实施例的用于对视频的分区进行编码的过程的示例。
图10描述了根据本公开的一些实施例的用于对视频的分区进行解码的过程的示例。
图11描述了根据本公开的一些实施例的用于对视频的分区进行编码的过程的另一示例。
图12描述了根据本公开的一些实施例的用于对视频的分区进行解码的过程的另一示例。
图13描述了可用于实现本公开的一些实施例的计算系统的示例。
具体实施方式
各实施例提供了在视频编码中用于波前并行处理的基于历史的莱斯(Rice)参数推导。如上文所讨论,生成、存储和传输越来越多的视频数据。有利的是提高视频编码技术的效率,从而在不损害解码视频的视觉质量的情况下使用更少的数据来表示视频。提高编码效率的一种方式是通过熵编码,使用尽可能少的比特将处理后的视频样本压缩成二进制码流。另一方面,由于视频通常包含大量数据,因此有利的是减少编码(编码和解码)期间的处理时间。为此,可以在视频编码和解码中采用并行处理(Parallel Processing)。
在熵编码(entropy coding)中,视频样本二值化成二进制bin,且诸如上下文自适应二进制算术编码(CABAC)之类的编码算法可进一步将bin压缩成比特。二值化需要计算二值化参数,例如在多功能视频编码(VVC)规范中规定的截断莱斯(TR)和有限k阶指数哥伦布(EGk)二值化过程的组合中使用的莱斯参数。为了提高编码效率,使用基于历史的莱斯参数推导。在这种基于历史的莱斯参数推导中,基于历史计数器(表示为StatCoeff)来推导分区(例如图片、切片(slice)或瓦片(tile))的当前编码树单元(CTU)中的变换单元(TU)的莱斯参数,该历史计数器根据分区中的当前CTU和先前CTU中的先前TU中的系数来计算。然后,使用历史计数器推导替换变量(表示为HistValue),以用于推导莱斯参数。历史计数器可以在处理TU时更新。在一些示例中,即使历史计数器已更新,TU的替换变量仍保持相同。
用于计算历史计数器的分区中的先前CTU和当前CTU之间的依赖性可能与并行处理的使用相冲突、限制或者甚至阻止并行处理的使用,从而导致不稳定或低效的视频编码。本文描述的各种实施例如下解决这些问题:通过减少或消除分区中的一些CTU之间的依赖性,使得可启用并行处理来加速视频处理过程,或者通过在冲突发生之前检测并避免冲突。提供以下非限制性示例来介绍一些实施例。
在一实施例中,去除在计算历史计数器时不同CTU行中的CTU之间的依赖性,从而消除与并行处理的依赖性冲突。例如,可以对分区的每个CTU行重新初始化历史计数器。在计算CTU行中的第一个CTU的莱斯参数之前,可以将历史计数器设置为初始值。随后的历史计数器可基于同一CTU行中的先前TU中的历史计数器值来计算。这样,在基于历史的莱斯参数推导中,CTU的依赖性被限制在同一CTU行内,不干扰不同CTU行中的并行处理,同时仍然受益于通过基于历史的莱斯参数推导实现的编码增益。此外,简化了基于历史的莱斯参数推导过程,降低了计算复杂度。
在另一实施例中,计算历史计数器时CTU之间的依赖性与并行处理中CTU之间的依赖性一致。例如,可以在分区的CTU行中实现并行编码,且两个连续的CTU行之间可存在N-CTU延迟。也就是说,在处理前一个CTU行中的N个CTU之后,开始对CTU行的处理。在该场景中,可基于前一个CTU行中的前N个或更少的CTU中的样本来计算CTU行的历史计数器。这可通过存储同步过程来实现。在处理CTU行的第一个CTU中的最后一个TU之后,可以将历史计数器存储在存储变量中。然后,在处理后续CTU行的第一个CTU中的第一个TU之前,可以将历史计数器与存储变量中的存储值同步。
在一些示例中,使用替代的基于历史的莱斯参数推导。在这种替代的基于历史的莱斯参数推导中,一旦在处理TU时更新历史计数器StatCoeff,则更新替换变量HistValue。为了避免与并行编码的依赖性冲突,可类似地将计算历史计数器时CTU之间的依赖性限制为不超过N个CTU。同样,可实现存储同步过程。在处理CTU行的第一个CTU中的最后一个TU之后,历史计数器和替换变量各自可存储在存储变量中。然后,在处理后续CTU行的第一个CTU中的第一个TU之前,可以将历史计数器和替换变量与相应存储变量中的存储值同步。
这样,计算历史计数器时两个连续CTU行中的CTU之间的依赖性被限制为不大于执行并行编码时CTU之间的依赖性(即,与执行并行编码时CTU之间的依赖性对齐)。因此,历史计数器计算不会干扰并行处理,同时仍然受益于通过基于历史的莱斯参数推导实现的编码增益(coding gain)。
替代地,防止并行处理和基于历史的莱斯参数推导在码流中共存。例如,视频编码器可确定是否启用并行处理。如果启用并行处理,则禁用基于历史的莱斯参数推导;否则,启用基于历史的莱斯参数推导。类似地,如果视频编码器确定启用基于历史的莱斯参数推导,则禁用并行处理,反之亦然。
使用如上文所讨论地确定的莱斯参数,视频编码器可以将预测残差数据(prediction residual data)(例如残差的量化变换系数(quantized transformcoefficients of residuals))二值化成二进制bin,并使用熵编码算法进一步将bin压缩成要包括在视频码流中的比特。在解码器侧,解码器可以将码流反向解码成二进制bin,使用上述任意方法或方法的任意组合来确定莱斯参数,随后根据二进制bin确定系数。可进一步对系数进行反量化和逆变换,以重建用于显示的视频块。
在一些实施例中,视频的样本的位深(bit depth)(例如,用于确定历史计数器StatCoeff的初始值的位深)可根据序列参数集(SPS)语法元素sps_bitdepth_minus8来确定。SPS语法元素sps_bitdepth_minus8的值在0至8的范围内。类似地,用于存储解码图片的解码图片缓冲器(DPB)的大小可基于视频参数集(VPS)语法元素vps_ols_dpb_bitdepth_minus8来确定。VPS语法元素vps_ols_dpb_bitdepth_minus8的值在0至8的范围内。根据确定的DPB大小,可以为DPB分配存储空间。所确定的位深和DPB可以在将视频码流解码成图片的整个过程中使用。
如本文所描述的,一些实施例通过协调基于历史的莱斯参数推导与并行编码来提供对视频编码效率和计算效率的改进。这样做,可避免基于历史的莱斯参数推导与并行编码之间的冲突,从而提高编码过程的稳定性。进一步地,通过将基于历史的莱斯参数推导中CTU之间的依赖性限制为不大于并行编码中的依赖性,仍然可以在不牺牲编码过程的计算效率的情况下通过基于历史的莱斯参数推导来实现编码增益。这些技术可以为未来视频编码标准中的有效编码工具。
现在参考附图,图1是示出配置成实现本文提出的实施例的视频编码器100的示例的框图。在图1所示的示例中,视频编码器100包括分区(partition)模块112、变换(transform)模块114、量化(quantization)模块115、逆量化(inverse quantization)模块118、逆变换(inverse transform)模块119、环路滤波器(in-loop filter)模块120、帧内预测(intra prediction)模块126、帧间预测(inter prediction)模块124、运动估计(motionestimation)模块122、解码图片缓冲器(decoded picture buffer)130和熵编码(entropycoding)模块116。
视频编码器100的输入是包含图片(还称为帧或图像)序列的输入视频102。在基于块的视频编码器中,对于每个图片,视频编码器100采用分区模块112将图片分割成块104,每个块包含多个像素(pixel)。块可以是宏块(macroblock)、编码树(coding tree)单元、编码单元、预测单元和/或预测块。一张图片可包括不同大小的块,且视频的不同图片的块分区也可以不同。每个块可使用不同的预测(例如帧内预测或帧间预测或帧内和帧间混合预测)来编码。
通常,视频信号的第一张图片是帧内预测图片,该图片仅使用帧内预测来编码。在帧内预测模式中,仅使用来自同一图片的数据来预测图片的块。帧内预测的图片可以在不存在来自其它图片的信息的情况下解码。为了执行帧内预测,图1所示的视频编码器100可采用帧内预测模块126。帧内预测模块126被配置成使用同一图片的相邻块的重建块136中的重建样本来生成帧内预测块(预测块134)。根据对块选择的帧内预测模式来执行帧内预测。然后,视频编码器100计算块104和帧内预测块134之间的差。该差称为残差块106。
为了进一步从块中去除冗余(redundancy),变换模块114通过对块中的样本应用变换来将残差块106变换到变换域中。变换的示例可包括但不限于离散余弦变换(DCT)或离散正弦变换(DST)。变换后的值可称为变换系数,变换系数表示变换域中的残差块。在一些示例中,残差块可直接进行量化,而不必通过变换模块114进行变换。这称为变换跳过模式。
视频编码器100可进一步使用量化模块115对变换系数进行量化以获得量化系数。量化包括将样本除以量化步长,随后进行四舍五入,而逆量化涉及将量化值乘以量化步长。这种量化过程称为标量量化(scalar quantization)。量化用于减小(已变换或未变换的)视频样本的动态范围,使得使用更少的比特来表示视频样本。
块内的系数/样本的量化可独立进行,这种量化方法在一些现有的视频压缩标准(例如H.264和HEVC)中使用。对于N×M块,可使用特定扫描顺序将块的2D系数转换成1-D阵列,以用于系数量化和编码。块内的系数的量化可使用扫描顺序信息。例如,块中给定系数的量化可取决于沿着扫描顺序的先前量化值的状态。为了进一步提高编码效率,可使用多于一个量化器。使用哪个量化器对当前系数进行量化,取决于按照编码/解码扫描顺序位于当前系数之前的信息。这种量化方法称为依赖量化(dependent quantization)。
可使用量化步长来调节量化程度。例如,对于标量量化,可应用不同的量化步长来实现较精细或较粗略的量化。较小的量化步长对应于较精细的量化,而较大的量化步长对应于较粗略的量化。量化步长可由量化参数(quantization parameter,QP)指示。在视频的编码码流中提供量化参数,使得视频解码器可应用相同的量化参数来进行解码。
然后,通过熵编码模块116对量化样本进行编码,以进一步减小视频信号的大小。熵编码模块116配置成将熵编码算法应用于量化样本。在一些示例中,量化样本二值化成二进制bin,编码算法进一步将二进制bin压缩成比特。二值化方法的示例包括但不限于截断莱斯(TR)和有限k阶指数哥伦布(EGk)二值化。为了提高编码效率,使用基于历史的莱斯参数推导方法,其中,针对变换单元(TU)推导的莱斯参数基于从先前TU获得或更新的变量。熵编码算法的示例包括但不限于可变长度编码(VLC)方案、上下文自适应VLC方案(CAVLC)、算术编码方案、二值化、上下文自适应二进制算术编码(CABAC)、基于语法的上下文自适应二进制算术编码(SBAC)、概率区间分割熵(PIPE)编码或其它熵编码技术。熵编码数据添加到输出编码视频132的码流(bitstream)。
如上文所讨论的,在图片的块的帧内预测中使用来自相邻块的重建块136。生成块的重建块136涉及计算该块的重建残差。可通过对块的量化残差应用逆量化和逆变换来确定重建残差。逆量化模块118配置成对量化样本应用逆量化来获得去量化系数。逆量化模块118通过使用与量化模块115相同的量化步长来应用量化模块115所应用的量化方案的逆方案。逆变换模块119配置成将变换模块114所应用的变换的逆变换应用于去量化的样本,例如逆DCT或逆DST。逆变换模块119的输出是像素域中的块的重建残差。重建残差可添加到块的预测块134以获得像素域中的重建块136。对于已跳过变换的块,逆变换模块119不应用于那些块。去量化样本是块的重建残差。
可使用帧间预测或帧内预测来对第一帧内预测图片之后的后续图片中的块进行编码。在帧间预测中,图片中的块的预测来自一个或多个先前编码的视频图片。为了执行帧间预测,视频编码器100使用帧间预测模块124。帧间预测模块124配置成基于运动估计模块122所提供的运动估计来对块执行运动补偿。
运动估计模块122将当前图片的当前块104与解码参考图片108进行比较以进行运动估计。解码参考图片108存储在解码图片缓冲器130中。运动估计模块122从解码参考图片108中选择与当前块最匹配的参考块。运动估计模块122进一步识别参考块的位置(例如x,y坐标)和当前块的位置之间的偏移。该偏移称为运动矢量(motion vector,MV)且提供给帧间预测模块124。在一些情况下,针对多个解码参考图片108中的块识别多个参考块。因此,生成多个运动矢量并将运动矢量提供给帧间预测模块124。
帧间预测模块124使用运动矢量以及其它帧间预测参数来执行运动补偿,以生成当前块(即,帧间预测块134)的预测。例如,基于运动矢量,帧间预测模块124可以在对应的参考图片中定位运动矢量所指向的预测块。如果存在多于一个预测块,则将这些预测块与一些权重组合以生成当前块的预测块134。
对于帧间预测块,视频编码器100可以从块104中减去帧间预测块134以生成残差块106。可以按照与上文讨论的帧内预测块的残差相同的方式对残差块106进行变换、量化和熵编码。同样,帧间预测块的重建块136可通过对残差进行逆量化、逆变换,随后与对应的预测块134组合来获得。
为了获得用于运动估计的解码图片108,通过环路滤波器模块120处理重建块136。环路滤波器模块120配置成使像素转换平滑,从而提高视频质量。环路滤波器模块120可配置成实现一个或多个环路滤波器,例如去块滤波器(de-blocking filter)、或样本自适应偏移(sample-adaptive offset,SAO)滤波器、或自适应环路滤波器(adaptive loopfilter,ALF)等。
图2描述了配置成实现本文提出的实施例的视频解码器200的示例。视频解码器200处理码流中的编码视频202并生成解码图片208。在图2所示的示例中,视频解码器200包括熵解码模块216、逆量化模块218、逆变换模块219、环路滤波器模块220、帧内预测模块226、帧间预测模块224和解码图片缓冲器230。
熵解码模块216配置成执行编码视频202的熵解码。熵解码模块216对量化系数、包括帧内预测参数和帧间预测参数的编码参数及其它信息进行解码。在一些示例中,熵解码模块216将编码视频202的码流解码成二进制表示,然后将二进制表示转换成系数的量化级别。然后,通过逆量化模块218对熵解码的系数进行逆量化,随后通过逆变换模块219而逆变换到像素域。逆量化模块218和逆变换模块219的功能分别类似于上文参考图1所描述的逆量化模块118和逆变换模块119。逆变换的残差块可添加到对应的预测块234以生成重建块236。对于已跳过变换的块,逆变换模块219不应用于那些块。由逆量化模块118生成的去量化样本用于生成重建块236。
特定块的预测块234基于块的预测模式来生成。如果块的编码参数指示对块进行帧内预测,则同一图片中的参考块的重建块236可馈送到帧内预测模块226中,以生成块的预测块234。如果块的编码参数指示对块进行帧间预测,则通过帧间预测模块224生成预测块234。帧内预测模块226和帧间预测模块224的功能分别类似于图1的帧内预测模块126和帧间预测模块124。
如上文针对图1所讨论的,帧间预测涉及一个或多个参考图片。视频解码器200通过将环路滤波器模块220应用于参考图片的重建块来生成参考图片的解码图片208。解码图片208存储在解码图片缓冲器230中,以供帧间预测模块224使用且还用于输出。
现在参考图3,图3描述了根据本公开的一些实施例的视频中的图片的编码树单元划分的示例。如上文针对图1和图2所讨论的,为了对视频的图片进行编码,将图片划分成块,例如VVC中的CTU(编码树单元)302,如图3所示。例如,CTU 302可以是128×128像素的块。按照一定顺序(例如图3所示的顺序)对CTU进行处理。在一些示例中,如图4所示,图片中的每个CTU 302可划分成一个或多个CU(编码单元)402,CU 402可进一步划分成预测单元或变换单元(TU)以用于预测和变换。根据编码方案,CTU 302可以以不同方式划分成CU 402。例如,在VVC中,CU 402可以是矩形或正方形,且可以在不进一步划分成预测单元或变换单元的情况下进行编码。每个CU 402可以与其根CTU 302一样大,或者可以是根CTU 302的细分、小到4×4块。如图4所示,在VVC中将CTU 302划分成CU 402,可以是四叉树划分或二叉树划分或三叉树划分。在图4中,实线指示四叉树划分,虚线指示二叉树或三叉树划分。
如上文针对图1和图2所讨论的,量化用于减小视频信号中的块的元素的动态范围,使得使用更少的比特来表示视频信号。在一些示例中,在量化之前,位于块的特定位置处的元素称为系数。在量化之后,系数的量化值称为量化级别或级别。量化通常包括除以量化步长(quantization step size),随后进行四舍五入,而逆量化包括乘以量化步长。这种量化过程还称为标量量化。块内的系数的量化可独立进行,这种独立的量化方法在一些现有的视频压缩标准(例如H.264、HEVC等)中使用。在其它示例中,例如在VVC中,采用依赖量化。
对于N×M块,可使用特定扫描顺序将块的2-D系数转换成1-D阵列,以用于系数量化和编码,且相同的扫描顺序用于编码和解码。图5示出了编码块(例如变换单元(TU))的示例,其中,利用预定扫描顺序来处理编码块的系数。在该示例中,编码块500的大小为8×8,该处理从位置L0处的右下角开始并在左上角L63处结束。如果块500是变换块,则图5所示的预定顺序从最高频率开始,直到最低频率。在一些示例中,对块的处理(例如量化和二值化)根据预定扫描顺序从块的第一个非零元素开始。例如,如果位置L0至L17处的系数均为零且L18处的系数不为零,则该处理从L18处的系数开始,且按照扫描顺序对L18之后的每个系数执行该处理。
残差编码(residual Coding)
在视频编码中,残差编码用于将量化级别转换成码流。在量化之后,对于N×M变换单元(TU)编码块,存在N×M个量化级别。这N×M个级别可以为零或非零值。如果级别不是二进制形式的,则非零级别将进一步二值化成二进制bin。上下文自适应二进制算术编码(CABAC)可进一步将bin压缩成比特。此外,存在两种基于上下文建模的编码方法。具体地,其中一种方法根据相邻编码信息自适应地更新上下文模型。这种方法称为上下文编码方法,以这种方式编码的bin称为上下文编码bin。相反,另一种方法假设1或0的概率始终为50%,因此始终使用固定的上下文建模,而不进行自适应。这种方法称为旁路方法,通过这种方法编码的bin称为旁路bin。
对于VVC中的规则残差编码(RRC)块,最后一个非零级别的位置定义为沿着编码扫描顺序的最后一个非零级别的位置。最后一个非零级别的2D坐标(last_sig_coeff_x和last_sig_coeff_y)的表示包括总共4个前缀和后缀语法元素,它们分别是last_sig_coeff_x_prefix、last_sig_coeff_y_prefix、last_sig_coeff_x_suffix、last_sig_coeff_y_suffix。首先使用上下文编码方法对语法元素last_sig_coeff_x_prefix和last_sig_coeff_y_prefix进行编码。如果存在last_sig_coeff_x_suffix和last_sig_coeff_y_suffix,则使用旁路方法对last_sig_coeff_x_suffix和last_sig_coeff_y_suffix进行编码。RRC块可由数个预定义的子块构成。语法元素sb_coded_flag用于指示当前子块的所有级别是否等于零。如果sb_coded_flag等于1,则在当前子块中存在至少一个非零系数。如果sb_coded_flag等于0,则当前子块中的所有系数均为零。然而,根据编码扫描顺序从last_sig_coeff_x和last_sig_coeff_y推导:具有最后一个非零级别的最后一个非零子块的sb_coded_flag为1,而不编码到码流中。此外,还推导:包含DC位置的左上子块的sb_coded_flag为1,而不编码到码流中。通过上下文编码方法对码流中的sb_coded_flag的语法元素进行编码。RRC将从最后一个非零子块开始,以如上文针对图5所讨论的反向编码扫描顺序逐个子块地进行编码。
为了保证最坏情况下的吞吐量,使用预定义值remBinsPassl来限制上下文编码bin的最大数量。在一个子块内,RRC将使用反向编码扫描顺序对每个位置的级别进行编码。如果remBinsPassl大于4,则在对当前级别进行编码时,首先将名称为sig_coeff_flag的标志编码到码流中,以指示级别是否为零。如果级别不为零,则将对abs_level_gtx_flag[n][0]进行编码以指示绝对级别是1还是大于1,其中n是子块内的当前位置沿着扫描顺序的索引。如果绝对级别大于1,则将对par_level_flag进行编码以指示级别在VVC中是奇数还是偶数,然后将存在abs_level_gtx_flag[n][l]。标志par_level_flag和abs_level_gtx_flag[n][l]还一起使用以指示级别为2、或3、或大于3。在将上述每个语法元素编码成上下文编码的bin之后,remBinsPassl的值就会减1。
如果绝对级别大于3或者remBinsPassl的值不大于4,则在通过上下文编码方法对前述bin进行编码之后,可以将另外两个语法元素abs_remainder和dec_abs_level编码成旁路编码bin以用于其余级别。此外,还将对块内的每个级别的符号进行编码,以表示量化级别,且块内的每个级别的符号编码成旁路编码bin。
另一种残差编码方法使用abs_level_gtxX_flag和其余级别来允许有条件地对语法元素进行解析以用于残差块的级别编码,级别的绝对值的相应二值化如表1所示。这里,abs_level_gtxX_flag描述级别的绝对值是否大于X,其中X是整数,例如0、1、2或N。如果abs_level_gtxY_flag为0,则将不存在标志abs_level_gtx(Y+1),其中Y是0至N-1之间的整数。如果abs_level_gtxY_flag为1,则将存在标志abs_level_gtx(Y+1)。此外,如果abs_level_gtxN_flag为0,则将不存在其余级别。当abs_level_gtxN_flag为1时,将存在其余级别,其表示从级别中删除(N+1)之后的值。通常,分别使用上下文编码方法对abs_level_gtxX_flag进行编码,以及使用旁路方法对其余级别进行编码。
表1基于abs_level_gtxX_flag和余数的残差编码
abs(level) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | … |
abs_level_gtx0_flag | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | … |
abs_level_gtx1_flag | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | … | |
abs_level_gtx2_flag | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | … | ||
abs_level_gtx3_flag | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | … | |||
余数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | … |
对于以变换跳过残差编码模式(TSRC)编码的块,TSRC将从左上子块开始,沿着编码扫描顺序逐个子块地进行编码。类似地,语法元素sb_coded_flag用于指示当前子块的所有残差是否等于零。当特定条件发生时,除了最后一个子块之外的所有子块的sb_coded_flag的所有语法元素均编码到码流中。如果最后一个子块之前的所有子块的所有sb_coded_flag不等于1,则将推导:最后一个子块的sb_coded_flag为1,且该标志不编码到码流中。为了保证最坏情况下的吞吐量,使用预定义值RemCcbs来限制最大上下文编码bin。如果当前子块具有非零级别,则TSRC将以编码扫描顺序对每个位置的级别进行编码。如果RemCcbs大于4,则将使用上下文编码方法对以下语法元素进行编码。对于每个级别,首先将sig_coeff_flag编码到码流中,以指示级别是否为零。如果级别不为零,则对coeff_sign_flag进行编码以指示级别是正还是负。然后,对abs_level_gtx_flag[n][0]进行编码,以指示当前位置的当前绝对级别是否大于1,其中n是子块内的当前位置沿着扫描顺序的索引。如果abs_level_gtx_flag[n][0]不为零,则对par_level_flag进行编码。在使用上下文编码方法对上述每个语法元素进行编码之后,RemCcbs的值就会减1。
在针对当前子块内的所有位置对上述语法元素进行编码之后,如果RemCcbs仍然大于4,则将使用上下文编码方法对最多四个另外的abs_level_gtx_flag[n][j]进行编码,其中n是子块内的当前位置沿着扫描顺序的索引;j是从1到4。在对每个abs_level_gtx_flag[n][j]进行编码之后,RemCcbs的值就会减1。如果RemCcbs不大于4,则如有必要,对于子块内的当前位置,将使用旁路方法对语法元素abs_remainder进行编码。对于完全通过旁路方法使用语法元素abs_remainder对绝对级别进行编码的那些位置,还通过旁路方法对coeff_sign_flag进行编码。综上所述,在RRC中存在预定义计数器remBinsPassl或在TSRC中存在RemCcbs,以限制上下文编码bin的总数并确保最坏情况下的吞吐量。
莱斯参数推导
在VVC中的当前RRC设计中,编码成旁路(bypass)bin的两个语法元素abs_remainder和dec_abs_level可存在于其余级别的码流中。通过在VVC规范中规定的截断莱斯(truncated Rice,TR)和有限k阶指数哥伦布(EGk)二值化过程的组合,对abs_remainder和dec_abs_level进行二值化,这需要莱斯参数来对给定级别进行二值化。为了获得最优莱斯参数,采用局部求和方法,如下文所描述的。
阵列AbsLevel[xC][yC]表示颜色分量索引cIdx的当前变换块的变换系数级别的绝对值的阵列。给定具有颜色分量索引cIdx和左上角亮度位置(x0,y0)的变换块的阵列AbsLevel[x][y],通过如下伪代码过程所规定的方式推导局部求和变量locSumAbs:
其中log2TbWidth和log2TbHeight分别是变换块的宽度和高度的以2为底的对数。对于abs_remainder和dec_abs_level,变量baseLevel分别为4和0。给定局部求和变量locSumAbs,如表2中规定的方式推导莱斯参数cRiceParam。
表2—基于locSumAbs的cRiceParam的规格
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 |
基于历史的莱斯参数推导
如果系数位于TU边界,或者首先使用莱斯方法进行解码,则用于莱斯参数推导的模板计算(template computation)可产生不准确的系数估计。对于这些系数,模板计算偏向0,因为某些模板位置可位于TU之外且被解释为或初始化为值0。图6示出了用于计算位于TU边界附近的系数的locSumAbs的模板图案的示例。图6示出了划分成多个CU的CTU 602,每个CU包括多个TU。对于TU 604,当前系数的位置以实心块显示,其相邻样本在模板图案中的位置以图案化的块显示。图案化的块指示用于计算局部求和变量locSumAbs的当前系数的预定邻域。
在图6中,因为当前系数606接近TU 604的边界(boundary),所以在模板图案中当前系数606的一些相邻样本(例如相邻样本608B和608E)位于TU边界之外。在上述莱斯参数推导中,在计算局部求和变量locSumAbs时,这些位于边界之外的相邻样本设置为0,导致莱斯参数推导不准确。对于高位深样本(例如,大于10位),位于TU边界之外的相邻样本可以是大数字。将这些大数字设置为0,会在莱斯参数推导中引入更多误差。
为了提高根据计算模板进行莱斯估计的准确性,建议对于位于当前TU之外的模板位置,使用历史推导值来更新局部求和变量locSumAbs,而不是用0初始化。下面通过从第9.3.3.2条款摘录的VVC规范文本说明该方法的实现方式,其中建议的文本带有下划线。
为了维持相邻系数/样本值的历史,利用每个颜色分量的历史计数器StatCoeff[cIdx],其中cIdx=0、1、2,分别表示三个颜色分量Y、U、V。如果CTU是分区(例如图片、切片或瓦片)中的第一个CTU,则如下初始化StatCoeff[cIdx]:
StatCoeff[idx]=2*Floor(Log2(BitDepth-10) (1)
这里,BitDepth规定视频的亮度和色度阵列的样本的位深,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。在TU解码和历史计数器更新之前,替换变量HistValue初始化为:
HistValue[cIdx]=1<<StatCoeff[cIdx] (2)
替换变量HistValue用作对位于TU边界之外的相邻样本(例如,相邻样本具有位于TU之外的水平坐标或垂直坐标)的估计。按照如下伪代码所规定的方式重新推导局部求和变量locSumAbs,其中更改之处带有下划线:
针对每个TU,通过指数移动平均过程从第一个非零的哥伦布-莱斯编码的变换系数(abs_remainder[cIdx]或dec_abs_level[cIdx]),对历史计数器StatCoeff更新一次。当TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成abs_remainder时,如下更新颜色分量cIdx的历史计数器StatCoeff:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(abs_remainder[cIdx]))+2)>>1 (3)
当TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成dec_abs_level时,如下更新颜色分量cIdx的历史计数器StatCoeff:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(dec_abs_level[cIdx])))>>1 (4)
更新后的StatCoeff可用于在对下一个TU进行解码之前,根据等式(2)计算下一个TU的替换变量HistValue。
波前并行处理(WPP)
WPP设计成提供并行编码机制。当在VVC中启用WPP时,帧或瓦片或切片的每个CTU行构成单独分区。通过SPS元素sps_entropy_coding_sync_enabled_flag启用/禁用WPP。图7示出了瓦片的示例,其中,对该瓦片启用WPP。在图7中,瓦片的每个CTU行相对于其前一个CTU行以一个CTU的延迟来进行处理。这样,如果在每个CTU行的结尾启用调色板编码,则除了CABAC上下文变量和调色板预测器之外,不会在分区边界处破坏连续CTU行之间的依赖性。为了减轻编码效率的潜在损失,自适应的CABAC上下文变量和调色板预测器的内容从前一个CTU行的第一个编码CTU传播到当前CTU行的第一个CTU。WPP不会改变CTU的常规光栅扫描顺序。
当启用WPP时,多个线程(多达分区(例如瓦片、切片或帧)中的CTU行的数量)可并行工作以处理各个CTU行。通过在解码器中使用WPP,每个解码线程处理分区的单个CTU行。必须组织对线程处理的调度,使得对于每个CTU,其前一个CTU行中的顶部相邻CTU的解码必须已完成。添加WPP的额外小开销,使得在完成对除了最后一个CTU行之外的每个CTU行中的第一个CTU的编码之后,可存储所有CABAC上下文变量和调色板预测器的内容。
当针对高位深和高比特率视频编码启用上文讨论的基于历史的莱斯参数推导时,前一个CTU行中的最后一个StatCoeff将传递到当前CTU行中的第一个TU。因此,当同时启用WPP时,该过程会干扰WPP并破坏WPP的并行性。在本公开中,提出多种解决方案以在启用并行编码(例如WPP)时解决该问题。
在一个实施例中,去除在计算历史计数器StatCoeff时不同CTU行中的CTU之间的依赖性,从而消除基于历史的莱斯参数推导对并行编码的干扰。在该实施例中,不是使用从前一个CTU行获得的历史计数器StatCoeff值,而是使用StatCoeff[cIdx]的初始值来对分区(例如,帧或瓦片或切片)的每个CTU行中的第一个abs_remainder[cIdx]或dec_abs_level[cIdx]进行编码,其中cIdx是颜色分量的索引。
作为示例,可如下确定StatCoeff[cIdx]的初始值:
StatCoeff[idx]=2*Floor(Log2(BitDepth-10)) (5)
这里,BitDepth规定亮度或色度阵列的样本的位深,Floor(x)表示小于或等于x的最大整数。作为另一示例,StatCoeff[cIdx]的初始值可确定为:
StatCoeff[idx]=Clip(MIN_Stat,MAX_Stat,(int)((19-QP)/6))-l (6)
这里,MIN_Stat、MAX_Stat是两个预定义的整数,QP是每个切片的初始QP,Clip()是如下定义的运算:
/>
在对分区(例如,帧、瓦片或切片)的每个CTU行的第一个TU进行编码之前,如下计算替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx] (8)
HistValue可用于计算如上所述的局部求和变量locSumAbs。针对每个TU,可通过指数移动平均过程从第一个非零的哥伦布-莱斯编码的变换系数(abs_remainder[cIdx]或dec_abs_level[cIdx]),对HistValue更新一次。当TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成abs_remainder时,如下更新颜色分量cIdx的历史计数器StatCoeff[cIdx]:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(abs_remainder[cIdx]))+2)>>1 (9)
当TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成dec_abs_level时,如下更新颜色分量cIdx的历史计数器StatCoeff[cIdx]:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(dec_abs_level[cIdx])))>>1 (10)
更新后的StatCoeff[cIdx]用于对当前CTU的下一个TU或当前CTU行中的下一个CTU的第一个TU计算替换变量HistValue,如等式(8)所示。
图8示出了帧802和该帧中包含的CTU的示例。在该示例中,帧802包含两个瓦片:瓦片804A和瓦片804B。瓦片804A包含四个CTU行:CTU行1至CTU行4。第一个CTU行包括CTU 0至CTU 9,第二个CTU行包括CTU 10至CTU 19,依此类推。同样,块804B也包含四个CTU行:CTU行1'至CTU行4'。第一个CTU行包括10个CTU:CTU 0'至CTU 9',第二个CTU行包括CTU 10'至CTU19',依此类推。
根据该实施例,可根据等式(5)或(6)确定瓦片804A的StatCoeff[cIdx]的初始值。在对CTU行1至CTU行4中的每个CTU行的第一个TU进行编码之前,使用等式(8)利用StatCoeff[cIdx]的初始值来计算替换变量HistValue[cIdx]。例如,在对CTU 0的第一个TU进行编码之前,使用等式(8)计算变量HistValue。HistValue的该值用于确定第一个TU中的系数的局部求和变量locSumAbs,局部求和变量locSumAbs进一步用于确定第一个TU的各个系数的莱斯参数。当处理当前CTU 0的第一个TU时,历史计数器StatCoeff可根据等式(9)或(10)来更新。在处理CTU 0中的第二个TU之前,StatCoeff的当前值用于根据等式(8)确定第二个TU的HistValue。然后,对第二个TU采用类似的过程,使用HistValue确定莱斯参数并更新StatCoeff。对于CTU 1中的第一个TU,根据等式(8)利用来自CTU 0中的TU的最新StatCoeff计算HistValue。该过程可以重复,直到当前CTU行1中的最后一个CTU(即CTU 9)被处理。
对于瓦片804A的第二个CTU行,在对CTU 10的第一个TU(即,第二个CTU行的第一个CTU)进行编码之前,根据等式(5)或(6)初始化历史计数器StatCoeff。对于第二个CTU行的CTU中的TU,执行与上文针对CTU行1描述的过程类似的过程。同样,在对CTU 20和CTU 30中的每一个的第一个TU进行编码之前,变量StatCoeff根据等式(5)或(6)再次初始化一次。
可以以类似的方式处理瓦片804B。在对CTU行l'至CTU行4'(即,CTU0'、CTU 10'、CTU 20'和CTU 30')中的每一个的第一个TU进行编码之前,根据等式(5)或(6)初始化StatCoeff[cIdx]的值,并使用等式(8)计算历史计数器HistValue。计算出的历史计数器HistValue用于计算各个CTU行的第一个CTU和其余CTU中的TU的locSumAbs和莱斯参数。另外,在每个TU中,历史计数器StatCoeff可根据等式(9)或(10)最多更新一次,StatCoeff的更新值用于确定同一CTU行中下一个TU的HistValue。
虽然图8被描述为包含两个瓦片804A和804B的帧802,但是相同的过程适用于其它场景,例如包含多个瓦片的切片、包含多个切片的帧等。在这些场景中的任何场景中,在对分区(例如帧、瓦片或切片)的每个CTU行中的第一个TU进行编码之前,历史计数器StatCoeff[cIdx]的值重置为初始值,以消除莱斯参数推导中CTU行的依赖性。
由下划线所示的对于VVC的可能的规范更改之处如下规定。
对于9.3.2.1,对于VVC的另一个可能的规范更改之处如下规定。
视频样本的位深
VVC第2版支持的输入视频的位深可以超过10位。更高的视频位深可以向解码视频提供更高的视觉质量,其压缩失真较低。为了支持输入视频的高位深,可如下更改对应的SPS(序列参数集)语法元素sps_bitdepth_minus8和VPS(视频参数集)语法元素vps_ols_dpb_bitdepth_minus8[i]的语义。
sps_bitdepth_minus8指定亮度和色度阵列的样本的位深BitDepth,以及亮度和色度量化参数范围偏移的值QpBdOffset,如下:
BitDepth=8+sps_bitdepth_minus8(x1)
QpBdOffset=6*sps_bitdepth_minus8(x2)
sps_bitdepth_minus8应在0至8的范围内(包括端点)。
当sps_video_parameter_set_id大于0且SPS由包含在VPS所指定的第i个多层OLS中的层引用时(对于任何i,其在0至NumMultiLayerOlss-1(包括端点)的范围内),码流一致性的要求是:sps_bitdepth_minus8的值应小于或等于vps_ols_dpb_bitdepth_minus8[i]的值。
vps_ols_dpb_bitdepth_minus8[i]为第i个多层OLS的CVS中的CLVS所引用的所有SPS指定了sps_bitdepth_minus8的最大允许值。vps_ols_dpb_bitdepth_minus8[i]的值应在0至8的范围内(包含端点)。
注2—为了对第i个多层OLS进行解码,解码器可根据语法元素vps_ols_dpb_pic_width[i]、vps_ols_dpb_pic_height[i]、vps_ols_dpb_chroma_format[i]和vps_ols_dpb_bitdepth_minus8[i]的值安全地向DPB分配存储器。
从上文可以看到,亮度和色度阵列的样本的位深BitDepth可根据等式(x1),基于SPS语法元素sps_bitdepth_minus8来推导。利用所确定的BitDepth值,可如上文所讨论地推导历史计数器StatCoeff、替换变量HistValue和莱斯参数。
VPS语法元素vps_ols_dpb_bitdepth_minus8[i]可用于推导解码图片缓冲器(DPB)的大小。对于编码码流,可存在多个视频层。视频参数集用于指定对应的语法元素。对于视频解码,DPB可用于存储参考图片,使得先前编码的图片可用于生成预测信号,以在对其它图片进行编码时使用。DPB还可用于对解码图片进行重新排序,使得解码图片可以以正确的顺序输出和/或显示。DPB还可用于为假想参考解码器指定的输出延迟。解码图片可以在DPB中持续保存为假想参考解码器指定的预定时间段,并在预定时间段过去之后输出。
为了安全地向DPB分配存储器,该DPB的大小由语法元素vps_ols_dpb_pic_width[i]、vps_ols_dpb_pic_height[i]、vps_ols_dpb_chroma_format[i]和vps_ols_dpb_bitdepth_minus8[i]决定如下。
picture_size1(单位是比特)=vps_ols_dpb_pic_width[i]*vps_ols_dpb_pic_height[i]*(vps_ols_dpb_bitdepth_minus8[i]+8)
若(vps_ols_dpb_chroma_format[i]==0)//单色,则
picture_size=picture_size1;
否则,若(vps_ols_dpb_chroma_format[i]==1)//4:2:0,则
picture_size=1.5*picture_size1;
否则,若(vps_ols_dpb_chroma_format[i]==2//4:2:2,则
picture_size=2*picture_size1;
否则,若(vps_ols_dpb_chroma_format[i]==3//4:4:4,则
picture_size=3*picture_size1;
因此,DPB的大小将由picture_size确定。换言之,DPB的大小可根据样本的色度格式来确定。如果视频帧为单色帧,则确定待缓冲的帧的大小为基本图片大小picture_size1。如果彩色视频帧的颜色子采样为4:2:0,则确定帧的大小为基本图片大小picture_sizel的1.5倍;如果彩色视频帧的颜色子采样为4:2:2,则确定帧的大小为基本图片大小picture_sizel的两倍;如果彩色视频帧的颜色子采样为4:4:4,则确定帧的大小为基本图片大小picture_sizel的三倍。根据颜色子采样,可确定DPB的大小为DPB中要存储的帧的数量乘以帧的大小。
图9描述了根据本公开的一些实施例的用于对视频的分区进行编码的过程900的示例。一个或多个计算设备(例如,实现视频编码器100的计算设备)通过执行合适的程序代码(例如,实现熵编码模块116的程序代码)来实现图9中描述的操作。为了说明的目的,参考图中描述的一些示例来描述过程900。然而,其它实现方式是可行的。
在框902处,过程900包括访问视频信号的分区。分区可以是视频帧、切片、或瓦片、或在执行编码时由视频编码器作为单元来处理的任何类型的分区。分区包括按如图8所示的CTU行中排列的CTU集合。每个CTU包括一个或多个CTU,且每个CTU包括多个TU以用于编码,如图6的示例所示。
在框904处,过程900涉及处理分区中的CTU集合中的每个CTU,以将分区编码成比特,框904包括906至914。在框906处,过程900涉及确定是否启用并行编码机制且当前CTU是否是CTU行的第一个CTU。在一些示例中,并行编码可由标志指示,该标志的值0指示禁用并行编码,该标志的值1指示启用并行编码。如果确定启用并行编码机制且当前CTU是CTU行的第一个CTU,则过程900涉及在框908处,将历史计数器StatCoeff设置为初始值。如上文所讨论的,如果启用基于历史的莱斯参数推导,则可根据等式(5)或(6)来设置历史计数器的初始值;否则,历史计数器的初始值设置为零。
如果确定未启用并行编码机制或者当前CTU不是CTU行的第一个CTU,或者在框908处设置历史计数器之后,过程900涉及在框910处,基于历史计数器来计算CTU中的TU的莱斯参数。如上文参考图6至图8的详细描述,如果在框908处重置历史计数器,则基于重置的历史计数器或随后更新的历史计数器来计算CTU中的TU的莱斯参数。如果在框908处没有重置历史计数器,则基于在前一个CTU中更新的历史计数器或在当前CTU中随后更新的历史计数器来计算CTU中的TU的莱斯参数。
在框912处,过程900涉及基于计算出的莱斯参数,将CTU中的TU编码成二进制表示,例如通过在VVC规范中规定的截断莱斯(TR)和有限k阶EGk的组合来编码。在框914处,过程900涉及将CTU的二进制表示编码成比特以包含在视频的码流中。例如,可使用上文讨论的上下文自适应二进制算术编码(CABAC)来执行编码。在框916处,过程900涉及输出已编码的视频码流。
图10描述了根据本公开的一些实施例的用于对视频的分区进行解码的过程1000的示例。一个或多个计算设备通过执行合适的程序代码来实现图10中描述的操作。例如,实现视频解码器200的计算设备可通过执行用于熵解码模块216、逆量化模块218和逆变换模块219的程序代码来实现图10中描述的操作。为了说明的目的,参考图中描述的一些示例来描述过程1000。然而,其它实现方式是可行的。
在框1002处,过程1000涉及访问表示视频信号的分区的二进制串或二进制表示。分区可以是视频帧、切片、或瓦片、或在执行编码时由视频编码器作为单元来处理的任何类型的分区。分区包括按如图8所示的CTU行中排列的CTU集合。每个CTU包括一个或多个CTU,且每个CTU包括多个TU以用于编码,如图6的示例所示。
在框1004处,过程1000涉及处理分区中的CTU集合中的每个CTU的二进制串,以生成分区的解码样本,框1004包括1006至1014。在框1006处,过程1000涉及确定是否启用并行编码机制且当前CTU是否是CTU行的第一个CTU。并行编码可由标志指示,该标志的值0指示禁用并行编码,该标志的值1指示启用并行编码。如果确定启用并行编码机制且当前CTU是CTU行的第一个CTU,则过程1000涉及在框1008处,将历史计数器StatCoeff设置为初始值。如上文所讨论的,如果启用基于历史的莱斯参数推导,则可根据等式(5)或(6)来设置历史计数器的初始值;否则,历史计数器的初始值设置为零。
如果确定未启用并行编码机制或者当前CTU不是CTU行的第一个CTU,或者在框1008处设置历史计数器之后,过程1000涉及在框1010处,基于历史计数器来计算CTU中的TU的莱斯参数。如上文参考图6至图8详细描述的,如果在框1008处重置历史计数器,则基于重置的历史计数器或随后更新的历史计数器来计算CTU中的TU的莱斯参数。如果在框1008处没有重置历史计数器,则基于在前一个CTU中更新的历史计数器或在当前CTU中随后更新的历史计数器来计算CTU中的TU的莱斯参数。
在框1012处,过程1000涉及基于计算出的莱斯参数,将CTU中的TU的二进制串或二进制表示解码成系数值,例如通过在VVC规范中规定的截断莱斯(TR)和有限k阶EGK的组合来解码。在框1014处,过程1000涉及重建CTU中的TU的像素值,例如通过上文针对图2所讨论的逆量化和逆变换来重建。在框1016处,过程1000涉及输出视频的解码分区。
在另一实施例中,计算历史计数器StatCoeff时CTU之间的依赖性与并行编码机制(例如WPP)中CTU之间的依赖性对齐。例如,可基于前一个CTU行中的前N个或更少的CTU中的系数值来计算分区(例如帧、瓦片或切片)的CTU行的历史计数器StatCoeff,其中N是并行编码机制中允许的两个连续CTU行之间的最大延迟。这样,计算历史计数器StatCoeff时两个连续CTU行中的CTU之间的依赖性被限制为不大于执行并行处理时CTU之间的依赖性(因此,与执行并行处理时CTU之间的依赖性对齐)。
该实施例可使用存储同步过程来实现。例如,在上述WPP中,两个连续CTU行之间的延迟是1个CTU,因此N=1。在存储过程中,在对每个CTU行(除了最后一个CTU行之外)中的第一个CTU的最后一个TU进行编码之后,StatCoeff[cIdx]可保存在存储变量StatCoeffWpp[cIdx]中,对于除了第一个CTU行之外的每个CTU行,在对第一个TU进行编码之前,应用莱斯参数推导的同步过程。在同步过程中,StatCoeff[cIdx]与从前一个CTU行保存的StatCoeffWpp[cIdx]同步。
如上文所讨论的,在对每个CTU行中的第一个TU进行编码之前,如下计算变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx] (11)
如果当前CTU行是分区的第一个CTU行,则可根据等式(5)或(6)初始化StatCoeff[cIdx]。计算出的HistValue可用于确定局部求和变量locSumAbs,locSumAbs又用于确定当前CTU中的TU的莱斯参数。针对每个TU,通过指数移动平均过程从第一个非零的哥伦布-莱斯编码的变换系数(abs_remainder[cIdx]或dec_abs_level[cIdx]),对StatCoeff更新一次,如上文针对等式(9)和(10)所描述的。
在对第一个CTU行中的第一个CTU的最后一个TU进行编码之后,可以在存储步骤中将StatCoeff[cIdx]保存为StatCoeffWpp[cIdx],如下:
StatCoeffWpp[cIdx]=StatCoeff[cIdx] (12)
第一个CTU行中的其余CTU的编码,可以以与上文针对第一实施例描述的方式类似的方式来执行。
在对第二个CTU行和任何后续CTU行中的第一个TU进行编码之前,可通过同步步骤获得StatCoeff[cIdx]:
StatCoeff[cIdx]=StatCoeffWpp[cIdx] (13)
使用所获得的StatCoeff[cIdx]值,根据等式(11)计算HistValue。CTU行的其余过程与第一个CTU行的过程相同。
对VVC规范的可能的更改之处如下指定(更改之处如下划线所示)。
/>
替代的基于历史的莱斯参数推导
基于历史的莱斯参数推导可以以替代的方式实现。在该替代的实现方式中,如果CTU是分区(例如图片、切片或瓦片)中的第一个CTU,则使用StatCoeff[cIdx]的初始值来如下初始化HistValue:
HistValue=sps_persistent_Rice_adaptation_enabled_flag?1<<StatCoeff[cIdx]:0 (14)
该初始HistValue用于对第一个abs_remainder[cIdx]或dec_abs_level[cIdx]进行编码,直到根据以下规则更新HistValue。当TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成abs_remainder时,如下更新颜色分量cIdx的历史计数器:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(abs_remainder[cIdx]))+2)>>1 (15)
当TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成dec_abs_level,如下更新颜色分量cIdx的历史计数器:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(dec_abs_level[cIdx])))>>1(16)
一旦历史计数器StatCoeff[cIdx]已更新,则将如等式(17)所示更新HistValue,更新后的HistValue将用于推导其余语法元素abs_remainder和dec_abs_level的莱斯参数,直到再次更新新的StatCoeff[cIdx]和HistValue[cIdx]。
HistValue[cIdx]=1<<StatCoeff[cIdx] (17)
基于当前VVC规范,可能的规范更改之处如下指定。
第7.3.11.11条款(残差编码语法)如下更改(添加的内容带有下划线):
/>
为了解决并行编码和替代的基于历史的莱斯参数推导之间的依赖性冲突,在对每个CTU行中的第一个CTU的最后一个TU进行编码之后,保存每个颜色分量的StatCoeff[cIdx]和HistValue[cIdx]。所保存的StatCoeff[cIdx]和HistValue[cIdx]的值可用于在处理后续CTU行的第一个CTU的第一个TU之前初始化StatCoeff[cIdx]和HistValue[cIdx]。
该实施例还可使用存储同步过程来实现。例如,在存储过程中,在处理每个CTU行中的第一个CTU的最后一个TU之后,StatCoeff[cIdx]和HistValue[cIdx]可保存在存储变量中,例如,分别如等式(18)和(19)所示的StatCoeffWpp[cIdx]和HistValueWpp[cIdx]
StatCoeffWpp[cIdx]=StatCoeff[cIdx] (18)
HistValueWpp[cIdx]=HistValue[cIdx] (19)
对于除了第一个CTU行之外的每个CTU行,在对第一个TU进行编码之前,应用莱斯参数推导的同步过程。例如,StatCoeff[cIdx]和HistValue[cIdx]分别与从前一个CTU行保存的StatCoeffWpp[cIdx]和HistValueWpp[cIdx]同步,如等式(20)和(21)所示。
StatCoeff[cIdx]=StatCoeffWpp[cIdx] (20)
HistValue[cIdx]=HistValueWpp[cIdx] (21)
同步变量HistValue用于对第一个abs_remainder[cIdx]或dec_abs_level[cIdx]进行编码,直到更新HistValue。
如上文所讨论的,针对每个TU,可以从第一个非零的哥伦布-莱斯编码的变换系数(abs_remainder[cIdx]或dec_abs_level[cIdx]),对StatCoeff[cIdx]更新一次,如等式(15)或(16)所示。一旦历史计数器StatCoeff[cIdx]已更新,则将根据等式(17)更新HistValue,更新后的HistValue将用于推导其余语法元素abs_remainder和dec_abs_level的莱斯参数,直到再次更新新的StatCoeff[cIdx]和HistValue。
基于当前VVC规范,由下划线所指示的可能的规范更改之处如下规定。
/>
图11描述了根据本公开的一些实施例的用于对视频的分区进行编码的过程1100的示例。一个或多个计算设备(例如,实现视频编码器100的计算设备)通过执行合适的程序代码(例如,实现熵编码模块116的程序代码)来实现图11中描述的操作。为了说明的目的,参考图中描述的一些示例来描述过程1100。然而,其它实现方式是可行的。
在框1102处,过程1100包括访问视频信号的分区。分区可以是视频帧、切片、或瓦片、或在执行编码时由视频编码器作为单元来处理的任何类型的分区。分区包括按如图8所示的CTU行中排列的CTU集合。每个CTU包括一个或多个CTU,且每个CTU包括多个TU以用于编码,如图6的示例所示。
在框1104处,过程1100涉及处理分区中的CTU集合中的每个CTU,以将分区编码成比特,框1104包括1106至1118。在框1106处,过程1100涉及确定是否启用并行编码机制且当前CTU是否是CTU行的第一个CTU。在一些示例中,并行编码可由标志指示,该标志的值0指示禁用并行编码,该标志的值1指示启用并行编码。如果确定启用并行编码机制且当前CTU是CTU行的第一个CTU,则过程1100涉及在框1107处,确定当前CTU行是否是分区中的第一个CTU行。如果是,则过程1100涉及在框1108处,将历史计数器StatCoeff设置为初始值。如上文所讨论的,可根据等式(5)或(6)来设置历史计数器的初始值。如果当前CTU行不是分区中的第一CTU行,则过程1100涉及在框1109处,将历史计数器StatCoeff设置为存储在历史计数器存储变量中的值,如等式(13)或(20)所示。在一些示例中,例如当利用替代的莱斯参数推导时,替换变量HistValue的值也可重置为所存储的值,如等式(21)所示。
如果确定未启用并行编码机制或者当前CTU不是CTU行的第一个CTU,或者在框1108或1109处设置历史计数器的值之后,过程1100涉及在框1110处,基于历史计数器(和替换变量HistValue,如果重置了HistValue的话)来计算CTU中的TU的莱斯参数。如上文所述(例如参考图8,或在替代的莱斯参数推导中),如果在框1108或1109处重置历史计数器的值,则基于重置的历史计数器或随后更新的历史计数器来计算CTU中的TU的莱斯参数。如果在框1108或1109处没有重置历史计数器,则基于在前一个CTU中更新的历史计数器或在当前CTU中随后更新的历史计数器来计算CTU中的TU的莱斯参数。
在框1112处,过程1100涉及基于计算出的莱斯参数,将CTU中的TU编码成二进制表示,例如通过在VVC规范中规定的截断莱斯(TR)和有限k阶EGK的组合来编码。在框1114处,过程1100涉及将CTU的二进制表示编码成比特以包含在视频码流中。例如,可使用上文讨论的上下文自适应二进制算术编码(CABAC)来执行编码。
在框1116处,过程1100涉及确定是否启用并行编码且CTU是否是当前CTU行的第一个CTU。如果是,则过程1100涉及在框1118处,将历史计数器的值存储在历史计数器存储变量中,如等式(12)或(18)所示。在一些示例中,例如当利用替代的莱斯参数推导时,替换变量HistValue的值也可存储在存储变量中,如等式(19)所示。在框1120处,过程1100涉及输出已编码的视频码流。
在一些场景中,非第一个CTU行中的CTU可位于分区的边界处。例如,第二个CTU行中的第一个CTU在位于该CTU的顶部的分区中不具有CTU。在这些场景中,该CTU的历史计数器可设置为初始值,而不是所存储的值。在这种情况下,可以对图11在框1107和框1109之间添加新框1107',以确定CTU是否位于分区的边界处(例如,CTU在分区内不具有顶部相邻的CTU)。如果是,则过程1100进行到框1108,以将历史计数器设置为初始值;如果否,则过程1100进行到框1109,以将历史计数器设置为所存储的值。图11的其余框可保持不变。
图12描述了根据本公开的一些实施例的用于对视频的分区进行解码的过程1200的示例。一个或多个计算设备通过执行合适的程序代码来实现图12中描述的操作。例如,实现视频解码器200的计算设备可通过执行用于熵解码模块216、逆量化模块218和逆变换模块219的程序代码来实现图12中描述的操作。为了说明的目的,参考图中描述的一些示例来描述过程1200。然而,其它实现方式是可行的。
在框1202处,过程1000包括访问表示视频信号的分区的二进制串或二进制表示。分区可以是视频帧、切片、或瓦片、或在执行编码时由视频编码器作为单元来处理的任何类型的分区。分区包括按如图8所示的CTU行中排列的CTU集合。每个CTU包括一个或多个CTU,且每个CTU包括多个TU以用于编码,如图6的示例所示。
在框1204处,过程1200涉及处理分区中的CTU集合中的每个CTU的二进制串,以生成分区的解码样本,框1204包括1206至1218。在框1206处,过程1200涉及确定是否启用并行编码机制且当前CTU是否是CTU行的第一个CTU。并行编码可由标志指示,该标志的值0指示禁用并行编码,该标志的值1指示启用并行编码。如果确定启用并行编码机制且当前CTU是CTU行的第一个CTU,则过程1200涉及在框1207处,确定当前CTU行是否是分区中的第一个CTU行。如果是,则过程1200涉及在框1208处,将历史计数器StatCoeff设置为初始值。如上文所讨论的,可根据等式(5)或(6)来设置历史计数器的初始值。如果当前CTU行不是分区中的第一个CTU行,则过程1200涉及在框1209处,将历史计数器StatCoeff设置为存储在历史计数器存储变量中的值,如等式(13)或(20)所示。在一些示例中,例如当利用替代的莱斯参数推导时,替换变量HistValue的值也可重置为所存储的值,如等式(21)所示。
如果确定未启用并行编码机制或者当前CTU不是CTU行的第一个CTU,或者在框1208或1209处设置历史计数器之后,过程1200涉及在框1210处,基于历史计数器(和替换变量HistValue,如果还设置了HistValue的值的话)来计算CTU中的TU的莱斯参数。如上文所述(例如参考图8,或在替代的莱斯参数推导中),如果在框1208或1209处重置历史计数器的值,则基于重置的历史计数器或随后更新的历史计数器来计算CTU中的TU的莱斯参数。如果在框1208或1209处没有重置历史计数器,则基于在前一个CTU中更新的历史计数器或在当前CTU中随后更新的历史计数器来计算CTU中的TU的莱斯参数。
在框1212处,过程1200涉及基于计算出的莱斯参数,将CTU中的TU的二进制串或二进制表示解码成系数值,例如通过在VVC规范中规定的截断莱斯(TR)和有限k阶EGK的组合来解码。在框1214处,过程1200涉及重建CTU中的TU的像素值,例如通过上文针对图2所讨论的逆量化和逆变换来重建。
在框1216处,过程1200涉及确定是否启用并行编码且CTU是否是当前CTU行的第一个CTU。如果是,则过程1200涉及在框1218处,将历史计数器的值存储在历史计数器存储变量中,如等式(12)或(18)所示。在一些示例中,例如当利用替代的莱斯参数推导时,替换变量HistValue的值也可存储在存储变量中,如等式(19)所示。在框1216处,过程1200涉及输出视频的解码分区。
在另一实施例中,防止WPP或其它并行编码机制同基于历史的莱斯参数推导在码流中共存。例如,如果启用WPP,则可以不启用基于历史的莱斯参数推导。如果不启用WPP,则可启用基于历史的莱斯参数推导。类似地,如果启用基于历史的莱斯参数推导,则可以不启用WPP。作为示例,可如下进行语法更改。
7.3.2.22序列参数集范围扩展语法(添加的内容带有下划线)
作为另一个示例,如下更改对应的语义(更改之处带有下划线)。
虽然在上文的描述中,在附图(例如图6)中示出和描述TU,但是相同的技术可应用于变换块(TB)。换言之,在上文提出的实施例(包括附图)中,TU还可表示TB。
用于实现视频编码的依赖量化的计算系统示例
任何合适的计算系统可用于执行本文描述的操作。例如,图13描述了可实现图1的视频编码器100或图2的视频解码器200的计算设备1300的示例。在一些实施例中,计算设备1300可包括处理器1312,处理器1312通信地联接到存储器1314并执行存储器1314中存储的计算机可执行程序代码和/或访问信息。处理器1312可包括微处理器、专用集成电路(ASIC)、状态机、或其它处理设备。处理器1312可包括多个处理设备(包括一个处理设备)中的任何一个。这样的处理器可包括存储指令的计算机可读介质或者可与存储指令的计算机可读介质通信,当指令由处理器1312执行时,指令使得处理器执行本文描述的操作。
存储器1314可包括任何合适的非暂时性计算机可读介质。计算机可读介质可包括能够向处理器提供计算机可读指令或其它程序代码的任何电子、光学、磁性或其它存储设备。计算机可读介质的非限制性示例包括磁盘、存储芯片、ROM、RAM、ASIC、配置的处理器、光学存储器、磁带或其它磁性存储器、或者计算机处理器可以从中读取指令的任何其它介质。指令可包括由编译器和/或解释器根据以任何合适的计算机编程语言编写的代码而生成的处理器特定指令,任何合适的计算机编程语言包括例如C、C++、C#、Visual Basic、Java、Python、Perl、JavaScript以及ActionScript。
计算设备1300还可包括总线1316。总线1316可通信地联接计算设备1300的一个或多个组件。计算设备1300还可包括多个外部或内部设备,例如输入或输出设备。例如,计算设备1300被示出为具有输入/输出(I/O)接口1318,I/O接口1318可以从一个或多个输入设备1320接收输入或者向一个或多个输出设备1322提供输出。一个或多个输入设备1320和一个或多个输出设备1322可通信地联接到I/O接口1318。通信联接可通过任何合适的方式(例如,经由印刷电路板连接、经由电缆连接、经由无线传输通信等)实现。输入设备1320的非限制性示例包括触摸屏(例如,用于对触摸区域成像的一个或多个相机,或用于检测由触摸引起的压力变化的压力传感器)、鼠标、键盘、或可用于响应计算设备的用户的物理动作而生成输入事件的任何其它设备。输出设备1322的非限制性示例包括LCD屏幕、外部监视器、扬声器、或可用于显示或以其它方式呈现计算设备所生成的输出的任何其它设备。
计算设备1300可执行程序代码,程序代码使处理器1312配置成执行上文针对图1至图12描述的操作中的一个或多个操作。程序代码可包括视频编码器100或视频解码器200。程序代码可驻留在存储器1314或任何合适的计算机可读介质中,且可由处理器1312或任何其它合适的处理器执行。
计算设备1300还可包括至少一个网络接口设备1324。网络接口设备1324可包括适合于建立与一个或多个数据网络1328的有线或无线数据连接的任何设备或设备组。网络接口设备1324的非限制性示例包括以太网网络适配器、调制解调器等。计算设备1300可经由网络接口设备1324将消息作为电信号或光学信号来传输。
总体考虑
本文阐述了许多具体细节以提供对所要求保护的主题的全面理解。然而,本领域技术人员将理解,在不存在这些具体细节的情况下,可实践所要求保护的主题。在其它情况下,没有详细描述普通技术人员已知的方法、装置或系统,以免所要求保护的主题变模糊。
除非另外具体说明,否则应意识到,在本说明书的整个讨论中使用诸如“处理”、“计算”、“解算”、“确定”、“识别”等术语来指代计算设备(例如一个或多个计算机或类似的一个或多个电子计算设备)的动作或过程,此类动作或过程操纵或转换表示为计算平台的存储器、寄存器或其它信息存储设备、传输设备或显示设备内的物理电子或磁性量的数据。
本文讨论的一个或多个系统不限于任何特定的硬件架构或配置。计算设备可包括提供以一个或多个输入为条件的结果的组件的任何合适布置。合适的计算设备包括访问所存储的软件的基于多用途微处理器的计算机系统,所存储的软件对计算系统进行编程或配置,使之从通用计算装置变成专用计算装置,从而实现本文的主题的一个或多个实施例。任何合适的编程、脚本、或其它类型的语言或语言的组合可用于在用于对计算设备进行编程或配置的软件中实现本文包含的教导。
本文公开的方法的实施例可以在这样的计算设备的操作中执行。上述示例中出现的框的顺序可以改变—例如,框可以重新排序、组合和/或分解成子框。一些框或过程可并行地执行。
本文中“适于”或“配置成”的使用意味着开放式且包容性的语言,其不排除适于或配置成执行附加任务或步骤的设备。此外,“基于”的使用意味着开放式和包容性,因为“基于”一个或多个所列举的条件或值的过程、步骤、计算或其它动作实际上可基于附加条件或超过所列举的值。本文中包括的标题、列表和编号仅仅是为了便于解释,并不意味着限制。
虽然已针对本文的主题的具体实施例详细描述了本文的主题,但是应意识到,本领域技术人员在理解前述内容后,可容易地对这样的实施例进行改变、变化和等同。因此,应理解,本公开是出于示例而非限制的目的来提出,并不排除包括对本领域的普通技术人员而言显而易见的对本文的主题的此类修改、变化和/或添加。
Claims (40)
1.一种用于对视频进行解码的方法,所述方法包括:
访问表示所述视频的分区的二进制串,所述分区包括多个编码树单元(CTU),所述多个CTU形成一个或多个CTU行;
对于所述分区中的所述多个CTU中的每个CTU,
在对所述CTU进行解码之前,确定启用并行编码且所述CTU是所述分区中的所述一个或多个CTU行之中的当前CTU行的第一个CTU;
响应于确定启用所述并行编码且所述CTU是所述分区中的所述当前CTU行的所述第一个CTU,
将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;
对所述CTU进行解码,包括:
基于所述历史计数器,计算所述CTU中的变换单元(TU)的所述莱斯参数;
基于计算出的莱斯参数,将与所述CTU中的所述TU对应的二进制串解码成所述TU的系数值;和
根据所述系数值确定所述CTU中的所述TU的像素值;以及
输出所述视频的解码分区,所述解码分区包括所述分区中已解码的多个CTU。
2.根据权利要求1所述的方法,其中,所述分区是帧、或切片、或瓦片。
3.根据权利要求1所述的方法,其中,所述将用于计算莱斯参数的颜色分量cIdx的历史计数器设置为初始值包括以下各项中的一项或多项:
响应于确定启用基于历史的莱斯参数推导,如下计算所述初始值:
StatCoeff[cIdx]=2*Floor(Log2(BitDepth-10)),
其中,StatCoeff表示所述历史计数器,BitDepth规定所述视频的亮度和色度阵列的样本的位深,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数;或者
如下计算所述初始值:
StatCoeff[idx]=Clip(MIN_Stat,MAX_Stat,(int)((19-QP)/6))-l,
其中,MIN_Stat、MAX_Stat是两个预定义的整数,QP是每个切片的初始QP,Clip()是如下定义的运算:
4.根据权利要求1所述的方法,其中,所述基于所述历史计数器,计算所述CTU中的TU的莱斯参数包括:
基于所述历史计数器,确定替换变量HistValue;
使用所述系数的预定邻域中的相邻系数的值和所述替换变量HistValue,计算所述CTU的TU中的系数的局部求和变量locSumAbs;以及
基于所述局部求和变量locSumAbs,推导所述TU的所述莱斯参数。
5.根据权利要求4所述的方法,其中,所述基于所述历史计数器,确定替换变量HistValue包括通过如下计算来确定颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
6.根据权利要求4所述的方法,其中,所述计算所述CTU的TU中的系数的局部求和变量locSumAbs包括:
确定所述系数的所述预定邻域中的多个相邻系数中的一相邻系数位于所述TU之外;以及
将所述替换变量HistValue用作位于所述TU之外的所述相邻系数的值,以计算所述局部求和变量locSumAbs。
7.根据权利要求1所述的方法,其中,所述对所述CTU进行解码进一步包括如下更新所述历史计数器:
响应于确定TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成abs_remainder,将颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(abs_remainder[cIdx]))+2)>>1;和
响应于确定所述TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成dec_abs_level,将所述颜色分量cIdx的所述历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(dec_abs_level[cIdx])))>>1,
其中,StatCoeff表示所述历史计数器,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
8.一种非暂时性计算机可读介质,其上存储有程序代码,所述程序代码能够由一个或多个处理设备执行以执行多个操作,所述多个操作包括:
访问表示视频的分区的二进制串,所述分区包括多个编码树单元(CTU),所述多个CTU形成一个或多个CTU行;
对于所述分区中的所述多个CTU中的每个CTU,
在对所述CTU进行解码之前,确定启用并行编码且所述CTU是所述分区中的所述一个或多个CTU行之中的当前CTU行的第一个CTU;
响应于确定启用所述并行编码且所述CTU是所述分区中的所述当前CTU行的所述第一个CTU,将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;
对所述CTU进行解码,包括:
基于所述历史计数器,计算所述CTU中的变换单元(TU)的莱斯参数;
基于计算出的莱斯参数,将与所述CTU中的所述TU对应的二进制串解码成所述TU的系数值;和
根据所述系数值确定所述CTU中的所述TU的像素值;以及
输出所述视频的解码分区,所述解码分区包括所述分区中已解码的多个CTU。
9.根据权利要求8所述的非暂时性计算机可读介质,其中,所述分区是帧、或切片、或瓦片。
10.根据权利要求8所述的非暂时性计算机可读介质,其中,所述将用于计算莱斯参数的颜色分量cIdx的历史计数器设置为初始值包括以下各项中的一项或多项:
响应于确定启用基于历史的莱斯参数推导,如下计算所述初始值:
StatCoeff[cIdx]=2*Floor(Log2(BitDepth-10)),
其中,StatCoeff表示所述历史计数器,BitDepth规定所述视频的亮度和色度阵列的样本的位深,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数;或者
如下计算所述初始值:
StatCoeff[idx]=Clip(MIN_Stat,MAX_Stat,(int)((19-QP)/6))-l,
其中,MIN_Stat、MAX_Stat是两个预定义的整数,QP是每个切片的初始QP,Clip()是如下定义的运算:
11.根据权利要求8所述的非暂时性计算机可读介质,其中,所述基于所述历史计数器,计算所述CTU中的TU的莱斯参数包括:
基于所述历史计数器,确定替换变量HistValue;
使用所述系数的预定邻域中的相邻系数的值和所述替换变量HistValue,计算所述CTU的TU中的系数的局部求和变量locSumAbs;以及
基于所述局部求和变量locSumAbs,推导所述TU的所述莱斯参数。
12.根据权利要求11所述的非暂时性计算机可读介质,其中,所述基于所述历史计数器,确定替换变量HistValue包括通过如下计算来确定颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
13.根据权利要求11所述的非暂时性计算机可读介质,其中,所述计算所述CTU的TU中的系数的局部求和变量locSumAbs包括:
确定所述系数的所述预定邻域中的多个相邻系数中的一相邻系数位于所述TU之外;以及
将所述替换变量HistValue用作位于所述TU之外的所述相邻系数的值,以计算所述局部求和变量locSumAbs。
14.根据权利要求8所述的非暂时性计算机可读介质,其中,所述对所述CTU进行解码进一步包括如下更新所述历史计数器:
响应于确定TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成abs_remainder,将颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(abs_remainder[cIdx]))+2)>>1;和
响应于确定所述TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成dec_abs_level,将所述颜色分量cIdx的所述历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(dec_abs_level[cIdx])))>>1,
其中,StatCoeff表示所述历史计数器,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
15.一种系统,包括:
处理设备;以及
通信地联接到所述处理设备的非暂时性计算机可读介质,其中,所述处理设备配置成执行存储在所述非暂时性计算机可读介质中的程序代码,从而执行多个操作,所述多个操作包括:
访问表示视频的分区的二进制串,所述分区包括多个编码树单元(CTU),所述多个CTU形成一个或多个CTU行;
对于所述分区中的所述多个CTU中的每个CTU,
在对所述CTU进行解码之前,确定启用并行编码且所述CTU是所述分区中的所述一个或多个CTU行之中的当前CTU行的第一个CTU;
响应于确定启用所述并行编码且所述CTU是所述分区中的所述当前CTU行的所述第一个CTU,将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;以及
对所述CTU进行解码,包括:
基于所述历史计数器,计算所述CTU中的变换单元(TU)的莱斯参数;
基于计算出的莱斯参数,将与所述CTU中的所述TU对应的二进制串解码成所述TU的系数值;和
根据所述系数值确定所述CTU中的所述TU的像素值;以及
输出所述视频的解码分区,所述解码分区包括所述分区中已解码的多个CTU。
16.根据权利要求15所述的系统,其中,所述分区是帧、切片、或瓦片。
17.根据权利要求15所述的系统,其中,所述将用于计算莱斯参数的颜色分量cIdx的历史计数器设置为初始值包括以下各项中的一项或多项:
响应于确定启用基于历史的莱斯参数推导,如下计算所述初始值:
StatCoeff[cIdx]=2*Floor(Log2(BitDepth-10)),
其中,StatCoeff表示所述历史计数器,BitDepth规定所述视频的亮度和色度阵列的样本的位深,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数;或者
如下计算所述初始值:
StatCoeff[idx]=Clip(MIN_Stat,MAX_Stat,(int)((19-QP)/6))-l,
其中,MIN_Stat、MAX_Stat是两个预定义的整数,QP是每个切片的初始QP,Clip()是如下定义的运算:
18.根据权利要求15所述的系统,其中,所述基于所述历史计数器,计算所述CTU中的TU的莱斯参数包括:
基于所述历史计数器,确定替换变量HistValue;
使用所述系数的预定邻域中的相邻系数的值和所述替换变量HistValue,计算所述CTU的TU中的系数的局部求和变量locSumAbs;以及
基于所述局部求和变量locSumAbs,推导所述TU的所述莱斯参数。
19.根据权利要求18所述的系统,其中,所述基于所述历史计数器,确定替换变量HistValue包括通过如下计算来确定颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
20.根据权利要求15所述的系统,其中,所述对所述CTU进行解码进一步包括如下更新所述历史计数器StatCoeff:
响应于确定TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成abs_remainder,将颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(abs_remainder[cIdx]))+2)>>1;和
响应于确定所述TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成dec_abs_level,将所述颜色分量cIdx的所述历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(dec_abs_level[cIdx])))>>1,
其中,StatCoeff表示所述历史计数器,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
21.一种用于对视频进行编码的方法,所述方法包括:
访问所述视频的分区,所述分区包括多个编码树单元(CTU),所述多个CTU形成一个或多个CTU行;
处理所述视频的所述分区,以生成所述分区的二进制表示,所述处理包括:
对于所述分区中的所述多个CTU中的每个CTU,
在对所述CTU进行编码之前,确定启用并行编码且所述CTU是所述分区中的所述一个或多个CTU行之中的当前CTU行的第一个CTU;
响应于确定启用所述并行编码且所述CTU是所述分区中的所述当前CTU行的所述第一个CTU,将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;以及
对所述CTU进行编码,包括:
基于所述历史计数器,计算所述CTU中的变换单元(TU)的莱斯参数;和
基于计算出的莱斯参数,将所述TU的系数值编码成与所述CTU中的所述TU对应的二进制表示;以及
将所述分区的所述二进制表示编码到所述视频的码流中。
22.根据权利要求21所述的方法,其中,所述分区是帧、或切片、或瓦片。
23.根据权利要求21所述的方法,其中,所述将用于计算莱斯参数的颜色分量cIdx的历史计数器设置为初始值包括以下各项中的一项或多项:
响应于确定启用基于历史的莱斯参数推导,如下计算所述初始值:
StatCoeff[cIdx]=2*Floor(Log2(BitDepth-10)),
其中,StatCoeff表示所述历史计数器,BitDepth规定所述视频的亮度和色度阵列的样本的位深,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数;或者
如下计算所述初始值:
StatCoeff[idx]=Clip(MIN_Stat,MAX_Stat,(int)((19-QP)/6))-l,
其中,MIN_Stat、MAX_Stat是两个预定义的整数,QP是每个切片的初始QP,Clip()是如下定义的运算:
24.根据权利要求21所述的方法,其中,所述基于所述历史计数器,计算所述CTU中的TU的莱斯参数包括:
基于所述历史计数器,确定替换变量HistValue;
使用所述系数的预定邻域中的相邻系数的值和所述替换变量HistValue,计算所述CTU的TU中的系数的局部求和变量locSumAbs;以及
基于所述局部求和变量locSumAbs,推导所述TU的所述莱斯参数。
25.根据权利要求24所述的方法,其中,所述基于所述历史计数器,确定替换变量HistValue包括通过如下计算来确定颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
26.根据权利要求24所述的方法,其中,所述计算所述CTU的TU中的系数的局部求和变量locSumAbs包括:
确定所述系数的所述预定邻域中的多个相邻系数中的一相邻系数位于所述TU之外;以及
将所述替换变量HistValue用作位于所述TU之外的所述相邻系数的值,以计算所述局部求和变量locSumAbs。
27.根据权利要求21所述的方法,其中,所述对所述CTU进行编码进一步包括如下更新所述历史计数器:
响应于确定TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成abs_remainder,将颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(abs_remainder[cIdx]))+2)>>1;和
响应于确定所述TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成dec_abs_level,将所述颜色分量cIdx的所述历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(dec_abs_level[cIdx])))>>1,
其中,StatCoeff表示所述历史计数器,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
28.一种非暂时性计算机可读介质,其上存储有程序代码,所述程序代码能够由一个或多个处理设备执行以执行多个操作,所述多个操作包括:
访问视频的分区,所述分区包括多个编码树单元(CTU),所述多个CTU形成一个或多个CTU行;
处理所述视频的所述分区,以生成所述分区的二进制表示,所述处理包括:
对于所述分区中的所述多个CTU中的每个CTU,
在对所述CTU进行编码之前,确定启用并行编码且所述CTU是所述分区中的所述一个或多个CTU行之中的当前CTU行的第一个CTU;
响应于确定启用所述并行编码且所述CTU是所述分区中的所述当前CTU行的所述第一个CTU,将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;以及
对所述CTU进行编码,包括:
基于所述历史计数器,计算所述CTU中的变换单元(TU)的莱斯参数;和
基于计算出的莱斯参数,将所述TU的系数值编码成与所述CTU中的所述TU对应的二进制表示;以及
将所述分区的所述二进制表示编码到所述视频的码流中。
29.根据权利要求28所述的非暂时性计算机可读介质,其中,所述分区是帧、或切片、或瓦片。
30.根据权利要求28所述的非暂时性计算机可读介质,其中,所述将用于计算莱斯参数的颜色分量cIdx的历史计数器设置为初始值包括以下各项中的一项或多项:
响应于确定启用基于历史的莱斯参数推导,如下计算所述初始值:
StatCoeff[cIdx]=2*Floor(Log2(BitDepth-10)),
其中,StatCoeff表示所述历史计数器,BitDepth规定所述视频的亮度和色度阵列的样本的位深,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数;或者
如下计算所述初始值:
StatCoeff[idx]=Clip(MIN_Stat,MAX_Stat,(int)((19-QP)/6))-l,
其中,MIN_Stat、MAX_Stat是两个预定义的整数,QP是每个切片的初始QP,Clip()是如下定义的运算:
31.根据权利要求28所述的非暂时性计算机可读介质,其中,所述基于所述历史计数器,计算所述CTU中的TU的莱斯参数包括:
基于所述历史计数器,确定替换变量HistValue;
使用所述系数的预定邻域中的相邻系数的值和所述替换变量HistValue,计算所述CTU的TU中的系数的局部求和变量locSumAbs;以及
基于所述局部求和变量locSumAbs,推导所述TU的莱斯参数。
32.根据权利要求31所述的非暂时性计算机可读介质,其中,所述基于所述历史计数器,确定替换变量HistValue包括通过如下计算来确定颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
33.根据权利要求31所述的非暂时性计算机可读介质,其中,所述计算所述CTU的TU中的系数的局部求和变量locSumAbs包括:
确定所述系数的所述预定邻域中的多个相邻系数中的一相邻系数位于所述TU之外;以及
将所述替换变量HistValue用作位于所述TU之外的所述相邻系数的值,以计算所述局部求和变量locSumAbs。
34.根据权利要求28所述的非暂时性计算机可读介质,其中,所述对所述CTU进行编码进一步包括如下更新所述历史计数器:
响应于确定TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成abs_remainder,将颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(abs_remainder[cIdx]))+2)>>1;和
响应于确定所述TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成dec_abs_level,将所述颜色分量cIdx的所述历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(dec_abs_level[cIdx])))>>1,
其中,StatCoeff表示所述历史计数器,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
35.一种系统,包括:
处理设备;以及
通信地联接到所述处理设备的非暂时性计算机可读介质,其中,所述处理设备配置成执行存储在所述非暂时性计算机可读介质中的程序代码,从而执行多个操作,所述多个操作包括:
访问视频的分区,所述分区包括多个编码树单元(CTU),所述多个CTU形成一个或多个CTU行;
处理所述视频的所述分区,以生成所述分区的二进制表示,所述处理包括:
对于所述分区中的所述多个CTU中的每个CTU,
在对所述CTU进行编码之前,确定启用并行编码且所述CTU是所述分区中的所述一个或多个CTU行之中的当前CTU行的第一个CTU;
响应于确定启用所述并行编码且所述CTU是所述分区中的所述当前CTU行的所述第一个CTU,将用于计算莱斯参数的颜色分量的历史计数器设置为初始值;以及
对所述CTU进行编码,包括:
基于所述历史计数器,计算所述CTU中的变换单元(TU)的莱斯参数;和
基于计算出的莱斯参数,将所述TU的系数值编码成与所述CTU中的所述TU对应的二进制表示;以及
将所述分区的所述二进制表示编码到所述视频的码流中。
36.根据权利要求35所述的系统,其中,所述分区是帧、或切片、或瓦片。
37.根据权利要求35所述的系统,其中,所述将用于计算莱斯参数的颜色分量cIdx的历史计数器设置为初始值包括以下各项中的一项或多项:
响应于确定启用基于历史的莱斯参数推导,如下计算所述初始值:
StatCoeff[cIdx]=2*Floor(Log2(BitDepth-10)),
其中,StatCoeff表示所述历史计数器,BitDepth规定所述视频的亮度和色度阵列的样本的位深,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数;或者
如下计算所述初始值:
StatCoeff[idx]=Clip(MIN_Stat,MAX_Stat,(int)((19-QP)/6))-l,
其中,MIN_Stat、MAX_Stat是两个预定义的整数,QP是每个切片的初始QP,Clip()是如下定义的运算:
38.根据权利要求35所述的系统,其中,所述基于所述历史计数器,计算所述CTU中的TU的莱斯参数包括:
基于所述历史计数器,确定替换变量HistValue;
使用所述系数的预定邻域中的相邻系数的值和所述替换变量HistValue,计算所述CTU的TU中的系数的局部求和变量locSumAbs;以及
基于所述局部求和变量locSumAbs,推导所述TU的莱斯参数。
39.根据权利要求38所述的系统,其中,所述基于所述历史计数器,确定替换变量HistValue包括通过如下计算来确定颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
40.根据权利要求35所述的系统,其中,所述对所述CTU进行编码进一步包括如下更新所述历史计数器StatCoeff:
响应于确定TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成abs_remainder,将颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(abs_remainder[cIdx]))+2)>>1;和
响应于确定所述TU中的第一个非零的哥伦布-莱斯编码的变换系数被编码成dec_abs_level,将所述颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(dec_abs_level[cIdx])))>>1,
其中,StatCoeff表示所述历史计数器,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US63/260,600 | 2021-08-26 | ||
US63/251,385 | 2021-10-01 | ||
US202163262078P | 2021-10-04 | 2021-10-04 | |
US63/262,078 | 2021-10-04 | ||
PCT/US2022/075502 WO2023028578A2 (en) | 2021-08-26 | 2022-08-26 | History-based rice parameter derivations for wavefront parallel processing in video coding |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117529914A true CN117529914A (zh) | 2024-02-06 |
Family
ID=89744323
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280053642.0A Pending CN117837144A (zh) | 2021-08-26 | 2022-08-26 | 用于多功能视频编码的操作范围扩展 |
CN202280056593.6A Pending CN117837140A (zh) | 2021-08-26 | 2022-08-26 | 用于视频编码中波前并行处理的基于历史的莱斯参数推导 |
CN202280042714.1A Pending CN117529914A (zh) | 2021-08-26 | 2022-08-26 | 在视频编码中用于波前并行处理的基于历史的莱斯参数推导 |
Family Applications Before (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280053642.0A Pending CN117837144A (zh) | 2021-08-26 | 2022-08-26 | 用于多功能视频编码的操作范围扩展 |
CN202280056593.6A Pending CN117837140A (zh) | 2021-08-26 | 2022-08-26 | 用于视频编码中波前并行处理的基于历史的莱斯参数推导 |
Country Status (1)
Country | Link |
---|---|
CN (3) | CN117837144A (zh) |
-
2022
- 2022-08-26 CN CN202280053642.0A patent/CN117837144A/zh active Pending
- 2022-08-26 CN CN202280056593.6A patent/CN117837140A/zh active Pending
- 2022-08-26 CN CN202280042714.1A patent/CN117529914A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
CN117837140A (zh) | 2024-04-05 |
CN117837144A (zh) | 2024-04-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102030425B1 (ko) | 제한된 오프셋 보상 및 루프 필터를 기반으로 하는 영상 부호화 및 복호화 방법 및 그 장치 | |
KR102229157B1 (ko) | 영상 정보 부호화 및 복호화 방법 | |
EP2801195B1 (en) | Devices and methods for sample adaptive offset coding and selection of edge offset parameters | |
CN114930817A (zh) | 量化相关参数的传讯技术 | |
CN108141621B (zh) | 编解码视频数据的方法及装置 | |
CN114009015A (zh) | 转换省略块的传讯编码技术 | |
KR20160068288A (ko) | 변환생략을 참조하는 디블록킹 필터링을 이용한 영상의 부호화/복호화 방법 및 이를 이용하는 장치 | |
WO2021263251A1 (en) | State transition for dependent quantization in video coding | |
US20240179323A1 (en) | Operation range extension for versatile video coding | |
CN117529914A (zh) | 在视频编码中用于波前并行处理的基于历史的莱斯参数推导 | |
WO2023028578A2 (en) | History-based rice parameter derivations for wavefront parallel processing in video coding | |
CN117981306A (zh) | 用于视频编码的独立基于历史的莱斯参数推导 | |
CN117837148A (zh) | 用于视频编解码的基于历史的莱斯编码参数推导 | |
CN118020294A (zh) | 用于视频编码的基于历史的rice参数推导 | |
WO2023023608A2 (en) | History-based rice parameter derivations for video coding | |
CN115349258B (zh) | 图像编码系统中用于残差编码的图像解码方法及其设备 | |
WO2023082484A1 (en) | Array based residual coding on non-dyadic blocks | |
WO2023086956A1 (en) | Initialization processing for video coding | |
AU2022386662A1 (en) | Initialization processing for video coding | |
WO2023028555A1 (en) | Independent history-based rice parameter derivations for video coding | |
WO2022179404A1 (en) | Residual coding on non-dyadic blocks | |
WO2023212684A1 (en) | Subblock coding inference in video coding | |
WO2022217245A1 (en) | Remaining level binarization for video coding | |
CN116965028A (zh) | 用于视频编码的剩余等级二值化 | |
WO2023200933A1 (en) | Cross-component model adjustment for video coding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20240410 Address after: Changan town in Guangdong province Dongguan 523860 usha Beach Road No. 18 Applicant after: GUANGDONG OPPO MOBILE TELECOMMUNICATIONS Corp.,Ltd. Country or region after: China Address before: 2479 Bay East Road, Palo Alto, California, USA, Room 110 Applicant before: Chuangfeng Technology Country or region before: U.S.A. |