一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

避免多层视频码流中的冗余指示的制作方法

2022-06-01 20:42:16 来源:中国专利 TAG:

避免多层视频码流中的冗余指示
1.相关申请交叉引用
2.本专利申请要求王业奎于2019年10月7日提交的申请号为62/911,808、发明名称为“视频译码中的可适性(scalability in video coding)”的美国临时专利申请的权益,其内容通过引用结合在本技术中。
技术领域
3.本发明大体上描述了用于视频译码中多层视频码流的技术。更具体地,本发明描述了用于在视频译码中在多层码流中指示层对应的参数时减少冗余的技术。


背景技术:

4.即使视频相对较短,也需要大量的视频数据来描述,当数据要在带宽容量有限的通信网络中流式传输或以其它方式传输时,这样可能会造成困难。因此,视频数据通常要先压缩,然后通过现代电信网络进行传输。由于内存资源可能有限,当在存储设备上存储视频时,该视频的大小也可能是一个问题。视频压缩设备通常在信源侧使用软件和/或硬件对视频数据进行编码,然后传输或存储视频数据,从而减少表示数字视频图像所需的数据量。然后,对视频数据进行解码的视频解压缩设备在目的地侧接收压缩数据。在网络资源有限以及对更高视频质量的需求不断增长的情况下,需要改进压缩和解压缩技术,这些改进的技术能够在几乎不影响图像质量的情况下提高压缩比。


技术实现要素:

