CN117837148A - 用于视频编解码的基于历史的莱斯编码参数推导 - Google Patents
用于视频编解码的基于历史的莱斯编码参数推导 Download PDFInfo
- Publication number
- CN117837148A CN117837148A CN202280056225.1A CN202280056225A CN117837148A CN 117837148 A CN117837148 A CN 117837148A CN 202280056225 A CN202280056225 A CN 202280056225A CN 117837148 A CN117837148 A CN 117837148A
- Authority
- CN
- China
- Prior art keywords
- ctu
- statcoeff
- cidx
- history counter
- variable
- 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 112
- 235000009566 rice Nutrition 0.000 title claims abstract description 112
- 238000009795 derivation Methods 0.000 title abstract description 16
- 240000007594 Oryza sativa Species 0.000 title 1
- 241000209094 Oryza Species 0.000 claims abstract description 111
- 238000005192 partition Methods 0.000 claims abstract description 100
- 238000000034 method Methods 0.000 claims abstract description 92
- 238000006467 substitution reaction Methods 0.000 claims abstract description 41
- 238000012545 processing Methods 0.000 claims description 45
- 230000009466 transformation Effects 0.000 claims description 10
- 238000003491 array Methods 0.000 claims description 7
- 241000023320 Luma <angiosperm> Species 0.000 claims 6
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical compound COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 claims 6
- 230000008569 process Effects 0.000 abstract description 31
- 238000013139 quantization Methods 0.000 description 68
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 8
- 238000000638 solvent extraction Methods 0.000 description 7
- 230000015654 memory Effects 0.000 description 6
- 238000004422 calculation algorithm Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 239000013598 vector Substances 0.000 description 5
- 230000003044 adaptive effect Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008901 benefit 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
- 230000001419 dependent effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000000704 physical effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response 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
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
在一些实施例中,视频解码器使用基于历史的莱斯编码参数推导,从视频的码流中解码视频。视频解码器访问对视频的分区进行表示的二进制字符串,并处理分区中的每个编码树单元(CTU),以生成CTU中的解码系数值。该处理包括更新用于计算莱斯编码参数的颜色分量的历史计数器,并且在计算下一个莱斯编码参数之前,基于更新的历史计数器对替换变量进行更新。该处理还包括基于替换变量的值计算CTU中的变换单元(TU)的莱斯编码参数,以及基于计算出的莱斯编码参数将CTU中的TU对应的二进制字符串解码为TU的系数值。
Description
相关申请的交叉引用
本申请要求2021年8月18日提交的标题为“用于视频编解码的基于历史的莱斯编码参数推导”的美国临时申请第63/234,634号和2021年9月30日提交的标题为“用于视频编解码的基于历史的莱斯编码参数推导”的美国临时申请第63/250,969号的优先权,这些申请通过引用整体并入本文。
技术领域
本公开总体上涉及用于视频处理的计算机实现的方法和系统。具体地,本公开涉及用于视频编解码的基于历史的莱斯(Rice)参数推导。
背景技术
无处不在的带摄像头的设备,如智能手机、平板电脑和电脑,使得捕捉视频或图像比以往任何时候都更容易。然而,即使是短视频的数据量也可能非常大。视频编解码技术(包括视频编码和解码)允许将视频数据压缩成更小的尺寸,从而允许存储和传输各种视频。视频编解码已经被广泛应用,例如数字电视广播、通过互联网和移动网络的视频传输、实时应用(例如,视频聊天、视频会议)、DVD和蓝光光盘等等。为了减少用于存储视频的存储空间和/或用于传输视频的网络带宽消耗,期望提高视频编解码方案的效率。
发明内容
一些实施例涉及用于视频编解码的基于历史的Rice编码参数推导。在一个示例中,一种用于解码视频的方法包括:访问对视频的分区进行表示的二进制字符串,该分区包括多个编码树单元(coding tree unit,CTU);对分区中的多个CTU中的每个CTU进行解码,对CTU进行解码包括:更新用于计算Rice编码参数的颜色分量的历史计数器StatCoeff;在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;基于更新的替换变量HistValue计算CTU中的变换单元(transform unit,TU)的Rice编码参数;基于计算出的Rice编码参数,将CTU中的TU对应的二进制字符串解码为TU的系数值;以及根据系数值确定CTU中的TU的像素值;以及输出视频的解码分区,该视频的解码分区包括分区中的多个解码的CTU。
在另一个示例中,提供了一种非暂时性计算机可读介质,程序代码存储在其上,该程序代码由一个或多个用于执行如下操作的处理设备执行,操作包括:访问对视频的分区进行表示的二进制字符串,该分区包括多个CTU;对分区中的多个CTU中的每个CTU进行解码,对CTU进行解码包括:更新用于计算Rice编码参数的颜色分量的历史计数器StatCoeff;在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;基于更新的替换变量HistValue计算CTU中的TU的Rice编码参数;基于计算出的Rice编码参数,将CTU中的TU对应的二进制字符串解码为TU的系数值;以及根据系数值确定CTU中的TU的像素值;以及输出视频的解码分区,该视频的解码分区包括分区中的多个解码的CTU。
在另一示例中,一种系统包括处理设备以及非暂时性计算机可读介质,非暂时性计算机可读介质通信地耦接到处理设备,其中,处理设备被配置为执行存储在非暂时性计算机可读介质中的程序代码,并由此执行以下操作:访问对视频的分区进行表示的二进制字符串,该分区包括多个CTU;对分区中的多个CTU中的每个CTU进行解码,对CTU进行解码包括:更新用于计算Rice编码参数的颜色分量的历史计数器StatCoeff;在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;基于更新的替换变量HistValue计算CTU中的TU的Rice编码参数;基于计算出的Rice编码参数,将CTU中的TU对应的二进制字符串解码为TU的系数值;以及根据系数值确定CTU中的TU的像素值;以及输出视频的解码分区,该视频的解码分区包括分区中的多个解码的CTU。
在另一示例中,一种用于编码视频的方法包括访问视频的分区,该分区包括多个CTU;处理视频的分区以生成分区的二进制表示,该处理包括:对分区中的多个CTU中的每个CTU进行编码,对CTU进行编码包括:更新用于计算Rice编码参数的颜色分量的历史计数器StatCoeff;在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;基于更新的替换变量HistValue计算CTU中的TU的Rice编码参数;以及基于计算出的Rice编码参数,将TU的系数值编码为CTU中的TU对应的二进制表示;以及将分区的二进制表示编码为视频的码流。
在另一个示例中,提供了一种非暂时性计算机可读介质,程序代码存储在其上,该程序代码由一个或多个用于执行如下操作的处理设备执行,操作包括:访问视频的分区,该分区包括多个CTU;处理视频的分区以生成分区的二进制表示,该处理包括:对分区中的多个CTU中的每个CTU进行编码,对CTU进行编码包括:更新用于计算Rice编码参数的颜色分量的历史计数器StatCoeff;在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;基于更新的替换变量HistValue计算CTU中的TU的Rice编码参数;基于计算出的Rice编码参数,将TU的系数值编码为CTU中的TU对应的二进制表示;以及将分区的二进制表示编码为视频的码流。
在又一个示例中,一种系统包括处理设备以及非暂时性计算机可读介质,非暂时性计算机可读介质通信地耦接到所述处理设备,其中,处理设备被配置为执行存储在非暂时性计算机可读介质中的程序代码,并由此执行以下操作:访问视频的分区,分区包括多个CTU;处理视频的分区以生成分区的二进制表示,该处理包括:对分区中的多个CTU中的每个CTU进行编码,对CTU进行编码包括:更新用于计算Rice编码参数的颜色分量的历史计数器StatCoeff;在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;基于更新的替换变量HistValue计算CTU中的TU的Rice编码参数;以及基于计算出的Rice编码参数,将TU的系数值编码为CTU中的TU对应的二进制表示;以及将分区的二进制表示编码为视频的码流。
提及的这些说明性实施例不是为了限制或定义本公开,而是为了提供有助于理解本公开的示例。在具体实施方式中讨论了附加实施例,并且提供了进一步的描述。
附图说明
参考附图阅读下面的具体实施方式可以更好地理解本公开的特征、实施方式和优点。
图1是示出了用于实现本文所呈现的实施例的视频编码器的示例的框图。
图2是示出了用于实现本文所呈现的实施例的视频解码器的示例的框图。
图3描绘了根据本公开的一些实施例的视频中的图片的CTU划分的示例。
图4描绘了根据本公开的一些实施例的CTU的编码单元划分的示例。
图5描绘了具有预定顺序的编码块的示例,该预定顺序用于处理编码块的多个元素。
图6描绘了用于计算位于TU边界附近的系数的局部和变量的模板模式的示例。
图7描绘了根据本公开的一些实施例的用于对视频的分区进行编码的过程的示例。
图8描绘了根据本公开的一些实施例的用于对视频的分区进行解码的过程的示例。
图9描绘了可用于实现本公开的一些实施例的计算系统的示例。
具体实施方式
各种实施例提供用于视频编解码的基于历史的Rice编码参数推导。如上所述,越来越多的视频数据被生成、存储和传输。这有利于提高视频编解码技术的效率,从而在不损害解码视频的视觉质量的情况下使用较少的数据来表示视频。提高编解码效率的一种方法是通过熵编解码,使用尽可能少的比特将处理过的视频样本压缩成二进制码流。
在熵编解码中,变换系数数据被二值化为二进制位,并且诸如上下文自适应二进制算术编码(context-adaptive binary arithmetic coding,CABAC)的编码算法可以进一步将二进制位压缩成比特。二值化需要计算二值化参数,例如在通用视频编解码(Versatile Video Coding,VVC)规范中规定的截断Rice(truncated Rice,TR)和有限k阶Exp-Golomb(EGk)二值化过程的组合中使用的Rice编码参数。为了提高编解码效率,采用了基于历史的Rice编码参数推导方法。在该方法中,分区(例如,图片、条带(slice)或瓦片(tile))的当前CTU中的TU的Rice编码参数基于根据当前CTU中的先前TU中的系数和分区中的一个(或多个)先前CTU中的系数计算的历史计数器(表示为StatCoeff)来导出。然后,历史计数器用于导出替换变量(表示为HistValue),该替换变量用于导出Rice编码参数。当处理TU时,可以更新历史计数器。在现有的视频编解码标准中,即使历史计数器已经更新,TU的替换变量HistValue也保持不变。换句话说,替换变量HistValue只根据更新的历史计数器StatCoeff更新,直到下一个TU。因此,使用未更新的替换变量HistValue和更新的历史计数器StatCoeff为当前TU内的剩余位置计算的Rice编码参数可能使得编解码效率降低。
这里描述的各种实施例通过每当更新历史计数器StatCoeff时更新替换变量HistValue来解决这些问题,使得替换变量HistValue和历史计数器StatCoeff的更新同步,从而提高编解码效率。提供以下非限制性示例来介绍一些实施例。
在一个实施例中,一旦更新了历史计数器StatCoeff,就更新替换变量HistValue。这样,使用更新的历史计数器StatCoeff和相应的更新的替换变量HistValue对当前TU内的剩余位置进行编码,直到替换变量HistValue和历史计数器StatCoeff再次被更新。在另一实施例中,除了同步更新历史计数器StatCoeff和替换变量HistValue之外,独立于先前的历史计数器值更新历史计数器StatCoeff。通过消除历史计数器之间的依赖性,例如通过并行处理,可以更有效地实现视频编解码。在另一实施例中,由于替换变量HistValue的更新与历史计数器StatCoeff的更新一起执行,因此可以消除在处理每个TU的开始处初始化替换变量HistValue的步骤,以节省计算力。
使用如上所述确定的Rice编码参数,视频编码器可以将预测残差数据(例如,残差的量化变换系数)二值化为二进制位,并使用熵编码算法进一步将二进制位压缩为待包括在视频码流中的比特。在解码器侧,解码器可以将码流解码回二进制位,并使用上述任何方法或上述方法的任何组合来确定Rice编码参数,并随后根据二进制位确定系数。系数可以进一步去量化和逆变换,以重建用于显示的视频块。
如本公开所述,一些实施例通过同步替换变量HistValue和历史计数器StatCoeff的更新并消除不同TU的历史计数器之间的依赖性来改进视频编解码效率和提高计算效率。通过这样做,对应于更新的历史计数器StatCoeff的替换变量HistValue可以用于导出TU的Rice编码参数,并且可以实现并行处理以加速该处理。这些技术可以成为未来视频编解码标准中有效的编解码工具。
现在参考附图,图1是示出了用于实现本文所呈现的实施例的视频编码器100的示例的框图。在图1所示的示例中,视频编码器100包括分区模块112、变换模块114、量化模块115、逆量化模块118、逆变换模块119、环内滤波器模块120、帧内预测模块126、帧间预测模块124、运动估计模块122、已解码图片缓冲器130和熵编码模块116。
视频编码器100的输入是包含图片(也称为帧或图像)序列的输入视频102。在基于块的视频编码器中,对于每个图片,视频编码器100采用分区模块112将图片划分为块104,并且每个块包含多个像素。这些块可以是宏块、CTU、编码单元、预测单元和/或预测块。一个图片可以包括不同大小的块,并且视频的不同图片的块分区也可以不同。每个块可以使用不同的预测,例如帧内预测或帧间预测或帧内和帧间混合预测,来编码。
通常,视频信号的第一图片是仅使用帧内预测来编码的帧内预测图片。在帧内预测模式中,仅使用来自同一图片的数据来预测图片的块。帧内预测的图片可以在没有来自其他图片的信息的情况下被解码。为了执行帧内预测,图1所示的视频编码器100可以采用帧内预测模块126。帧内预测模块126被配置为使用同一图片的相邻块的重建块136中的重建样本来生成帧内预测块(预测块134)。根据针对块选择的帧内预测模式执行帧内预测。视频编码器100然后计算块104和帧内预测块134之间的差值。该差值被称为残差块106。
为了进一步从块中去除冗余,通过对块中的样本应用变换,残差块106由变换模块114被变换到变换域中。变换的示例可以包括但不限于离散余弦变换(discrete cosinetransform,DCT)或离散正弦变换(discrete sine transform,DST)。变换后的值可以被称为表示变换域中的残差块的变换系数。在一些示例中,残差块可以被直接量化,而不被变换模块114变换。这称为变换跳过模式。
视频编码器100可以进一步使用量化模块115来量化变换系数以获得量化系数。量化包括将样本除以量化步长,然后进行四舍五入,而逆量化包括将量化值乘以量化步长。这种量化过程被称为标量量化。量化用于减小视频样本(变换的或未变换的)的动态范围,使得使用更少的比特来表示视频样本。
块内系数/样本的量化可以独立完成,这种量化方法用于一些现有的视频压缩标准,例如H.264和HEVC。对于N乘M块,可以使用特定的扫描顺序将块的二维系数转换成一维数组,用于系数量化和编解码。块内系数的量化可以利用扫描顺序信息。例如,块中给定系数的量化可能取决于先前量化值沿扫描顺序的状态。为了进一步提高编解码效率,可以使用多于一个量化器。哪个量化器用于量化当前系数取决于编码/解码扫描顺序中当前系数之前的信息。这种量化方法被称为相关量化。
可以使用量化步长大小来调整量化程度。例如,对于标量量化,可以应用不同的量化步长来实现更精细或更粗糙的量化。较小的量化步长对应于较精细的量化,而较大的量化步长对应于较粗糙的量化。量化步长可以由量化参数(quantization parameter,QP)指示。在视频的编码码流中提供量化参数,使得视频解码器可以应用相同的量化参数进行解码。
然后,由熵编码模块116对量化的样本进行编码,以进一步减小视频信号的大小。熵编码模块116被配置为将熵编码算法应用于量化的样本。在一些示例中,量化的样本被二进制化为二进制位,并且编码算法进一步将二进制位压缩为比特。二值化方法的示例包括但不限于截断Rice(truncated Rice,TR)和有限k阶Exp-Golomb(EGk)二值化。为了提高编解码效率,使用了基于历史的Rice编码参数推导方法,其中针对TU导出的Rice编码参数基于从先前TU获得或更新的变量。熵编码算法的示例包括但不限于可变长度编码(variablelength coding,VLC)方案、上下文自适应VLC方案(context adaptive VLC scheme,CAVLC)、算术编码方案、二值化、上下文自适应二进制算术编码(context-adaptive binaryarithmetic coding,CABAC)、基于语法的上下文自适应二进制算术编码(syntax-basedcontext-adaptive binary arithmetic coding,SBAC)、概率区间分割熵(probabilityinterval partitioning entropy,PIPE)编码或其他熵编码技术。熵编码数据被添加到输出已编码视频132的码流中。
如上所述,来自相邻块的重建块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可以以与上面讨论的帧内预测块的残差相同的方式被变换、量化和熵编码。同样,可以通过逆量化、逆变换残差以及随后与相应的预测块134组合来获得帧间预测块的重建块136。
为了获得用于运动估计的已解码图片108,重建块136由环路内滤波器模块120处理。环路内滤波器模块120被配置成平滑像素过渡,从而改善视频质量。环路内滤波器模块120可以被配置成实现一个或多个环路内滤波器,例如去块滤波器、或者采样自适应偏移(sample-adaptive offset,SAO)滤波器、或者自适应环路滤波器(adaptive loop filter,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描绘了根据本公开的一些实施例的视频中的图片的CTU划分的示例。如以上关于图1和图2所讨论的,为了对视频的图片进行编码,图片被划分成块,例如如图3所示的VVC中的编码树单元(CTU)302。例如,CTU 302可以是128×128像素的块。CTU根据诸如图3所示的顺序来处理。在一些示例中,如图4所示,图片中的每个CTU 302可以被划分为一个或多个CU(Coding Unit,编码单元)402,其可以被进一步划分为用于预测和变换的预测单元或变换单元(TU)。根据编码方案,CTU 302可以被不同地划分为多个CU 402。例如,在VVC中,CU 402可以是矩形或正方形,并且可以被编码而无需进一步划分成预测单元或TU。每个CU 402可以与它的根CTU 302一样大,或者是小到4×4块的根CTU 302的子部分。如图4所示,在VVC中,CTU 302到CU 402的划分可以是四叉树分裂或二叉树分裂或三叉树分裂。在图4中,实线表示四叉树分裂,虚线表示二叉树或三叉树分裂。
如以上关于图1和图2所讨论的,量化用于减小视频信号中块的元素的动态范围,从而使用更少的比特来表示视频信号。在一些示例中,在量化之前,块的特定位置处的元素被称为系数。量化后,系数的量化值被称为量化级别或级别。量化通常包括除以量化步长和随后的四舍五入,而逆量化包括乘以量化步长。这种量化过程也被称为标量量化。块内系数的量化可以独立执行,并且这种独立量化方法用于一些现有的视频压缩标准,例如H.264、HEVC等。在其他示例中,例如在VVC中,采用相关量化。
对于N乘M块,可以使用特定的扫描顺序将块的二维系数转换成一维数组,用于系数量化和编码,并且相同的扫描顺序用于编码和解码。图5示出了具有用于处理编码块系数的预定扫描顺序的编码块(例如变换单元(TU))的示例。在该示例中,编码块500的大小为8×8,并且处理在位置L0处的右下角开始,在左上角L63处结束。如果块500是变换后的块,则图5所示的预定顺序从最高频率开始到最低频率。在一些示例中,块的处理,例如量化和二值化,根据预定的扫描顺序从块的第一个非零元素开始。例如,如果位置L0-L17处的系数都为零,而L18处的系数为非零,则处理从L18处的系数开始,并按照扫描顺序对L18之后的每个系数执行。
残差编码
在视频编解码中,残差编码用于将量化级转换成码流。在量化之后,存在用于N×M变换单元(TU)编码块的N×M量化级别。这些N×M级别可以是零值或非零值。如果非零级别不是二进制的,则非零级别将进一步被二进制化为二进制位。上下文自适应二进制算术编码(CABAC)可以进一步将二进制位压缩成比特。此外,有两种基于上下文建模的编码方法。具体地,其中一种方法根据相邻编码信息自适应地更新上下文模型。这种方法称为上下文编码方法,以这种方式编码的二进制位称为上下文编码二进制位。相反,另一种方法假设1或0的概率总是50%,因此总是使用固定的上下文建模而不进行调整。这种方法称为旁路方法,用这种方法编码的二进制位称为旁路二进制位。
对于VVC中的规则残差编码(regular residual coding,RRC)块,最后一个非零级别的位置被定义为沿着编码扫描顺序的最后一个非零级别的位置。最后一个非零级别的二维坐标(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,则使用旁路方法对它们进行编码。RRC块可以由几个预定义的子块组成。语法元素sb_coded_flag用于指示当前子块是否具有等于零的所有级别。如果sb_coded_flag等于1,则在当前子块中有至少一个非零系数。如果sb_coded_flag等于0,则当前子块中的所有系数将为零。然而,具有最后一个非零级别的最后一个非零子块的sb_coded_flag根据编码扫描顺序从last_sig_coeff_x和last_sig_coeff_y导出为1,而不编码成码流。此外,包含DC位置的左上子块的sb_coded_flag也被导出为1,而无需编码到码流中。码流中的sb_coded_flag的语法元素通过上下文编码方法进行编码。RRC将从最后一个非零子块开始,以如上面关于图5所讨论的反向编码扫描顺序对子块逐个子块进行编码。
为了保证最坏情况下的吞吐量,使用预定义值remBinsPass1来限制上下文编码二进制位的最大数量。在子块内,RRC将以反向编码扫描顺序编码每个位置的级别。如果remBinsPass1大于4,则在对当前级别进行编码时,首先将名为sig_coeff_flag的标志编码到码流中,以指示级别是零还是非零。如果级别非零,则abs_level_gtx_flag[n][0],其中n是沿着子块内当前位置的扫描顺序的索引,以指示绝对级别是1还是大于1。如果绝对级别大于1,par_level_flag将被编码以指示VVC中的级别是奇数还是偶数,然后abs_level_gtx_flag[n][1]将存在。par_level_flag和abs_level_gtx_flag[n][1]的标志也一起用于指示级别是2、或3或大于3。将上述每个语法元素编码为上下文编码的二进制位后,remBinsPass1的值将减少1。
如果绝对级别大于3或者remBinsPass1的值不大于4,则在通过上下文编码方法对上述二进制位进行编码之后,可以将另外两个语法元素abs_remainder和dec_abs_level编码为剩余级别的旁路编码的二进制位。此外,块内每个级别的符号也将被编码以表示量化级别,并且它们被编码为旁路编码的二进制位。
另一种残差编码方法使用abs_level_gtxX_flag和剩余级别,以允许有条件地解析用于残差块的级别编码的语法元素,并且级别的绝对值的相应二进制化如表1所示。这里,abs_level_gtxX_flag描述级别的绝对值是否大于X,其中X是整数,例如0、1、2或N。如果abs_level_gtxY_flag是0,其中Y是0和N-1之间的整数,则abs_level_gtx(Y+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(级别) | 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 | … |
对于以变换跳过残差编码(transform skip residual coding,TSRC)模式编码的块,TSRC将从左上角子块开始沿着编码扫描顺序逐子块编码。类似地,语法元素sb_coded_flag用于指示当前子块是否具有等于零的所有残差。当特定条件发生时,除了最后一个子块之外,所有子块的sb_coded_flag的所有语法元素都被编码到码流中。如果对于最后一个子块之前的所有子块,所有sb_coded_flag都不等于1,则对于最后一个子块,sb_coded_flag将被导出为1,并且该标志不被编码到码流中。为了保证最坏情况下的吞吐量,使用预定义值RemCcbs来限制最大上下文编码的二进制位。如果当前子块具有非零级别,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_flags也通过旁路方法编码。总之,RRC中有一个预定义的计数器remBinsPass1,TSRC中有一个RemCcbs,用于限制上下文编码的二进制位的总数,并确保最坏情况下的吞吐量。
Rice编码参数推导
在VVC中的当前RRC设计中,编码为旁路二进制位的两个语法元素abs_remainder和dec_abs_level可以存在于剩余级别的码流中。abs_remainder和dec_abs_level都是通过VVC规范中规定的截断Rice(TR)和有限k阶Exp-Golomb(EGk)二值化过程的组合进行二值化的,这需要Rice编码参数以二值化给定的级别。为了获得最佳Rice编码参数,采用如下所述的局部求和方法。
数组AbsLevel[xC][yC]表示当前变换块的变换系数级别的绝对值的数组。给定具有颜色分量索引cIdx和左上亮度位置(x0,y0)的变换块的数组AbsLevel[x][y],按照以下伪代码过程所规定的,导出局部和变量locSumAbs:
其中,log2TbWidth和log2TbHeight分别是变换块的宽度和高度的以2为底的对数。对于abs_remainder和dec_abs_level,变量baseLevel分别为4和0。给定局部和变量locSumAbs,Rice编码参数cRiceParam如表2所示被导出。
表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 |
基于历史的Rice编码参数推导
如果系数位于TU边界,或者首先用Rice方法解码,则用于Rice编码参数推导的模板计算可能产生不准确的系数估计。对于这些系数,由于一些模板位置可能位于TU外部,并被解释为或初始化为值0,因此模板计算偏向于0。图6示出了用于计算位于TU边界附近的系数的locSumAbs的模板模式的示例。图6示出了划分为多个CU的CTU 602,并且每个CU包括多个TU。对于TU 604,当前系数的位置以实心块示出,其相邻样本在模板图案中的位置以图案化块示出。图案化块指示用于计算局部和变量locSumAbs的当前系数的预定近邻。
在图6中,由于当前系数606接近TU 604的边界,因此模板图案中的一些相邻样本,例如相邻样本608B和608E,在TU边界外部。在上述Rice编码参数推导中,当计算局部和变量locSumAbs时,这些边界外相邻样本被设置为0,导致Rice编码参数推导不准确。对于高比特深度样本(例如,超过10比特),TU边界外部的相邻样本的数目可以是大的数目。将这些大的数目设置为0会在Rice编码参数推导中引入更多错误。
为了提高从计算的模板估计Rice编码参数的准确性,建议对于当前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进行编码之前,根据等式(2)计算的历史值HistValue用于导出Rice编码参数,以便在可能的情况下对每个TU的第一abs_remainder或dec_abs_level语法元素进行编码。
历史计数器StatCoeff从第一个非零的Golomb-Rice编码变换系数(abs_remainder[cIdx]或dec_abs_level[cIdx])通过指数移动平均的过程更新,每个TU更新一次。当TU中的第一个非零Golomb-Rice编码变换系数被编码为abs_remainder时,颜色分量cIdx的历史计数器StatCoeff被更新如下:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(abs_remainder[cIdx]))+2)>>1 (3)
当TU中的第一个非零Golomb-Rice编码变换系数被编码为dec_abs_level时,颜色分量cIdx的历史计数器StatCoeff被更新如下:
StatCoeff[cIdx]=(StatCoeff[cIdx]+Floor(Log2(dec_abs_level[cIdx])))>>1 (4)
在解码下一个TU之前,根据等式(2),更新的StatCoeff可用于计算下一个TU的替换变量HistValue。
根据以上所述,当当前TU中的第一个非零Golomb-Rice编码变换系数被编码为abs_remainder或dec_abs_level时,更新历史计数器StatCoeff,替换变量HistValue仅根据更新的历史计数器StatCoeff被更新,直到下一个TU。因此,用于计算Rice编码参数的HistValue可能不是为当前TU中的剩余位置找到最佳Rice编码参数的合适值。在本公开中,描述了对HistValue和历史计数器StatCoeff的更新进行同步的实施例,使得对应于更新的历史计数器StatCoeff的替换变量HistValue用于计算Rice编码参数。
在一个实施例中,当颜色分量cIdx的TU中的第一非零Golomb-Rice编码变换系数被编码为abs_remainder时,根据等式(3)更新颜色分量cIdx的历史计数器。当颜色分量cIdx的TU中的第一非零Golomb-Rice编码变换系数被编码为dec_abs_level时,根据等式(4)更新颜色分量cIdx的历史计数器。一旦历史计数器StatCoeff[cIdx]被更新,替换变量HistValue将根据等式(5)更新,并且更新的替换变量HistValue将用于为颜色分量cIdx的当前TU中的剩余abs_remainder和dec_abs_level语法元素导出Rice编码参数,直到新的StatCoeff[cIdx]和HistValue再次被更新。
HistValue=1<<StatCoeff[cIdx] (5)
对VVC规范的可能更改具体如下。
残差编码语法
第7.3.11.11条(残差编码语法)的修改如下(添加部分用下划线标出):
/>
在另一实施例中,除了同步更新历史计数器StatCoeff和替换变量HistValue之外,独立于先前的历史计数器值来更新历史计数器StatCoeff。通过消除历史计数器之间的依赖性,例如通过并行处理,可以更有效地实现视频编解码。
在该实施例中,当TU中的第一非零Golomb-Rice编码变换系数被编码为abs_remainder时,颜色分量cIdx的历史计数器被更新如下:
StatCoeff[cIdx]=Floor(Log2(abs_remainder[cIdx]))+1 (6)
当TU中的第一个非零Golomb-Rice编码变换系数被编码为dec_abs_level时,颜色分量cIdx的历史计数器被更新如下:
StatCoeff[cIdx]=Floor(Log2(dec_abs_level[cIdx])) (7)
一旦历史计数器StatCoeff[cIdx]被更新,HistValue将根据等式(5)更新,并且更新的HistValue将用于为颜色分量cIdx的当前TU中的剩余abs_remainder和dec_abs_level语法元素导出Rice编码参数,直到新的StatCoeff[cIdx]和HistValue再次被更新。
对VVC规范的可能更改具体如下。
残差编码语法
第7.3.11.11条(残差编码语法)的修改如下(添加部分用下划线标出,带删除线的内容将被删除):
/>
从上面表格可以看出,StatCoeff是基于abs_remainder或dec_abs_level确定的,并且独立于先前的StatCoeff值。因此,不同TU的StatCoeff值彼此独立。
在另一实施例中,由于替换变量HistValue的更新与历史计数器StatCoeff的更新一起执行,因此可以消除在处理每个TU的开始处初始化替换变量HistValue的步骤,以节省计算力。
在该实施例中,如果CTU是条带或瓦片中的第一CTU,则替换变量HistValue以初始StatCoeff[cIdx]被初始化如下:
HistValue=sps_persistent_rice_adaptation_enabled_flag?1<<StatCoeff[cIdx]:0 (8)该初始HistValue用于编码,直到HistValue根据以下规则被更新。
当TU中的第一个非零Golomb-Rice编码变换系数被编码为abs_remainder时,根据等式(3)(或等式(6))更新颜色分量cIdx的历史计数器。当TU中的第一非零Golomb-Rice编码变换系数被编码为dec_abs_level时,根据等式(4)(或等式(7))更新颜色分量cIdx的历史计数器。
一旦历史计数器StatCoeff[cIdx]被更新,替换变量HistValue将根据等式(5)更新,更新后的替换变量HistValue将用于为剩余的abs_remainder和dec_abs_level语法元素导出Rice编码参数,直到新的StatCoeff[cIdx]和HistValue再次被更新。
对VVC规范的可能更改具体如下。
残差编码语法
第7.3.11.11条(残差编码语法)的修改如下(添加部分用下划线标出):
/>
由于每次更新历史计数器StatCoeff时都会更新替换变量HistValue,并且来自前一个TU的替换变量HistValue的值存储在替换变量HistValue中,因此不需要在处理每个TU的开始初始化替换变量HistValue。这样,如上所示,可以去除初始化步骤,以节省视频编码器和解码器的计算力。
图7描绘了根据本公开的一些实施例的用于对视频的分区进行编码的过程700的示例。一个或多个计算设备(例如,实现视频编码器100的计算设备)通过执行合适的程序代码(例如,实现熵编码模块116的程序代码)来实现图7中描绘的操作。出于说明的目的,参考附图中描绘的一些示例来描述过程700。然而,其他实现也是可能的。
在框702,过程700包括访问视频信号的分区。分区可以是视频帧、条带、瓦片或在执行编码时由视频编码器作为单元处理的任何类型的分区。分区包括CTU集合,并且每个CTU包括一个或多个CU,并且如图6的示例所示,每个CU包括用于编码的多个TU。
在包括706-712的框704,过程700包括处理分区中的CTU集合中的每个CTU,以将分区编码成比特。在框706,过程700包括一起更新替换变量HistValue和历史计数器StatCoeff。如上所述,在一些实施例中,当TU中的第一个非零Golomb-Rice编码变换系数分别编码为abs_remainder和dec_abs_level时,可以根据等式(3)和(4)执行更新历史计数器StatCoeff。在其他实施例中,当TU中的第一个非零Golomb-Rice编码变换系数分别编码为abs_remainder和dec_abs_level时,可以根据等式(6)和(7)执行更新历史计数器StatCoeff。
在这两种情况下,每当更新历史计数器StatCoeff时,替换变量HistValue都会更新。例如,如果替换变量HistValue根据等式(3)(或等式(6))更新,根据等式(5),基于历史计数器StatCoeff的更新值更新历史计数器StatCoeff。同样,如果替换变量HistValue根据等式(4)(或等式(7))更新,根据等式(5),基于历史计数器StatCoeff的更新值更新历史计数器StatCoeff。这样,在计算下一个Rice编码参数之前,历史计数器StatCoeff和替换变量HistValue都会更新。
在框708,如上所述基于更新的替换变量HistValue计算CTU中的TU的Rice编码参数。在框710,过程700包括例如通过如VVC规范中规定的截断Rice(TR)和有限的k阶EGK的组合,基于计算的Rice编码参数将CTU中的TU编码成二进制表示。在框712,过程700包括将CTU的二进制表示编码成用于包含在视频的码流中的比特。例如,可以使用上面讨论的上下文自适应二进制算术编码(CABAC)来执行编码。在框714,过程700包括输出编码的视频码流。
图8描绘了根据本公开的一些实施例的用于解码视频的分区的过程800的示例。一个或多个计算设备通过执行合适的程序代码来实现图8所示的操作。例如,实现视频解码器200的计算设备可以通过执行熵解码模块216、逆量化模块218和逆变换模块219的程序代码来实现图8中描绘的操作。出于说明的目的,参考附图中描绘的一些示例来描述过程800。然而,其他实现也是可能的。
在框802,过程800包括访问表示视频信号的分区的二进制字符串或二进制表示。分区可以是视频帧、条带或瓦片或在执行编码时由视频编码器作为单元处理的任何类型的分区。该分区包括CTU集合。每个CTU包括一个或多个CU,并且如图6的示例所示,每个CU包括用于编码的多个TU。
在包括806-812的框804,过程800包括处理分区中CTU集合中的每个CTU的二进制字符串,以生成分区的解码样本。在框806,过程800包括结合历史计数器StatCoeff的更新来更新替换变量HistValue。如上所述,在一些实施例中,当TU中的第一个非零Golomb-Rice编码变换系数分别编码为abs_remainder和dec_abs_level时,可以根据等式(3)和等式(4)执行更新历史计数器StatCoeff。在其他实施例中,当TU中的第一个非零Golomb-Rice编码变换系数分别编码为abs_remainder和dec_abs_level时,可以根据等式(6)和等式(7)执行更新历史计数器StatCoeff。
在这两种情况下,每当更新历史计数器StatCoeff时,替换变量HistValue都会更新。例如,如果替换变量HistValue根据等式(3)(或等式(6))更新,根据等式(5),基于历史计数器StatCoeff的更新值更新历史计数器StatCoeff。同样,如果替换变量HistValue根据等式(4)(或等式(7))更新,根据等式(5),基于历史计数器StatCoeff的更新值更新历史计数器StatCoeff。这样,在计算下一个Rice编码参数之前,历史计数器StatCoeff和替换变量HistValue都会更新。
在框808,过程800包括如上所述基于更新的替换变量HistValue计算CTU中的TU的Rice编码参数。在框810,过程800包括例如通过如VVC规范中规定的截断Rice(TR)和有限的k阶EGK的组合,基于计算的Rice编码参数将CTU中的二进制字符串或TU的二进制表示解码成系数值。在框812,过程800包括通过例如如上面关于图2所讨论的反量化和反向变换来重建CTU中的TU的像素值。在框814,过程800包括输出视频的解码分区。
虽然在上述描述中,在图(例如,图6)中描述和示出了TU,但是可以将相同的技术应用于变换块(transform block,TB)。换句话说,在上面给出的实施例(包括图)中,TU也可以表示TB。
实现视频编解码相关量化的计算系统示例
任何合适的计算系统都可以用于执行这里描述的操作。例如,图9描绘了可以实现图1的视频编码器100或图2的视频解码器200的计算设备900的示例。在一些实施例中,计算设备900可以包括处理器912,该处理器912通信地耦接到存储器914,并且执行计算机可执行程序代码和/或访问存储在存储器914中的信息。处理器912可以包括微处理器、专用集成电路(“application-specific integrated circuit,ASIC”)、状态机或其他处理设备。处理器912可以包括任意数量(包括一个)的处理设备。这种处理器可以包括或可以与存储指令的计算机可读介质通信,当由处理器912执行指令时,使处理器执行本公开描述的操作。
存储器914可以包括任何合适的非暂时性计算机可读介质。计算机可读介质可以包括能够向处理器提供计算机可读指令或其他程序代码的任何电子、光学、磁性或其他存储设备。计算机可读介质的非限制性示例包括磁盘、存储芯片、ROM、RAM、ASIC、配置的处理器、光存储器、磁带或其他磁存储器,或者计算机处理器可以从中读取指令的任何其他介质。指令可以包括由编译器和/或解释器从用任何合适的计算机编程语言编写的代码生成的处理器特定指令,该语言包括例如C、C++、C#、Visual Basic、Java、Python、Perl、JavaScript和ActionScript。
计算设备900还可以包括总线916。总线916可以通信地耦接计算设备900的一个或多个组件。计算设备900还可以包括多个外部或内部设备,例如输入或输出设备。例如,计算设备900示出了具有输入/输出(“I/O”)接口918,该接口918可以从一个或多个输入设备920接收输入,或者向一个或多个输出设备922提供输出。一个或多个输入设备920和一个或多个输出设备922可以通信地耦接到I/O接口918。通信耦接可以通过任何合适的方式来实现(例如,通过印刷电路板的连接、通过电缆的连接、通过无线传输的通信等)。输入设备920的非限制性示例包括触摸屏(例如,用于对触摸区域成像的一个或多个摄像机或用于检测由触摸引起的压力变化的压力传感器)、鼠标、键盘或可用于响应于计算设备的用户的物理动作而生成输入事件的任何其他设备。输出设备922的非限制性示例包括LCD屏幕、外部监视器、扬声器或可用于显示或以其他方式呈现由计算设备生成的输出的任何其他设备。
计算设备900可以执行将处理器912配置为执行以上关于图1-8描述的一个或多个操作的程序代码。程序代码可以包括视频编码器100或视频解码器200。程序代码可以驻留在存储器914或任何合适的计算机可读介质中,并且可以由处理器912或任何其他合适的处理器执行。
计算设备900还可以包括至少一个网络接口设备924。网络接口设备924可以包括适于建立到一个或多个数据网络928的有线或无线数据连接的任何设备或设备组。网络接口设备924的非限制性示例包括以太网网络适配器、调制解调器等。计算设备900可以经由网络接口设备924发送作为电子或光信号的消息。
一般考虑
本公开阐述了许多具体细节,以提供对所要求保护的主题的透彻理解。然而,本领域技术人员将理解,要求保护的主题可以在没有这些具体细节的情况下实施。在其他情况下,没有详细描述普通技术人员已知的方法、装置或系统,以免模糊要求保护的主题。
除非另有明确说明,否则应当理解,在本说明书的整个讨论中,使用诸如“处理”、“估算”、“计算”、“确定”和“识别”等术语是指计算设备的动作或处理,例如一台或多台计算机或类似的一个或多个电子计算设备,其操纵或转换在计算平台的存储器、寄存器或其他信息存储设备、传输设备或显示设备内表示为物理电子或磁量的数据。
本公开讨论的一个或多个系统不限于任何特定的硬件架构或配置。计算设备可以包括提供基于一个或多个输入的结果的组件的任何合适布置。合适的计算设备包括基于多用途微处理器的计算机系统,该系统访问从通用计算设备到实现本主题的一个或多个实施例的专用计算设备编程或配置计算系统的存储软件。任何合适的编程、脚本或其他类型的语言或语言组合可用于在编程或配置计算设备时使用的软件中实现本公开包含的教导。
本公开公开的方法的实施例可以在这种计算设备的操作中执行。上述示例中呈现的框的顺序可以变化——例如,框可以被重新排序、组合和/或分解成子框。一些框或处理可以并行执行。
本公开中“适于”或“配置为”的使用意味着开放和包容的语言,其不排除适应或配置为执行附加任务或步骤的设备。此外,由于“基于”一个或多个所述条件或值的处理、步骤、计算或其他动作实际上可以基于所述条件或值之外的附加条件或值,因此“基于”的使用意味着开放和包容。本公开包含的标题、列表和编号仅为了便于解释,并不意味着限制。
虽然已经针对其具体实施例详细描述了本主题,但是应当理解,本领域技术人员在理解了前述内容后,可以容易地对这些实施例进行修改、变化和等同。因此,应该理解,本公开是为了示例而不是限制的目的而呈现的,并且不排除包括对本领域普通技术人员来说显而易见的对本主题的修改、变化和/或添加。
Claims (40)
1.一种用于解码视频的方法,所述方法包括:
访问对所述视频的分区进行表示的二进制字符串,所述分区包括多个编码树单元CTU;
对所述分区中的所述多个CTU中的每个CTU进行解码,对所述CTU进行解码包括:
更新用于计算莱斯Rice编码参数的颜色分量的历史计数器StatCoeff;
在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;
基于更新的替换变量HistValue计算所述CTU中的变换单元TU的Rice编码参数;
基于计算出的Rice编码参数,将所述CTU中的TU对应的所述二进制字符串解码为所述TU的系数值;以及
根据所述系数值确定所述CTU中的TU的像素值;以及
输出所述视频的解码分区,所述视频的解码分区包括所述分区中的多个解码的CTU。
2.根据权利要求1所述的方法,其中,更新所述历史计数器StatCoeff包括:
当确定TU中的第一非零Golomb-Rice编码变换系数被编码为abs_remainder时,将所述颜色分量cIdx的历史计数器StatCoeff更新为:
StatCoeff[cIdx]=Floor(Log2(abs_remainder[cIdx]))+1;以及
当确定所述TU中的所述第一非零Golomb-Rice编码变换系数被编码为dec_abs_level时,将所述颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=Floor(Log2(dec_abs_level[cIdx])),
其中,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
3.根据权利要求1所述的方法,其中,所述分区是帧、条带或瓦片。
4.根据权利要求1所述的方法,还包括:基于所述视频的亮度和色度数组的样本的比特深度,将所述历史计数器StatCoeff设置为初始值。
5.根据权利要求1所述的方法,其中,基于所述历史计数器计算所述CTU中的TU的Rice编码参数包括:
使用所述CTU的TU中的系数的预定近邻中的相邻系数的值和所述替换变量HistValue,来计算所述CTU的TU中的所述系数的局部和变量locSumAbs;以及
基于所述局部和变量locSumAbs导出所述TU的Rice编码参数。
6.根据权利要求5所述的方法,其中,计算所述CTU的TU中的所述系数的所述局部和变量locSumAbs包括:
确定所述系数的预定近邻中的多个相邻系数中的一个相邻系数在所述TU外部;以及
使用所述替换变量HistValue作为所述TU外部的所述相邻系数的值,来计算所述局部和变量locSumAbs。
7.根据权利要求1所述的方法,其中,基于所述历史计数器对所述替换变量HistValue进行更新包括:通过计算如下公式来更新所述颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
8.一种非暂时性计算机可读介质,存储有程序代码,所述程序代码由一个或多个用于执行如下操作的处理设备执行,所述操作包括:
访问对视频的分区进行表示的二进制字符串,所述分区包括多个编码树单元CTU;
对所述分区中的多个CTU中的每个CTU进行解码,对所述CTU进行解码包括:
更新用于计算莱斯Rice编码参数的颜色分量的历史计数器StatCoeff;
在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;
基于更新的替换变量HistValue计算所述CTU中的变换单元TU的Rice编码参数;
基于计算出的Rice编码参数,将所述CTU中的TU对应的所述二进制字符串解码为所述TU的系数值;以及
根据所述系数值确定所述CTU中的TU的像素值;以及
输出所述视频的解码分区,所述视频的解码分区包括所述分区中的多个解码的CTU。
9.根据权利要求8所述的非暂时性计算机可读介质,其中,更新所述历史计数器StatCoeff包括:
当确定TU中的第一非零Golomb-Rice编码变换系数被编码为abs_remainder时,将所述颜色分量cIdx的历史计数器StatCoeff更新为:
StatCoeff[cIdx]=Floor(Log2(abs_remainder[cIdx]))+1;以及
当确定所述TU中的所述第一非零Golomb-Rice编码变换系数被编码为dec_abs_level时,将所述颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=Floor(Log2(dec_abs_level[cIdx])),
其中,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
10.根据权利要求8所述的非暂时性计算机可读介质,其中,所述分区是帧、条带或瓦片。
11.根据权利要求8所述的非暂时性计算机可读介质,还包括:基于所述视频的亮度和色度数组的样本的比特深度,将所述历史计数器StatCoeff设置为初始值。
12.根据权利要求8所述的非暂时性计算机可读介质,其中,基于所述历史计数器计算所述CTU中的TU的Rice编码参数包括:
使用所述CTU的TU中的系数的预定近邻中的相邻系数的值和所述替换变量HistValue,来计算所述CTU的TU中的所述系数的局部和变量locSumAbs;以及
基于所述局部和变量locSumAbs导出所述TU的Rice编码参数。
13.根据权利要求12所述的非暂时性计算机可读介质,其中,计算所述CTU的TU中的所述系数的所述局部和变量locSumAbs包括:
确定所述系数的预定近邻中的多个相邻系数中的一个相邻系数在所述TU外部;以及
使用所述替换变量HistValue作为所述TU外部的所述相邻系数的值,来计算所述局部和变量locSumAbs。
14.根据权利要求8所述的非暂时性计算机可读介质,其中,基于所述历史计数器对所述替换变量HistValue进行更新包括:通过计算如下公式来更新所述颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
15.一种系统,包括:
处理设备;和
非暂时性计算机可读介质,所述非暂时性计算机可读介质通信地耦接到所述处理设备,其中,所述处理设备被配置为执行存储在所述非暂时性计算机可读介质中的程序代码,并由此执行以下操作:
访问对视频的分区进行表示的二进制字符串,所述分区包括多个编码树单元CTU;
对所述分区中的多个CTU中的每个CTU进行解码,对所述CTU进行解码包括:
更新用于计算莱斯Rice编码参数的颜色分量的历史计数器StatCoeff;
在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;
基于更新的替换变量HistValue计算所述CTU中的变换单元TU的Rice编码参数;
基于计算出的Rice编码参数,将所述CTU中的TU对应的所述二进制字符串解码为所述TU的系数值;以及
根据所述系数值确定所述CTU中的TU的像素值;以及
输出所述视频的解码分区,所述视频的解码分区包括所述分区中的多个解码的CTU。
16.根据权利要求15所述的系统,其中,更新所述历史计数器StatCoeff包括:
当确定TU中的第一非零Golomb-Rice编码变换系数被编码为abs_remainder时,将所述颜色分量cIdx的历史计数器StatCoeff更新为:
StatCoeff[cIdx]=Floor(Log2(abs_remainder[cIdx]))+1;以及
当确定所述TU中的所述第一非零Golomb-Rice编码变换系数被编码为dec_abs_level时,将所述颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=Floor(Log2(dec_abs_level[cIdx])),
其中,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
17.根据权利要求15所述的系统,还包括:基于所述视频的亮度和色度数组的样本的比特深度,将所述历史计数器StatCoeff设置为初始值。
18.根据权利要求15所述的系统,其中,基于所述历史计数器计算所述CTU中的TU的Rice编码参数包括:
使用所述CTU的TU中的系数的预定近邻中的相邻系数的值和所述替换变量HistValue,来计算所述CTU的TU中的所述系数的局部和变量locSumAbs;以及
基于所述局部和变量locSumAbs导出所述TU的Rice编码参数。
19.根据权利要求18所述的系统,其中,计算所述CTU的TU中的所述系数的所述局部和变量locSumAbs包括:
确定所述系数的预定近邻中的多个相邻系数中的一个相邻系数在所述TU外部;以及
使用所述替换变量HistValue作为所述TU外部的所述相邻系数的值,来计算所述局部和变量locSumAbs。
20.根据权利要求15所述的系统,其中,基于所述历史计数器对所述替换变量HistValue进行更新包括:通过计算如下公式来更新所述颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
21.一种用于编码视频的方法,所述方法包括:
访问所述视频的分区,所述分区包括多个编码树单元CTU;
处理所述视频的分区以生成所述分区的二进制表示,所述处理包括:
对所述分区中的所述多个CTU中的每个CTU进行编码,对所述CTU进行编码包括:
更新用于计算莱斯Rice编码参数的颜色分量的历史计数器StatCoeff;
在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;
基于更新的替换变量HistValue计算所述CTU中的变换单元TU的Rice编码参数;以及
基于计算出的Rice编码参数,将所述TU的系数值编码为所述CTU中的TU对应的所述二进制表示;以及
将所述分区的二进制表示编码为所述视频的码流。
22.根据权利要求21所述的方法,其中,更新所述历史计数器StatCoeff包括:
当确定TU中的第一非零Golomb-Rice编码变换系数被编码为abs_remainder时,将所述颜色分量cIdx的历史计数器StatCoeff更新为:
StatCoeff[cIdx]=Floor(Log2(abs_remainder[cIdx]))+1;以及
当确定所述TU中的所述第一非零Golomb-Rice编码变换系数被编码为dec_abs_level时,将所述颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=Floor(Log2(dec_abs_level[cIdx])),
其中,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
23.根据权利要求21所述的方法,其中,所述分区是帧、条带或瓦片。
24.根据权利要求21所述的方法,还包括:基于所述视频的亮度和色度数组的样本的比特深度,将所述历史计数器StatCoeff设置为初始值。
25.根据权利要求21所述的方法,其中,基于所述历史计数器计算所述CTU中的TU的Rice编码参数包括:
使用所述CTU的TU中的系数的预定近邻中的相邻系数的值和所述替换变量HistValue,来计算所述CTU的TU中的所述系数的局部和变量locSumAbs;以及
基于所述局部和变量locSumAbs导出所述TU的Rice编码参数。
26.根据权利要求25所述的方法,其中,计算所述CTU的TU中的所述系数的所述局部和变量locSumAbs包括:
确定所述系数的预定近邻中的多个相邻系数中的一个相邻系数在所述TU外部;以及
使用所述替换变量HistValue作为所述TU外部的所述相邻系数的值,来计算所述局部和变量locSumAbs。
27.根据权利要求21所述的方法,其中,基于所述历史计数器对所述替换变量HistValue进行更新包括:通过计算如下公式来更新所述颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
28.一种非暂时性计算机可读介质,存储有程序代码,所述程序代码由一个或多个用于执行如下操作的处理设备执行,所述操作包括:
访问视频的分区,所述分区包括多个编码树单元CTU;
处理所述视频的分区以生成所述分区的二进制表示,所述处理包括:
对所述分区中的所述多个CTU中的每个CTU进行编码,对所述CTU进行编码包括:
更新用于计算莱斯Rice编码参数的颜色分量的历史计数器StatCoeff;
在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;
基于更新的替换变量HistValue计算所述CTU中的变换单元TU的Rice编码参数;
基于计算出的Rice编码参数,将所述TU的系数值编码为所述CTU中的TU对应的所述二进制表示;以及
将所述分区的二进制表示编码为所述视频的码流。
29.根据权利要求28所述的非暂时性计算机可读介质,其中,更新所述历史计数器StatCoeff包括:
当确定TU中的第一非零Golomb-Rice编码变换系数被编码为abs_remainder时,将所述颜色分量cIdx的历史计数器StatCoeff更新为:
StatCoeff[cIdx]=Floor(Log2(abs_remainder[cIdx]))+1;以及
当确定所述TU中的所述第一非零Golomb-Rice编码变换系数被编码为dec_abs_level时,将所述颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=Floor(Log2(dec_abs_level[cIdx])),
其中,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
30.根据权利要求28所述的非暂时性计算机可读介质,其中,所述分区是帧、条带或瓦片。
31.根据权利要求28所述的非暂时性计算机可读介质,还包括:基于所述视频的亮度和色度数组的样本的比特深度,将所述历史计数器StatCoeff设置为初始值。
32.根据权利要求28所述的非暂时性计算机可读介质,其中,基于所述历史计数器计算所述CTU中的TU的Rice编码参数包括:
使用所述CTU的TU中的系数的预定近邻中的相邻系数的值和所述替换变量HistValue,来计算所述CTU的TU中的所述系数的局部和变量locSumAbs;以及
基于所述局部和变量locSumAbs导出所述TU的Rice编码参数。
33.根据权利要求32所述的非暂时性计算机可读介质,其中,计算所述CTU的TU中的所述系数的所述局部和变量locSumAbs包括:
确定所述系数的预定近邻中的多个相邻系数中的一个相邻系数在所述TU外部;以及
使用所述替换变量HistValue作为所述TU外部的所述相邻系数的值,来计算所述局部和变量locSumAbs。
34.根据权利要求28所述的非暂时性计算机可读介质,其中,基于所述历史计数器对所述替换变量HistValue进行更新包括:通过计算如下公式来更新颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
35.一种系统,包括:
处理设备;和
非暂时性计算机可读介质,所述非暂时性计算机可读介质通信地耦接到所述处理设备,其中,所述处理设备被配置为执行存储在所述非暂时性计算机可读介质中的程序代码,并由此执行以下操作:
访问视频的分区,所述分区包括多个编码树单元CTU;
处理所述视频的分区以生成所述分区的二进制表示,所述处理包括:
对所述分区中的所述多个CTU中的每个CTU进行编码,对所述CTU进行编码包括:
更新用于计算莱斯Rice编码参数的颜色分量的历史计数器StatCoeff;
在计算下一个Rice编码参数之前,基于更新的历史计数器对替换变量HistValue进行更新;
基于更新的替换变量HistValue计算所述CTU中的变换单元TU的Rice编码参数;以及
基于计算的Rice编码参数,将所述TU的系数值编码为所述CTU中的TU对应的所述二进制表示;以及
将所述分区的二进制表示编码为所述视频的码流。
36.根据权利要求35所述的系统,其中,更新所述历史计数器StatCoeff包括:
当确定TU中的第一非零Golomb-Rice编码变换系数被编码为abs_remainder时,将所述颜色分量cIdx的历史计数器StatCoeff更新为:
StatCoeff[cIdx]=Floor(Log2(abs_remainder[cIdx]))+1;以及
当确定所述TU中的所述第一非零Golomb-Rice编码变换系数被编码为dec_abs_level时,将所述颜色分量cIdx的历史计数器更新为:
StatCoeff[cIdx]=Floor(Log2(dec_abs_level[cIdx])),
其中,Floor(x)表示小于或等于x的最大整数,Log2(x)是x的以2为底的对数。
37.根据权利要求35所述的系统,还包括:基于所述视频的亮度和色度数组的样本的比特深度,将所述历史计数器StatCoeff设置为初始值。
38.根据权利要求35所述的系统,其中,基于所述历史计数器计算所述CTU中的TU的Rice编码参数包括:
使用所述CTU的TU中的系数的预定近邻中的相邻系数的值和所述替换变量HistValue,来计算所述CTU的TU中的所述系数的局部和变量locSumAbs;以及
基于所述局部和变量locSumAbs导出所述TU的Rice编码参数。
39.根据权利要求38所述的系统,其中,计算所述CTU的TU中的所述系数的所述局部和变量locSumAbs包括:
确定所述系数的预定近邻中的多个相邻系数中的一个相邻系数在所述TU外部;以及
使用所述替换变量HistValue作为所述TU外部的所述相邻系数的值,来计算所述局部和变量locSumAbs。
40.根据权利要求35所述的系统,其中,基于所述历史计数器对所述替换变量HistValue进行更新包括:通过计算如下公式来更新所述颜色分量cIdx的替换变量HistValue:
HistValue[cIdx]=1<<StatCoeff[cIdx],
其中,StatCoeff表示所述历史计数器。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US63/234,634 | 2021-08-18 | ||
US202163250969P | 2021-09-30 | 2021-09-30 | |
US63/250,969 | 2021-09-30 | ||
PCT/US2022/075157 WO2023023608A2 (en) | 2021-08-18 | 2022-08-18 | History-based rice parameter derivations for video coding |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117837148A true CN117837148A (zh) | 2024-04-05 |
Family
ID=90504425
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280056225.1A Pending CN117837148A (zh) | 2021-08-18 | 2022-08-18 | 用于视频编解码的基于历史的莱斯编码参数推导 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117837148A (zh) |
-
2022
- 2022-08-18 CN CN202280056225.1A patent/CN117837148A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20200092300A (ko) | 제한된 오프셋 보상 및 루프 필터를 기반으로 하는 영상 부호화 및 복호화 방법 및 그 장치 | |
WO2017041676A1 (en) | Method and apparatus of context modelling for syntax elements in image and video coding | |
EP2801195B1 (en) | Devices and methods for sample adaptive offset coding and selection of edge offset parameters | |
CN111819853A (zh) | 变换域中预测的信令残差符号 | |
CN114930817A (zh) | 量化相关参数的传讯技术 | |
US20240179323A1 (en) | Operation range extension for versatile video coding | |
CN113068026B (zh) | 编码预测方法、装置及计算机存储介质 | |
EP4393151A1 (en) | Independent history-based rice parameter derivations for video coding | |
WO2021263251A1 (en) | State transition for dependent quantization in video coding | |
CN117837148A (zh) | 用于视频编解码的基于历史的莱斯编码参数推导 | |
CN118020294A (zh) | 用于视频编码的基于历史的rice参数推导 | |
CN117981306A (zh) | 用于视频编码的独立基于历史的莱斯参数推导 | |
CN117837140A (zh) | 用于视频编码中波前并行处理的基于历史的莱斯参数推导 | |
WO2023023608A2 (en) | History-based rice parameter derivations for video coding | |
CN118264807A (zh) | 视频解码方法、编码方法、解码装置和编码装置 | |
WO2023082484A1 (en) | Array based residual coding on non-dyadic blocks | |
CN118216153A (zh) | 用于视频编码的初始化处理 | |
WO2022217245A1 (en) | Remaining level binarization for video coding | |
CN116965028A (zh) | 用于视频编码的剩余等级二值化 | |
WO2023200933A1 (en) | Cross-component model adjustment for video coding | |
WO2023212684A1 (en) | Subblock coding inference in video coding | |
WO2022213122A1 (en) | State transition for trellis quantization in video coding | |
CN114979656A (zh) | 视频编解码方法、装置、计算机可读介质及电子设备 | |
WO2023168257A2 (en) | State transition of dependent quantization for aom enhanced compression model | |
WO2023132991A1 (en) | Signaling general constraints information 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. |