5.第一方面涉及一种由视频解码器实现的解码方法。所述方法包括:所述视频解码器接收包括序列参数集(sequence parameter set,sps)的子码流,其中,所述sps包括具有唯一层的输出层集(output layer set,ols)的解码图像缓冲区(decoded picture buffer,dpb)语法结构;所述视频解码器从所述sps中获取所述具有唯一层的ols的所述dpb语法结构;所述视频解码器使用所述dpb语法结构对所述唯一层中的图像进行解码,以得到经解码图像。
6.所述方法提供的技术确保当输出层集(output layer set,ols)只包括单层时,解码图像缓冲区(decoded picture buffer,dpb)参数包括在序列参数集(sequence parameter set,sps)中。由于sps包括具有单层的ols的dpb参数,因此可以从码流中移除视频参数集(video parameter set,vps),这样减少了冗余并提高了译码效率。因此,视频译码中的编码器/解码器(又称“编解码器”)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
7.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述dpb语法结构表示为dpb_parameters()。
8.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述唯一层是第i层,所述ols是第i个ols。
9.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述dpb语法结构存在于所述sps中的第i个语法结构dpb_parameters()中。
10.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述子码流不包括视频参数集(video parameter set,vps)。
11.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述方法还包括:在显示所述经解码图像之前,将所述经解码图像存储在dpb中。
12.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述sps由所述ols中的唯一层参考。
13.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述方法还包括:在电子设备的显示器上显示所述经解码图像。
14.第二方面涉及一种由视频编码器实现的编码方法。所述方法包括:所述视频编码器生成视频参数集(video parameter set,vps)和序列参数集(sequence parameter set,sps),其中,所述vps包括所有输出层集(output layer set,ols)的解码图像缓冲区(decoded picture buffer,dpb)语法结构列表,所述sps包括具有唯一层的每个ols的dpb语法结构;所述视频编码器将所述vps和所述sps编码到视频码流中;所述视频编码器存储所述视频码流,以将所述视频码流发送给视频解码器。
15.所述方法提供的技术确保当输出层集(output layer set,ols)只包括单层时,解码图像缓冲区(decoded picture buffer,dpb)参数包括在序列参数集(sequence parameter set,sps)中。由于sps包括具有单层的ols的dpb参数,因此可以从码流中移除视频参数集(video parameter set,vps),这样减少了冗余并提高了译码效率。因此,视频译码中的编码器/解码器(又称“编解码器”)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
16.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述vps包括所述dpb语法结构列表的索引,所述索引表示为vps_ols_dpb_params_idx[i]。
[0017]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述vps_ols_dpb_params_idx[i]的取值范围为0至所述vps中的dpb语法结构的总数量。
[0018]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述vps包括vps_num_dpb_params_minus1,所述vps_num_dpb_params_minus1 1表示所述vps中的dpb语法结构的总数量。
[0019]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述方法还包括:从所述码流中提取子码流,其中,所述子码流包括所述码流中的所述sps,但不包括所述码流中的所述vps。
[0020]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述方法还包括:将所述子码流发送给视频解码器。
[0021]
第三方面涉及一种解码设备。所述解码设备包括:接收器,用于接收包括序列参数集(sequence parameter set,sps)的子码流,其中,所述sps包括具有唯一层的输出层集(output layer set,ols)的解码图像缓冲区(decoded picture buffer,dpb)语法结构;与所述存储器耦合的处理器,其中,所述处理器用于执行所述指令,以使得所述解码设备执行以下操作:根据所述具有唯一层的ols,将所述ols中的层的数量设置为1;当所述ols中的层
的数量已经设置为1时,从所述sps中获取所述具有唯一层的ols的所述dpb语法结构;使用所述dpb语法结构对所述唯一层中的图像进行解码,以得到经解码图像。
[0022]
所述解码设备提供的技术确保当输出层集(output layer set,ols)只包括单层时,解码图像缓冲区(decoded picture buffer,dpb)参数包括在序列参数集(sequence parameter set,sps)中。由于sps包括具有单层的ols的dpb参数,因此可以从码流中移除视频参数集(video parameter set,vps),这样减少了冗余并提高了译码效率。因此,视频译码中的编码器/解码器(又称“编解码器”)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
[0023]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述dpb语法结构表示为dpb_parameters(),所述唯一层是第i层,所述ols是第i个ols。
[0024]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述dpb语法结构存在于所述sps中的第i个语法结构dpb_parameters()中。
[0025]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述子码流不包括视频参数集(video parameter set,vps)。
[0026]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述sps由所述ols中的唯一层参考。
[0027]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述解码设备还包括用于显示所述经解码图像的显示器。
[0028]
第四方面涉及一种编码设备。所述编码设备包括:包括指令的存储器;与所述存储器耦合的处理器,其中,所述处理器用于实现所述指令,以使得所述编码设备执行以下操作:生成视频参数集(video parameter set,vps)和序列参数集(sequence parameter set,sps),其中,所述vps包括所有输出层集(output layer set,ols)的解码图像缓冲区(decoded picture buffer,dpb)语法结构列表,所述sps包括具有唯一层的每个ols的dpb语法结构;将所述vps和所述sps编码到视频码流中;与所述处理器耦合的发送器,其中,所述发送器用于将所述视频码流发送给视频解码器。
[0029]
所述编码设备提供的技术确保当输出层集(output layer set,ols)只包括单层时,解码图像缓冲区(decoded picture buffer,dpb)参数包括在序列参数集(sequence parameter set,sps)中。由于sps包括具有单层的ols的dpb参数,因此可以从码流中移除视频参数集(video parameter set,vps),这样减少了冗余并提高了译码效率。因此,视频译码中的编码器/解码器(又称“编解码器”)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
[0030]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述vps包括所述dpb语法结构列表的索引,所述索引表示为vps_ols_dpb_params_idx[i]。
[0031]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述vps_ols_dpb_params_idx[i]的取值范围为0至所述vps中的dpb语法结构的总数量。
[0032]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述vps包括vps_num_dpb_params_minus1,所述vps_num_dpb_params_minus1 1表示所述vps中的dpb语法结构的总数量。
[0033]
第五方面涉及一种译码装置。所述译码装置包括:接收器,用于接收图像进行编码
或接收码流进行解码;与所述接收器耦合的发送器,其中,所述发送器用于将所述码流发送给解码器或将经解码图像发送给显示器;与所述接收器或所述发送器中的至少一个耦合的存储器,其中,所述存储器用于存储指令;与所述存储器耦合的处理器,其中,所述处理器用于执行存储在所述存储器中的所述指令,以执行本文公开的任一方法。
[0034]
所述译码装置提供的技术确保当输出层集(output layer set,ols)只包括单层时,解码图像缓冲区(decoded picture buffer,dpb)参数包括在序列参数集(sequence parameter set,sps)中。由于sps包括具有单层的ols的dpb参数,因此可以从码流中移除视频参数集(video parameter set,vps),这样减少了冗余并提高了译码效率。因此,视频译码中的编码器/解码器(又称“编解码器”)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
[0035]
可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述译码装置还包括用于显示所述经解码图像的显示器。
[0036]
第六方面涉及一种系统。所述系统包括:编码器;与所述编码器通信的解码器,其中,所述编码器或所述解码器包括本文公开的解码设备、编码设备或译码装置。
[0037]
所述系统提供的技术确保当输出层集(output layer set,ols)只包括单层时,解码图像缓冲区(decoded picture buffer,dpb)参数包括在序列参数集(sequence parameter set,sps)中。由于sps包括具有单层的ols的dpb参数,因此可以从码流中移除视频参数集(video parameter set,vps),这样减少了冗余并提高了译码效率。因此,视频译码中的编码器/解码器(又称“编解码器”)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
[0038]
第七方面涉及一种译码模块。所述译码模块包括:接收模块,用于接收图像进行编码或接收码流进行解码;与所述接收模块耦合的发送模块,其中,所述发送模块用于将所述码流发送给解码模块或将经解码图像发送给显示模块;与所述接收模块或所述发送模块中的至少一个耦合的存储模块,其中,所述存储模块用于存储指令;与所述存储模块耦合的处理模块,其中,所述处理模块用于执行存储在所述存储模块中的所述指令,以执行本文公开的任一方法。
[0039]
所述译码模块提供的技术确保当输出层集(output layer set,ols)只包括单层时,解码图像缓冲区(decoded picture buffer,dpb)参数包括在序列参数集(sequence parameter set,sps)中。由于sps包括具有单层的ols的dpb参数,因此可以从码流中移除视频参数集(video parameter set,vps),这样减少了冗余并提高了译码效率。因此,视频译码中的编码器/解码器(又称“编解码器”)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
[0040]
为了清楚起见,任一上述实施例可以与上述其它任何一个或多个实施例组合以创建在本发明范围内的新实施例。
[0041]
根据以下结合附图和权利要求书的详细描述,将会更清楚地理解这些和其它特征。
附图说明
[0042]
为了更全面地理解本发明,现在参考以下结合附图和具体实施方式进行的简要描
述,其中,相似的附图标记表示相似的部件。
[0043]
图1为对视频信号进行译码的示例性方法的流程图。
[0044]
图2为用于视频译码的示例性编码和解码(编解码)系统的示意图。
[0045]
图3为示例性视频编码器的示意图。
[0046]
图4为示例性视频解码器的示意图。
[0047]
图5示出了用于空间可适性的多层译码的一个示例。
[0048]
图6示出了使用输出层集(output layer set,ols)的多层译码的一个示例。
[0049]
图7示出了视频码流的一个实施例。
[0050]
图8为对经编码视频码流进行解码的方法的一个实施例。
[0051]
图9为对经编码视频码流进行编码的方法的一个实施例。
[0052]
图10为视频译码设备的示意图。
[0053]
图11为译码模块的一个实施例的示意图。
具体实施方式
[0054]
首先应当理解,尽管下文提供一个或多个实施例的说明性实现方式,但所公开的系统和/或方法可以使用任意数量的技术来实施,无论这些技术是当前已知的还是现有的。本发明决不应限于下文所说明的说明性实现方式、附图和技术,包括本文所说明并描述的示例性设计和实现方式,而是可以在所附权利要求书的范围以及其等效物的完整范围内修改。
[0055]
以下术语的定义如下所述,除非在本文相反的上下文中使用。具体地,以下定义旨在更加清晰地描述本发明。但是,术语在不同的上下文中可能会有不同的描述。因此,以下定义应当视为补充信息,而不应当视为对此处为这些术语提供的描述的任何其它定义进行限制。
[0056]
码流是包括视频数据的一系列比特,这些视频数据会进行压缩以在编码器和解码器之间传输。编码器是一种用于通过编码过程将视频数据压缩到码流中的设备。解码器是一种用于通过解码过程从码流中重建视频数据以进行显示的设备。图像是创建帧或其场的亮度样本和/或色度样本组成的阵列。为了清楚论述,正被编码或解码的图像可以称为当前图像。参考图像是包括参考样本的图像,这些样本可以在根据帧间预测和/或层间预测通过参考对其它图像进行译码时使用。参考图像列表是用于帧间预测和/或层间预测的一列参考图像。一些视频译码系统使用两个参考图像列表,这两个参考图像列表可以表示为参考图像列表1和参考图像列表0。参考图像列表结构是包括多个参考图像列表的可寻址语法结构。
[0057]
帧间预测是一种通过参考与当前图像不同的参考图像中的指示样本对当前图像中的样本进行译码的机制,其中,参考图像和当前图像位于同一层。参考图像列表结构条目是参考图像列表结构中表示与参考图像列表关联的参考图像的可寻址位置。
[0058]
条带头(slice header)是经编码条带的一部分,包括与在条带中表示的一个分块内的所有视频数据相关的数据元素。图像参数集(picture parameter set,pps)是包括与整个图像相关的数据的参数集。更具体地,pps是一种包括适用于0个或0个以上完整的经编码图像的语法元素的语法结构,0个或0个以上完整的经编码图像通过每个图像头中的语法
元素确定。序列参数集(sequence parameter set,sps)是包括与图像序列相关的数据的参数集。接入单元(access unit,au)是与同一显示时间(例如同一图像顺序编号)关联的一个或多个经编码图像的集合,这些图像从解码图像缓冲区(decoded picture buffer,dpb)输出(例如显示给用户)。接入单元分隔符(access unit delimiter,aud)是用于指示au起始或au之间边界的指示符或数据结构。解码视频序列(decoded video sequence)是一系列已经由解码器重建以准备显示给用户的图像。
[0059]
网络抽象层(network abstraction layer,nal)单元是一种包括原始字节序列载荷(raw byte sequence payload,rbsp)形式的数据、指示数据类型并根据需要穿插预防混淆字节的语法结构。视频编码层(video coding layer,vcl)nal单元是编码后包括视频数据的nal单元,例如图像中的经编码条带(coded slice)。非vcl nal单元是包括非视频数据的nal单元,例如支持对视频数据进行解码、一致性检查的性能或其它操作的语法和/或参数。层是一组vcl nal单元和关联的非vcl nal单元,其中,这些vcl nal单元共用指定特征(例如,公共分辨率、帧率、图像大小等)。层中的vcl nal单元可以共用nal单元头层标识符(nuh_layer_id)的特定值。经编码图像(coded picture)是图像的经编码表示,包括接入单元(access unit,au)内的具有特定nal单元头层标识符(nuh_layer_id)值的vcl nal单元并包括该图像中的所有编码树单元(coding tree unit,ctu)。经解码图像(decoded picture)是通过将解码过程应用于经编码图像而产生的图像。
[0060]
输出层集(output layer set,ols)是一组层,这组层中的一层或多层被指定为一个或多个输出层。输出层是指定用于输出(例如,输出给显示器)的层。第0个ols只包括最低层(具有最小层标识符的层),因此只包括输出层。ols中的层的数量可以由语法元素numlayersinols表示。视频参数集(video parameter set,vps)是一种包括与整个视频相关的参数的数据单元。层间预测是通过参考一个参考层中的参考图像对当前层中的当前图像进行译码的机制,其中,当前图像和参考图像包括在同一个au中,参考层的nuh_layer_id小于当前层的nuh_layer_id。
[0061]
档次(profile)是一组定义的译码工具,用于创建符合性或一致性码流。每个档次指定与该档次一致的所有解码器应支持的算法特征和限制的子集。层次和级别是在最大码率、最大亮度采样率、最大亮度图像大小、最小压缩比、条带的最大允许数量和分块的最大允许数量方面定义码流的约束条件。低层比高层的约束多,低级别比高级别的约束多。档次、层次和级别(profile,tier,and level,ptl)参数是一种提供档次、层次和/或级别信息的语法结构。
[0062]
时间可适性码流(temporal scalable bitstream)是在多层中进行译码的码流,提供不同的时间分辨率/帧率(例如,每个层经过译码以支持不同的帧率)。子层是时间可适性码流的时间可适性层,时间可适性码流包括具有特定时间标识符值的vcl nal单元和关联的非vcl nal单元。例如,时间子层是包括与指定帧率关联的视频数据的层。子层表示是包括特定子层和较低子层的nal单元的码流的子集。因此,可以组合一个或多个时间子层以实现子层表示,该子层表示可以被解码以产生具有指定帧率的视频序列。ols索引是唯一标识对应ols的索引。时间标识符(identifier,id)是一个表示数据对应于视频序列中的时间位置的数据元素。子码流提取过程是一个从码流中移除不属于由目标ols索引和目标最高时间id确定的目标集合的nal单元的过程。子码流提取过程会产生输出子码流,该输出子码
流包括码流中属于目标集合的nal单元。
[0063]
假设参考解码(hypothetical reference decoder,hrd)是在编码器上运行的解码器模型,检查编码过程产生的码流的可变性,以验证是否与指定的约束条件一致。码流一致性测试(bitstream conformance test)是一种确定经编码码流是否符合通用视频编码(versatile video coding,vvc)等标准的测试。hrd参数是初始化和/或定义hrd的操作条件的语法元素。序列级hrd参数是适用于整个编码视频序列的hrd参数。最大hrd时间标识符(identifier,id)(hrd_max_tid[i])表示最高子层表示的时间id,该最高子层表示的hrd参数包括在第i个ols hrd参数集中。通用hrd参数(general_hrd_parameters)语法结构是一种包括序列级hrd参数的语法结构。操作点(operation point,op)是ols的时间子集,由ols索引和最大时间id标识。测试op(targetop)是在hrd执行一致性测试时选择的op。目标ols是在从码流中提取时选择的ols。解码单元hrd参数存在标志(decoding_unit_hrd_params_present_flag)表示对应的hrd参数是在解码单元(decoding unit,du)级还是在au级操作。编码图像缓冲区(coded picture buffer,cpb)是hrd中的先进先出缓冲区,包括解码顺序中的在码流一致性检查过程中使用的经编码图像。解码图像缓冲区(decoded picture buffer,dpb)是用于保存经解码图像以供参考、输出重排序和/或输出延迟的缓冲区。
[0064]
解码图像缓冲区(decoded picture buffer,dpb)参数是一种提供dpb大小并可选地提供最大图像重排序次数和最大延迟信息的语法结构。最大图像重排序次数和最大延迟信息可以统一称为mrml。
[0065]
本文中使用以下缩略语:编码树块(coding tree block,ctb)、编码树单元(coding tree unit,ctu)、编码单元(coding unit,cu)、编码视频序列(coded video sequence,cvs)、联合视频专家组(joint video experts team,jvet)、运动约束分块集(motion-constrained tile set,mcts)、最大传输单元(maximum transfer unit,mtu)、网络抽象层(network abstraction layer,nal)、图像顺序编号(picture order count,poc)、图像参数集(picture parameter set,pps)、原始字节序列载荷(raw byte sequence payload,rbsp)、序列参数集(sequence parameter set,sps)、通用视频编码(versatile video coding,vvc)和工作草案(working draft,wd)。
[0066]
图1为对视频信号进行译码的示例性操作方法100的流程图。具体地,在编码器侧对视频信号进行编码。编码过程通过使用各种机制来压缩视频信号,以减小视频文件大小。文件较小使得压缩视频文件可以发送给用户,同时降低相关的带宽开销。然后,解码器对压缩视频文件进行解码,以重建原始视频信号向终端用户进行显示。解码过程通常是编码过程的逆过程,以使解码器重建的视频信号可以与编码器侧的视频信号保持一致。
[0067]
在步骤101中,将视频信号输入到编码器中。例如,视频信号可以是存储在存储器中的未压缩视频文件。又如,视频文件可以由摄像机等视频捕获设备捕获,并且进行编码以支持视频的直播流传输。视频文件可以同时包括音频分量和视频分量。视频分量包括一系列图像帧。这些图像帧按顺序观看时,给人以运动的视觉效果。这些帧包括以光表示的像素,在本文中称为亮度分量(或亮度样本),还包括以颜色表示的像素,称为色度分量(或颜色样本)。在一些示例中,这些帧还可以包括深度值,以支持三维观看。
[0068]
在步骤103中,将视频分割成块。分割包括将每帧中的像素细分成正方形块和/或矩形块进行压缩。例如,在高效视频编码(high efficiency video coding,hevc)(还称为
h.265和mpeg-h第2部分)中,首先将帧分成编码树单元(coding tree unit,ctu),即预定义大小(例如64个像素
×
64个像素)的块。这些ctu包括亮度样本和色度样本。编码树可以用于将ctu分成块,然后重复细分这些块,直到获得支持进一步编码的配置。例如,帧的亮度分量可以细分到各个块包括相对均匀的亮度值。此外,帧的色度分量可以细分到各个块包括相对均匀的色值因此,分割机制因视频帧的内容而异。
[0069]
在步骤105中,使用各种压缩机制对在步骤103中分割得到的图像块进行压缩。例如,可以使用帧间预测和/或帧内预测。帧间预测的设计利用了公共场景中的对象往往出现在连续帧中这一事实。这样一来,描述参考帧中的对象的块不需要在相邻帧中重复描述。具体地,一个对象(例如一张桌子)可能在多个帧中保持在固定位置上。因此,该桌子被描述一次,而且相邻帧可以重新参考所述参考帧。模式匹配机制可以用于在多个帧上匹配对象。此外,由于对象移动或相机移动等原因,移动对象可以跨多个帧表示。在一个具体示例中,视频可以在多个帧上显示跨屏幕移动的汽车。运动矢量可以用来描述这种移动。运动矢量是一个二维矢量,提供对象在一个帧中的坐标到该对象在参考帧中的坐标的偏移。因此,帧间预测可以将当前帧中的图像块编码为运动矢量集,这些运动矢量表示当前帧中的图像块与参考帧中的对应块的偏移。
[0070]
帧内预测对公共帧中的块进行编码。帧内预测利用亮度分量和色度分量往往聚集在一个帧中这一事实。例如,一棵树某个部分的一片绿色往往与类似的几片绿色相邻。帧内预测使用多种方向性预测模式(例如,hevc中有33种)、平面模式和直流(direct current,dc)模式。这些方向性模式表示当前块中的样本与对应方向上的相邻块中的样本相似/相同。平面模式表示一行/列(例如平面)中的一系列块可以根据该行的边缘上的相邻块进行插值。平面模式实际上通过使用变化值的相对恒定的斜率表示光/颜色跨行/列的平稳过渡。dc模式用于边界平滑,并表示块与所有相邻块中的样本的平均值相似/相同,这些相邻块与方向性预测模式的角度方向关联。相应地,帧内预测块可以将图像块表示为各种关系预测模式值而不是表示为实际值。此外,帧间预测块可以将图像块表示为运动矢量值而不是表示为实际值。在任一种情况下,预测块在一些情况下可能都无法准确表示图像块。任何差值都存储在残差块中。变换可以应用于这些残差块以进一步压缩文件。
[0071]
在步骤107中,可以使用各种滤波技术。在hevc中,滤波器是根据环内滤波方案使用的。上文描述的基于块的预测可能会在解码器侧产生块状图像。此外,基于块的预测方案可以对块进行编码,然后重建经编码块,以便后续用作参考块。环内滤波方案迭代地将噪声抑制滤波器、去块效应滤波器、自适应环路滤波器和样本自适应偏移(sample adaptive offset,sao)滤波器应用于块/帧。这些滤波器减少了块伪影,这样可以准确地重建经编码文件。此外,这些滤波器减少了重建参考块中的伪影,这样伪影不太可能在根据重建参考块编码的后续块中产生其它伪影。
[0072]
一旦视频信号完成分割、压缩和滤波,则在步骤109中,将所得数据编码到码流中。码流包括上文描述的数据以及支持在解码器侧进行适当的视频信号重建所需要的任何指示数据。例如,这些数据可以包括分割数据、预测数据、残差块和提供译码指令给解码器的各种标志。码流可以存储在存储器中,以便根据请求向解码器发送。码流还可以广播和/或组播到多个解码器。码流的创建是一个迭代过程。相应地,步骤101、步骤103、步骤105、步骤107和步骤109可以在多个帧和块中连续和/或同时执行。图1所示的顺序是为了清楚和便于
论述的目的,并非旨在将视频译码过程限制于特定顺序。
[0073]
在步骤111中,解码器接收码流并开始解码过程。具体地,解码器使用熵解码方案将码流转换为对应的语法数据和视频数据。在步骤111中,解码器使用码流中的语法数据来确定帧的分割部分。分割应该与步骤103中的块分割的结果匹配。下面描述在步骤111中使用的熵编码/解码。编码器在压缩过程中做出许多选择,例如,根据一个或多个输入图像中的值的空间放置从若干个可能选择中选择块分割方案。指示确切的选择可能会使用大量的位元(bin)。本文所使用的“位元”是一个作为变量的二进制值(例如可以因内容而异的比特值)。熵编码使得编码器丢弃任何明显不适合特定情况的选项,从而留下一组可用选项。然后,为每个可用选项分配一个码字。码字的长度取决于可用选项的数量(例如,1个位元对应2个选项,2个位元对应3到4个选项,以此类推)。然后,编码器对所选选项的码字进行编码。这种方案减小了码字的大小,这是因为码字与预期的一样大,从而唯一地指示从可用选项的小子集中进行选择,而不是唯一地指示从所有可能选项的可能大集合中进行选择。然后,解码器通过以与编码器类似的方式确定这组可用选项对这一选择进行解码。通过确定这组可用选项,解码器可以读取码字并确定编码器做出的选择。
[0074]
在步骤113中,解码器执行块解码。具体地,解码器使用逆变换,以产生残差块。然后,解码器使用残差块和对应的预测块,以根据分割来重建图像块。预测块可以包括编码器在步骤105中生成的帧内预测块和帧间预测块。接着,根据在步骤111中确定的分割数据将重建图像块放置在重建视频信号的帧中。还可以通过上述熵编码在码流中指示用于步骤113的语法。
[0075]
在步骤115中,以类似于编码器侧的步骤107的方式对重建视频信号的帧执行滤波。例如,噪声抑制滤波器、去块效应滤波器、自适应环路滤波器和sao滤波器可以应用于帧,以去除块伪影。一旦对帧进行了滤波,则在步骤117中,可以将视频信号输出到显示器,以供终端用户观看。
[0076]
图2为用于视频译码的示例性编码和解码(编解码)系统200的示意图。具体地,编解码系统200提供功能来支持操作方法100的实现。编解码系统200广义地用于描述编码器和解码器中都使用的组件。编解码系统200接收视频信号并对视频信号进行分割,如参照操作方法100中的步骤101和步骤103所述,得到分割后的视频信号201。然后,编解码系统200在充当编码器时将分割后的视频信号201压缩到经编码码流中,如参照方法100中的步骤105、步骤107和步骤109所述。编解码系统200在充当解码器时从码流中生成输出视频信号,如参照操作方法100中的步骤111、步骤113、步骤115和步骤117所述。编解码系统200包括通用译码器控制组件211、变换缩放和量化组件213、帧内估计组件215、帧内预测组件217、运动补偿组件219、运动估计组件221、缩放和逆变换组件229、滤波器控制分析组件227、环内滤波器组件225、解码图像缓冲区组件223以及标头格式和上下文自适应二进制算术编码(context adaptive binary arithmetic coding,cabac)组件231。这些组件如图所示相耦合。在图2中,黑线表示待编码/解码数据的移动,而虚线表示控制其它组件操作的控制数据的移动。编解码系统200中的组件都可以存在于编码器中。解码器可以包括编解码系统200中的组件的子集。例如,解码器可以包括帧内预测组件217、运动补偿组件219、缩放和逆变换组件229、环内滤波器组件225和解码图像缓冲区组件223。下面对这些组件进行描述。
[0077]
分割后的视频信号201是捕获到的已经通过编码树分割成像素块的视频序列。编
码树使用各种划分模式将像素块细分成较小的像素块。然后,这些块可以进一步细分成较小的块。这些块可以称为编码树上的节点。较大的父节点划分成较小的子节点。节点进行细分的次数称为节点/编码树的深度。在一些情况下,划分得到的块可以包括在编码单元(coding unit,cu)中。例如,cu可以是ctu的子部分,包括亮度块、一个或多个红色差色度(cr)块和一个或多个蓝色差色度(cb)块以及cu对应的语法指令。划分模式可以包括二叉树(binary tree,bt)、三叉树(triple tree,tt)和四叉树(quad tree,qt),它们用于根据所使用的划分模式将节点分别分割成不同形状的2个、3个或4个子节点。将分割后的视频信号201转发给通用译码器控制组件211、变换缩放和量化组件213、帧内估计组件215、滤波器控制分析组件227和运动估计组件221进行压缩。
[0078]
通用译码器控制组件211用于根据应用约束条件做出与将视频序列中的图像译码到码流中相关的决策。例如,通用译码器控制组件211管理码率/码流大小相对于重建质量的优化。这些决策可以根据存储空间/带宽可用性和图像分辨率请求做出。通用译码器控制组件211还根据传输速度来管理缓冲区利用率,以缓解缓存欠载和超载问题。为了解决这些问题,通用译码器控制组件211管理由其它组件进行的分割、预测和滤波。例如,通用译码器控制组件211可以动态增加压缩复杂度以提高分辨率和带宽利用率,或者降低压缩复杂度以降低分辨率和带宽利用率。因此,通用译码器控制组件211控制编解码系统200中的其它组件来平衡视频信号重建质量与码率。通用译码器控制组件211生成控制数据,这些控制数据用于控制其它组件的操作。还将控制数据转发给标头格式和cabac组件231,以编码到码流中,从而指示解码器进行解码所使用的参数。
[0079]
还将分割后的视频信号201发送给运动估计组件221和运动补偿组件219进行帧间预测。分割后的视频信号201的帧或条带可以被分成多个视频块。运动估计组件221和运动补偿组件219相对于一个或多个参考帧中的一个或多个块对所接收到的视频块执行帧间预测译码,以提供时间预测。编解码系统200可以执行多个译码过程,以便为每个视频数据块选择合适的译码模式,等等。
[0080]
运动估计组件221和运动补偿组件219可以高度集成,但是出于概念目的,单独说明。由运动估计组件221执行的运动估计是生成运动矢量的过程,其中,这些运动矢量用于估计视频块的运动。例如,运动矢量可以表示经编码对象相对于预测块的位移。预测块是在像素差方面发现与待编码块高度匹配的块。预测块还可以称为参考块。这种像素差可以通过绝对差异和(sum of absolute difference,sad)、平方差异和(sum of square difference,ssd)或其它差异度量来确定。hevc使用几个经编码对象,包括ctu、编码树块(coding tree block,ctb)和cu。例如,ctu可以被分成ctb,ctb然后被分成cb,cb包含在cu中。cu可以被编码为包括预测数据的预测单元(prediction unit,pu)和/或包括cu的变换残差数据的变换单元(transform unit,tu)。运动估计组件221使用率失真分析作为率失真优化过程一部分来生成运动矢量、pu和tu。例如,运动估计组件221可以确定当前块/帧的多个参考块、多个运动矢量等,并且可以选择具有最佳率失真特性的参考块、运动矢量等。最佳率失真特性平衡了视频重建的质量(例如,压缩造成的数据丢失量)和译码效率(例如,最终编码的大小)。
[0081]
在一些示例中,编解码系统200可以计算存储在解码图像缓冲区组件223中的参考图像的子整数像素位置的值。例如,视频编解码系统200可以对参考图像的四分之一像素位
置、八分之一像素位置或其它分数像素位置的值进行插值。因此,运动估计组件221可以相对于整像素位置和分数像素位置执行运动搜索,并输出具有分数像素精度的运动矢量。运动估计组件221通过将pu的位置与参考图像的预测块的位置进行比较,计算经帧间译码条带中的视频块的pu的运动矢量。运动估计组件221将计算得到的运动矢量作为运动数据输出到标头格式和cabac组件231进行编码,并作为运动数据输出到运动补偿组件219。
[0082]
运动补偿组件219执行的运动补偿可以涉及根据运动估计组件221所确定的运动矢量获取或生成预测块。在一些示例中,运动估计组件221和运动补偿组件219可以在功能上集成。在接收到当前视频块的pu的运动矢量之后,运动补偿组件219可以定位运动矢量指向的预测块。然后,从被译码的当前视频块的像素值中减去预测块的像素值,得到像素差,如此形成残差视频块。一般而言,运动估计组件221相对于亮度分量执行运动估计,运动补偿组件219将根据亮度分量计算到的运动矢量用于色度分量和亮度分量。将预测块和残差块转发到变换缩放和量化组件213。
[0083]
还将分割后的视频信号201发送给帧内估计组件215和帧内预测组件217。与运动估计组件221和运动补偿组件219一样,帧内估计组件215和帧内预测组件217可以高度集成,但是出于概念目的,单独说明。帧内估计组件215和帧内预测组件217相对于当前帧中的各块对当前块进行帧内预测,以替代如上所述的由运动估计组件221和运动补偿组件219在各帧之间执行的帧间预测。具体地,帧内估计组件215确定帧内预测模式以对当前块进行编码。在一些示例中,帧内估计组件215从多个测试的帧内预测模式中选择合适的帧内预测模式来对当前块进行编码。然后,将选定的帧内预测模式转发给标头格式和cabac组件231进行编码。
[0084]
例如,帧内估计组件215对各种测试的帧内预测模式进行率失真分析来计算率失真值,并在测试的模式中选择具有最佳率失真特性的帧内预测模式。率失真分析通常确定经编码块与经编码以产生经编码块的原始未编码块之间的失真(或误差)量,以及确定用于产生经编码块的码率(例如比特数)。帧内估计组件215根据各种经编码块的失真和速率计算比率,以确定表现出块的最佳率失真值的帧内预测模式。另外,帧内估计组件215可以用于根据率失真优化(rate-distortion optimization,rdo),使用深度建模模式(depth modeling mode,dmm)对深度图像中的深度块进行译码。
[0085]
帧内预测组件217在编码器上实现时可以根据由帧内估计组件215确定的选定帧内预测模式从预测块中生成残差块,或者在解码器上实现时可以从码流中读取残差块。残差块包括预测块与原始块之间的差值,表示为矩阵。然后,将残差块转发给变换缩放和量化组件213。帧内估计组件215和帧内预测组件217可以对亮度分量和色度分量都进行操作。
[0086]
变换缩放和量化组件213用于进一步压缩残差块。变换缩放和量化组件213将离散余弦变换(discrete cosine transform,dct)、离散正弦变换(discrete sine transform,dst)等变换或者概念上类似的变换应用于残差块,从而产生包括残差变换系数值的视频块。还可以使用小波变换、整数变换、子带变换或其它类型的变换。变换可以将残差信息从像素值域转换到变换域,例如频域。变换缩放和量化组件213还用于根据频率等对变换残差信息进行比例缩放。这种比例缩放涉及将比例缩放因子应用于残差信息,使得在不同的粒度下量化不同的频率信息,这可能会影响重建视频的最终视觉质量。变换缩放和量化组件213还用于量化变换系数以进一步降低码率。量化过程可以减小与部分或全部系数相关的
位深度。量化程度可以通过调整量化参数来修改。在一些示例中,变换缩放和量化组件213随后可以对包括量化变换系数的矩阵执行扫描。将量化变换系数转发给标头格式和cabac组件231,以将量化变换系数编码到码流中。
[0087]
缩放和逆变换组件229应用与变换缩放和量化组件213相反的操作以支持运动估计。缩放和逆变换组件229应用逆缩放、逆变换和/或反量化以重建像素域中的残差块。例如,残差块后续用作参考块。该参考块可以成为另一当前块的预测块。运动估计组件221和/或运动补偿组件219可以通过将残差块添加回对应的预测块来计算参考块,以用于后续块/帧的运动估计中。将滤波器应用于重建参考块,以减少在缩放、量化和变换过程中产生的伪影。当预测后续块时,这些伪影可能会使预测不准确(并产生额外的伪影)。
[0088]
滤波器控制分析组件227和环内滤波器组件225将滤波器应用于残差块和/或重建图像块。例如,可以将来自缩放和逆变换组件229的变换残差块与来自帧内预测组件217和/或运动补偿组件219的对应预测块组合以重建原始图像块。然后,可以将滤波器应用于重建图像块。在一些示例中,滤波器还可以应用于残差块。与图2中的其它组件一样,滤波器控制分析组件227和环内滤波器组件225高度集成,可以一起实现,但出于概念目的分开示出。将应用于重建参考块的滤波器应用于特定空间区域,这些滤波器包括多个参数以调整使用这些滤波器的方式。滤波器控制分析组件227对重建参考块进行分析,以确定需要使用这些滤波器的位置并设置对应的参数。将这些数据作为滤波器控制数据转发给标头格式和cabac组件231进行编码。环内滤波器组件225根据滤波器控制数据使用这些滤波器。这些滤波器可以包括去块效应滤波器、噪声抑制滤波器、sao滤波器和自适应环路滤波器。这些滤波器可以根据示例应用于空域/像素域(例如重建像素块)或频域中。
[0089]
当作为编码器操作时,解码图像缓冲区组件223存储经滤波的重建图像块、残差块和/或预测块,以供后续用于运动估计中,如上所述。当作为解码器操作时,解码图像缓冲区组件223存储经滤波的重建块并将其转发给显示器,这些重建块是输出视频信号的一部分。解码图像缓冲区组件223可以是任何能够存储预测块、残差块和/或重建图像块的存储设备。
[0090]
标头格式和cabac组件231从编解码系统200中的各种组件接收数据,并将这些数据编码到经编码码流中,以发送给解码器。具体地,标头格式和cabac组件231生成各种标头以对控制数据(例如通用控制数据和滤波器控制数据)进行编码。此外,将预测数据(包括帧内预测数据和运动数据)以及以量化变换系数数据为形式的残差数据都编码到码流中。最终的码流包括解码器重建原始分割后的视频信号201所需要的所有信息。这些信息还可以包括帧内预测模式索引表(还称为码字映射表)、各种块的编码上下文的定义、最可能帧内预测模式的指示、分割信息的指示等。这些数据可以通过熵编码来编码。例如,这些信息可以通过上下文自适应可变长度编码(context adaptive variable length coding,cavlc)、cabac、基于语法的上下文自适应二进制算术编码(syntax-based context-adaptive binary arithmetic coding,sbac)、概率区间分割熵(probability interval partitioning entropy,pipe)编码或其它熵编码技术来编码。在熵编码之后,可以将经编码码流发送给另一设备(例如视频解码器)或存档以供后续发送或检索。
[0091]
图3为示例性视频编码器300的框图。视频编码器300可以用于实现编解码系统200的编码功能和/或执行操作方法100中的步骤101、步骤103、步骤105、步骤107和/或步骤
109。编码器300对输入视频信号进行分割,得到分割后的视频信号301,其基本上类似于分割后的视频信号201。然后,编码器300中的组件压缩分割后的视频信号301并将其编码到码流中。
[0092]
具体地,将分割后的视频信号301转发给帧内预测组件317进行帧内预测。帧内预测组件317可以基本上类似于帧内估计组件215和帧内预测组件217。还将分割后的视频信号301转发给运动补偿组件321,以根据解码图像缓冲区组件323中的参考块进行帧间预测。运动补偿组件321可以基本上类似于运动估计组件221和运动补偿组件219。将来自帧内预测组件317和运动补偿组件321的预测块和残差块转发给变换和量化组件313进行残差块的变换和量化。变换和量化组件313可以基本上类似于变换缩放和量化组件213。将变换量化残差块和对应的预测块(与相关的控制数据一起)转发给熵编码组件331,以译码到码流中。熵编码组件331可以基本上类似于标头格式和cabac组件231。
[0093]
还将变换量化残差块和/或对应的预测块从变换和量化组件313转发给逆变换和反量化组件329,以重建为参考块供运动补偿组件321使用。逆变换和反量化组件329可以基本上类似于缩放和逆变换组件229。还将环内滤波器组件325中的环内滤波器应用于残差块和/或重建参考块,具体取决于示例。环内滤波器组件325可以基本上类似于滤波器控制分析组件227和环内滤波器组件225。环内滤波器组件325可以包括多个滤波器,如参照环内滤波器组件225所述。然后,将经滤波的块存储在解码图像缓冲区组件323中,以作为参考块供运动补偿组件321使用。解码图像缓冲区组件323可以基本上类似于解码图像缓冲区组件223。
[0094]
图4为示例性视频解码器400的框图。视频解码器400可以用于实现编解码系统200的解码功能和/或执行操作方法100中的步骤111、步骤113、步骤115和/或步骤117。解码器400从编码器300等接收码流,并根据所述码流生成重建输出视频信号,以向终端用户显示。
[0095]
码流由熵解码组件433接收。熵解码组件433用于执行熵解码方案,例如,cavlc、cabac、sbac、pipe编码或其它熵编码技术。例如,熵解码组件433可以使用标头信息来提供上下文以解析在码流中编码为码字的附加数据。经解码信息包括对视频信号进行解码所需的任何信息,例如,通用控制数据、滤波器控制数据、分割信息、运动数据、预测数据和残差块中的量化变换系数。将量化变换系数转发给逆变换和反量化组件429,以重建成残差块。逆变换和反量化组件429可以类似于逆变换和反量化组件329。
[0096]
将重建残差块和/或预测块转发给帧内预测组件417,以根据帧内预测操作重建为图像块。帧内预测组件417可以类似于帧内估计组件215和帧内预测组件217。具体地,帧内预测组件417使用预测模式来定位帧中的参考块,并将残差块应用于上述结果以重建帧内预测图像块。将重建帧内预测图像块和/或残差块以及对应的帧间预测数据通过环内滤波器组件425转发给解码图像缓冲区组件423。解码图像缓冲区组件423和环内滤波器组件425可以基本上分别类似于解码图像缓冲区组件223和环内滤波器组件225。环内滤波器组件425对重建图像块、残差块和/或预测块进行滤波。这些信息存储在解码图像缓冲区组件423中。将来自解码图像缓冲区组件423的重建图像块转发给运动补偿组件421进行帧间预测。运动补偿组件421可以基本上类似于运动估计组件221和/或运动补偿组件219。具体地,运动补偿组件421使用参考块的运动矢量来生成预测块,并将残差块应用于上述结果以重建图像块。还可以将所得到的重建块转发通过环内滤波器组件425转发给解码图像缓冲区组
件423。解码图像缓冲区组件423继续存储其它重建图像块。这些重建图像块可以通过分割信息重建为帧。这些帧还可以放置在一个序列中。该序列作为重建输出视频信号输出到显示器。
[0097]
考虑到上述情况,视频压缩技术通过执行空间(帧内)预测和/或时间(帧间)预测来减少或去除视频序列中固有的冗余。对于基于块的视频译码,视频条带(即视频图像或视频图像的一部分)可以被分割成视频块,这些视频块还可以称为树块(treeblock)、编码树块(coding tree block,ctb)、编码树单元(coding tree unit,ctu)、编码单元(coding unit,cu)和/或编码节点(coding node)。图像中的经帧内编码(i)条带中的视频块是相对于同一图像中的相邻块中的参考样本使用空间预测进行编码的。图像中的经帧间编码(p或b)条带中的视频块可以相对于同一图像中的相邻块中的参考样本使用空间预测,也可以是相对于其它参考图像中的参考样本使用时间预测。图像可以称为帧,参考图像可以称为参考帧。poc是与每个图像关联的变量,该变量唯一地标识编码层视频序列(coded layer video sequence,clvs)中的所有图像中的关联图像。poc表示何时从dpb输出关联图像,并表示关联图像在输出顺序中的位置相对于同一clvs中的要从dpb输出的其它图像在输出顺序中的位置的关系。标志是一个变量或单比特语法元素,可以取两个可能值之一:0或1。
[0098]
空间预测或时间预测为待编码块产生预测块。残差数据表示待编码原始块与预测块之间的像素差。经帧间编码块是根据运动矢量和残差数据进行编码的,其中,运动矢量指向形成预测块的参考样本的块,残差数据表示经编码块和预测块之间的差值。经帧内编码块是根据帧内编码模式和残差数据进行编码的。为了进一步压缩,残差数据可以从像素域变换到变换域,从而产生可以接着进行量化的残差变换系数。量化变换系数最初以二维阵列排列,并且可以按顺序扫描,以产生变换系数的一维矢量。熵编码可以用于实现进一步压缩。
[0099]
图像和视频压缩发展迅速,由此产生了各种编码标准。这些视频编码标准包括itu-t h.261、国际标准化组织/国际电工委员会(international organization for standardization/international electrotechnical commission,iso/iec)mpeg-1第2部分、itu-t h.262或iso/iec mpeg-2第2部分、itu-t h.263、iso/iec mpeg-4第2部分、高级视频编码(advanced video coding,avc)(还称为itu-t h.264或iso/iec mpeg-4第10部分)以及高效视频编码(high efficiency video coding,hevc)(还称为itu-t h.265或mpeg-h第2部分)。avc包括可适性视频编码(scalable video coding,svc)、多视图视频编码(multiview video coding,mvc)和多视图视频编码加深度(multiview video coding plus depth,mvc d)、3d avc(3d-avc)等扩展版本。hevc包括可适性hevc(scalable hevc,shvc)、多视图hevc(multiview hevc,mv-hevc)、3d hevc(3d-hevc)等扩展版本。
[0100]
还有一个新的视频编码标准,名为通用视频编码(versatile video coding,vvc),正在由itu-t和iso/iec的联合视频专家组(joint video experts team,jvet)开发。虽然vvc标准有几个工作草案,但本文特别参考了vvc的一个工作草案(wd),即b.bross、j.chen和s.liu在2019年3月27日的第13次jvet会议上发表的jvet-n1001-v3“通用视频编码(草案5)(versatile video coding(draft 5))”(vvc草案5)。
[0101]
视频译码中的可适性通常使用多层译码技术来支持。多层码流包括基本层(base layer,bl)和一个或多个增强层(enhancement layer,el)。可适性的示例包括空间可适性、
质量/信噪比(signal to noise ratio,snr)可适性、多视图可适性,等等。当使用的是多层译码技术时,图像或其一部分可以通过以下方式译码:(1)不使用参考图像,即,使用帧内预测,(2)参考同一层中的参考图像,即,使用帧间预测,或(3)参考其它一个或多个层中的参考图像,即,使用层间预测。当前图像的层间预测使用的参考图像称为层间参考图像(inter-layer reference picture,ilrp)。
[0102]
图5为基于层的预测500的一个示例的示意图。例如,在块压缩步骤105、块解码步骤113、运动估计组件221、运动补偿组件219、运动补偿组件321和/或运动补偿组件421处执行这种预测以确定运动矢量(motion vector,mv)。基于层的预测500与单向帧间预测和/或双向帧间预测共存,但也在不同层中的图像之间执行。
[0103]
基于层的预测500应用于不同层中的图像511、512、513和514与图像515、516、517和518之间。在所示的示例中,图像511、512、513和514是层n 1 532的一部分,而图像515、516、517和518是层n 531的一部分。层n 531和/或层n 1 532等是一组图像,这些图像都与类似的大小、质量、分辨率、信噪比、能力等类似的特征值关联。在所示的示例中,与层n 531相比,层n 1 532与更大的图像大小关联。因此,在本示例中,层n 1 532中的图像511、512、513和514比层n 531中的图像515、516、517和518大(例如,高度和宽度更大,因此样本更多)。但是,这些图像可以根据其它特征分布在层n 1 532和层n 531之间。虽然只示出了两层:层n 1 532和层n 531,但一组图像可以根据关联特征划分成任意数量的层。层n 1 532和层n 531也可以通过层id表示。层id是与图像关联的数据项,表示图像是指示层的一部分。因此,图像511至518中的每个图像可以与对应的层id关联,以表示层n 1 532或层n 531中的哪个层包括对应的图像。
[0104]
不同层531和532中的图像511至518被配置为交替显示。因此,不同层531和532中的图像511至518可以共用同一时间标识符(identifier,id)并可以包括在同一au中。本文所使用的“au”是与同一显示时间关联的从dpb输出的一个或多个经编码图像组成的集合。例如,如果需要较小的图像,则解码器可以解码图像515并在当前显示时间显示;如果需要较大的图像,则解码器可以解码图像511并在当前显示时间显示。因此,高层n 1 532中的图像511至514与低层n 531中的对应图像515至518包括基本上相同的图像数据(虽然图像大小不同)。具体地,图像511与图像515包括基本上相同的图像数据,图像512与图像516包括基本上相同的图像数据,以此类推。
[0105]
图像511至518可以通过参考同一层n 531或n 1 532中的其它图像511至518进行译码。参考同一层中的一个图像对另一个图像进行译码即为帧间预测523,这与单向帧间预测和/或双向帧间预测一致。帧间预测523由实线箭头表示。例如,图像513可以使用将层n 1 532中的图像511、512和/或514中的一个或两个图像作为参考的帧间预测523进行译码,其中,单向帧间预测使用一个图像作为参考和/或双向帧间预测使用两个图像作为参考。此外,图像517可以使用将层n 531中的图像515、516和/或518中的一个或两个图像作为参考的帧间预测523进行译码,其中,单向帧间预测使用一个图像作为参考和/或双向帧间预测使用两个图像作为参考。当在执行帧间预测523时将一个图像作为同一层中的另一个图像的参考时,该图像可以称为参考图像。例如,图像512可以是用于根据帧间预测523对图像513进行译码的参考图像。帧间预测523还可以称为多层上下文中的层内预测。因此,帧间预测523是通过参考与当前图像不同的参考图像中的指示样本对当前图像中的样本进行译码
picture,ltrp),而且分配有一个或多个参考图像列表中的参考索引和当前层中的其它时间参考图像。层间预测(inter-layer prediction,ilp)是通过将参考索引的值设置为参考一个或多个参考图像列表中的一个或多个层间参考图像在预测单元(prediction unit,pu)级实现的。
[0111]
需要说明的是,参考图像重采样和空间可适性特征都需要对参考图像或其一部分进行重采样。参考图像重采样(reference picture resampling,rpr)可以在图像级或编码块级实现。然而,当rpr称为译码特征时,它是单层译码的特征。即便如此,从编解码器设计的角度来看,可以或甚至优选使用相同的重采样滤波器,以实现单层译码的rpr特征和多层译码的空间可适性特征。
[0112]
图6为使用输出层集(output layer set,ols)的基于层的预测600的一个示例的示意图。例如,在块压缩步骤105、块解码步骤113、运动估计组件221、运动补偿组件219、运动补偿组件321和/或运动补偿组件421处执行这种预测以确定mv。基于层的预测600与单向帧间预测和/或双向帧间预测共存,但也在不同层中的图像之间执行。图6中的基于层的预测类似于图5中的基于层的预测。因此,为了简洁起见,基于层的预测不再赘述。
[0113]
图6中的编码视频序列(coded video sequence,cvs)690中的一些层包括在ols中。ols是一组层,这组层中的一层或多层被指定为输出层。输出层是被输出的ols中的一层。图6描述了3个不同的ols,即ols 1、ols 2和ols 3。如图所示,ols 1包括层n 631和层n 1 632。ols 2包括层n 631、层n 1 632、层n 2 633和层n 3 634。ols 3包括层n 631。也就是说,ols 3只包括单层。在实际应用中,其它ols也可以只包括单层。虽然示出了3个ols,但在实际应用中可以使用不同数量的ols。层n 4 635等其它层不包括在所示的ols中(例如,ols 1、2和3),但可以包括在其它ols中。
[0114]
不同的ols都可以包括任意数量的层。生成不同的ols是为了适应具有不同译码能力的各种不同设备的译码能力。例如,生成只包括一层的ols 3是为了适应具有相对有限译码能力的手机。另一方面,可以生成包括4层的ols 2,以适应大屏电视,大屏电视相比于手机能够解码更高层。可以生成包括2层的ols 1,以适应个人计算机、笔记本电脑或平板电脑,这些相比于手机能够解码更高层,但相比于大屏电视不能解码最高层。
[0115]
图6中的这些层可以相互独立。也就是说,每层都可以不使用层间预测(inter-layer prediction,ilp)进行译码。在这种情况下,这些层称为同播层(simulcast layer)。图6中的这些层中的一层或多层还可以使用ilp进行译码。这些层是否为同播层或者其中一些层否使用ilp进行译码由视频参数集(video parameter set,vps)中的标志指示,下文提供更全面的论述。当一些层使用ilp时,各层之间的层依赖关系也会在vps中指示。
[0116]
在一个实施例中,当这些层是同播层时,只选择一层进行解码和输出。在一个实施例中,当一些层使用ilp时,所有层(例如,整个码流)都指定要解码,并且其中一些层被指定为输出层。一个或多个输出层可以是,例如,(1)仅最高层,(2)所有层或(3)最高层加上一组指示的低层。例如,当最高层加上一组指示的低层通过vps中的标志被指定为输出时,输出ols 2中的层n 3 634(即最高层)和层n 631和层n 1 632(即低层)。
[0117]
如图6所示,每层包括任意数量的图像。例如,层n 631包括图像615至618,层n 1 632包括图像611至614,层n 2 633包括图像641至644,层n 3 634包括图像651至654,层n 4 635包括图像661至664。
[0118]
hevc、shvc、mv-hevc和vvc等视频编码标准规定并指示了档次、层次和级别。档次、层次和级别指定了对码流的限制条件和对解码这些码流需要的能力的限制。档次、层次和级别还可以用于指示各种解码器实现方式之间的互操作点。档次是一组定义的译码工具,用于创建符合性或一致性码流。每个档次指定与该档次一致的所有解码器应支持的算法特征和限制的子集。
[0119]
级别是码流的一组约束条件(例如,最大亮度采样率、分辨率对应的最大码流等)。也就是说,级别是一组指示播放指定档次的码流所需的解码器性能的约束条件。
[0120]
级别划分成两种层次:主层次和高层次。主层次比高层次低。层次是为了处理在最大码率方面不同的应用。主层次针对大多数应用设计,而高层次针对要求非常高的应用设计。对应于级别的一组约束条件和/或层次在本文可以称为级别信息。
[0121]
层次对应的每个级别指定了对特定标准(例如hevc、vvc)中的语法元素可能使用的值的一组限制。所有档次都使用相同的一组层次和级别定义,但各种实现方式可以支持不同的层次和层次中每个支持档次对应的不同级别。对于任何给定的档次,层次的级别通常对应于特定的解码器处理负载和存储能力。
[0122]
使用hevc标准,下表1提供了不同档次对应的级别和层次的一个代表性示例。
[0123]
表1
[0124][0125][0126]
档次、层次和级别(profile,tier,and level,ptl)参数是一种提供上表所示的档次、层次和/或级别的语法结构(例如第i个语法结构profile_tier_level())。解码图像缓冲区(decoded picture buffer,dpb)参数是一种提供dpb大小并可选地提供最大图像重排序次数和最大延迟信息的语法结构(例如第i个语法结构dpb_parameters())。最大图像重排序次数和最大延迟信息可以统一称为mrml。hrd参数是一种初始化和/或定义hrd操作条件的语法结构(例如,第一个语法结构ols_timing_hrd_parameters())。下文提供了关于ptl参数、dpb参数和hrd参数中的一个或多个的更多详细内容。
[0127]
在一个实施例中,最大图像重排序次数表示为dpb_max_num_reorder_pics[i],其表示在htid等于i时ols中的图像的最大允许数量,这些图像可以在解码顺序中位于ols中的任一图像之前且在输出顺序中位于该图像之后。dpb_max_num_reorder_pics[i]的取值范围应为0至dpb_max_dec_pic_buffering_minus1[i](包括端值)。当i大于0时,dpb_max_num_reorder_pics[i]应大于或等于dpb_max_num_reorder_pics[i

1]。当dpb_max_num_reorder_pics[i](其中,i的范围为0至maxsublayersminus1

1,包括端值)不存在时,由于sublayerinfoflag等于0,因此dpb_max_num_reorder_pics[i]被推断为dpb_max_num_
reorder_pics[maxsublayersminus1]。htid是一个标识待解码的最高时间子层的变量。
[0128]
dpb_max_dec_pic_buffering_minus1[i] 1表示在htid等于i时dpb的以图像存储缓冲区为单位的最大所需大小。dpb_max_dec_pic_buffering_minus1[i]的取值范围应为0至maxdpbsize

1(包括端值),其中,maxdpbsize如vvc标准中的第a.4.2小节所述。当i大于0时,dpb_max_dec_pic_buffering_minus1[i]应大于或等于dpb_max_dec_pic_buffering_minus1[i

1]。当dpb_max_dec_pic_buffering_minus1[i](其中,i的范围为0至maxsublayersminus1

1,包括端值)不存在时,由于sublayerinfoflag等于0,因此dpb_max_dec_pic_buffering_minus1[i]被推断为dpb_max_dec_pic_buffering_minus1[maxsublayersminus1]。
[0129]
在一个实施例中,最大延迟信息表示为dpb_max_latency_increase_plus1[i]。dpb_max_latency_increase_plus1[i]不等于0用于计算maxlatencypictures[i]的值,maxlatencypictures[i]表示在htid等于i时ols中的图像的最大允许数量,这些图像可以在解码顺序中位于ols中的任一图像之前且在输出顺序中位于该图像之后。
[0130]
maxlatencypictures[i]=dpb_max_num_reorder_pics[i] dpb_max_latency_increase_plus1[i]

1。
[0131]
上述ols的dpb语法结构(又称dpb参数)包括在码流的vps中。但是,当ols只包括单层(例如图6中的ols 3)时,在vps中指示所有这些dpb语法结构是低效的。
[0132]
本文公开的技术确保当输出层集(output layer set,ols)只包括单层时,解码图像缓冲区(decoded picture buffer,dpb)参数包括在序列参数集(sequence parameter set,sps)中。由于sps包括具有单层的ols的dpb参数,因此可以从码流中移除视频参数集(video parameter set,vps),这样减少了冗余并提高了译码效率。因此,视频译码中的编码器/解码器(又称“编解码器”)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
[0133]
图7示出了视频码流700的一个实施例。本文使用的视频码流700还可以称为经编码视频码流、码流或其变体。如图7所示,码流700包括视频参数集(video parameter set,vps)704、序列参数集(sequence parameter set,sps)706、图像参数集(picture parameter set,pps)708、条带头712和图像数据720。vps 704、sps 706和pps 708一般都可以称为参数集。在一个实施例中,码流700中还可以包括图7中未示出的其它参数集和/或头。
[0134]
vps 704包括用于增强层的参考图像集构建的解码依赖关系或信息。vps 704提供可适性序列的整体信息,包括提供了哪些类型的操作点、操作点的档次、层次和级别以及码流700的其它一些高级属性,其中,这些高级属性可以用作会话协商和内容选择等的基础。
[0135]
在一个实施例中,vps 704包括所有ols的dpb语法结构780列表。在一个实施例中,dpb语法结构780列表中的每个dpb语法结构表示为dpb_parameters()。vps 704还包括语法结构vps_ols_dpb_params_idx[i]782。语法结构vps_ols_dpb_params_idx[i]782表示适用于第i个ols的dpb语法结构的索引。也就是说,每个索引值对应于列表中的一个dpb语法结构。例如,列表中的索引值1对应于ols 1的dpb_parameters(),索引值2对应于ols 2的dpb_parameters(),索引值3对应ols 3的dpb_parameters()。
[0136]
当vps_ols_dpb_params_idx[i]存在时,vps_ols_dpb_params_idx[i]的取值范围
为0至vpsnumdpbparams

1(包括端值)。
[0137]
语法元素vps_num_dpb_params_minus1 781表示vps 704中的语法结构dpb_parameters()的数量。vps_num_dpb_params_minus1 781的取值范围为0至小于多层ols的总数量(可以表示为nummultilayerolss)。
[0138]
变量vpsnumdpbparams

1由视频解码器根据语法元素vps_num_dpb_params_minus1781(在码流中指示)推导出(即该变量未在码流中指示)。
[0139]
在一个实施例中,变量vpsnumdpbparams

1推导如下。
[0140][0141]
变量vpsnumdpbparams

1 1表示vps 704中的dpb语法结构的数量。例如,当vpsnumdpbparams

1的值为2时,vps 704中的dpb语法结构的数量为3(2 1=3)。
[0142]
在一个实施例中,vps 704包括dpb存在标志783,该标志可以表示为vps_sublayer_dpb_params_present_flag,当vps_dpb_max_tid[i]大于0时,该标志用于控制vps中的语法结构dpb_parameters()中是否存在语法元素dpb_max_dec_pic_buffering_minus1[j]、dpb_max_num_reorder_pics[j]和dpb_max_latency_increase_plus1[j],其中,i的范围为0至vps_dpb_max_tid[i]

1(包括端值)。当vps_sub_dpb_params_info_present_flag不存在时,vps_sub_dpb_params_info_present_flag的值被推断为0。
[0143]
sps 706包括图像序列(sequence of picture,sop)中的所有图像共有的数据。sps 706是一种包括适用于0个或0个以上完整clvs的语法元素的语法结构,0个或0个以上完整clvs通过pps中的语法元素的内容确定,而且pps由每个图像头中的语法元素参考。
[0144]
在一个实施例中,当第i个ols是单层ols时,适用于第i个ols的dpb_parameters()784存在于由第i个ols中的层参考的sps 706中。也就是说,对于单层ols(例如图6中的ols 2),适用的语法结构dpb_parameters()存在于由该ols中的层参考的sps中。
[0145]
基于上述内容,应当理解,当ols是单层ols(例如,ols只包括单层)时,适用于第i个ols的dpb_parameters()784存在于sps 706和vps 704中(即,适用于第i个ols的dpb语法结构是包括在dpb结构780中的一个dpb语法结构)。此外,适用于sps 706中的第i个ols的dpb_parameters()784与适用于vps 704中的第i个ols的dpb_parameters()784相同。
[0146]
相比于sps 706,pps 708包括整个图像共用的数据。pps 708是一种包括适用于0个或0个以上整个经编码图像的语法元素的语法结构。条带头712是经编码条带的一部分,包括与在条带中表示的一个分块内的所有视频数据相关的数据元素。条带头712包括图像中的每个条带特有的参数。因此,视频序列中的每个条带可以存在一个条带头712。条带头712可以包括条带类型信息、图像顺序编号(picture order count,poc)、参考图像列表(reference picture list,rpl)、预测权重、分块入口点或去块效应滤波参数。条带头712还可以被称为分块组头和/或图像头(picture header,ph)。
[0147]
在一个实施例中,vps 704和/或sps 706包括以下sps语法和语义,以实现本文公开的一个或多个实施例。
[0148]
vps语法包括以下内容。
[0149]
[0150]
[0151][0152]
sps原始字节序列载荷(raw byte sequence payload,rbsp)语法包括以下内容。
[0153]
[0154][0155]
dpb语法包括以下内容。
[0156][0157]
hrd参数语法包括通用hrd参数语法、ols hrd参数语法和子层hrd参数语法。
[0158]
通用hrd参数语法包括以下内容。
[0159]
[0160][0161]
ols hrd参数语法包括以下内容。
[0162]
[0163][0164]
子层hrd参数语法包括以下内容。
[0165][0166]
vps语义如下。
[0167]
vps_max_layers_minus1 1表示参考vps的每个cvs中的各层的最大允许数量。
[0168]
vps_max_sub_layers_minus1 1表示参考vps的每个cvs中可以存在的时间子层的最大数量。nvps_max_sub_layers_minus1的取值范围应为0至6(包括端值)。
[0169]
vps_all_layers_same_num_sub_layers_flag等于1表示参考vps的每个cvs中的所有层具有一样多的时间子层。vps_all_layers_same_num_sub_layers_flag等于0表示参考vps的每个cvs中的各层可以或可以不具有一样多的时间子层。当vps_all_layers_same_num_sub_layers_flag不存在时,vps_all_layers_same_num_sub_layers_flag的值被推断为1。
[0170]
vps_all_independent_layers_flag等于1表示cvs中的所有层都是独立译码的,而不使用层间预测。vps_all_independent_layers_flag等于0表示cvs中的一层或多层可以使用层间预测。当vps_all_independent_layers_flag不存在时,vps_all_independent_layers_flag的值被推断为1。当vps_all_independent_layers_flag等于1时,vps_independent_layer_flag[i]的值被推断为1。当vps_all_independent_layers_flag等于0时,vps_independent_layer_flag[0]的值被推断为1。
[0171]
vps_direct_dependency_flag[i][j]等于0表示索引为j的层不是索引为i的层的直接参考层。vps_direct_dependency_flag[i][j]等于1表示索引为j的层是索引为i的层的直接参考层。当vps_direct_dependency_flag[i][j](i和i的范围为0至vps_max_layers_minus1,包括端值)不存在时,vps_direct_dependency_flag[i][j]被推断为0。
[0172]
变量directdependentlayeridx[i][j]表示第i层的第j个直接依赖层,变量layerusedasreflayerflag[j]表示层索引为j的层是否用作任何其它层的参考层,这两个变量推导如下:
[0173][0174]
变量variable generallayeridx[i]表示nuh_layer_id等于vps_layer_id[i]的层的层索引,该变量推导如下:
[0175]
for(i=0;i《=vps_max_layers_minus1;i )
[0176]
generallayeridx[vps_layer_id[i]]=i
[0177]
each_layer_is_an_ols_flag等于1表示每个输出层集只包括一层且码流中的每层本身是一个输出层集,其中,输出层集中包括的单层是唯一的输出层。each_layer_is_an_ols_flag等于0表示输出层集可以包括多层。如果vps_max_layers_minus1等于0,则each_layer_is_an_ols_flag的值被推断为1。否则,当vps_all_independent_layers_flag等于0时,each_layer_is_an_ols_flag的值被推断为0。
[0178]
ols_mode_idc等于0表示:由vps指定的ols的总数量等于vps_max_layers_minus1 1,第i个ols包括层索引从0到i(包括端值)的各层,只输出每个ols中的最高层。ols_mode_idc等于1表示:由vps指定的ols的总数量等于vps_max_layers_minus1 1,第i个ols包括层索引从0到i(包括端值)的各层,输出每个ols中的所有层。ols_mode_idc等于2表示:由vps指定的ols的总数量被显式指示,输出每个ols中的最高层和显式指示的一组较低层。ols_mode_idc的取值范围应为0至2(包括端值)。保留ols_mode_idc的值3,供itu-t或iso/iec将来使用。当vps_all_independent_layers_flag等于1且each_layer_is_an_ols_flag等于0时,ols_mode_idc的值被推断为2。
[0179]
当ols_mode_idc等于2时,num_output_layer_sets_minus1 1表示由vps指定的ols的总数量。
[0180]
变量totalnumolss表示由vps指定的ols的总数量,该变量推导如下:
[0181]
if(vps_max_layers_minus1==0)
[0182]
totalnumolss=1
[0183]
else if(each_layer_is_an_ols_flag||ols_mode_idc==0||ols_mode_idc==1)
[0184]
totalnumolss=vps_max_layers_minus1 1
[0185]
else if(ols_mode_idc==2)
[0186]
totalnumolss=num_output_layer_sets_minus1 1
[0187]
layer_included_flag[i][j]表示:当ols_mode_idc等于2时,第j层(即nuh_layer_id等于vps_layer_id[j]的层)包括在第i个ols中。layer_included_flag[i][j]等于1表示第j层包括在第i个ols中。layer_included_flag[i][j]等于0表示第j层不包括在第i个ols中。
[0188]
变量numlayersinols[i]表示第i个ols中的层的数量,变量layeridinols[i][j]表示第i个ols中的第j层的nuh_layer_id值,这两个变量推导如下:
[0189][0190]
变量olslayeidx[i][j]表示nuh_layer_id等于layeridinols[i][j]的层的ols层索引,该变量推导如下:
[0191]
for(i=0,i《totalnumolss;i )
[0192]
for j=0;j《numlayersinols[i];j )
[0193]
olslayeidx[i][layeridinols[i][j]]=j
[0194]
每个ols中的最低层应为独立层。换句话说,当每个i的范围为0至totalnumolss

1(包括端值)时,vps_independent_layer_flag[generallayeridx[layeridinols[i][0]]]的值应等于1。
[0195]
每层应包括在由vps指定的至少一个ols中。换句话说,对于特定nuh_layer_id值nuhlayerid等于vps_layer_id[k](k的范围为0至vps_max_layers_minus1,包括端值)之一的每层,应存在至少一对i和j的值,其中,i的范围为0至totalnumolss

1(包括端值),j的范围为numlayersinols[i]

1(包括端值),使得layeridinols[i][j]的值等于nuhlayerid。
[0196]
ols中的任一层应是ols中的输出层或ols中的输出层的(直接或间接)参考层。
[0197]
vps_output_layer_flag[i][j]表示:当ols_mode_idc等于2时,是否输出第i个ols中的第j层。vps_output_layer_flag[i]等于1表示输出第i个ols中的第j层。vps_output_layer_flag[i]等于0表示不输出第i个ols中的第j层。当vps_all_independent_
layers_flag等于1且each_layer_is_an_ols_flag等于0时,vps_output_layer_flag[i]的值被推断为1。
[0198]
变量outputlayerflag[i][j]的值等于1表示输出第i个ols中的第j层,等于0表示不输出第i个ols中的第j层,该变量推导如下:
[0199][0200]
注:第0个ols只包括最低层(例如nuh_layer_id等于vps_layer_id[0]的层),输出第0个ols中包括的唯一层。
[0201]
vps_num_ptls表示vps中的语法结构profile_tier_level()的数量。
[0202]
pt_present_flag[i]等于1表示vps中的第i个语法结构profile_tier_level()中存在档次、层次和通用约束条件信息。pt_present_flag[i]等于0表示vps中的第i个语法结构profile_tier_level()中不存在档次、层次和通用约束条件信息。pt_present_flag[0]的值被推断为0。当pt_present_flag[i]等于0时,vps中的第i个语法结构profile_tier_level()中的档次、层次和通用约束条件信息被推断为与vps中的第(i

1)个语法结构profile_tier_level()中的档次、层次和通用约束条件信息相同。
[0203]
ptl_max_temporal_id[i]表示最高子层表示的temporalid,vps中的第i个语法结构profile_tier_level()中存在该最高子层表示的级别信息。ptl_max_temporal_id[i]的取值范围应为0至vps_max_sub_layers_minus1(包括端值)。当vps_max_sub_layers_minus1等于0时,ptl_max_temporal_id[i]的值被推断为0。当vps_max_sub_layers_minus1大于0且vps_all_layers_same_num_sub_layers_flag等于1时,ptl_max_temporal_id[i]的值被推断为vps_max_sub_layers_minus1。
[0204]
vps_ptl_byte_alignment_zero_bit应等于0。
[0205]
ols_ptl_idx[i]表示适用于第i个ols的语法结构profile_tier_level()在vps中的语法结构profile_tier_level()列表中的索引。当ols_ptl_idx[i]存在时,ols_ptl_idx[i]的取值范围应为0至vps_num_ptls

1(包括端值)。
[0206]
当numlayersinols[i]等于1时,适用于第i个ols的语法结构profile_tier_level()存在于由第i个ols中的层参考的sps中。
[0207]
vps_num_dpb_params表示vps中的语法结构dpb_parameters()的数量。vps_num_dpb_params的取值范围应为0至16(包括端值)。当vps_num_dpb_params不存在时,vps_num_dpb_params的值被推断为0。
[0208]
same_dpb_size_output_or_nonoutput_flag等于1表示vps中不存在语法元素
layer_nonoutput_dpb_params_idx[i]。same_dpb_size_output_or_nonoutput_flag等于0表示vps中可以或可以不存在语法元素layer_nonoutput_dpb_params_idx[i]。
[0209]
vps_sub_layer_dpb_params_present_flag用于控制vps中的语法结构dpb_parameters()中是否存在语法元素max_dec_pic_buffering_minus1[]、max_num_reorder_pics[]和max_latency_increase_plus1[]。当vps_sub_dpb_params_info_present_flag不存在时,vps_sub_dpb_params_info_present_flag被推断为0。
[0210]
dpb_size_only_flag[i]等于1表示vps中的第i个语法结构dpb_parameters()中不存在语法元素max_num_reorder_pics[]和max_latency_increase_plus1[]。dpb_size_only_flag[i]等于1表示vps中的第i个语法结构dpb_parameters()中可以存在语法元素max_num_reorder_pics[]和max_latency_increase_plus1[]。
[0211]
dpb_max_temporal_id[i]表示最高子层表示的temporalid,vps中的第i个语法结构dpb_parameters()中可以存在该最高子层表示的dpb参数。dpb_max_temporal_id[i]的取值范围应为0至vps_max_sub_layers_minus1(包括端值)。当vps_max_sub_layers_minus1等于0时,dpb_max_temporal_id[i]的值被推断为0。当vps_max_sub_layers_minus1大于0且vps_all_layers_same_num_sub_layers_flag等于1时,dpb_max_temporal_id[i]的值被推断为vps_max_sub_layers_minus1。
[0212]
layer_output_dpb_params_idx[i]表示适用于第i层(当第i层是ols中的输出层时)的语法结构dpb_parameters()在vps中的语法结构dpb_parameters()列表中的索引。当layer_output_dpb_params_idx[i]存在时,layer_output_dpb_params_idx[i]的取值范围应为0至vps_num_dpb_params

1(包括端值)。
[0213]
如果vps_independent_layer_flag[i]等于1,则适用于第i层(当第i层是输出层时)的语法结构dpb_parameters()是存在于由该层参考的sps中的语法结构dpb_parameters()。
[0214]
否则(vps_independent_layer_flag[i]等于0),以下内容适用:
[0215]
当vps_num_dpb_params等于1时,layer_output_dpb_params_idx[i]的值被推断为0。
[0216]
码流一致性的要求可以是:layer_output_dpb_params_idx[i]的值应使得dpb_size_only_flag[layer_output_dpb_params_idx[i]]等于0。
[0217]
layer_nonoutput_dpb_params_idx[i]表示适用于第i层(当第i层是ols中的非输出层时)的语法结构dpb_parameters()在vps中的语法结构dpb_parameters()列表中的索引。当layer_nonoutput_dpb_params_idx[i]存在时,layer_nonoutput_dpb_params_idx[i]的取值范围应为0至vps_num_dpb_params

1(包括端值)。
[0218]
如果same_dpb_size_output_or_nonoutput_flag等于1,则以下内容适用:
[0219]
如果vps_independent_layer_flag[i]等于1,则适用于第i层(当第i层是非输出层时)的语法结构dpb_parameters()是存在于由该层参考的sps中的语法结构dpb_parameters()。
[0220]
否则(vps_independent_layer_flag[i]等于0),layer_nonoutput_dpb_params_idx[i]的值被推断为layer_output_dpb_params_idx[i]。
[0221]
否则(same_dpb_size_output_or_nonoutput_flag等于0),当vps_num_dpb_
params等于1时,layer_output_dpb_params_idx[i]的值被推断为0。
[0222]
vps_extension_flag等于0表示vps rbsp语法结构中不存在语法元素vps_extension_data_flag。vps_extension_flag等于1表示vps rbsp语法结构中存在语法元素vps_extension_data_flag。
[0223]
vps_extension_data_flag可以取任意值。它的存在和值不影响解码器与本规范这一版本中指定的档次(profile)的一致性。与本规范这一版本一致的解码器应忽略所有语法元素vps_extension_data_flag。
[0224]
sps rbsp语义如下。
[0225]
sps rbsp在被参考之前应可用于解码过程,应包括在temporalid等于0的至少一个接入单元中,或者应通过外部模块提供,而包括sps rbsp的sps nal单元的nuh_layer_id应等于参考sps nal单元的pps nal单元的最小nuh_layer_id值。
[0226]
cvs中具有特定sps_seq_parameter_set_id值的所有sps nal单元应具有相同的内容。
[0227]
sps_decoding_parameter_set_id在大于0时表示由sps参考的dps的dps_decoding_parameter_set_id值。当sps_decoding_parameter_set_id等于0时,sps不参考dps且在对参考sps的每个clvs进行解码时不参考dps。在由码流中的经编码图像参考的所有sps中,sps_decoding_parameter_set_id的值应相同。
[0228]
sps_video_parameter_set_id在大于0时表示sps参考的vps的vps_video_parameter_set_id值。当sps_video_parameter_set_id等于0时,sps不参考vps且在对参考sps的每个clvs进行解码时不参考vps;generallayeridx[nuh_layer_id]的值被推断为0;vps_independent_layer_flag[generallayeridx[nuh_layer_id]]的值被推断为1。
[0229]
当vps_independent_layer_flag[generallayeridx[nuh_layer_id]]等于1时,由具有特定nuh_layer_id值(nuhlayerid)的clvs参考的sps的nuh_layer_id应等于nuhlayerid。
[0230]
sps_max_sub_layers_minus1 1表示参考sps的每个clvs中可以存在的时间子层的最大数量。sps_max_sub_layers_minus1的取值范围应为0至vps_max_sub_layers_minus1(包括端值)。
[0231]
在与本规范这一版本一致的码流中,sps_reserved_zero_4bits应等于0。保留sps_reserved_zero_4bits的其它值,供itu-t或iso/iec将来使用。
[0232]
sps_ptl_dpb_present_flag等于1表示sps中存在语法结构profile_tier_level()和语法结构dpb_parameters()。sps_ptl_dpb_present_flag等于0表示sps中不存在语法结构profile_tier_level()和语法结构dpb_parameters()。sps_ptl_dpb_present_flag的值应等于vps_independent_layer_flag[nuh_layer_id]。
[0233]
如果vps_independent_layer_flag[generallayeridx[nuh_layer_id]]等于1,则变量maxdecpicbuffminus1被设置为sps中的语法结构dpb_parameters()中的max_dec_pic_buffering_minus1[sps_max_sub_layers_minus1]。否则,maxdecpicbuffminus1被设置为vps中的第layer_nonoutput_dpb_params_idx[generallayeridx[nuh_layer_id]]个语法结构dpb_parameters()中的max_dec_pic_buffering_minus1[sps_max_sub_layers_minus1]。
[0234]
gdr_enabled_flag等于1表示参考sps的clvs中可以存在逐步解码刷新(gradual decoding refresh,gdr)图像。gdr_enabled_flag等于0表示参考sps的clvs中不存在gdr图像。
[0235]
sps_sub_layer_dpb_params_flag用于控制sps中的语法结构dpb_parameters()中是否存在语法元素max_dec_pic_buffering_minus1[i]、max_num_reorder_pics[i]和max_latency_increase_plus1[i]。当sps_sub_dpb_params_info_present_flag不存在时,sps_sub_dpb_params_info_present_flag被推断为0。
[0236]
long_term_ref_pics_flag等于0表示ltrp不用于clvs中的任何经编码图像的帧间预测。long_term_ref_pics_flag等于1表示ltrp可以用于clvs中的一个或多个经编码图像的帧间预测。
[0237]
通用档次、层次和级别语义如下。
[0238]
语法结构profile_tier_level()提供级别信息,可选地提供档次、层次、子档次和通用约束条件信息(表示为pt信息)。
[0239]
当语法结构profile_tier_level()包括在dps中时,olsinscope是包括参考dps的整个码流中的所有层的ols。当语法结构profile_tier_level()包括在vps中时,olsinscope是由vps指定的一个或多个ols。当语法结构profile_tier_level()包括在sps中时,olsinscope是只包括参考sps的所有层中的最低层的ols,其中,该最低层应为独立层。
[0240]
general_profile_idc表示vvc标准附录a中指定的与olsinscope一致的档次。码流包括的general_profile_idc值应为附录a中指定的值保留general_profile_idc的其它值,供itu-t或iso/iec将来使用。
[0241]
general_tier_flag表示用于解释附录a中指定的general_level_idc。
[0242]
num_sub_profiles表示语法元素general_sub_profile_idc[i]的数量。
[0243]
general_sub_profile_idc[i]表示根据itu-t t.35建议书所述注册的第i个互操作元数据,其内容未在vvc标准中详述。
[0244]
general_level_idc表示附录a中指定的与olsinscope一致的级别。码流所包含的general_level_idc值应为附录a中指定的值。保留general_level_idc的其它值,供itu-t或iso/iec将来使用。
[0245]
注1:general_level_idc的值越大,级别越高。在dps中为olsinscope指示的最大级别可能高于在sps中为olsinscope内包括的cvs指示的级别。
[0246]
注2:当olsinscope与多个档次一致时,general_profile_idc应该表示提供优选解码结果或优选码流标识的档次,由编码器确定(以本规范未详述的方式)。
[0247]
注3:当语法结构profile_tier_level()包括在dps中且olsinscope的cvs与不同的档次一致时,general_profile_idc和level_idc应该表示能够对olsinscope进行解码的解码器的档次和级别。
[0248]
sub_layer_level_present_flag[i]等于1表示temporalid等于i的子层表示的语法结构profile_tier_level()中存在级别信息。sub_layer_level_present_flag[i]等于0表示temporalid等于i的子层表示的语法结构profile_tier_level()中不存在级别信息。
[0249]
ptl_alignment_zero_bits应等于0。
[0250]
除了规定不存在值的推断之外,语法元素sub_layer_level_idc[i]的语义也与语法元素general_level_idc相同,但适用于temporalid等于i的子层表示。
[0251]
dpb语义如下。
[0252]
语法结构dpb_parameters(maxsublayersminus1,sublayerinfoflag)为cvs中的每个clvs提供dpb大小、最大图像重排序次数和最大延迟的信息。
[0253]
当vps中包括语法结构dpb_parameters()时,语法结构dpb_parameters()适用于的ols由vps指定。当语法结构dpb_parameters()包括在sps中时,该语法结构适用于只包括参考sps的所有层中的最低层的ols,其中,该最低层是独立层。
[0254]
max_dec_pic_buffering_minus1[i] 1表示cvs中的每个clvs在htid等于i时的解码图像缓冲区的以图像存储缓冲区为单位的最大所需大小。max_dec_pic_buffering_minus1[i]的取值范围应为0至maxdpbsize

1(包括端值),其中,maxdpbsize在其它地方详述。当i大于0时,max_dec_pic_buffering_minus1[i]应大于或等于max_dec_pic_buffering_minus1[i

1]。当max_dec_pic_buffering_minus1[i](其中,i的范围为0至maxsublayersminus1

1,包括端值)不存在时,由于sublayerinfoflag等于0,因此max_dec_pic_buffering_minus1[i]被推断为max_dec_pic_buffering_minus1[maxsublayersminus1]。
[0255]
max_num_reorder_pics[i]表示cvs中的每个clvs在htid等于i时的其中图像的最大允许数量,这些图像可以在解码顺序中位于clvs中的任一图像之前且在输出顺序中位于该图像之后。max_num_reorder_pics[i]的取值范围应为0至max_dec_pic_buffering_minus1[i](包括端值)。当i大于0时,max_num_reorder_pics[i]应大于或等于max_num_reorder_pics[i

1]。当max_num_reorder_pics[i](其中,i的范围为0至maxsublayersminus1

1,包括端值)不存在时,由于sublayerinfoflag等于0,因此max_num_reorder_pics[i]被推断为max_num_reorder_pics[maxsublayersminus1]。
[0256]
max_latency_increase_plus1[i]不等于0用于计算maxlatencypictures[i]的值,maxlatencypictures[i]表示cvs中的每个clvs在htid等于i时的其中图像的最大数量,这些图像可以在输出顺序中位于clvs中的任一图像之前且在解码顺序中位于该图像之后。
[0257]
当max_latency_increase_plus1[i]不等于0时,maxlatencypictures[i]的值规定如下:
[0258]
maxlatencypictures[i]=max_num_reorder_pics[i] max_latency_increase_plus1[i]

1。
[0259]
当max_latency_increase_plus1[i]等于0时,不存在对应的限制。
[0260]
max_latency_increase_plus1[i]的取值范围必须为0至232

2(包括端值)。当max_latency_increase_plus1[i](其中,i的范围为0至maxsublayersminus1

1,包括端值)不存在时,由于sublayerinfoflag等于0,因此max_latency_increase_plus1[i]被推断为max_latency_increase_plus1[maxsublayersminus1]。
[0261]
hrd参数语义包括通用hrd参数语义。
[0262]
通用hrd参数语义如下。
[0263]
语法结构general_hrd_parameters()提供hrd操作中使用的hrd参数。
[0264]
num_ols_hrd_params_minus1 1表示语法结构general_hrd_parameters()中存在的语法结构ols_hrd_parameters()的数量。num_ols_hrd_params_minus1的取值范围应为0至63(包括端值)。当totalnumolss大于1时,num_ols_hrd_params_minus1的值被推断为0。
[0265]
hrd_cpb_cnt_minus1 1表示cvs的码流中的备选cpb规格的数量。hrd_cpb_cnt_minus1的取值范围应为0至31(包括端值)。
[0266]
hrd_max_temporal_id[i]表示最高子层表示的temporalid,该最高子层表示的hrd参数包括在第i个语法结构layer_level_hrd_parameters()中。hrd_max_temporal_id[i]的取值范围应为0至vps_max_sub_layers_minus1(包括端值)。当vps_max_sub_layers_minus1等于0时,hrd_max_temporal_id[i]的值被推断为0。
[0267]
ols_hrd_idx[i]表示适用于第i个ols的语法结构ols_hrd_parameters()的索引。ols_hrd_idx[[i]的取值范围应为0至num_ols_hrd_params_minus1(包括端值)。当ols_hrd_idx[[i]不存在时,ols_hrd_idx[[i]的值被推断为0。
[0268]
参考图像列表结构语义如下。
[0269]
语法结构ref_pic_list_struct(listidx,rplsidx)可以存在于sps中,也可以存在于条带头中。根据语法结构是包括在条带头中还是包括在sps中,以下内容适用:
[0270]

如果语法结构ref_pic_list_struct(listidx,rplsidx)存在于条带头中,则该语法结构表示当前图像(包括条带的图像)的参考图像列表listidx。
[0271]

否则(语法结构ref_pic_list_struct(listidx,rplsidx)存在于sps中),该语法结构表示参考图像列表listidx的候选。本节其余内容规定的语义中的术语“当前图像”是指:
[0272]
(1)包括一个或多个条带的每个图像,其中,一个或多个条带包括的ref_pic_list_idx[listidx]等于sps中包括的语法结构ref_pic_list_struct(listidx,rplsidx)列表中的索引;(2)参考sps的cvs中的每个图像。
[0273]
num_ref_entries[listidx][rplsidx]表示语法结构ref_pic_list_struct(listidx,rplsidx)中的条目数量。num_ref_entries[listidx][rplsidx]的取值范围应为0至maxdecpicbuffminus1 14(包括端值)。
[0274]
vps 704、sps 706和pps 708包括在不同类型的网络抽象层(network abstraction layer,nal)单元中。nal单元是一种包括要遵循的数据(例如经编码视频数据)类型的指示的语法结构。nal单元分为视频编码层(video coding layer,vcl)nal单元和非vcl nal单元。vcl nal单元包括表示视频图像中样本值的数据,而非vcl nal单元包括任何关联的附加信息,例如,参数集(可以适用于多个vcl nal单元的重要数据)和补充增强信息(定时信息和其它补充数据,其中,补充数据可以增强经解码视频信号的可用性,但不是解码视频图像中样本值所必需的)。
[0275]
在一个实施例中,vps 704包括在非vcl nal单元中,表示为vps nal单元。因此,vps nal单元具有vps nut。在一个实施例中,sps 706是非vcl nal单元,表示为sps nal单元。因此,sps nal单元具有sps nut。在一个实施例中,pps 708包括非vcl nal单元中,表示为pps nal单元。因此,pps nal单元具有pps nut。
[0276]
条带头712是一种包括适用于经编码图像(例如图像725)中的所有条带的语法元素的语法结构。在一个实施例中,条带头712在vcl nal中。
[0277]
图像数据720包括根据帧间预测、帧内预测或层间预测进行编码的视频数据以及对应的变换和量化残差数据。如图7所示,图像数据720包括一个或多个ols 721。一个或多个ols721类似于图6中的ols 1、ols 2和ols 3。每个ols 721包括一层或多层723。层723类似于图6中的层631至635。层723都包括一个或多个图像725。图像725类似于图6中的图像615至618、图像611至614、图像641至644、图像651至654和图像661至664。
[0278]
图像725是黑白格式的亮度样本阵列或者是4:2:0、4:2:2和4:4:4颜色格式的亮度样本阵列和2个对应的色度样本阵列。图像725可以是帧或场。然而,在一个cvs(例如,cvs 690)中,所有图像725都是帧,或者所有图像725都是场。cvs 690是视频码流600中的每个编码层视频序列(coded layer video sequence,clvs)的编码视频序列。需要说明的是,当视频码流600包括单层时,cvs 690和clvs相同。只有当视频码流600包括多层(例如,如图5和图6所示)时,cvs 690和clvs才不同。
[0279]
每个图像725包括一个或多个条带727。条带727是图像(例如图像725)中的整数个完整的分块,或者是图像中的一个分块内的整数个连续完整的ctu行。每个条带727只包括在单个nal单元(例如vcl nal单元)中。分块(未示出)是图像(例如图像725)中的某一分块列和某一分块行内的ctu组成的矩形区域。ctu(未示出)是具有3个样本阵列的图像中的亮度样本组成的1个ctb和色度样本组成的2个对应ctb,或者是黑白图像中或使用3个单独颜色平面和语法结构进行译码的图像中的样本组成的1个ctb,其中,这些语法结构用于对上述样本进行译码。ctb(未示出)是一个n
×
n的样本块,其中,n可以设为某个值,使得一个分量分成多个ctb,这就是一种分割方式。块(未示出)是一个m
×
n(m列
×
n行)的样本(例如像素)阵列,或者是一个m
×
n的变换系数阵列。
[0280]
图像725及其条带727包括与正被编码或解码的图像或视频关联的数据。因此,图像725及其条带727可以简单地称为码流700中包括的载荷或数据。
[0281]
本领域技术人员将理解,码流700在实际应用中可以包括其它参数和信息。
[0282]
提取子码流701可以根据子码流提取过程703从码流700中提取出。子码流提取过程703是一种指定的机制,即从码流700中移除不属于目标集合的nal单元,从而产生包括属于目标集合的nal单元的输出子码流701。子码流提取过程703可以由编码器或关联的条带器执行,该编码器或关联的条带器用于根据用户行为/请求动态地改变码流700。
[0283]
由于当第i个ols只包括单层(例如图6中的ols 3)时,sps 706包括第i个ols的dpb_parameters()784,因此vps 704可以在提取过程703中移除。也就是说,子码流701不需要将vps 704包括在子码流701中,因为sps 706中也存在相同的第i个ols的dpb_parameters()784。因此,当第i个ols只包括单层时,解码器可以从sps 706获取第i个ols的dpb_parameters()784。
[0284]
图8为由视频解码器(例如解码器400)实现的解码方法800的一个实施例。方法800可以在从视频编码器(例如视频编码器300)直接或间接接收到码流之后执行。通过确保当输出层集(output layer set,ols)只包括单层时,解码图像缓冲区(decoded picture buffer,dpb)参数包括在序列参数集(sequence parameter set,sps)中,方法800改进了解码过程。由于sps包括具有单层的ols的dpb参数,因此可以从码流中移除视频参数集(video parameter set,vps),这样减少了冗余并提高了译码效率。因此,视频译码中的编码器/解码器(又称“编解码器”)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在
发送、接收和/或观看视频时提供了更好的用户体验。
[0285]
在步骤802中,所述视频解码器接收包括序列参数集(例如sps 706)的子码流(例如子码流701),其中,所述序列参数集包括具有唯一层的输出层集(output layer set,ols)(例如ols 3)的解码图像缓冲区(decoded picture buffer,dpb)语法结构(例如第i个ols的dpb_parameters()784)。
[0286]
在一个实施例中,所述dpb语法结构表示为dpb_parameters()。在一个实施例中,所述唯一层是第i层,所述ols是第i个ols。在一个实施例中,所述dpb语法结构存在于所述sps中的第i个语法结构profile_tier_level()中。在一个实施例中,所述子码流不包括视频参数集(vps 704)。也就是说,所述vps已经在提取过程703中移除。
[0287]
在步骤804中,所述视频解码器从所述sps中获取所述具有唯一层的ols的所述dpb语法结构。在一个实施例中,所述sps由所述ols中的唯一层参考。
[0288]
在步骤806中,所述视频解码器使用所述dpb语法结构对所述唯一层中的图像(例如图像725)进行解码,以得到经解码图像。在一个实施例中,在显示所述经解码图像之前,将所述经解码图像存储在解码图像缓冲区(decoded picture buffer,dpb)中。
[0289]
在所述图像完成解码之后,所述图像可以用于生成或产生一个图像或视频序列,以在电子设备(例如,智能手机、平板电脑、笔记本电脑、个人计算机等)的显示器或屏幕上显示给用户。
[0290]
图9为由视频编码器(例如视频编码器300)实现的对视频码流进行编码的方法900的一个实施例。方法900可以在(例如视频中的)图像要编码到视频码流中并接着发送给视频解码器(例如视频解码器400)时执行。通过确保当输出层集(output layer set,ols)只包括单层时,解码图像缓冲区(decoded picture buffer,dpb)参数包括在序列参数集(sequence parameter set,sps)中,方法900改进了解码过程。由于sps包括具有单层的ols的dpb参数,因此可以从码流中移除视频参数集(video parameter set,vps),这样减少了冗余并提高了译码效率。因此,视频译码中的编码器/解码器(又称“编解码器”)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
[0291]
在步骤902中,所述视频编码器生成视频参数集(例如vps 704)和序列参数集(例如sps 706)。所述vps包括所有输出层集的解码图像缓冲区(decoded picture buffer,dpb)语法结构(例如ptl语法结构780)列表。所述sps包括具有唯一层的每个ols的dpb语法结构(例如第i个ols的dpb_parameters()784)。例如,所述sps包括图6中的ols 3的dpb语法结构,即图7中的ols 3的dpb_parameters()。所述sps不包括任何具有多层的ols的dpb语法结构。例如,所述sps不包括图6中的ols 1和ols 2的dpb语法结构,即图7中的ols 2的dpb_parameters()和ols 3的dpb_parameters()。
[0292]
在一个实施例中,所述vps包括所述ptl语法结构列表的索引,所述索引表示为vps_ols_dpb_params_idx[i]。在一个实施例中,所述vps_ols_dpb_params_idx[i]的取值范围为0至所述vps中的dpb语法结构的总数量。在一个实施例中,所述vps包括vps_num_dpb_params_minus1,所述vps_num_dpb_params_minus1 1表示所述dpb语法结构的总数量。
[0293]
在步骤904中,所述视频编码器将所述vps和所述sps编码到视频码流中。在步骤906中,所述视频编码器存储所述视频码流,以将所述视频码流发送给视频解码器。在一个
实施例中,方法900还包括:从所述码流(例如码流700)中提取子码流(例如子码流701)。如上所述,提取过程703保留sps但移除vps。也就是说,所述子码流包括所述码流中的所述sps,但不包括所述码流中的所述vps。
[0294]
与所述视频码流类似,所述子码流可以存储在存储器中,以发送给视频解码器。在一个实施例中,将所述视频码流和/或所述子码流发送给所述视频解码器。在所述视频解码器接收到经编码视频码流和/或经编码子码流之后,所述经编码视频码流和/或经编码子码流可以解码(例如,如上所述)生成或产生一个图像或视频序列,以在电子设备(例如,智能手机、平板电脑、笔记本电脑、个人计算机等)的显示器或屏幕上显示给用户。
[0295]
下文提供了其它和/或补充细节。
[0296]
通用解码过程如下。
[0297]
该过程的输入是码流bitstreamtodecode。该过程的输出是经解码图像列表。
[0298]
解码过程的规定使得与指定档次和级别一致的所有解码器在为与该档次和级别一致的码流调用与该档次关联的解码过程时,产生数字上相同的裁剪后的经解码输出图像。与本文描述的过程产生相同的裁剪后的经解码输出图像(根据规定具有正确的输出顺序或输出时间)的任何解码过程都符合vvc标准的解码过程要求。
[0299]
对于码流中的每个irap au,以下内容适用:
[0300]

如果au是码流中在解码顺序中的第一个au,每个图像都是即时解码刷新(instantaneous decoding refresh,idr)图像,或者每个图像都是层中在解码顺序中位于序列结束nal单元之后的第一个图像,则变量noincorrectpicoutputflag被设置为1。
[0301]

否则,如果本规范中未详述的某一外部模块可用于将变量handlecraascvsstartflag设置为au的一个值,则handlecraascvsstartflag被设置为通过外部模块提供的值,而且noincorrectpicoutputflag被设置为handlecraascvsstartflag。
[0302]

否则,handlecraascvsstartflag和noincorrectpicoutputflag都被设置为0。
[0303]
对于码流中的每个gdr au,以下内容适用:
[0304]

如果au是码流中在解码顺序中的第一个au或者每个图像都是层中在解码顺序中位于序列结束nal单元之后的第一个图像,则变量noincorrectpicoutputflag被设置为1。
[0305]

否则,如果本规范中未详述的某一外部模块可用于将变量handlegdrascvsstartflag设置为au的一个值,则handlegdrascvsstartflag被设置为通过该外部模块提供的值,而且noincorrectpicoutputflag被设置为handlegdrascvsstartflag。
[0306]

否则,handlegdrascvsstartflag和noincorrectpicoutputflag都被设置为0。
[0307]
注:需要上述针对irap图像和gdr图像的操作来标识码流中的cvs。
[0308]
为bitstreamtodecode中在解码顺序中的每个经编码图像重复调用第8.1.2节。
[0309]
用于参考图像列表构建的解码过程如下。
[0310]
该过程在开始非idr图像中的每个条带的解码过程时调用。
[0311]
参考图像通过参考索引进行寻址。参考索引是参考图像列表中的索引。在对i条带进行解码时,条带数据的解码不使用参考图像列表。在对p条带进行解码时,条带数据的解码只使用参考图像列表0(即refpiclist[0])。在对b条带进行解码时,条带数据的解码既使用参考图像列表0,又使用参考图像列表1(即refpiclist[1])
[0312]
码流一致性的要求是以下约束条件适用:
[0313]

当每个i等于0或1时,num_ref_entries[i][rplsidx[i]]应不小于numrefidxactive[i]。
[0314]

由refpiclist[0]或refpiclist[1]中的每个激活条目参考的图像应存在于dpb中,该图像的temporalid应小于或等于当前图像的temporalid。
[0315]

由refpiclist[0]或refpiclist[1]中的每个条目参考的图像应不是当前图像,该图像的non_reference_picture_flag应等于0。
[0316]

图像中的条带的refpiclist[0]或refpiclist[1]中的短期参考图像(short term reference picture,strp)条目和同一图像中的同一条带或不同条带的refpiclist[0]或refpiclist[1]中的ltrp条目应不参考同一图像。
[0317]

refpiclist[0]或refpiclist[1]中不存在ltrp条目,当前图像的picordercntval与由该条目参考的图像的picordercntval之间的差值大于或等于224。
[0318]

假设setofrefpics是由refpiclist[0]中的与当前图像具有相同nuh_layer_id的所有条目和refpiclist[1]中的与当前图像具有相同nuh_layer_id的所有条目参考的唯一图像集。setofrefpics中的图像数量应小于或等于maxdecpicbuffminus1,而且一个图像中的所有条带的setofrefpics应是相同的。
[0319]

在当前图像是步进式时间子层接入(step-wise temporal sublayer access,stsa)图像时,refpiclist[0]或refpiclist[1]中应不存在与当前图像具有相同temporalid的激活条目。
[0320]
在当前图像是解码顺序在与当前图像具有相同temporalid的stsa图像之后的图像时,应不存在与当前图像具有相同temporalid的图像,当前图像作为refpiclist[0]或refpiclist[1]中的解码顺序在stsa图像之前的激活条目。
[0321]

由当前图像中的条带的refpiclist[0]或refpiclist[1]中的每个ilrp条目参考的图像应与当前图像在同一接入单元中。
[0322]

由当前图像中的条带的refpiclist[0]或refpiclist[1]中的每个ilrp条目参考的图像应存在于dpb中,而且该图像的nuh_layer_id应小于当前图像的nuh_layer_id。
[0323]

条带的refpiclist[0]或refpiclist[1]中的每个ilrp条目都应是激活条目。
[0324]
vvc标准的第c.1节中的hrd通用方面包括以下内容。
[0325]
本附录详述了假设参考解码(hypothetical reference decoder,hrd)及其用于检查码流和解码器一致性的用途。
[0326]
需要一组码流一致性测试来检查码流的一致性,该码流称为整个码流,表示为entirebitstream。这组码流一致性测试用于测试由vps指定的每个ols的每个op的一致性。
[0327]
对于每个测试,以下按顺序执行的步骤按照列出的顺序适用,然后是本节中这些步骤之后描述的过程:
[0328]
1.测试操作点(表示为targetop)是通过选择具有ols索引opolsidx和最大temporalid值optid的目标ols进行选择的。opolsidx的取值范围为0至totalnumolss

1(包括端值)。optid的取值范围为0至vps_max_sub_layers_minus1(包括端值)。选择的每对opolsidx和optid值应使得,通过调用第c.6节详述的以entirebitstream、opolsidx和optid为输入的子码流提取过程而输出的子码流满足以下条件:
[0329]

bitstreamtodecode中存在nuh_layer_id等于layeridinols[opolsidx]中的每个nuh_layer_id值的至少一个vcl nal单元。
[0330]

bitstreamtodecode中存在temporalid等于optid的至少一个vcl nal单元。
[0331]
2.如果targetop中的层包括entirebitstream中的所有层且optid等于大于entirebitstream中的所有nal单元之中的最大temporalid值,则bitstreamtodecode被设置为与entirebitstream相同。否则,bitstreamtodecode被设置为调用以entirebitstream、opolsidx和optid为输入的子码流提取过程(如第c.6节详述)的输出。
[0332]
3.targetolsidx和htid的值分别被设置为targetop的opolsidx和optid。
[0333]
4.选择scidx的值。选择的scidx的范围应为0至hrd_cpb_cnt_minus1(包括端值)。
[0334]
5.bitstreamtodecode中与适用于targetolsidx的缓冲周期sei消息(存在于targetlayerbitstream中或通过本规范中未详述的外部机制获取)关联的接入单元被选择作为hrd初始化点,并称为目标ols中的每层的接入单元0。
[0335]
6.适用于bitstreamtodecode的语法结构ols_hrd_parameters()和语法结构sub_layer_hrd_parameters()选择如下:
[0336]

选择vps中(或通过本规范中未详述的外部模块提供)的第ols_hrd_idx[targetolsidx]个语法结构ols_hrd_parameters()。
[0337]

在选择的语法结构ols_hrd_parameters()中,如果bitstreamtodecode是i类码流,则选择条件“if(general_vcl_hrd_params_present_flag)”紧跟着的语法结构sub_layer_hrd_parameters(htid),而且变量nalhrdmodeflag被设置为0;否则(bitstreamtodecode是ii类码流),选择条件“if(general_vcl_hrd_params_present_flag)”(在这种情况下,变量nalhrdmodeflag被设置为0)或条件“if(general_nal_hrd_params_present_flag)”(在这种情况下,变量nalhrdmodeflag被设置为1)紧跟着的语法结构sub_layer_hrd_parameters(htid)。当bitstreamtodecode是ii类码流且nalhrdmodeflag等于0时,除填充数据nal单元外的所有非vcl nal单元以及根据nal单元流形成字节流(如附录b详述)的所有语法元素leading_zero_8bits、zero_byte、start_code_prefix_one_3bytes和trailing_zero_8bits(如果存在)从bitstreamtodecode中移除,而剩余的码流被分配给bitstreamtodecode。
[0338]
7.当decoding_unit_hrd_params_present_flag等于1时,调度cpb在接入单元级(在这种情况下,变量decodingunithrdflag被设置为0)或解码单元级(在这种情况下,变量decodingunithrdflag被设置为1)进行操作。否则,decodingunithrdflag被设置为0,而且调度cpb在接入单元级进行操作。
[0339]
8.对于从接入单元0开始的bitstreamtodecode中的每个接入单元,选择与该接入单元关联并适用于targetolsidx的缓冲周期sei消息(存在于bitstreamtodecode中或通过本规范中未详述的外部模块获取),选择与该接入单元关联并适用于targetolsidx的图像时间sei消息(存在于bitstreamtodecode中或通过本规范中未详述的外部模块获取),当decodingunithrdflag等于1且decoding_unit_cpb_params_in_pic_timing_sei_flag等于0时,选择与该接入单元中的解码单元关联并适用于targetolsidx的解码单元信息sei消息(存在于bitstreamtodecode中或通过本规范中未详述的外部机制获取)。
[0340]
每个一致性测试包括上述每个步骤中的一个选项的组合。当一个步骤存在多个选
项时,任何特定的一致性测试只选择一个选项。所有步骤的所有可能组合构成一整套一致性测试。对于每个测试操作点,待执行的码流一致性测试的次数等于n0*n1*n2*n3,其中,n0、n1、n2和n3的值指定如下:
[0341]

n1等于hrd_cpb_cnt_minus1 1。
[0342]

n1是bitstreamtodecode中与缓冲周期sei消息关联的接入单元的数量。
[0343]

n2推导如下:
[0344]

如果bitstreamtodecode是i类码流,则n0等于1。
[0345]

否则(bitstreamtodecode是ii类码流),n0等于2。
[0346]

n3推导如下:
[0347]

如果decoding_unit_hrd_params_present_flag等于0,则n3等于1。
[0348]

否则,n3等于2。
[0349]
hrd包括码流提取器(可选存在)、编码图像缓冲区(coded picture buffer,cpb)、即时解码过程、概念上包括每层的子解码图像缓冲区(decoded picture buffer,dpb)的dpb以及输出裁剪。
[0350]
对于每个码流一致性测试,cpb大小(比特数)为cpbsize[htid][scidx](如第7.4.5.2节详述,其中,scidx和hrd参数如上在本节详述),每层的dpb参数max_dec_pic_buffering_minus1[htid]、max_num_reorder_pics[htid]和maxlatencypictures[htid]存在于适用于该层的语法结构dpb_parameters()中或者根据该语法结构推导,取决于该层是否是独立层以及该层是否是目标ols中的输出层。
[0351]
hrd操作如下。
[0352]

hrd在解码单元0处初始化,cpb和dpb的每个子dpb都被设置为空(每个子dpb的子dpb满量被设置为0)。
[0353]
注:在初始化之后,hrd不会通过后续缓冲周期sei消息再次初始化。
[0354]

与根据指定的到达时间表(arrival schedule)进入每个cpb的解码单元关联的数据通过假设流调度方法(hypothetical stream scheduler,hss)发送。
[0355]

与每个解码单元关联的数据在解码单元的cpb移除时间通过即时解码过程即时移除和解码。
[0356]

每个经解码图像都放置在dpb中。
[0357]

当一个经解码图像不再需要用于帧间预测参考,也不再需要用于输出时,从dpb中移除该经解码图像。
[0358]
解码图像缓冲区的操作如下。
[0359]
本节中的这些规范独立适用于选择的每个解码图像缓冲区(decoded picture buffer,dpb)参数集(如第c.1节详述)。
[0360]
解码图像缓冲区在概念上包括子dpb,每个子dpb包括用于存储一层经解码图像的图像存储缓冲区。每个图像存储缓冲区可以包括标识为“用于参考”或保存用于后续输出的经解码图像。第c3.2节、第c3.3节和第c3.4节中详述的过程按照下文所述依次应用,并从ols中的最低层开始,按照ols中各层的nuh_layer_id值的递增顺序独立应用于每层。当这些过程应用于特定层时,只影响该特定层的子dpb。在这些过程的描述中,dpb是指特定层的子dpb,而该特定层称为当前层。
[0361]
注:在输出时间dpb的操作中,同一接入单元中的picoutputflag等于1的经解码图像按照经解码图像的nuh_layer_id值的递增顺序连续输出。
[0362]
假设图像n和当前图像是接入单元n中具有特定nuh_layer_id值的经编码图像或经解码图像,其中,n为非负整数。
[0363]
在对当前图像进行解码之前从dpb中移除图像如下所述。
[0364]
在对当前图像进行解码之前(但在解析当前图像中的第一条带的条带头之后)从dpb中移除图像可以即时发生在接入单元n(包括当前图像)的第一解码单元的cpb移除时间并执行如下:
[0365]

调用第8.3.2节详述的用于参考图像列表构建的解码过程和第8.3.3节详述的用于参考图像标识的解码过程。
[0366]

在当前au为不是au 0的cvss au时,可以使用以下按顺序执行的步骤:
[0367]
1.为测试解码器推导变量nooutputofpriorpicsflag,如下所示:
[0368]

如果为当前au中的任何图像推导出的pic_width_max_in_luma_samples、pic_height_max_in_luma_samples、chroma_format_idc、separate_colour_plane_flag、bit_depth_luma_minus8、bit_depth_chroma_minus8或max_dec_pic_buffering_minus1[htid]的值不同于为同一clvs中的前一图像推导出的pic_width_in_luma_samples、pic_height_in_luma_samples、chroma_format_idc、separate_colour_plane_flag、bit_depth_luma_minus8、bit_depth_chroma_minus8或max_dec_pic_buffering_minus1[htid]的值,则nooutputofpriorpicsflag可以(但不是必须)被测试解码器设置为1,不考虑no_output_of_prior_pics_flag的值。
[0369]
注:虽然在这些条件下,可以优选将nooutputofpriorpicsflag设置为no_output_of_prior_pics_flag,但是在这种情况下,允许测试解码器将nooutputofpriorpicsflag设置为1。
[0370]

否则,nooutputofpriorpicsflag被设置为no_output_of_prior_pics_flag。
[0371]
2.为测试解码器推导出的nooutputofpriorpicsflag的值应用于hrd,使得当nooutputofpriorpicsflag的值等于1时,dpb中的所有图像存储缓冲区都被清空,而不输出这些图像存储缓冲区包括的图像,并且dpb满度被设置为0。
[0372]

当以下两个条件对于dpb中的任何图像k都为真时,dpb中的所有这些图像k都从dpb中移除:
[0373]

图像k可以标识为“不用于参考”。
[0374]

图像k的pictureoutputflag等于0或其dpb输出时间小于或等于当前图像n中的第一解码单元(表示为解码单元m)的cpb移除时间,即dpboutputtime[k]小于或等于ducpbremovaltime[m]。
[0375]

对于从dpb中移除的每个图像,dpb满度减1。
[0376]
输出顺序dpb的操作如下所述。
[0377]
本节中的这些规范独立适用于选择的每个解码图像缓冲区(decoded picture buffer,dpb)参数集(如第c.1节详述)。
[0378]
解码图像缓冲区在概念上包括子dpb,每个子dpb包括用于存储一层经解码图像的图像存储缓冲区。每个图像存储缓冲区包括标识为“用于参考”或保存用于后续输出的经解
码图像。
[0379]
在对当前图像进行解码之前调用从dpb中输出和移除图像的过程(如第c.5.2.2节详述),然后调用用于当前解码图像标识和存储的过程(如第c.3.4节详述),最后调用用于额外缓冲(bumping)的过程(如c.5.2.3节详述)。“缓冲”过程如第c.5.2.4节详述并如第c.5.2.2节和第c.5.2.3节详述调用。
[0380]
这些过程从ols中的最低层开始,按照ols中各层的nuh_layer_id值的递增顺序独立应用于每层。当这些过程应用于特定层时,只影响该特定层的子dpb。
[0381]
注:在输出顺序dpb的操作中,与在输出时间dpb的操作中一样,同一接入单元中的picoutputflag等于1的经解码图像按照经解码图像的nuh_layer_id值的递增顺序连续输出。
[0382]
假设图像n和当前图像是接入单元n中具有特定nuh_layer_id值的经编码图像或经解码图像,其中,n为非负整数。
[0383]
从dpb中输出和移除图像如下所述。
[0384]
在对当前图像进行解码之前(但在解析当前图像中的第一条带的条带头之后)从dpb中输出和移除图像即时发生在包括当前图像的接入单元中的第一解码单元从cpb中移除的时候并执行如下:
[0385]

调用第8.3.2节详述的用于参考图像列表构建的解码过程和第8.3.3节详述的用于参考图像标识的解码过程。
[0386]

如果当前au为不是au 0的cvss au时,可以使用以下按顺序执行的步骤:
[0387]
1.为测试解码器推导变量nooutputofpriorpicsflag,如下所示:
[0388]

如果为当前au中的任何图像推导出的pic_height_max_in_luma_samples、chroma_format_idc、separate_colour_plane_flag、bit_depth_luma_minus8、bit_depth_chroma_minus8或max_dec_pic_buffering_minus1[htid]的值不同于为同一clvs中的前一图像推导出的pic_width_in_luma_samples、pic_height_in_luma_samples、chroma_format_idc、separate_colour_plane_flag、bit_depth_luma_minus8、bit_depth_chroma_minus8或max_dec_pic_buffering_minus1[htid]的值,则nooutputofpriorpicsflag可以(但不是必须)被测试解码器设置为1,不考虑no_output_of_prior_pics_flag的值。
[0389]
注:虽然在这些条件下,可以优选将nooutputofpriorpicsflag设置为no_output_of_prior_pics_flag,但是在这种情况下,允许测试解码器将nooutputofpriorpicsflag设置为1。
[0390]

否则,nooutputofpriorpicsflag被设置为no_output_of_prior_pics_flag。
[0391]
2.为测试解码器推导出的nooutputofpriorpicsflag的值应用于hrd,如下所示:
[0392]

如果nooutputofpriorpicsflag等于1,则dpb中的所有图像存储缓冲区都被清空,而不输出这些图像存储缓冲区包括的图像,并且dpb满度被设置为0。
[0393]

否则(nooutputofpriorpicsflag等于0),包括标识为“不需要输出”且“不用于参考”的图像的所有图像存储缓冲区被清空(不输出),而dpb中的所有非空图像存储缓冲区通过反复调用第c.5.2.4节详述的“缓冲”过程来清空,并且dpb满度被设置为0。
[0394]

否则(当前图像不是clvss图像),包括标识为“不需要输出”且“不用于参考”的图像的所有图像存储缓冲区都被清空(不输出)。对于每个被清空的图像存储缓冲区,dpb满度
减1。当以下一个或多个条件为真时,重复调用第c.5.2.4节详述的“缓冲”过程,同时对于每个被清空的其它图像存储缓冲区,进一步将dpb满度减1,直到以下条件都不为真:
[0395]
dpb中标识为“需要输出”的图像的数量大于max_num_reorder_pics[htid]。
[0396]
max_latency_increase_plus1[htid]不等于0且dpb中存在至少一个图像标识为“需要输出”,该图像的关联变量piclatencycount大于或等于maxlatencypictures[htid]。
[0397]
dpb中的图像的数量大于或等于max_dec_pic_buffering_minus1[htid] 1。
[0398]
额外缓冲如下所述。
[0399]
本节详述的过程即时发生在包括当前图像的接入单元n中的最后一个解码单元从cpb中移除的时候。
[0400]
在当前图像的pictureoutputflag等于1时,对于dpb中标识为“需要输出”且输出顺序在当前图像之后的每个图像,关联变量piclatencycount被设置为piclatencycount 1。
[0401]
以下内容适用:
[0402]

如果当前经解码图像的pictureoutputflag等于1,则当前经解码图像被标识为“需要输出”且其关联变量piclatencycount被设置为0。
[0403]

否则(当前经解码图像的pictureoutputflag等于0),当前经解码图像被标识为“不需要输出”。
[0404]
当以下一个或多个条件为真时,重复调用第c.5.2.4节详述的“缓冲”过程,直到以下条件都不为真:
[0405]

dpb中标识为“需要输出”的图像的数量大于max_num_reorder_pics[htid]。
[0406]

max_latency_increase_plus1[htid]不等于0且dpb中存在至少一个图像标识为“需要输出”,该图像的关联变量piclatencycount大于或等于maxlatencypictures[htid]。
[0407]
缓冲过程如下所述。
[0408]“缓冲”过程包括以下按顺序执行的步骤:
[0409]
选择首先输出的图像作为dpb中标识为“需要输出”的所有图像中具有最小picordercntval值的图像。
[0410]
这些图像中的每个图像按照nuh_layer_id的递增顺序使用该图像的一致性裁剪窗口进行裁剪,输出裁剪后的图像,将该图像标识为“不需要输出”。
[0411]
包括标识为“不用于参考”且是裁剪后的输出图像之一的图像的每个图像存储缓冲区被清空,并且关联子dpb的满度减1。
[0412]
注:对于属于同一cvs并通过“缓冲过程”输出的任意两个图像pica和picb,当pica比picb先输出时,pica的picordercntval的值小于picb的picordercntval的值。
[0413]
子码流提取过程如下所述。
[0414]
该过程的输入包括码流inbitstream、目标ols索引targetolsidx和目标最大temporalid值tidtarget。
[0415]
该过程的输出是子码流outbitstream。
[0416]
码流码流一致性的要求是:对于任何输入码流,本节详述的以码流、等于由vps指定的ols列表中的索引的targetolsidx和等于0至6(包括端值)范围内任一值的tidtarget为输入的过程输出的且满足以下条件的输出子码流应是一致性码流。
[0417]

输出子码流包括nuh_layer_id等于layeridinols[targetolsidx]中的每个nuh_layer_id值的至少一个vcl nal单元。
[0418]

输出子码流包括temporalid等于tidtarget的至少一个vcl nal单元。
[0419]
注:一致性码流包括temporalid等于0的一个或多个经编码条带nal单元,但不必包括nuh_layer_id等于0的经编码条带nal单元。
[0420]
输出子码流outbitstream推导如下:
[0421]

码流outbitstream被设置为与码流inbitstream相同。
[0422]

从outbitstream中移除temporalid大于tidtarget的所有nal单元。
[0423]

从outbitstream中移除nuh_layer_id不包括在列表layeridinols[targetolsidx]中的所有nal单元。
[0424]

从outbitstream中移除包括nesting_ols_flag等于1的可伸缩嵌套式sei消息的所有sei nal单元,i的取值范围不是0至nesting_num_olss_minus1(包括端值),使得nestingolsidx[i]等于targetolsidx。
[0425]

当targetolsidx大于0时,从outbitstream中移除包括payloadtype等于0(缓冲周期)、1(图像时间)或130(解码单元信息)的不可伸缩嵌套的sei消息的所有sei nal单元。
[0426]
下面提供了可伸缩嵌套式sei消息语法。
[0427][0428][0429]
下文提供了通用sei载荷语义。
[0430]
以下内容适用于不可伸缩嵌套的sei消息的适用层或ols。
[0431]

对于不可伸缩嵌套的sei消息,当payloadtype等于0(缓冲周期)、1(图像时间)或130(解码单元信息)时,不可伸缩嵌套的sei消息只适用于第0个ols。
[0432]

对于不可伸缩嵌套的sei消息,当payloadtype等于vclassociatedseilist中的任一值时,不可伸缩嵌套的sei消息只适用于vcl nal单元的nuh_layer_id等于包括sei消息的sei nal单元的nuh_layer_id的层。
[0433]
码流一致性的要求是:以下限制条件适用于sei nal单元的nuh_layer_id值:
[0434]

当不可伸缩嵌套的sei消息的payloadtype等于0(缓冲周期)、1(图像时间)或130(解码单元信息)时,包括不可伸缩嵌套的sei消息的sei nal单元的nuh_layer_id应等于vps_layer_id[0]。
[0435]

当不可伸缩嵌套的sei消息的payloadtype等于vclassociatedseilist中的任一值时,包括不可伸缩嵌套的sei消息的sei nal单元的nuh_layer_id应等于与sei nal单元关联的vcl nal单元的nuh_layer_id值。
[0436]

包括可伸缩嵌套式sei消息的sei nal单元的nuh_layer_id应等于可伸缩嵌套的sei消息适用于的所有层的最小nuh_layer_id值(当可伸缩嵌套式sei消息的nesting_ols_flag等于0时)或等于可伸缩嵌套的sei消息适用于的ols中的所有层的最小nuh_layer_id值(当可伸缩嵌套式sei消息的nesting_ols_flag等于1时)。
[0437]
下文提供了可伸缩嵌套式sei消息语义。
[0438]
可伸缩嵌套式sei消息提供一种将sei消息与特定ols或特定层关联的机制。
[0439]
可伸缩嵌套式sei消息包括一个或多个sei消息。可伸缩嵌套式sei消息中包括的sei消息还称为可伸缩嵌套的sei消息。
[0440]
码流一致性的要求是,以下限制条件适用于将sei消息包括在可伸缩嵌套式sei消息中:
[0441]

payloadtype等于132(经解码图像哈希(hash))或133(可伸缩嵌套式)的sei消息可以不包括在可伸缩嵌套式sei消息中。
[0442]

当可伸缩嵌套式sei消息包括缓冲周期、图像时间或解码单元信息sei消息时,可伸缩嵌套式sei消息应不包括payloadtype不等于0(缓冲周期)、1(图像时间)或130(解码单元信息)的任何其它sei消息。
[0443]
码流一致性的要求是,以下限制条件应用于包括可伸缩嵌套式sei消息的sei nal单元的nal_unit_type值:
[0444]

当可伸缩嵌套式sei消息包括payloadtype等于0(缓冲周期)、1(图像时间)、130(解码单元信息)、145(依赖rap指示)或168(帧字段信息)的sei消息时,包括可伸缩嵌套式sei消息的sei nal单元的nal_unit_type应等于prefix_sei_nut。
[0445]
nesting_ols_flag等于1表示可伸缩嵌套的sei消息适用于特定ols。nesting_ols_flag等于0表示可伸缩嵌套的sei消息适用于特定层。
[0446]
码流一致性的要求是:以下限制条件适用于nesting_ols_flag值。
[0447]

当可伸缩嵌套式sei消息包括payloadtype等于0(缓冲周期)、1(图像时间)或130(解码单元信息)的sei消息时,nesting_ols_flag值应等于1。
[0448]

当可伸缩嵌套式sei消息包括payloadtype等于vclassociatedseilist中的值的
sei消息时,nesting_ols_flag值应等于0。
[0449]
nesting_num_olss_minus1 1表示可伸缩嵌套的sei消息适用于的ols的数量。nesting_num_olss_minus1的取值范围应为0至totalnumolss

1(包括端值)。
[0450]
nesting_ols_idx_delta_minus1[i]用于推导变量nestingolsidx[i],该变量表示可伸缩嵌套的sei消息在nesting_ols_flag等于1时适用于的第i个ols的ols索引。nesting_ols_idx_delta_minus1[i]的取值范围应为0至totalnumolss

2(包括端值)。
[0451]
变量nestingolsidx[i]推导如下:
[0452][0453]
nesting_all_layers_flag等于1表示可伸缩嵌套的sei消息适用于nuh_layer_id大于或等于当前sei nal单元的nuh_layer_id的所有层。nesting_all_layers_flag等于0表示可伸缩嵌套的sei消息可以或可以不适用于nuh_layer_id大于或等于当前sei nal单元的nuh_layer_id的所有层。
[0454]
nesting_num_layers_minus1 1表示可伸缩嵌套的sei消息适用于的层的数量。nesting_num_layers_minus1的取值范围应为0至vps_max_layers_minus1

generallayeridx[nuh_layer_id](包括端值),其中,nuh_layer_id是当前sei nal单元的nuh_layer_id。
[0455]
nesting_layer_id[i]表示可伸缩嵌套的sei消息在nesting_all_layers_flag等于0时适用于的第i层的nuh_layer_id值。nesting_layer_id[i]的值应大于nuh_layer_id,其中,nuh_layer_id是当前sei nal单元的nuh_layer_id。
[0456]
当nesting_ols_flag等于0时,变量nestingnumlayers和列表nestinglayerid[i](i的范围为0至nestingnumlayers

1,包括端值)可以推导如下,其中,变量nestingnumlayers表示可伸缩嵌套的sei消息适用于的层的数量,列表nestinglayerid[i]表示可伸缩嵌套的sei消息适用于的各层的nuh_layer_id值的列表,nuh_layer_id是当前sei nal单元的nuh_layer_id。
[0457][0458]
nesting_num_seis_minus1 1表示可伸缩嵌套的sei消息的数量。nesting_num_seis_minus1的取值范围应为0至63(包括端值)。
[0459]
nesting_zero_bit应等于0。
[0460]
图10为本发明一个实施例提供的视频译码设备1000(例如,视频编码器300或视频解码器400)的示意图。视频译码设备1000适用于实现本文描述的公开实施例。视频编码设备1000包括:用于接收数据的入端口1010和接收单元(rx)1020;用于处理所述数据的处理器、逻辑单元或中央处理单元(central processing unit,cpu)1030;用于发送所述数据的发送单元(tx)1040和出端口1050;用于存储所述数据的存储器1060。视频译码设备1000还可以包括与入端口1010、接收单元1020、发送单元1040和出端口1050耦合的光电(optical-to-electrical,oe)组件和电光(electrical-to-optical,eo)组件,用作光信号或电信号的出口或入口。
[0461]
处理器1030通过硬件和软件来实现。处理器1030可以实现为一个或多个cpu芯片、一个或多个核(例如多核处理器)、一个或多个现场可编程门阵列(field-programmable gate array,fpga)、一个或多个专用集成电路(application specific integrated circuit,asic)和一个或多个数字信号处理器(digital signal processor,dsp)。处理器1030与入端口1010、接收器单元1020、发送单元1040、出端口1050和存储器1060通信。处理器1030包括译码模块1070。译码模块1070实现上文描述的公开实施例。例如,译码模块1070执行、处理、准备或提供各种编解码功能。因此,将译码模块1070包含在内为视频译码设备1000的功能提供了实质性的改进,并且影响了视频译码设备1000到不同状态的转换。可选地,以存储在存储器1060中并由处理器1030执行的指令来实现译码模块1070。
[0462]
视频译码设备1000还可以包括用于与用户进行数据通信的输入和/或输出(input/output,i/o)设备1080。i/o设备1080可以包括输出设备,例如,用于显示视频数据的显示器、用于输出音频数据的扬声器等。i/o设备1080还可以包括键盘、鼠标、轨迹球等输入设备和/或用于与这些输出设备交互的对应接口。
[0463]
存储器1060包括一个或多个磁盘、一个或多个磁带机和一个或多个固态硬盘,并且可以用作溢出数据存储设备,以在选择程序来执行时存储此类程序以及存储在执行程序过程中读取的指令和数据。存储器1060可以是易失性和/或非易失性的,并且可以是只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、三态内容寻址存储器(ternary content-addressable memory,tcam)和/或静态随机存取存储器(static random-access memory,sram)。
[0464]
图11为译码模块1100的一个实施例的示意图。在一个实施例中,译码模块1100在视频译码设备1102(例如,视频编码器300或视频解码器400)中实现。视频译码设备1102包括接收模块1101。接收模块1101用于接收图像进行编码或接收码流进行解码。视频译码设备1102包括与接收模块1101耦合的发送模块1107。发送模块1107用于将所述码流发送给解码器或将经解码图像发送给显示模块(例如多个i/o设备1080中的一个)。
[0465]
视频译码设备1102包括存储模块1103。存储模块1103与接收模块1101或发送模块1107中的至少一个耦合。存储模块1103用于存储指令。视频译码设备1102还包括处理模块1105。处理模块1105与存储模块1103耦合。处理模块1105用于执行存储在存储模块1103中的指令,以执行本文公开的方法。
[0466]
还应当理解,本文中阐述的示例性方法的步骤不一定需要按照所描述的顺序执行,并且这些方法的步骤的顺序应当理解为仅仅是示例性的。同理,在与本发明各种实施例
相一致的方法中,这些方法可以包括其它步骤,并且某些步骤可以省略或组合。
[0467]
虽然本发明提供了若干个实施例,但应当理解,在不脱离本发明的精神或范围的情况下,所公开的系统和方法可以通过其它多种具体形式体现。本发明示例应被视为说明性而非限制性的,且本发明并不限于本文所给出的详细内容。例如,各种元件或组件可以组合或集成在另一系统中,或者某些特征可以省略或不实现。
[0468]
另外,在不脱离本发明的范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、模块、技术或方法组合或集成。展示或论述为彼此耦合或直接耦合或通信的其它项也可以采用电方式、机械方式或其它方式通过某一接口、设备或中间组件间接地耦合或通信。变化、替换、变更的其它示例可由本领域技术人员确定,并可以在不脱离本文公开的精神和范围的情况下举例。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献