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

对OLS的HRD一致性测试的制作方法

2022-04-30 15:28:10 来源:中国专利 TAG:

对ols的hrd一致性测试
1.相关申请案交叉引用
2.本专利申请要求王业奎于2019年9月24日递交、申请号为62/905,244的发明名称为“用于多层视频码流的假设参考解码器(hrd)(hypothetical reference decoder(hrd)for multi-layer video bitstreams)”的美国临时专利申请的权益,该在先申请通过引用并入本文。
技术领域
3.本发明大体上涉及视频译码,具体涉及假设参考解码器(hypothetical reference decoder,hrd)参数变化,以支持多层码流的高效编码和/或一致性测试。


背景技术:

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


技术实现要素:

5.在一个实施例中,本发明包括一种解码器实现的方法,所述方法包括:所述解码器的接收器接收包括一个或多个输出层集(output layer set,ols)和指定所述ols的视频参数集(video parameter set,vps)的码流,其中,所述码流已经过一组码流一致性测试检查,所述一组码流一致性测试测试所述vps指定的每个ols的每个操作点(operation point,op)的一致性;所述解码器的处理器解码来自所述ols的图像。
6.视频译码系统采用各种一致性测试来确保码流可被解码器解码。例如,一致性检查可以包括测试整个码流的一致性,然后测试码流的每个层的一致性,最后检查潜在的可解码输出的一致性。为了实现一致性检查,对应的参数包括在码流中。假设参考解码器(hypothetical reference decoder,hrd)可以读取参数并执行测试。视频可以包括许多层和许多不同的ols。根据请求,编码器发送选定ols的一个或多个层。例如,编码器可以发送ols中当前网络带宽可以支持的一个或多个最佳层。这种方法的一个问题是,测试了大量的层,但实际上没有发送到解码器。然而,支持这种测试的参数仍然可以包括在码流中,这不必要地增加了码流大小。本示例包括仅将码流一致性测试应用于每个ols的机制。这样一来,在测试对应的ols时,整个码流、每个层和可解码输出都会被集体测试。因此,减少了一致性测试的数量,从而降低编码器的处理器和内存资源利用率。此外,减少一致性测试的数
量可以减少码流中包括的关联参数的数量。这减小了码流大小,从而降低了编码器和解码器的处理器、内存和/或网络资源利用率。
7.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,所述一组码流一致性测试由在编码器上运行的假设参考解码器(hypothetical reference decoder,hrd)执行。
8.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,所述vps包括输出层集的总数减1(num_output_layer_sets_minus1)加1,表示所述vps指定的ols的总数。
9.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,每个op根据具有op ols索引(opolsidx)和最高op时间标识符值(optid)的目标ols选择作为被测试op(targetop)。
10.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,每个ols是层集合,其中,所述层中的一个或多个层被指定为输出层。
11.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,所述vps包括通用hrd参数(general_hrd_parameters)语法结构,所述通用hrd参数语法结构提供应用于所述vps指定的所有ols的hrd参数。
12.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,所述码流中存在所述hrd参数表示所述解码器能够根据传送机制解码所述码流。
13.在一个实施例中,本发明包括一种编码器实现的方法,所述方法包括:所述编码器的处理器对包括一个或多个ols的码流进行编码;所述处理器将指定所述ols的vps编码到所述码流中;所述处理器在所述vps指定的每个ols的每个op执行一组码流一致性测试,以测试每个op的一致性。
14.视频译码系统采用各种一致性测试来确保码流可被解码器解码。例如,一致性检查可以包括测试整个码流的一致性,然后测试码流的每个层的一致性,最后检查潜在的可解码输出的一致性。为了实现一致性检查,对应的参数包括在码流中。假设参考解码器(hypothetical reference decoder,hrd)可以读取参数并执行测试。视频可以包括许多层和许多不同的ols。根据请求,编码器发送选定ols的一个或多个层。例如,编码器可以发送ols中当前网络带宽可以支持的一个或多个最佳层。这种方法的一个问题是,测试了大量的层,但实际上没有发送到解码器。然而,支持这种测试的参数仍然可以包括在码流中,这不必要地增加了码流大小。本示例包括仅将码流一致性测试应用于每个ols的机制。这样一来,在测试对应的ols时,整个码流、每个层和可解码输出都会被集体测试。因此,减少了一致性测试的数量,从而降低编码器的处理器和内存资源利用率。此外,减少一致性测试的数量可以减少码流中包括的关联参数的数量。这减小了码流大小,从而降低了编码器和解码器的处理器、内存和/或网络资源利用率。
15.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,所述一组码流一致性测试由在所述处理器上运行的hrd执行。
16.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,所述vps包括num_output_layer_sets_minus1加1,表示所述vps指定的ols的总数。
17.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,还包括所
述处理器通过选择具有opolsidx和最高optid的目标ols,选择每个op作为targetop。
18.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,每个ols是层集合,其中,所述层中的一个或多个层被指定为输出层。
19.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,所述vps包括general_hrd_parameters语法结构,所述general_hrd_parameters语法结构提供应用于所述vps指定的所有ols的hrd参数。
20.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,所述码流中存在所述hrd参数表示解码器能够根据传送机制解码所述码流。
21.在一个实施例中,本发明包括一种视频译码设备,所述视频译码设备包括:处理器、耦合到所述处理器的接收器、耦合到所述处理器的存储器和耦合到所述处理器的发送器,其中,所述处理器、所述接收器、所述存储器和所述发送器用于执行任一上述方面所述的方法。
22.在一个实施例中,本发明包括一种非瞬时性计算机可读介质,所述非瞬时性计算机可读介质包括供视频译码设备使用的计算机程序产品;所述计算机程序产品包括存储在所述非瞬时性计算机可读介质中的计算机可执行指令;当所述计算机可执行指令由处理器执行时,使所述视频译码设备执行根据任一上述方面所述的方法。
23.在一个实施例中,本发明包括一种解码器,所述解码器包括:接收模块,用于接收包括一个或多个ols和指定所述ols的vps的码流,其中,所述码流已经过一组码流一致性测试检查,所述一组码流一致性测试测试所述vps指定的每个ols的每个op的一致性;解码模块,用于解码来自所述ols的图像;转发模块,用于转发所述图像,以便作为解码视频序列的一部分显示。
24.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,所述解码器还用于执行根据任一上述方面所述的方法。
25.在一个实施例中,本发明包括一种编码器,所述编码器包括:编码模块,用于:对包括一个或多个ols的码流进行编码,将指定所述ols的vps编码到所述码流中;hrd模块,用于在所述vps指定的每个ols的每个op执行一组码流一致性测试,以测试每个op的一致性;存储模块,用于存储所述码流,以发送给解码器。
26.可选地,在任一上述方面中,提供了所述方面的另一种实现方式,其中,所述编码器还用于执行根据任一上述方面所述的方法。
27.为了清楚起见,任一上述实施例可以与上述其它任何一个或多个实施例组合以创建在本发明范围内的新实施例。
28.根据以下具体实施方式结合附图和权利要求书能更清楚地理解这些和其它特征。
附图说明
29.为了更全面地理解本发明,现在参考以下结合附图和具体实施方式进行的简要描述,其中,相同的附图标记表示相同的部件。
30.图1为对视频信号进行译码的示例性方法的流程图。
31.图2是用于视频译码的示例性编码和解码(编解码)系统的示意图。
32.图3是示例性视频编码器的示意图。
parameter set,vps)是一种数据单元,包括与整个视频相关的参数。
45.时间可适性码流是编码在多个层中的码流,提供不同的时间分辨率/帧率(例如,每个层经过编码以支持不同的帧率)。子层是时间可适性码流的时间可适性层,其包括具有特定时间标识符值的vcl nal单元和关联的非vcl nal单元。例如,时间子层是包括与指定帧率关联的视频数据的层。子层表示是包括特定子层和较低子层的nal单元的码流的子集。因此,可以组合一个或多个时间子层以实现子层表示,该子层表示可以被解码以产生具有指定帧率的视频序列。输出层集(output layer set,ols)是层集合,其中,一个或多个层被指定为一个或多个输出层。输出层是指定用于输出(例如,输出到显示器)的层。ols索引是唯一标识对应ols的索引。第零个(第0个)ols是只包括最低层(具有最低层标识符的层),因此只包括输出层的ols。时间标识符(identifier,id)是表示数据对应于视频序列中的时间位置的数据元素。子码流提取过程是从码流中移除不属于由目标ols索引和目标最高时间id确定的目标集的nal单元的过程。子码流提取过程会产生输出子码流,该输出子码流包括码流中作为目标集一部分的nal单元。
46.hrd是在编码器上运行的解码器模型,其检查编码过程产生的码流的可变性,以验证是否符合指定约束。码流一致性测试是确定经编码码流是否符合标准(例如通用视频编码(versatile video coding,vvc))的测试。hrd参数是初始化和/或定义hrd的运行条件的语法元素。hrd参数可以包括在hrd参数语法结构中。语法结构是配置成包括多个不同参数的数据对象。语法元素是包括一个或多个相同类型参数的数据对象。因此,语法结构可以包括多个语法元素。序列级hrd参数是应用于整个编码视频序列的hrd参数。最大hrd时间id(hrd_max_tid[i])表示hrd参数包括在第i个ols hrd参数集中的最高子层表示的时间id。通用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参数是在du级别还是在au级别操作的标志。编码图像缓冲区(coded picture buffer,cpb)是hrd中的先进先出缓冲区,包括呈解码顺序的编码图像,以供码流一致性验证期间使用。解码图像缓冲区(decoded picture buffer,dpb)是用于保存解码图像以供参考、输出重新排序和/或输出延迟的缓冲区。
[0047]
补充增强信息(supplemental enhancement information,sei)消息是一种具有指定语义的语法结构,它传送解码过程不需要的信息,以便确定解码图像中样本的值。可伸缩嵌套式sei消息是包括对应于一个或多个ols或一个或多个层的多个sei消息的消息。非伸缩嵌套的sei消息是指不嵌套的消息,因此包括单个sei消息。缓冲周期(buffering period,bp)sei消息是包括用于初始化hrd以管理cpb的hrd参数的sei消息。图像时序(picture timing,pt)sei消息是包括用于管理cpb和/或dpb处au的传送信息的hrd参数的sei消息。解码单元信息(decoding unit information,dui)sei消息是包括用于管理cpb和/或dpb处du的传送信息的hrd参数的sei消息。
[0048]
cpb移除延迟是在移除并输出到dpb之前,对应的当前au可以保留在cpb中的时间段。初始cpb移除延迟是码流、ols和/或层中的每个图像、au和/或du的默认cpb移除延迟。cpb移除偏移是cpb中用于确定cpb中对应au的边界的位置。初始cpb移除偏移是与码流、ols
和/或层中的每个图像、au和/或du关联的默认cpb移除偏移。解码图像缓冲区(decoded picture buffer,dpb)输出延迟信息是对应au在输出之前可以保留在dpb中的时间段。cpb移除延迟信息是与从cpb中移除对应du相关的信息。传送机制指定将视频数据传送到存储器位置(例如cpb和/或dpb)和/或从存储器位置传送的时序。vps层id(vps_layer_id)是表示vps中指示的第i层的层id的语法元素。输出层集的总数减1(num_output_layer_sets_minus1)加1是表示vps指定的ols的总数的语法元素。hrd编码图像缓冲区计数(hrd_cpb_cnt_minus1)是表示替代cpb传送机制的数量的语法元素。子层cpb参数存在标志(sublayer_cpb_params_present_flag)是表示ols hrd参数集是否包括指定的子层表示的hrd参数的语法元素。机制索引(scidx)是标识传送机制的索引。bp cpb计数减1(bp_cpb_cnt_minus1)是一个语法元素,表示初始cpb移除延迟和偏移对的数量,从而表示可用于时间子层的传送机制的数量。nal单元头层标识符(nuh_layer_id)是表示包括nal单元的层的标识符的语法元素。固定图像速率通用标志(fixed_pic_rate_general_flag)语法元素是表示输出顺序中连续图像的hrd输出时间之间的时间距离的语法元素是否受约束。子层hrd参数(sublayer_hrd_parameters)语法结构是包括对应子层的hrd参数的语法结构。通用vcl hrd参数存在标志(general_vcl_hrd_params_present_flag)是表示vcl hrd参数是否在通用hrd参数语法结构中存在的标志。bp最大子层减1(bp_max_sublayers_minus1)语法元素是表示其中在bp sei消息中指示cpb移除延迟和cpb移除偏移的时间子层的最大数量的语法元素。vps最大子层减1(vps_max_sublayers_minus1)语法元素是表示vps指定的层中可能存在的时间子层的最大数量的语法元素。可伸缩嵌套的ols标志是表示伸缩嵌套的sei消息是应用于特定ols还是特定层的标志。可伸缩嵌套的ols的数量减1(num_olss_minus1)是表示应用伸缩嵌套的sei消息的ols的数量的语法元素。嵌套ols索引(nestingolsidx)是表示应用伸缩嵌套的sei消息的ols的ols索引的语法元素。目标ols索引(targetolsidx)是标识待解码的目标ols的ols索引的变量。ols总数减1(totalnumolss-1)是表示vps中指定的ols的总数的语法元素。
[0049]
本文使用以下首字母缩略词:接入单元(access unit,au)、编码树块(coding tree block,ctb)、编码树单元(coding tree unit,ctu)、编码单元(coding unit,cu)、编码层视频序列(coded layer video sequence,clvs)、编码层视频序列开始(coded layer video sequence start,clvss)、编码视频序列(coded video sequence,cvs)、编码视频序列开始(coded video sequence start,cvss)、联合视频专家组(joint video experts team,jvet)、假设参考解码器(hypothetical reference decoder,hrd)、运动约束分块集(motion constrained tile set,mcts)、最大传输单元(maximum transfer unit,mtu)、网络抽象层(network abstraction layer,nal)、输出层集(output layer set,ols)、图像顺序编号(picture order count,poc)、随机接入点(random access point,rap)、原始字节序列载荷(raw byte sequence payload,rbsp)、序列参数集(sequence parameter set,sps)、视频参数集(video parameter set,vps)、通用视频编码(versatile video coding,vvc)。
[0050]
许多视频压缩技术可以用来减小视频文件的大小,同时尽量减少数据丢失。例如,视频压缩技术可以包括执行空间(例如帧内)预测和/或时间(例如帧间)预测以减少或去除视频序列中的数据冗余。对于基于块的视频译码,可以将视频条带(slice)(例如视频图像
或视频图像的一部分)分割成视频块,视频块也可以称为树块、编码树块(coding tree block,ctb)、编码树单元(coding tree unit,ctu)、编码单元(coding unit,cu)和/或编码节点。图像的帧内译码(i)条带中的视频块参照同一个图像内邻块中的参考样本使用空间预测进行译码。图像的经帧间译码的单向预测(p)或双向预测(b)条带中的视频块可以参照同一个图像内邻块中的参考样本使用空间预测进行译码,或者参照其它参考图像内的参考样本使用时间预测进行译码。图像(picture/image)可以称为帧(frame),参考图像可以称为参考帧。空间预测或时间预测会产生表示图像块的预测块。残差数据表示原始图像块与预测块之间的像素差。相应地,帧间译码块根据运动矢量和残差数据进行编码,其中,运动矢量指向组成预测块的参考样本的块,残差数据表示编码块与预测块之间的差值。经帧内译码块是根据帧内译码模式和残差数据进行编码的。为了进一步压缩,残差数据可以从像素域变换到变换域,从而产生残差变换系数,该残差变换系数可以量化。量化变换系数最初可以以二维阵列排列。可以扫描量化变换系数,以产生变换系数的一维矢量。可以应用熵编码以实现进一步压缩。下面详细描述这种视频压缩技术。
[0051]
为了确保经编码视频能够正确解码,根据对应的视频编码标准对视频进行编码和解码。视频编码标准包括国际电信联盟标准化部门(international telecommunication union(itu)standardization sector,itu-t)h.261、国际标准化组织/国际电工委员会(international organization for standardization/international electrotechnical commission,iso/iec)运动图像专家组(motion picture experts group,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)以及三维(three dimensional,3d)avc(3d-avc)等扩展版。hevc包括可适性hevc(scalable hevc,shvc)、多视点hevc(multiview hevc,mv-hevc)、3d hevc(3d-hevc)等扩展版。itu-t和iso/iec的联合视频专家组(joint video experts team,jvet)已着手开发一种称为通用视频编码(versatile video coding,vvc)的视频编码标准。vvc包括在工作草案(working draft,wd)中,该wd包括jvet-o2001-v14。
[0052]
视频译码系统采用各种一致性测试来确保码流可被解码器解码。例如,一致性检查可以包括测试整个码流的一致性,然后测试码流的每个层的一致性,最后检查潜在的可解码输出的一致性。为了实现一致性检查,对应的参数包括在码流中。假设参考解码器(hypothetical reference decoder,hrd)可以读取参数并执行测试。视频可以包括许多层和许多不同的输出层集(output layer set,ols)。根据请求,编码器发送选定ols的一个或多个层。例如,编码器可以发送ols中当前网络带宽可以支持的一个或多个最佳层。这种方法的第一个问题是,测试了大量的层,但实际上没有发送到解码器。然而,支持这种测试的参数仍然可以包括在码流中,这不必要地增加了码流大小。
[0053]
在第一示例中,本文公开了一种仅将码流一致性测试应用于每个ols的机制。这样一来,在测试对应的ols时,整个码流、每个层和可解码输出都会被集体测试。因此,减少了
一致性测试的数量,从而降低编码器的处理器和内存资源利用率。此外,减少一致性测试的数量可以减少码流中包括的关联参数的数量。这减小了码流大小,从而降低了编码器和解码器的处理器、内存和/或网络资源利用率。
[0054]
第二个问题是,在某些视频译码系统中用于hrd一致性测试的hrd参数指示过程在多层上下文中可能变得复杂。例如,可以为每个ols中的每个层指示hrd参数集。根据参数的预期范围,这些hrd参数可以在码流中的不同位置指示。这导致随着添加的层和/或ols越多,方案变得越复杂。此外,不同层和/或ols的hrd参数可能包括冗余信息。
[0055]
在第二示例中,本文公开了一种用于为ols和对应层指示全局hrd参数集的机制。例如,应用于所有ols和ols中包括的所有层的所有序列级hrd参数都在视频参数集(video parameter set,vps)中指示。vps在码流中被指示一次,因此序列级hrd参数被指示一次。此外,序列级hrd参数可以被约束为对于所有ols都相同。这样一来,减少了冗余指示,提高了译码效率。此外,这种方法简化了hrd过程。因此,降低了编码器和解码器的处理器、内存和/或网络指示资源利用率。
[0056]
当视频译码系统对码流执行一致性检查时,可能会出现第三个问题。视频可以被编码成多个层和/或子层,然后可以被组织成ols。根据传送机制检查每个ols的每个层和/或子层的一致性。每个传送机制都与不同的编码图像缓冲区(coded picture buffer,cpb)大小和cpb延迟关联,以考虑不同的传输带宽和系统能力。一些视频译码系统支持每个子层定义任何数量的传送机制。这可能会导致需要大量的指示来支持一致性检查,从而导致对码流的译码效率降低。
[0057]
在第三示例中,本文公开了用于提高对包括多个层的视频的译码效率的机制。具体地,所有层和/或子层都被约束为包括相同数量的cpb传送机制。例如,编码器可以确定用于任一个层的cpb传送机制的最大数量,并将所有层的cpb传送机制的数量设置为最大数量。然后,传送机制的数量可以被指示一次,例如作为vps中hrd参数的一部分。这就避免了需要为每个层/子层指示多个机制。在一些示例中,ols中的所有层/子层也可以共享相同的传送机制索引。这些变化减少了用于指示与一致性检查相关的数据的数据量。这减小了码流大小,从而降低了编码器和解码器的处理器、内存和/或网络资源利用率。
[0058]
当视频被编码为多个层和/或子层(多个层和/或子层然后被组织为ols)时,可能会出现第四个问题。ols可以包括仅包括一个输出层的第零个(第0个)ols。补充增强信息(supplemental enhancement information,sei)消息可以包括在码流中,以向hrd通知用于测试码流的层是否符合标准的层/ols特定参数。具体地,当ols包括在码流中时,使用可伸缩嵌套式sei消息。可伸缩嵌套式sei消息包括应用于一个或多个ols和/或ols的一个或多个层的嵌套的sei消息组。嵌套的sei消息可以分别包括指示符,该指示符用于表示与对应的ols和/或层的关联。嵌套的sei消息用于与多个层一起使用,当应用于包括单个层的第0个ols时,可能包括无关信息。
[0059]
在第四示例中,本文公开了一种用于提高对包括第0个ols的视频的译码效率的机制。对第0个ols采用非伸缩嵌套的sei消息。非伸缩嵌套的sei消息被约束为仅应用于第0个ols,因此仅应用于第0个ols中包括的输出层。这样一来,可以从sei消息中省略无关信息,例如嵌套关系、层指示等。非伸缩嵌套的sei消息可以用作缓冲周期(buffering period,bp)sei消息、图像时序(picture timing,pt)sei消息、解码单元(decoding unit,du)sei消
息或其组合。这些变化减少了用于指示第0个ols的一致性检查相关信息的数据量。这减小了码流大小,从而降低了编码器和解码器的处理器、内存和/或网络资源利用率。
[0060]
当视频被分成多个层和/或子层时,也可能出现第五个问题。编码器可以将这些层编码到码流中。此外,编码器可以使用hrd来执行一致性测试,以检查码流是否符合标准。编码器可以用于将层特定hrd参数包括到码流中,以支持这些一致性测试。在某些视频译码系统中,可以针对每个层编码层特定hrd参数。在某些情况下,每个层的层特定hrd参数都是相同的,这导致有冗余信息,从而不必要地增加了视频编码的大小。
[0061]
在第五示例中,本文公开了用于减少采用多个层的视频的hrd参数冗余的机制。编码器可以编码最高层的hrd参数。编码器还可以编码子层cpb参数存在标志(sublayer_cpb_params_present_flag)。sublayer_cpb_params_present_flag可以设置为0,以表示所有低层都应使用与最高层相同的hrd参数。在这种上下文中,最高层具有最大的层标识符(identifier,id),而低层是层id小于最高层的层id的任何层。这样一来,可以从码流中省略低层的hrd参数。这减小了码流大小,从而降低了编码器和解码器的处理器、内存和/或网络资源利用率。
[0062]
第六个问题涉及使用序列参数集(sequence parameter set,sps)来包括与视频中的每个视频序列相关的语法元素。视频译码系统可以在层和/或子层中对视频进行译码。视频序列在不同的层和/或子层上操作可能不同。因此,不同的层可以参考不同的sps。bp sei消息可以指示要检查是否符合标准的层/子层。一些视频译码系统可以指示bp sei消息应用于sps中指示的层/子层。当不同层参考了不同的sps时,这可能会引起问题,因为这些sps可能包括矛盾的信息,从而导致意外错误。
[0063]
在第六示例中,本文公开了解决当视频序列中使用多个层时与一致性检查有关的错误的机制。具体地,修改bp sei消息,以指示可以检查vps中描述的任何数量的层/子层的一致性。例如,bp sei消息可以包括bp最大子层减1(bp_max_sublayers_minus1)语法元素,该语法元素表示与bp sei消息中的数据关联的层/子层的数量。同时,vps中的vps最大子层减1(vps_max_sublayers_minus1)语法元素表示整个视频中的子层数量。bp_max_sublayers_minus1语法元素可以设置为从零到vps_max_sublayers_minus1语法元素值的任何值。这样一来,可以检查视频中任何数量的层/子层的一致性,同时避免与sps不一致相关的基于层的序列问题。因此,本发明避免了基于层的译码错误,并因此增加了编码器和/或解码器的功能。此外,本示例支持基于层的译码,这可以提高译码效率。因此,本示例可以降低编码器和/或解码器的处理器、内存和/或网络资源利用率。
[0064]
第七个问题涉及ols中包括的层。每个ols包括至少一个输出层,配置为在解码器处显示。编码器上的hrd可以检查每个ols是否符合标准。一致性ols始终可以在一致性解码器上解码和显示。hrd过程可以部分通过sei消息管理。例如,可伸缩嵌套式sei消息可以包括伸缩嵌套的sei消息。每个伸缩嵌套的sei消息可以包括与对应层相关的数据。当执行一致性检查时,hrd可以对目标ols执行码流提取过程。与ols中的层无关的数据通常在一致性测试之前被移除,以便可以单独检查每个ols(例如,在传输之前)。一些视频译码系统在子码流提取过程中不会移除可伸缩嵌套式sei消息,因为这些消息涉及多个层。这可能会产生可伸缩嵌套式sei消息,即使可伸缩嵌套式sei消息与目标ols(正在提取的ols)中的任何层都不相关时,这些可伸缩嵌套式sei消息在子码流提取之后也保留在码流中。这可能会增加
最终码流的大小,而不提供任何额外的功能。
[0065]
在第七示例中,本文公开了减小多层码流大小的机制。在子码流提取期间,可以考虑从码流中移除可伸缩嵌套式sei消息。当可伸缩嵌套式sei消息与一个或多个ols相关时,检查可伸缩嵌套式sei消息中的伸缩嵌套的sei消息。当伸缩嵌套的sei消息与目标ols中的任何层都不相关时,可以从码流中移除整个可伸缩嵌套式sei消息。这可以减小要发送到解码器的码流的大小。因此,本示例提高了译码效率,并降低了编码器和解码器的处理器、内存和/或网络资源利用率。
[0066]
图1为对视频信号进行译码的示例性操作方法100的流程图。具体地,编码器对视频信号进行编码。编码过程采用各种机制来压缩视频信号以减小视频文件大小。文件较小使得压缩视频文件可以发送给用户,同时降低相关的带宽开销。然后,解码器对压缩视频文件进行解码,以重建原始视频信号向终端用户进行显示。解码过程通常是编码过程的逆过程,以使解码器重建的视频信号可以与编码器侧的视频信号保持一致。
[0067]
在步骤101中,将视频信号输入到编码器中。例如,视频信号可以是存储在存储器中的未压缩视频文件。又如,视频文件可以由摄像机等视频捕获设备捕获,并且进行编码以支持视频的直播流传输。视频文件可以包括音频分量和视频分量。视频分量包括一系列图像帧。这些图像帧按顺序观看时,给人以运动的视觉效果。这些帧包括以光表示的像素,在本文中称为亮度分量(或亮度样本),还包括以颜色表示的像素,称为色度分量(或色度样本)。在一些示例中,这些帧还可以包括深度值,以支持三维观看。
[0068]
在步骤103中,将视频分割成块。分割包括将每一帧中的像素细分成方块和/或矩形块,以进行压缩。例如,在高效视频编码(high efficiency video coding,hevc)(还称为h.265和mpeg-h第2部分)中,可以先将帧分成编码树单元(coding tree unit,ctu),这些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)。本文所使用的位元是一个作为变量的二进制值(例如,可能因内容而异的比特值)。熵编码使得编码器丢弃任何明显不适合特定情况的选项,从而留下一组可用选项。然后,为每个可用选项分配一个码字。码字的长度取决于可用选项的数量(例如,一个位元对应两个选项,两个位元对应三到四个选项,以此类推)。然后,编码器对所选选项的码字进行编码。这种方案减小了码字的大小,这是因为码字与预期的一样大,从而唯一地指示从可用选项的小子集中进行选择,而不是唯一地指示从所有可能选项的可能大集合中进行选择。然后,解码器通过以与编码器类似的方式确定这一组可用选项对这一选择进行解码。通过确定这一组可用选项,解码器可以读取码字并确定编码器做出的选择。
[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),用于根据所采用的划分模式,分别将节点分割为不同形状的两个、三个或四个子节点。将分割后的视频信号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和运动补偿组件219。由运动估计组件221执行的运动估计是生成运动矢量的过程,其中,这些运动矢量用于估计视频块的运动。例如,运动矢量可以表示经译码对象相对于预测块的位移。预测块是被发现在像素差方面与待编码块紧密匹配的块。预测块还可以称为参考块。这种像素差可以通过绝对差异和(sum ofabsolute difference,sad)、平方差异和(sum of square difference,ssd)或其它差异度量来确定。hevc采用若干个经译码对象,包括ctu、编码树块(coding tree block,ctb)和cu。例如,可以将ctu分成多个ctb,然后可以将ctb划分为多个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。帧内估计组件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和环内滤波器组件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]
图5是示例性hrd 500的示意图。hrd 500可用于编码器中,例如编解码系统200和/或编码器300。在方法100的步骤109中创建的码流被转发到解码器(例如解码器400)之前,hrd 500可以检查该码流。在一些示例中,当码流被编码时,码流可以连续地通过hrd 500转发。在码流的一部分不符合关联约束的情况下,hrd 500可以向编码器指示这种失败,以使编码器用不同的机制重新编码码流的对应部分。
[0098]
hrd 500包括假设流调度器(hypothetical stream scheduler,hss)541。hss 541是用于执行假设传送机制的组件。假设传送机制用于检查码流或解码器关于输入到hrd 500的码流551的时序和数据流的一致性。例如,hss 541可以接收从编码器输出的码流551,并管理对码流551的一致性测试过程。在一个特定示例中,hss 541可以控制编码图像通过hrd500移动的速率,并验证码流551不包括不一致数据。
[0099]
hss 541可以以预定义的速率将码流551转发到cpb 543。hrd 500可以管理解码单元(decoding unit,du)553中的数据。du 553是au或au的子集以及关联的非视频编码层(video coding layer,vcl)网络抽象层(network abstraction layer,nal)单元。具体地,au包括与输出时间关联的一个或多个图像。例如,au可以包括单层码流中的单个图像,并且可以包括多层码流中每个层的图像。au的每个图像可以划分为条带,每个条带包括在对应的vcl nal单元中。因此,du 553可以包括一个或多个图像、图像的一个或多个条带或其组
合。此外,用于解码au、图像和/或条带的参数可以包括在非vcl nal单元中。因此,du 553包括非vcl nal单元,这些非vcl nal单元包括支持解码du 553中的vcl nal单元所需的数据。cpb 543是hrd 500中的先进先出缓冲区。cpb 543包括du 553,du 553包括呈解码顺序的视频数据。cpb 543存储视频数据,以便在码流一致性验证期间使用。
[0100]
cpb 543将du 553转发到解码处理组件545。解码处理组件545是符合vvc标准的组件。例如,解码处理组件545可以模拟最终用户使用的解码器400。解码处理组件545以示例性最终用户解码器可以实现的速率解码du 553。如果解码处理组件545不能足够快地解码du 553以防止cpb 543的溢出,则码流551不符合标准,应该被重新编码。
[0101]
解码处理组件545解码du 553,从而创建解码的du 555。解码的du 555包括解码图像。解码的du 555被转发到dpb 547。dpb 547可以基本上类似于解码图像缓冲区组件223、323和/或423。为了支持帧间预测,从解码的du555获得的被标记为用作参考图像556的图像被返回到解码处理组件545以支持进一步解码。dpb 547将解码的视频序列输出为一系列图像557。图像557是重建图像,这些重建图像通常镜像由编码器编码到码流551中的图像。
[0102]
图像557被转发到输出裁剪(cropping)组件549。输出裁剪组件549用于将一致性裁剪窗口应用于图像557。这会产生输出裁剪图像559。输出裁剪图像559是完全重建的图像。因此,输出裁剪图像559模拟最终用户在解码码流551时将看到的内容。因此,编码器可以审查输出裁剪图像559以确保编码令人满意。
[0103]
根据码流551中的hrd参数初始化hrd 500。例如,hrd 500可以从vps、sps和/或sei消息中读取hrd参数。然后,hrd 500可以根据这些hrd参数中的信息对码流551执行一致性测试操作。在一个具体示例中,hrd 500可以从hrd参数确定一个或多个cpb传送机制561。传送机制指定将视频数据传送到存储器位置(例如cpb和/或dpb)和/或从存储器位置传送的时序。因此,cpb传送机制561指定了向/从cpb 543传送au、du 553和/或图像的时序。例如,cpb传送机制561可以描述cpb543的码率和缓冲区大小,其中,这些码率和缓冲区大小对应于特定类别的解码器和/或网络条件。因此,cpb传送机制561可以指示在移出之前数据可以在cpb 543中保留的时长。在一致性测试期间,未能在hrd500处保持cpb传送机制561指示对应于cpb传送机制561的解码器将无法解码对应的码流。需要说明的是,hrd 500可以为dpb 547采用类似于cpb传送机制561的dpb传送机制。
[0104]
视频可以被编码到不同的层和/或ols中,供具有不同硬件能力级别的解码器以及在不同的网络条件下使用。选择cpb传送机制561以反映这些问题。相应地,为最佳硬件和网络条件指定高层子码流,因此,高层可以接收一个或多个cpb传送机制561,所述cpb传送机制561使用cpb 543中的大量内存和短延迟,以向dpb 547传输du 553。同样,为有限的解码器硬件能力和/或不良的网络条件指定低层子码流。因此,低层可以接收一个或多个cpb传送机制561,该cpb传送机制561使用cpb 543中的少量内存和较长延迟,以向dpb 547传输du 553。然后,可以根据对应的传送机制561测试ols、层、子层或其组合,以确保所产生的子码流可以在子码流预期的条件下被正确解码。cpb传送机制561分别与机制索引(scidx)563关联。scidx563是标识传送机制的索引。因此,码流551中的hrd参数可以通过scidx 563表示cpb传送机制561,并且包括足够的数据以使hrd 500可以确定cpb传送机制561并将cpb传送机制561与对应的ols、层和/或子层关联。
[0105]
图6是用于层间预测621的示例性多层视频序列600的示意图。例如根据方法100,
多层视频序列600可以由编码器(例如编解码系统200和/或编码器300)编码,并由解码器(例如编解码系统200和/或解码器400)解码。此外,可以通过hrd(例如hrd 500)检查多层视频序列600的标准一致性。包括多层视频序列600以描绘编码视频序列中的层的示例性应用。多层视频序列600是使用多个层(例如层n 631和层n 1 632)的任何视频序列。
[0106]
在一个示例中,多层视频序列600可以采用层间预测621。层间预测621应用于不同层中的图像611、612、613和614与图像615、616、617和618之间。在所示的示例中,图像611、612、613和614是层n 1 632的一部分,图像615、616、617和618是层n 631的一部分。层(例如层n 631和/或层n 1 632)是一组图像,这些图像都与特征的相似值(例如相似的大小、质量、分辨率、信噪比、能力等)关联。层可以正式定义为vcl nal单元和关联的非vcl nal单元的集合。vcl nal单元是编码为包括视频数据(例如图像的编码条带)的nal单元。非vcl nal单元是包括非视频数据的nal单元,所述非视频数据例如支持对视频数据进行解码、执行一致性检查或其它操作的语法和/或参数。
[0107]
在所示的示例中,层n 1 632与大于层n 631的图像大小关联。因此,在本示例中,层n 1 632中的图像611、612、613和614大于层n 631中的图像615、616、617和618(例如,高度和宽度更大,因此样本更多)。但是,这些图像可以通过其它特征划分为层n 1 632和层n 631。虽然只显示了两层:层n 1632和层n 631,但一组图像可以根据关联的特征划分为任何数量的层。层n 1632和层n631也可以用层id表示。层id是与图像关联的数据项,并表示图像是所指示层的一部分。因此,图像611至618中的每个图像可以与对应的层id关联,以表示层n 1 632或层n 631中的哪个层包括对应的图像。例如,层id可以包括nal单元头层标识符(nuh_layer_id),其是表示包括nal单元(例如,包括层中图像的条带和/或参数)的层的标识符的语法元素。与较低质量/码流大小关联的层(例如层n 631)通常被分配低层id,并称为低层。此外,与较高质量/码流大小关联的层(例如层n 1 632)通常被分配高层id,并称为高层。
[0108]
不同层631和632中的图像611至618交替显示。因此,只要图像包括在同一au中,不同层631和632中的图像就可以共享时间id 622。时间id 622是表示数据对应于视频序列中的时间位置的数据元素。au是根据指定的分类规则相互关联,并属于一个特定的输出时间的nal单元的集合。例如,当不同层中的一个或多个图像(例如图像611和图像615)与相同的时间id 622关联时,au可以包括这些图像。在一个具体示例中,如果需要较小的图像,则解码器可以在当前显示时间解码并显示图像615,或者如果需要较大的图像,则解码器可以在当前显示时间解码并显示图像611。因此,高层n 1 632中的图像611至614包括与低层n 631中的对应图像615至618包括基本上相同的图像数据(尽管图像大小不同)。具体地,图像611包括与图像615基本上相同的图像数据,图像612包括与图像616基本上相同的图像数据,以此类推。
[0109]
图像611至618可以参考同一层n 631或n 1 632中的其它图像611至618进行译码。参考同一层中的其它图像对图像进行译码导致帧间预测623。帧间预测623由实线箭头表示。例如,图像613可以通过将层n 1632中的图像611、612和/或614中的一个或两个图像作为参考的帧间预测623来译码,其中,单向帧间预测使用一个图像作为参考,和/或双向帧间预测使用两个图像作为参考。此外,图像617可以通过将层n 531中的图像615、616和/或618中的一个或两个图像作为参考的帧间预测623来译码,其中,单向帧间预测使用一个图像作
为参考,和/或双向帧间预测使用两个图像作为参考。当在执行帧间预测623时,将一个图像作为同一层中另一个图像的参考时,该图像可以称为参考图像。例如,图像612可以是用于根据帧间预测623对图像613进行译码的参考图像。帧间预测623在多层上下文中也可以称为层内预测。因此,帧间预测623是通过参考与当前图像不同的参考图像中的指示样本对当前图像的样本进行译码的机制,其中,参考图像和当前图像位于同一层中。
[0110]
图像611至618也可以通过参考不同层中的其它图像611至618进行译码。这个过程称为层间预测621,由虚线箭头表示。层间预测621是通过参考一个参考图像中的指示样本对当前图像的样本进行译码的机制,其中,当前图像和参考图像在不同的层中,因此具有不同的层id。例如,低层n 631中的图像可以作为对高层n 1 632中的对应图像进行译码的参考图像。在一个具体示例中,图像611可以根据层间预测621通过参考图像615进行译码。在这种情况下,图像615被用作层间参考图像。层间参考图像是用于层间预测621的参考图像。在大多数情况下,对层间预测621进行了约束,使得当前图像(例如,图像611)只能使用同一au中包括的且位于低层的一个或多个层间参考图像,例如,图像615。当多个层(例如,两层以上)可用时,层间预测621可以根据层级比当前图像低的多个层间参考图像对当前图像进行编码/解码。
[0111]
视频编码器可以使用多层视频序列600来通过帧间预测623和层间预测621的许多不同组合和/或排列对图像611至618进行编码。例如,图像615可以根据帧内预测进行译码。然后,通过将图像615作为参考图像,图像616至618可以根据帧间预测623进行译码。此外,通过将图像615作为层间参考图像,图像611可以根据层间预测621进行译码。然后,通过将图像611作为参考图像,图像612至614可以根据帧间预测623进行译码。因此,参考图像可以作为不同译码机制的单层参考图像和层间参考图像。通过根据低层n 631图像对高层n 1 632图像进行译码,高层n 1 632可以避免使用帧内预测,帧内预测的译码效率比帧间预测623和层间预测621的译码效率低得多。因此,译码效率低的帧内预测只限于最小/最低质量的图像,因此只限于对最少量的视频数据进行译码。用作参考图像和/或层间参考图像的图像可以在参考图像列表结构中包括的一个或多个参考图像列表的条目中指示。
[0112]
为了执行这些操作,如层n 631和层n 1 632等层可以包括在一个或多个ols 625和626中。具体地,图像611至618被编码为码流600中的层631至632,然后,图像的每个层631至632被分配给ols 625和626中的一个或多个ols。然后,根据解码器的能力和/或网络条件,可以选择ols 625和/或626,并且可以将对应的层631和/或632发送到解码器。ols 625是层集合,其中,一个或多个层被指定为输出层。输出层是指定用于输出(例如,输出到显示器)的层。例如,可以仅仅包括层n 631以支持层间预测621,并且可能永远不会输出层n 631。在这种情况下,根据层n 631解码层n 1632并输出。在这种情况下,ols 625包括层n 1 632作为输出层。当ols仅包括一个输出层时,ols被称为第0个ols 626。第0个ols 626是只包括最低层(具有最低层标识符的层),因此只包括输出层的ols。在其它情况下,ols 625可以包括不同组合中的许多层。例如,ols 625中的输出层可以根据层间预测621基于一个、两个或多个低层进行译码。此外,ols 625可以包括一个以上输出层。因此,ols 625可以包括一个或多个输出层和重建输出层所需的任何支持层。虽然仅示出了两个ols 625和626,但多层视频序列600可以使用多个不同的ols 625和/或626进行译码,每个ols采用不同的层组合。ols 625和626分别与ols索引629关联,ols索引629是唯一标识对应ols 625和626的
索引。
[0113]
根据层631和632以及ols 625和626的数量,在hrd 500处检查多层视频序列600的标准一致性可能变得复杂。hrd 500可以将多层视频序列600分离成操作点627的序列进行测试。ols 625和/或626由ols索引629标识。操作点627是ols 625/626的时间子集。操作点627可以通过对应的ols 625/626的ols索引629以及最高时间id 622来标识。在一个具体示例中,第一操作点627可以包括第一ols 625中从时间id 0到时间id 200的所有图像,第二操作点627可以包括第一ols 625中从时间id 201到时间id 400的所有图像,以此类推。在这种情况下,第一操作点627通过第一ols 625的ols索引629和时间id 200描述。此外,第二操作点627通过第一ols 625的ols索引629和时间id 400描述。在指定时刻选择用于测试的操作点627称为被测试op(targetop)。因此,targetop是在hrd500处选择用于一致性测试的操作点627。
[0114]
图7是用于时间可适性的示例性多层视频序列700的示意图。例如根据方法100,多层视频序列700可以由编码器(例如编解码系统200和/或编码器300)编码,并由解码器(例如编解码系统200和/或解码器400)解码。此外,可以通过hrd(例如hrd 500)检查多层视频序列700的标准一致性。包括多层视频序列700以描绘编码视频序列中的层的另一示例性应用。例如,多层视频序列700可以用作单独的实施例,或者可以与关于多层视频序列600描述的技术组合。
[0115]
多层视频序列700包括子层710、720和730。子层是时间可适性码流的时间可适性层,其包括具有特定时间标识符值的vcl nal单元(例如图像)和关联的非vcl nal单元(例如支持参数)。例如,层(例如层n 631和/或层n 1 632)可以进一步划分为子层710、720和730,以支持时间可适性。子层710可以称为基本层,子层720和730可以称为增强层。如图所示,子层710以第一帧率(例如每秒30帧)包括图像711。子层710是基本层,因为子层710包括基本/最低帧率。子层720包括与子层710的图像711在时间上偏移的图像721。结果是,可以组合子层710和子层720,这导致帧率集体高于子层710单独的帧率。例如,子层710和720可以具有每秒60帧的组合帧率。因此,子层720增强了子层710的帧率。此外,子层730包括图像731,图像731也与子层720和710的图像721和711在时间上偏移。因此,子层730可以与子层720和710组合,以进一步增强子层710。例如,子层710、720和730可以具有每秒90帧的组合帧率。
[0116]
子层表示740可以通过组合子层710、720和/或730来动态创建。子层表示740是包括特定子层和较低子层的nal单元的码流的子集。在所示的示例中,子层表示740包括图像741,图像741是子层710、720和730的组合图像711、721和731。因此,通过选择包括子层710、720和/或730的期望集合的子层表示740,多层视频序列700可以被时间缩放到期望的帧率。子层表示740可以通过采用包括子层710、720和/或730作为层的ols来创建。在这种情况下,选择子层表示740作为输出层。因此,时间可适性是可以使用多层机制实现的几种机制之一。
[0117]
图8是示例性码流800的示意图。例如,根据方法100,码流800可以由编解码系统200和/或编码器300生成,供编解码系统200和/或解码器400解码。此外,码流800可以包括多层视频序列600和/或700。另外,码流800可以包括各种参数以控制hrd(例如hrd500)的操作。根据这些参数,hrd可以在码流800传输到解码器进行解码之前检查该码流是否符合标
准。
[0118]
码流800包括vps 811、一个或多个sps 813、多个图像参数集(picture parameter set,pps)815、多个条带头817、图像数据820和sei消息819。vps 811包括与整个码流800相关的数据。例如,vps 811可以包括码流800中使用的数据相关的ols、层和/或子层。sps 813包括码流800中包括的编码视频序列中的所有图像共有的序列数据。例如,每个层可以包括一个或多个编码视频序列,每个编码视频序列可以参考sps 813的对应参数。sps 813中的参数可以包括图像大小、位深度、译码工具参数、码率限制等。需要说明的是,虽然每个序列都参考sps 813,但在一些示例中,单个sps 813可以包括多个序列的数据。pps 815包括应用于整个图像的参数。因此,视频序列中的每个图像可以参考pps 815。需要说明的是,虽然每个图像都参考pps 815,但在一些示例中,单个pps 815可以包括多个图像的数据。例如,可以根据类似的参数对多个类似的图像进行译码。在这种情况下,单个pps 815可以包括这些类似图像的数据。pps 815可以表示可用于对应图像中的条带的译码工具、量化参数、偏移等。
[0119]
条带头817包括特定于图像中的每个条带的参数。因此,视频序列中的每个条带可以有一个条带头817。条带头817可以包括条带类型信息、poc、参考图像列表、预测权重、分块入口点、去块效应滤波参数等。需要说明的是,在一些示例中,码流800还可以包括图像头,该图像头是包括应用于单个图像中所有条带的参数的语法结构。因此,图像头和条带头817可以在某些上下文中互换使用。例如,取决于某些参数是否是图像中的所有条带共有的,这些参数可以在条带头817与图像头之间移动。
[0120]
图像数据820包括根据帧间预测和/或帧内预测进行编码的视频数据以及对应的变换量化残差数据。例如,图像数据820可以包括au 821、du 822和/或图像823。au 821是根据指定的分类规则相互关联,并属于一个特定的输出时间的nal单元的集合。du 822是au或au的子集和关联的非vcl nal单元。图像823是创建帧或其场的亮度样本和/或色度样本组成的阵列。在通俗语言中,au 821包括可以在视频序列中指定时刻显示的各种视频数据以及支持语法数据。因此,au 821可以包括单层码流中的单个图像823或来自多个层的多个图像,这些图像都与多层码流中的同一时刻关联。同时,图像823是编码图像,其可以输出用于显示或用于支持用于输出的一个或多个其它图像823的译码。du 822可以包括一个或多个图像823和解码所需的任何支持语法数据。例如,du 822和au 821可以在简单码流中互换使用(例如,当au包括单个图像时)。然而,在更复杂的多层码流中,du 822可以仅包括来自au 821的视频数据的一部分。例如,au 821可以在几个层和/或子层包括图像823,其中,一些图像823与不同的ols关联。在这种情况下,du 822可以仅包括来自指定ols和/或指定层/子层的一个或多个图像823。
[0121]
图像823包括一个或多个条带825。条带825可以定义为图像823的整数个完整分块或整数个连续完整编码树单元(coding tree unit,ctu)行(例如,在一个分块内),其中,分块或ctu行仅包括在单个nal单元829中。因此,条带825也包括在单个nal单元829中。条带825被进一步划分为ctu和/或编码树块(coding tree block,ctb)。ctu是一组预定义大小的样本,可以通过编码树进行分割。ctb是ctu的子集,包括ctu的亮度分量或色度分量。ctu/ctb根据编码树被进一步划分为编码块。然后,编码块可以根据预测机制进行编码/解码。
[0122]
码流800是nal单元829的序列。nal单元829是视频数据和/或支持语法的容器。nal
单元829可以是vcl nal单元或非vcl nal单元。vcl nal单元是编码为包括视频数据(例如编码条带825和关联的条带头817)的nal单元829。非vcl nal单元是包括非视频数据的nal单元829,所述非视频数据例如支持对视频数据进行解码、执行一致性检查或其它操作的语法和/或参数。例如,非vcl nal单元可以包括vps 811、sps 813、pps 815、sei消息819或其它支持语法。
[0123]
sei消息819是一种具有指定语义的语法结构,它传送解码过程不需要的信息,以便确定解码图像中样本的值。例如,sei消息可以包括支持hrd过程的数据或与解码器对码流800进行解码不直接相关的其它支持数据。sei消息819可以包括可伸缩嵌套式sei消息和/或非伸缩嵌套的sei消息。可伸缩嵌套式sei消息是包括对应于一个或多个ols或一个或多个层的多个sei消息的消息。非伸缩嵌套的sei消息是指不嵌套的消息,因此包括单个sei消息。sei消息819可以包括bp sei消息,该bp sei消息包括用于初始化hrd以管理cpb的hrd参数。sei消息819还可以包括pt sei消息,该pt sei消息包括用于管理cpb和/或dpb处au 821的传送信息的hrd参数。sei消息819还可以包括dui sei消息,该dui sei消息包括用于管理cpb和/或dpb处du 822的传送信息的hrd参数。
[0124]
码流800包括整数(i)个hrd参数833集,hrd参数833是初始化和/或定义hrd(例如hrd 500)的运行条件的语法元素。在一些示例中,通用hrd参数(general_hrd_parameters)语法结构可以包括应用于vps 811指定的所有ols的hrd参数833。在一个示例中,编码器可以将视频序列编码成各层。然后,编码器可以将hrd参数833编码到码流800中,以正确地配置hrd,从而执行一致性检查。hrd参数833还可以向解码器指示解码器能够根据传送机制解码码流800。hrd参数833可以包括在vps 811和/或sps 813中。用于配置hrd的附加参数也可以包括在sei消息819中。
[0125]
如上所述,视频流可以包括许多ols和许多层,例如ols 625、层n 631、层n 1 632、子层710、子层720和/或子层730。此外,一些层可以包括在多个ols中。因此,多层视频序列(例如多层视频序列600和/或700)可能变得相当复杂。这可能会导致hrd的hrd检查过程复杂。一些视频译码系统使用hrd来测试包括多层视频序列的整个码流800的一致性。然后,hrd测试码流的每个层/子层的一致性。最后,hrd检查码流的潜在可解码输出(例如子层表示740)的一致性。这种方法是复杂冗余的,并涉及使用大量的hrd参数833。
[0126]
本发明包括用于检查多层码流的简化hrd一致性测试的机制。这种方法减少了码流800中hrd参数833的数量,从而减小了码流800的大小。此外,这种方法简化了hrd过程,从而节省了编码器/hrd的资源。具体地,hrd 500可以用于仅将码流一致性测试应用于码流800的每个ols,并且省略对ols的潜在输出的测试和对整个码流800的测试。然后,每个层可以被解码,输出包括在ols中。因此,测试所有ols导致测试潜在输出(例如子层表示740)的一致性,作为ols一致性检查过程的一部分。此外,可以发送到解码器的码流800的所有部分都包括在ols中。因此,测试每个ols的一致性导致测试整个码流800的一致性。
[0127]
在一个具体的示例中,vps 811可以包括多个ols 831。ols 831的数量表示在编码之后和在任何子码流提取过程之前在整个码流800中使用的ols数量。例如,ols 831的数量可以译码为输出层集的总数减1(num_output_layer_sets_minus1)语法元素。num_output_layer_sets_minus1加1表示vps 811指定的ols总数。minus1表示hrd可以对语法元素中包括的值加1,以获得真值。hrd可以读取ols 831的数量,以确定vps 811中指定的ols。然后,
hrd可以根据ols 831的数量检查每个ols的每个op。在一个具体示例中,hrd可以使用ols 831的数量来顺序选择每个ols作为目标ols并测试。在测试ols时,hrd可以顺序选择当前ols的每个op作为被测试op(targetop)并测试。这可以通过根据op ols索引(opolsidx)和最高op时间标识符值(optid)选择目标ols来实现。因此,码流800包括支持例如关于hrd和/或关于解码器增加逐步解码刷新(gradual decoder refresh,gdr)功能的各种机制。因此,关于码流800描述的机制可以增加编码器和/或解码器的功能。此外,关于码流800描述的机制可以支持提高译码效率和/或支持减少编码器和/或解码器的处理器、内存和/或网络通信资源。
[0128]
现在在下文中详细描述上述信息。分层视频编码也称为可适性视频编码或具有可适性的视频编码。视频译码的可适性可以通过使用多层译码技术来支持。多层码流包括基本层(base layer,bl)和一个或多个增强层(enhancement layer,el)。可适性的示例包括空间可适性、质量/信噪比(signal to noise ratio,snr)可适性、多视点可适性、帧率可适性等。当使用多层译码技术时,图像或其一部分可以不使用参考图像而进行译码(帧内预测),可以通过参考同一层中的参考图像进行译码(帧间预测),和/或可以通过参考一个或多个其它层中的参考图像进行译码(层间预测)。用于当前图像的层间预测的参考图像称为层间参考图像(inter-layer reference picture,ilrp)。图6示出了用于空间可适性的多层译码的示例,其中,不同层中的图像具有不同的分辨率。
[0129]
一些视频编码系列支持从一个或多个档次(profile)实现一个或多个单独档次的可适性,以实现单层译码。可适性视频编码(scalable video coding,svc)是高级视频编码(advanced video coding,avc)的可扩展版,支持空间可适性、时间可适性和质量可适性。对于svc,在el图像中的每个宏块(macroblock,mb)中指示标志,以表示el mb是否使用来自下层的并置块进行预测。基于并置块的预测可以包括纹理、运动矢量和/或译码模式。svc的实现方式可能无法在其设计中直接重用未经修改的avc实现方式。svc el宏块语法和解码过程与avc语法和解码过程不同。
[0130]
可适性hevc(scalable hevc,shvc)是hevc的扩展,支持空间可适性和质量可适性。多视点hevc(multiview hevc,mv-hevc)是hevc的扩展,支持多视点可适性。3d hevc(3d-hevc)是hevc的扩展,支持比mv-hevc更先进、更高效的3d视频译码。时间可适性可以作为单层hevc编解码器的组成部分包括。在hevc的多层扩展中,用于层间预测的解码图像仅来自同一au,并被视为长期参考图像(long-term reference picture,ltrp)。这些图像与当前层中的其它时间参考图像一起被分配一个或多个参考图像列表中的参考索引。层间预测(inter-layer prediction,ilp)是通过将参考索引的值设置为参考一个或多个参考图像列表中的一个或多个层间参考图像而在预测单元(prediction unit,pu)级别实现的。当ilrp的空间分辨率与正在编码或解码的当前图像的空间分辨率不同时,空间可适性对参考图像或其部分进行重采样。参考图像重采样可以在图像级或编码块级实现。
[0131]
vvc还可以支持分层视频编码。vvc码流可以包括多个层。这些层可以相互独立。例如,每个层都可以在不使用层间预测的情况下进行译码。在这种情况下,这些层也称为同播层。在某些情况下,某些层使用ilp进行译码。vps中的标志可以表示这些层是否为同播层,或者某些层是否使用ilp。当某些层使用ilp时,各层之间的层依赖关系也会在vps中指示。与shvc和mv-hevc不同,vvc可能不指定ols。ols包括一组指定层,其中,所述一组层中的一
个或多个层被指定为输出层。输出层是被输出的ols的层。在vvc的某些实现方式中,当层是同播层时,只能选择一个层进行解码和输出。在vvc的某些实现方式中,当任何层都使用ilp时,指定对包括所有层在内的整个码流进行解码。此外,指定层中的某些层为输出层。输出层可以被指示为仅最高层、所有层或最高层加上一组指示的低层。
[0132]
视频编码标准可以指定hrd,以通过指定的hrd一致性测试验证码流的一致性。在shvc和mv-hevc中,采用三组码流一致性测试来检查码流的一致性。码流被称为整个码流,并表示为entirebitstream。第一组码流一致性测试用于测试整个码流和对应的时间子集的一致性。无论是否存在由激活vps指定的包括整个码流中存在的vcl nal单元的所有nuh_layer_id值的层集,都会使用此类测试。因此,即使有一个或多个层不包括在输出集中,也始终检查整个码流的一致性。第二组码流一致性测试用于测试由激活vps指定的层集和关联的时间子集的一致性。对于所有这些测试,仅解码和输出基本层图像(例如,nuh_layer_id等于0的图像)。调用解码过程时,解码器忽略其它图像。第三组码流一致性测试用于测试由激活vps的vps扩展部分指定的ols和基于ols和码流分割部分的关联的时间子集的一致性。码流分割部分包括多层码流的ols的一个或多个层。
[0133]
以上方面存在一定的问题。例如,前两组一致性测试可能应用于未解码和未输出的层。例如,除了最低层之外的层可能不会被解码,也可能不会被输出。在实际应用中,解码器可能只接收待解码的数据。因此,使用前两组一致性测试既使编解码器设计变得复杂,又可能浪费比特来携带用于支持一致性测试的序列级和图像级参数。第三组一致性测试涉及码流分割部分。这些分割部分可能涉及多层码流的ols的一个或多个层。如果一致性测试总是对每个层单独操作,则可能会大大简化hrd。
[0134]
序列级hrd参数的指示可能比较复杂。例如,序列级hrd参数可以在多个地方(例如在sps和vps中)指示。此外,序列级hrd参数指示可能包括冗余。例如,对于整个码流通常可能相同的信息可能在每个ols的每个层重复。此外,一个示例性hrd方案支持为每个层选择不同的传送机制。这些传送机制可以从为每个层的每个操作点指示的机制列表中选择,其中,操作点是ols或ols的时间子集。这种系统是复杂的。此外,示例性hrd方案支持不完整au与缓冲周期sei消息关联。不完整au是没有cvs中存在的所有层的图像的au。但是,这种au上的hrd初始化可能会有问题。例如,对于具有不完整au中不存在的层接入单元的层,hrd可能无法正确初始化。此外,用于推导层码流的解复用过程可能无法充分和有效地移除不应用于目标层的嵌套的sei消息。当码流分割部分仅包括一个层时,就会出现层码流。此外,可以为整个码流指定非伸缩嵌套的缓冲周期、图像时序和解码单元信息sei消息的适用ols。但是,非伸缩嵌套的缓冲周期应改为适用于第0个ols。
[0135]
此外,当sub_layer_cpb_params_present_flag等于零时,某些vvc实现方式可能无法推断hdr参数。这种推断可以实现正确的hrd操作。此外,可能需要bp_max_sub_layers_minus1和pt_max_sub_layers_minus1的值等于sps_max_sub_layers_minus1的值。但是,缓冲周期和图像时序sei消息可以嵌套,可以适用于多个ols和多个ols中每个ols的多个层。在这些上下文中,所涉及的层可以参考多个sps。因此,系统可能难以跟踪哪个sps是对应于每个层的sps。因此,这两个语法元素的值应该根据vps_max_sub_layers_minus1的值进行约束。此外,由于不同的层可能具有不同数量的子层,因此,这两个语法元素的值可能并不总是等于所有缓冲周期和图像时序sei消息中的特定值。
[0136]
此外,以下问题与shvc/mv-hevc和vvc中的hrd设计关联。子码流提取过程可能不会移除包括目标ols不需要的嵌套的sei消息的sei nal单元。
[0137]
一般而言,本发明描述了用于对多层视频码流中输出层集的sei消息进行可伸缩嵌套的方法。这些技术的描述是基于wc。但是,这些技术也应用于基于其它视频编解码规范的分层视频编码。
[0138]
上述问题中的一个或多个问题可以如下解决。具体地,本发明包括用于hrd设计的方法和相关方面,这些方法和相关方面支持与shvc和mv-hevc相比以更简单的hrd操作有效指示hrd参数。下文描述的每个方案都对应于上文描述的问题。例如,本发明可以仅使用一组一致性测试来测试vps指定的ols的一致性,而不是要求三组一致性测试。此外,所公开的hrd机制可以总是针对ols的每个层单独操作,而不是采用基于码流分割部分的设计。此外,对于所有ols的所有层和子层而言是全局的序列级hrd参数可以仅被指示一次,例如在vps中指示。此外,可以为所有ols的所有层和子层指示单一数量的传送机制。也可以对ols中的所有层应用相同的传送机制索引。此外,不完整au可能与缓冲周期sei消息无关。不完整au是不包括cvs中存在的所有层的图像的au。这确保了可以始终针对ols中的所有层正确初始化hrd。此外,还公开了一种用于有效地移除不应用于ols中的目标层的嵌套的sei消息的机制。这支持用于推导层码流的解复用过程。此外,可以向第0个ols指定非伸缩嵌套的缓冲周期、图像时序和解码单元信息sei消息的适用ols。此外,当sub_layer_cpb_params_present_flag等于0时,可以推断hdr参数,这些hdr参数可以启用正确的hrd操作。bp_max_sub_layers_minus1和pt_max_sub_layers_minus1的值可能需要在零到vps_max_sub_layers_minus1的范围内。这样一来,这些参数不需要是所有缓冲周期和图像时序sei消息的特定值。此外,子码流提取过程可能会移除包括不应用于目标ols的嵌套的sei消息的seinal单元。
[0139]
上述机制的示例性实现方式如下。输出层是被输出的输出层集的层。ols是包括一组指定层的层集合,其中,所述一组层中的一个或多个层被指定为输出层。ols层索引是ols中的层到ols中层列表的索引。子码流提取过程是一个指定过程,通过该指定过程,从码流中去除由目标ols索引和目标最高temporalid确定的、码流中不属于目标集合的nal单元,其中,输出子码流包括码流中属于目标集合的nal单元。
[0140]
示例性视频参数集语法如下。
[0141][0142]
示例性序列参数集rbsp语法如下。
[0143]
[0144][0145]
示例性dpb参数语法如下。
[0146][0147]
示例性通用hrd参数语法如下。
[0148]
[0149][0150]
示例性视频参数集rbsp语法如下。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。
[0151]
ols_mode_idc设置为0,表示vps指定的ols的总数等于vps_max_layers_minus1 1,第i个ols包括层索引从0到i(包括端值)的层,并且对于每个ols,仅输出ols中的最高层。ols_mode_idc设置为1,表示vps指定的ols的总数等于vps_max_layers_minus1 1,第i个ols包括层索引从0到i(包括端值)的层,并且对于每个ols,输出ols中的所有层。ols_mode_
idc设置为2,表示vps指定的ols的总数是显式指数的,并且对于每个ols,输出ols中的最高层和显式指数的低层集合。ols_mode_idc的值应在0到2(包括端值)的范围内。ols_mode_idc的值3被保留。当vps_all_independent_layers_flag等于1且each_layer_is_an_ols_flag等于0时,推断ols_mode_idc的值等于2。num_output_layer_sets_minus1加1表示当ols_mode_idc等于2时,vps指定的ols的总数。
[0152]
变量totalnumolss表示vps指定的ols的总数,如下推导。
[0153][0154]
layer_included_flag[i][j]表示当ols_mode_id等于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中。
[0155]
变量numlayersinols[i]表示第i个ols中的层数,变量layeridinols[i][j]表示第i个ols中第j层的nuh_layer_id值,这两个变量如下推导。
[0156][0157]
变量olslayeridx[i][j]表示nuh_layer_id等于layeridinols[i][j]的层的ols层索引,如下推导。
[0158]
for(i=0,i<totalnumolss;i )
[0159]
for(j=0;j<numlayersinols[i];j )
[0160]
olslayeidx[i][layeridinols[i][j]]=j
[0161]
每个ols中的最低层应为独立层。换句话说,对于在0到totalnumolss-1(包括端值)范围内的每个i,vps_independent_layer_flag[generallayeridx[layeridinols[i][0]]]的值应等于1。每个层应包括在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。ols中的任何层应是ols的输出层或ols的输出层的(直接或间接)参考层。
[0162]
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。变量outputlayerflag[i][j]如下推导,该变量的值1表示输出第i个ols中的第j层,值0表示不输出第i个ols中的第j层。
[0163][0164]
第0个ols仅包括最低层(nuh_layer_id等于vps_layer_id[0]的层),对于第0个ols,输出唯一包括的层。
[0165]
vps_extension_flag设置为0,表示vps rbsp语法结构中不存在vps_extension_data_flag语法元素。vps_extension_flag设置为1,表示vps rbsp语法结构中存在vps_extension_data_flag语法元素。vps_extension_data_flag可以有任何值。vps_extension_data_flag的存在和值不会影响解码器与指定档次的一致性。解码器应忽略所有vps_extension_data_flag语法元素。
[0166]
示例性dpb参数语义如下。dpb_parameters()语法结构提供dpb大小信息,以及可选的最大图像重排序数和最大时延(maximum picture reorder number and maximum latency,mrml)信息。每个sps都包括一个或dpb_parameters()语法结构。sps中的第一dpb_parameters()语法结构包括dpb大小信息和mrml信息。如果存在,sps中的第二dpb_parameters()语法结构仅包括dpb大小信息。sps中第一dpb_parameters()语法结构中的mrml信息应用于参考sps的层,无论该参考sps的层是否是ols的输出层。当参考sps的层是
ols的输出层时,sps中第一dpb_parameters()语法结构中的dpb大小信息应用于该参考sps的层。当参考sps的层是ols的非输出层时,sps中的第二dpb_parameters()语法结构(当存在时)中包括的dpb大小信息应用于该参考sps的层。当sps只包括一个dpb_parameters()语法结构时,推断作为非输出层的层的dpb大小信息与作为输出层的层的dpb大小信息相同。
[0167]
示例性通用hrd参数语义如下。general_hrd_parameters()语法结构提供了hrd操作中使用的hrd参数。sub_layer_cpb_params_present_flag设置为1,表示第i个layer_level_hrd_parameters()语法结构包括temporalid在0到hrd_max_temporal_id[i](包括端值)范围内的子层表示的hrd参数。sub_layer_cpb_params_present_flag设置为0,表示第i个layer_level_hrd_parameters()语法结构包括temporalid仅等于hrd_max_temporal_id[i]的子层表示的hrd参数。当vps_max_sub_layers_minus1等于0时,推断sub_layer_cpb_params_present_flag的值等于0。当sub_layer_cpb_params_present_flag等于0时,推断temporalid在0到hrd_max_temporal_id[i]-1(包括端值)范围内的子层表示的hrd参数与temporalid等于hrd_max_temporal_id[i]的子层表示的hrd参数相同。这些参数包括从fixed_pic_rate_general_flag[i]语法元素开始,直到紧随layer_levelhrd_parameters语法结构中的条件if(general_vcl_hrd_params_presentflag)的sub_layer_hrd_parameters(i)语法结构的hrd参数。num_layer_hrd_params_minus1加1表示general_hrd_parameters()语法结构中存在的layer_level_hrd_parameters()语法结构的数量。num_layer_hrd_params_minus1的值应在0到63(包括端值)的范围内。hrd_cpb_cnt_minus1加1表示cvs的码流中替代cpb规格的数量。hrd_cpb_cnt_minus1的值应在0到31(包括端值)的范围内。hrd_max_temporal_id[i]表示hrd参数包括在第i个layer_level_hrd_parameters()语法结构中的最高子层表示的temporalid。hrd_max_temporal_id[i]的值应在0到vps_max_sub_layers_minus1(包括端值)的范围内。当vps_max_sub layers_minus1等于0时,推断hrd_max_temporal_id[i]的值等于0。layer_level_hrd_idx[i][j]表示应用于第i个ols中第j层的layer_level_hrd_parameters()语法结构的索引。layer_level_hrd_idx[[i][j]的值应在0到num_layer_hrd_params_minus1(包括端值)的范围内。如果layer_level_hrd_idx[0][0]不存在,则推断layer_level_hrd_idx[0][0]的值等于0。
[0168]
示例性子码流提取过程如下。此过程的输入是码流inbitstream、目标ols索引targetolsidx以及目标最高temporalid值tidtarget。此过程的输出是子码流outbitstream。输入码流的码流一致性要求是,任何输出子码流应是一致性码流,其中,所述输出子码流是本条款中指定的过程的输出并且满足以下条件,其中,等于vps指定的ols列表的索引的码流targetolsidx、等于0到6(包括端值)范围内的任何值的tidtarget作为输入。输出子码流应包括至少一个nuh_layer_id等于layeridinols[targetolsidx]中的每个nuh_layer_id值的vcl nal单元。输出子码流应包括至少一个temporalid等于tidtarget的vcl nal单元。一致性码流包括一个或多个temporalid等于0的编码条带nal单元,但不必包括nuh_layer_id等于0的编码条带nal单元。
[0169]
输出子码流outbitstream如下推导。码流outbitstream设置为与码流inbitstream相同。从outbitstream中移除temporalid大于tidtarget的所有nal单元。从outbitstream中移除nuh_layer_id不包括在列表layeridinols[targetolsidx]中的所有
nal单元。从outbitstream中移除包括可伸缩嵌套式sei消息的所有sei nal单元,该可伸缩嵌套式sei消息具有等于1的nesting_ols_flag,并且i的值不在0到nesting_num_olss_minus1(包括端值)的范围内,使得nestingolsidx[i]等于targetolsidx。当targetolsidx大于0时,从outbitstream中移除包括payloadtype等于0(缓冲周期)、1(图像时序)或130(解码单元信息)的非伸缩嵌套的sei消息的所有sei nal单元。
[0170]
示例性hrd一般方面如下。本节指定hrd及其检查码流和解码器一致性的用途。采用一组码流一致性测试来检查码流的一致性,该码流称为整个码流,表示为entirebitstream。这一组码流一致性测试用于测试vps指定的每个ols和每个ols的时间子集的一致性。对于每个测试,以下顺序步骤按列出的顺序应用。
[0171]
通过选择具有ols索引opolsidx和最高temporalid值optid的目标ols来选择被测试的操作点,表示为targetop。opolsidx的值在0到totalnumolss-1(包括端值)的范围内。optid的值在0到vps_max_sub_layers_minus1(包括端值)的范围内。opolsidx和optid的值使得,通过调用子码流提取过程输出的子码流bitstreamtodecode满足以下条件,其中,entirebitstream、opolsidx和optid作为输入。bitstreamtodecode中有至少一个nuh_layer_id等于layeridinols[opolsidx]中的每个nuh_layer_id值的vclnal单元。bitstreamtodecode中有至少一个temporalid等于optid的vclnal单元。
[0172]
targetolsidx和htid的值分别设置为等于targetop的opolsidx和optid。选择scidx的值。所选择的scidx应在0到hrd_cpb_cnt_minus1(包括端值)的范围内。bitstreamtodecode中与适用于targetolsidx的缓冲周期sei消息(存在于targetlayerbitstream中或通过本规范中未指定的外部机制可用)关联的接入单元被选择作为hrd初始化点,并称为目标ols中的每个层的接入单元0。
[0173]
后续步骤应用于目标ols中具有ols层索引targetolslayeridx的每个层。如果目标ols中只有一个层,则被测试的层码流targetlayerbitstream设置为与bitstreamtodecode相同。否则,targetlayerbitstream通过调用用于推导层码流的解复用过程来推导,其中,bitstreamtodecode、targetolsidx和targetolslayeridx作为输入,输出被分配给targetlayerbitstream。
[0174]
适用于targetlayerbitstream的layer_level_hrd_parameters()语法结构和sub_layer_hrd_parameters()语法结构如下选择。选择vps中的layer_level_hrd_idx[targetolsidx]第[targetolslayeridx]个layer_level_hrd_parameters()语法结构(或通过用户输入等外部机制提供)。在所选择的layer_level_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单元流形成字节流的所有leading_zero_8bits、zero_byte、start_code_prefix_one_3bytes和trailing_zero_8bits语法元素(如果存在)从targetlayerbitstream中丢弃,剩余的码流
被分配给targetlayerbitstream。
[0175]
当decoding_unit_hrd_params_present_flag等于1时,调度cpb在接入单元级别(在这种情况下,变量decodingunithrdflag设置为0)或解码单元级别(在这种情况下,变量decodingunithrdflag设置为1)操作。否则,decodingunithrdflag设置为0,调度cpb在接入单元级别操作。对于targetlayerbitstream中从接入单元0开始的每个接入单元,选择与接入单元关联并应用于targetolsidx和targetolslayeridx的缓冲周期sei消息(存在于targetlayerbitstream中或通过外部机制可用),选择与接入单元关联并应用于targetolsidx和targetolslayeridx的图像时序sei消息(存在于targetlayerbitstream中或通过外部机制可用),当decodingunithrdflag等于1且decoding_unit_cpb_params_in_pic_timing_sei_flag等于0时,选择与接入单元中的解码单元关联并应用于targetolsidx和targetolslayeridx的解码单元信息sei消息(存在于targetlayerbitstream中或通过外部机制可用)。
[0176]
每个一致性测试包括上述每个步骤中的一个选项的组合。当一个步骤有一个以上选项时,对于任何特定的一致性测试,仅选择一个选项。所有步骤的所有可能组合构成了整个一致性测试集。对于每个被测试的操作点,待执行的码流一致性测试的数量等于n0*n1*n2*n3,其中,n0、n1、n2和n3的值如下指定。n1等于hrd_cpb_cnt_minus1 1。n1是bitstreamtodecode中与缓冲周期sei消息关联的接入单元的数量。n2如下推导。如果bitstreamtodecode是i类码流,则n0等于1。否则(bitstreamtodecode是ii类码流),则n0等于2。n3如下推导。如果decoding_unit_hrd_params_present_flag等于0,则n3等于1。否则,n3等于2。
[0177]
hrd包括码流解复用器(可选地存在)、用于每个层的编码图像缓冲区(coded picture buffer,cpb)、用于每个层的瞬时解码过程、包括用于每个层的子dpb的解码图像缓冲区(decoded picture buffer,dpb)以及输出裁剪。
[0178]
在一个示例中,hrd如下操作。hrd在解码单元0处初始化,每个cpb和dpb的每个子dpb设置为空。每个子dpb的子dpb充满度(fullness)设置为0。初始化后,hrd不会被后续的缓冲周期sei消息再次初始化。与根据指定的到达机制流入每个cpb的解码单元关联的数据由hss传送。与每个解码单元关联的数据在解码单元的cpb移除时间通过瞬时解码过程瞬时移除和解码。每个解码图像都置于dpb中。当解码图像不再需要用于帧间预测参考,也不再需要用于输出时,从dpb中移除该解码图像。
[0179]
在一个示例中,用于推导层码流的解复用过程如下。该过程的输入是码流inbitstream、目标ols索引targetolsidx和目标ols层索引targetolslayeridx。此过程的输出是层码流outbitstream。输出层码流outbitstream如下推导。码流outbitstream设置为与码流inbitstream相同。从outbitstream中移除nuh_layer_id不等于layeridinols[targetolsidx][targetolslayeridx]的所有nal单元。从outbitstream中移除包括可伸缩嵌套式sei消息的所有sei nal单元,该可伸缩嵌套式sei消息具有等于1的nesting_ols_flag,并且i和j的值分别不在0到nesting_num_olss_minus1(包括端值)的范围内和0到nesting_num_ols_layers_minus1[i](包括端值)的范围内,使得nestingolslayeridx[i][j]等于targetolslayeridx。从outbitstream中移除包括可伸缩嵌套式sei消息的所有sei nal单元,该可伸缩嵌套式sei消息具有等于1的nesting_ols_flag,并且i和j的值分别在0
到nesting_num_olss_minus1(包括端值)的范围内和0到nesting_num_ols_layers_minus1[i](包括端值)的范围内,使得nestingolslayeridx[i][j]小于targetolslayeridx。从outbitstream中移除包括可伸缩嵌套式sei消息的所有sei nal单元,该可伸缩嵌套式sei消息具有等于0的nesting_ols_flag,并且i的值不在0到nestingnumlayers-1(包括端值)的范围内,使得nestinglayerid[i]等于layeridinols[targetolsidx][targetolslayeridx]。从outbitstream中移除包括可伸缩嵌套式sei消息的所有sei nal单元,该可伸缩嵌套式sei消息具有等于0的nesting_ols_flag,并且i的至少一个值在0到nestingnumlayers-1(包括端值)的范围内,使得nestinglayerid[i]小于layeridinols[targetolsidx][targetolslayeridx]。
[0180]
示例性缓冲周期sei消息语法如下。
[0181][0182]
示例性可伸缩嵌套式sei消息语法如下。
[0183]
[0184][0185]
示例性通用sei载荷语义如下。以下应用于非伸缩嵌套的sei消息的适用层(在ols上下文中或通常情况下)。对于非伸缩嵌套的sei消息,当payloadtype等于0(缓冲周期)、1(图像时序)或130(解码单元信息)时,非伸缩嵌套的sei消息仅应用于第0个ols上下文中的最低层。对于非伸缩嵌套的sei消息,当payloadtype等于vclassociatedseilist中的任何值时,非伸缩嵌套的sei消息仅应用于vcl nal单元的nuh_layer_id等于包括sei消息的sei nal单元的nuh_layer_id的层。
[0186]
示例性缓冲周期sei消息语义如下。缓冲周期sei消息提供初始cpb移除延迟和初始cpb移除延迟偏移信息,用于按解码顺序在关联的接入单元的位置初始化hrd。当缓冲周期sei消息存在时,当图像具有等于0的temporalid且不是rasl或可解码随机接入前置(random access decodable leading,radl)图像时,图像被称为notdiscardablepic图像。当当前图像不是码流中解码顺序中的第一个图像时,设prevnondiscardablepic为解码顺序中的前一个图像,temporalid等于0,不是rasl或radl图像。
[0187]
缓冲周期sei消息的存在如下指定。如果nalhrdbppresentflag等于1或vclhrdbppresentflag等于1,则以下应用于cvs中的每个接入单元。如果接入单元是irap或gdr接入单元,则适用于操作点的缓冲周期sei消息应与接入单元关联。否则,如果接入单元包括notdiscardablepic,则适用于操作点的缓冲周期sei消息可以与接入单元关联,也可以不与接入单元关联。否则,接入单元不应与应用于操作点的缓冲周期sei消息关联。否则(nalhrdbppresentflag和vclhrdbppresentflag都等于0),cvs中的任何接入单元都不应与缓冲周期sei消息关联。对于某些应用,可能希望缓冲周期sei消息的频繁存在(例如,对于irap图像或非irap图像的随机接入,或对于码流拼接(splicing))。当接入单元中的图像与缓冲周期sei消息关联时,接入单元应在cvs中存在的每个层中具有图像,并且接入单元中的每个图像应具有缓冲周期sei消息。
[0188]
bp_max_sub_layers_minus1加1表示缓冲周期sei消息中指示cpb移除延迟和cbp移除偏移的最大时间子层数。bp_max_sub_layers_minus1的值应在0到vps_max_sub_layers_minus1(包括端值)的范围内。bp_cpb_cnt_minus1加1表示当bp_nal_hrd_params_present_flag等于1时,第i个时间子层的语法元素对nal_initial_cpb_removal_delay[i][j]和nal_initial_cpb_removal_offset[i][j]的数量,以及当bp_vcl_hrd_params_present_flag等于1时,第i个时间子层的语法元素对vcl_initial_cpb_removal_delay[i][j]和vcl_initial_cpb_removal_offset[i][j]的数量。bp_cpb_cnt_minus1的值应在0到31(包括端值)的范围内。bp_cpb_cnt_minus1的值应等于hrd_cpb_cnt_minus1的值。
[0189]
示例性图像时序sei消息语义如下。图像时序sei消息为与sei消息关联的接入单元提供cpb移除延迟和dpb输出延迟信息。如果适用于当前接入单元的缓冲周期sei消息的bp_nal_hrd_params_present_flag或bp_vcl_hrd_params_present_flag等于1,则变量cpbdpbdelayspresentflag设置为1。否则,cpbdpbdelayspresentflag设置为0。图像时序sei消息的存在如下指定。如果cpbdpbdelayspresentflag等于1,则图像时序sei消息应与当前接入单元关联。否则(cpbdpbdelayspresentflag等于0),不应存在与当前接入单元关联的图像时序sei消息。图像时序sei消息语法中的temporalid是包括图像时序sei消息的sei nal单元的temporalid。pt_max_sub_layers_minus1加1表示图像时序sei消息中包括cpb移除延迟信息的最高子层表示的temporalid。pt_max_sub_layers_minus1的值应在0到vps_max_sub_layers_minus1(包括端值)的范围内。
[0190]
示例性可伸缩嵌套式sei消息语义如下。可伸缩嵌套式sei消息提供了一种机制,将sei消息与特定ols上下文中的特定层或与不在ols上下文中的特定层关联。可伸缩嵌套式sei消息包括一个或多个sei消息。可伸缩嵌套式sei消息中包括的sei消息也称为伸缩嵌套的sei消息。码流一致性的要求是,以下限制应用于在可伸缩嵌套式sei消息中包括sei消息。payloadtype等于132(解码图像哈希(hash))或133(可伸缩嵌套)的sei消息不应包括在可伸缩嵌套式sei消息中。当可伸缩嵌套式sei消息包括缓冲周期、图像时序或解码单元信息sei消息时,可伸缩嵌套式sei消息不应包括任何其它payloadtype不等于0(缓冲周期)、1(图像时序)或130(解码单元信息)的sei消息。
[0191]
码流一致性的要求是,以下限制应用于包括可伸缩嵌套式sei消息的sei nal单元的nal_unit_type的值。当可伸缩嵌套式sei消息包括payloadtype等于0(缓冲周期)、1(图像时序)、130(解码单元信息)、145(相关rap指示)或168(帧字段信息)的sei消息时,包括可伸缩嵌套式sei消息的sei nal单元应具有等于prefix_sei_nut的nal_unit_type。当可伸缩嵌套式sei消息包括payloadtype等于132(解码图像哈希)的sei消息时,包括可伸缩嵌套式sei消息的sei nal单元应具有等于suffix_sei_nut的nal_unit_type。
[0192]
nesting_ols_flag设置为1,表示伸缩嵌套的sei消息应用于特定ols上下文中的特定层。nesting_ols_flag设置为0,表示伸缩嵌套的sei消息通常应用于特定层(而不是在ols的上下文中)。码流一致性的要求是,以下限制应用于nesting_ols_flag的值。当可伸缩嵌套式sei消息包括payloadtype等于0(缓冲周期)、1(图像时序)或130(解码单元信息)的sei消息时,nesting_ols_flag的值应等于1。当可伸缩嵌套式sei消息包括payloadtype等于vclassociatedseilist中的值的sei消息时,nesting_ols_flag的值应等于0。nesting_num_olss_minus1加1表示应用伸缩嵌套的sei消息的ols数量。nesting_num_olss_minus1的值应在0到totalnumolss-1(包括端值)的范围内。nesting_ols_idx_delta_minus1[i]用于推导变量nestingolsidx[i],该变量表示当nesting_ols_flag等于1时,应用伸缩嵌套的sei消息的第i个ols的ols索引。nesting_ols_idx_delta_minus1[i]的值应在0到totalnumolss-2(包括端值)的范围内。变量nestingolsidx[i]如下推导:
[0193][0194]
[0195]
nesting_num_ols_layers_minus1[i]加1表示在第nestingolsidx[i]个ols上下文中应用伸缩嵌套的sei消息的层数。nesting_num_ols_layers_minus1[i]的值应在0到numlayersinols[nestingolsidx[i]]-1(包括端值)的范围内。nesting_ols_layer_idx_delta_minus1[i][j]用于推导变量nestingolslayeridx[i][j],该变量表示当nesting_ols_flag等于1时,在第nestingolsidx[i]个ols上下文中,应用伸缩嵌套的sei消息的第j层的ols层索引。nesting_ols_layer_idx_delta_minus1[i]的值应在0到numlayersinols[nestingolsidx[i]]-2(包括端值)的范围内。变量nestingolslayeridx[i][j]如下推导:
[0196][0197]
layeridinols[nestingolsidx[i]][nestingolslayeridx[i][0]](i在0到nesting_num_olss_minus1(包括端值)的范围内)的所有值中的最小值应等于当前sei nal单元(包括可伸缩嵌套式sei消息的sei nal单元)的nuh_layer_id。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的所有层。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。nesting_layer_id[i]表示当nesting_all_layers_flag等于0时,通常应用伸缩嵌套的sei消息的第i层的nuh_layer_id值。nesting_layer_id[i]的值应大于nuh_layer_id,其中,nuh_layer_id是当前sei nal单元的nuh_layer_id。当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。
[0198][0199]
nesting_num_seis_minus1加1表示伸缩嵌套的sei消息的数量。nesting_num_
seis_minus1的值应在0到63(包括端值)的范围内。nesting_zero_bit应等于0。
[0200]
图9是示例性视频译码设备900的示意图。视频译码设备900适合于实现本文描述的公开示例/实施例。视频译码设备900包括下行端口920、上行端口950,和/或收发单元(tx/rx)910,其中,所述收发单元包括用于通过网络在上游和/或下游进行数据通信的发送器和/或接收器。视频译码设备900还包括处理器930,处理器930包括用于处理数据的逻辑单元和/或中央处理器(central processing unit,cpu)以及用于存储数据的存储器932。视频译码设备900还可包括电组件、光电(optical-to-electrical,oe)组件、电光(electrical-to-optical,eo)组件、和/或耦合到上行端口950和/或下行端口920的无线通信组件,用于通过电、光或无线通信网络发送数据。视频译码设备900还可以包括输入和/或输出(input/output,i/o)设备960,用于与用户进行数据通信。i/o设备960可以包括输出设备,例如显示视频数据的显示器、输出音频数据的扬声器等。i/o设备960还可以包括键盘、鼠标、轨迹球等输入设备和/或与此类输出设备进行交互的对应接口。
[0201]
处理器930通过硬件和软件实现。处理器930可以实现为一个或多个cpu芯片、核(例如,多核处理器)、现场可编程门阵列(field-programmable gate array,fpga)、专用集成电路(application-specific integrated circuit,asic)和数字信号处理器(digital signal processor,dsp)。处理器930与下行端口920、tx/rx 910、上行端口950和存储器932通信。处理器930包括译码模块914。译码模块914实现本文描述的公开实施例,例如方法100、方法1000和/或方法1100,它们可以采用多层视频序列600、多层视频序列700和/或码流800。译码模块914还可以实现本文描述的任何其它方法/机制。此外,译码模块914可以实现编解码系统200、编码器300、解码器400和/或hrd 500。例如,译码模块914可以用于实现hrd。此外,译码模块914可以用于将参数编码到码流中,以支持hrd一致性检查过程。因此,译码模块914可以用于执行解决上述一个或多个问题的机制。因此,译码模块914使得视频译码设备900在对视频数据进行译码时提供其它功能和/或提高译码效率。因此,译码模块914改进了视频译码设备900的功能,并解决了视频译码领域特有的问题。此外,译码模块914可以将视频译码设备900变换到不同的状态。或者,译码模块914可以实现为存储在存储器932中并由处理器930执行的指令(例如存储在非瞬时性介质中的计算机程序产品)。
[0202]
存储器932包括一个或多个存储器类型,如磁盘、磁带机、固态驱动器、只读存储器(read only memory,rom)、随机存取存储器(random access memory,ram)、闪存、三元内容寻址存储器(ternary content-addressable memory,tcam)、静态随机存取存储器(static random-access memory,sram)等。存储器932可以用作溢出数据存储设备,以在选择程序用于执行时存储此类程序,并存储程序执行期间读取的指令和数据。
[0203]
图10是对视频序列进行编码以支持执行ols的码流一致性测试的示例性方法1000的流程图。编码器(例如编解码系统200、编码器300和/或视频译码设备900)在执行方法100时可以使用方法1000。此外,方法1000可以在hrd 500上操作,因此可以对多层视频序列600、多层视频序列700和/或码流800执行一致性测试。
[0204]
方法1000可以开始于:编码器接收视频序列,并根据用户输入等确定将所述视频序列编码到多层码流中。在步骤1001中,编码器对码流进行编码。码流包括一个或多个ols。每个ols是层集合,其中,一个或多个层被指定为输出层。
[0205]
在步骤1003中,编码器将vps编码到码流中。vps被编码,所述vps包括指定ols的数
据。具体地,vps可以包括描述在步骤1001中作为编码码流的一部分生成的ols的数据。例如,vps可以包括输出层集的总数减1(num_output_layer_sets_minus1)加1,表示vps指定的ols的总数。然后,编码器可以将码流转发到hrd。例如,编码器可以在第一处理器上操作,hrd可以在第二处理器上操作,例如在同一计算机机箱上或在同一网络中。或者,编码器和hrd可以在同一处理器或一组处理器上,例如通过多线程机制操作。这支持在一个或多个处理器上运行的hrd执行一组码流一致性测试。为了支持这些hrd测试,编码器可以在步骤1003中将一组hrd参数编码到vps中。例如,vps可以被编码为包括通用hrd参数(general_hrd_parameters)语法结构,该语法结构提供/包括应用于vps指定的所有ols的hrd参数。hrd参数可用于配置hrd对每个ols执行性能测试。例如,hrd参数可以指示hrd在执行一致性测试时应该使用的各种传送机制。因此,码流中存在hrd参数表示解码器能够根据传送机制解码码流。
[0206]
在步骤1005中,hrd顺序选择每个ols的每个操作点(operation point,op)作为targetop。这可以通过选择具有opolsidx和最高optid的目标ols来完成,例如,其中,optid表示与层/子层关联的时间帧率。
[0207]
在步骤1007中,hrd在vps指定的每个ols的每个op(例如,如在步骤1005中选择的)上执行一组码流一致性测试。这支持hrd测试每个op的一致性。因此,hrd测试每个ols是否符合标准。但是,hrd可以省略对经编码码流的全局一致性测试,或对可以从ols输出的表示的一致性测试。作为ols一致性测试过程的一部分,对码流和输出进行一致性测试。因此,可以避免冗余的一致性测试。此外,较少的hrd参数可以支持较少的一致性测试。因此,仅对ols应用一致性测试减少了vps中hrd参数的数量,并因此减少了在步骤1001和步骤1003中编码的码流的大小。需要说明的是,hrd可以与编码器在同一处理器上操作。在另一个示例中,hrd可以与编码器在同一机箱中的处理器上操作。在另一个示例中,hrd可以与编码器在同一网络中的处理器上操作。
[0208]
在步骤1009中,编码器将码流存储在存储器中,以发送给解码器。
[0209]
图11是例如通过在编码器上运行的hrd(例如hrd 500)解码经过ols的码流一致性测试的视频序列的示例性方法1100的流程图。解码器(例如编解码系统200、解码器400和/或视频译码设备900)在执行方法100时可以使用方法1100。此外,方法1100可以对码流(例如码流800)操作,该码流包括多层视频序列600和/或多层视频序列700。
[0210]
方法1100可以开始于:解码器开始接收表示多层视频序列的编码数据的码流(例如作为方法1000的结果)。在步骤1101中,解码器接收包括一个或多个ols的码流。每个ols是层集合,其中,一个或多个层被指定为输出层。码流还可以包括指定ols的vps。码流中的vps可以包括num_output_layer_sets_minus1加1,表示vps指定的ols的总数。此外,vps可以包括general_hrd_parameters语法结构,该语法结构提供/包括应用于vps指定的所有ols的hrd参数。码流中存在hrd参数表示解码器能够根据传送机制(例如,如hrd参数中指定的)解码码流。接收到的码流已通过一组码流一致性测试检查,以测试vps指定的每个ols的每个op的一致性。具体地,这一组码流一致性测试由在编码器上运行的hrd执行。例如,根据具有opolsidx和最高optid的目标ols,选择每个op作为targetop。
[0211]
在步骤1103中,解码器可以解码来自ols的图像,例如作为子层表示的一部分。然后,解码器可以在步骤1105中转发图像以作为解码视频序列的一部分显示。
[0212]
图12是用于对视频序列进行译码以支持执行ols的码流一致性测试的示例性系统1200的示意图。系统1200可以通过编码器和解码器(例如编解码系统200、编码器300、解码器400和/或视频译码设备900)实现。此外,系统1200可以使用hrd 500对多层视频序列600、多层视频序列700和/或码流800执行一致性测试。此外,系统1200可以在实现方法100、方法1000和/或方法1100时使用。
[0213]
系统1200包括视频编码器1202。视频编码器1202包括编码模块1203,用于对包括一个或多个ols的码流进行编码。编码模块1203还用于将指定ols的vps编码到码流中。视频编码器1202还包括hrd模块1205,用于在vps指定的每个ols的每个op执行一组码流一致性测试,以测试每个op的一致性。视频编码器1202还包括存储模块1206,用于存储码流,以发送给解码器。视频编码器1202还包括发送模块1207,用于将码流发送到视频解码器1210。视频编码器1202还可以用于执行方法1000中的任一步骤。
[0214]
系统1200还包括视频解码器1210。视频解码器1210包括接收模块1211,用于接收包括一个或多个ols和指定ols的vps的码流,其中,所述码流已经过一组码流一致性测试检查,所述一组码流一致性测试测试vps指定的每个ols的每个操作点(operation point,op)的一致性。视频解码器1210还包括解码模块1213,用于解码来自ols的图像。视频解码器1210还包括转发模块1215,用于转发图像,以便作为解码视频序列的一部分显示。视频解码器1210还可以用于执行方法1100中的任一步骤。
[0215]
当第一组件与第二组件之间除了线、迹线或其它介质之外不存在中间组件时,第一组件与第二组件直接耦合。当第一组件与第二组件之间除了线、迹线或其它介质之外还存在中间组件时,第一组件与第二组件间接耦合。术语“耦合”及其变型包括直接耦合和间接耦合。除非另有说明,否则使用术语“约”意指包括后续数字
±
10%的范围。
[0216]
还应当理解,本文中阐述的示例性方法的步骤不一定需要按照所描述的顺序执行,并且这些方法的步骤的顺序应当理解为仅仅是示例性的。同理,在与本发明各种实施例相一致的方法中,这些方法可以包括其它步骤,并且某些步骤可以省略或组合。
[0217]
虽然本发明提供了多个具体实施例,但应当理解,所公开的系统和方法也可通过其它多种具体形式体现,而不会脱离本发明的精神或范围。本发明示例应当被视为说明性而非限制性的,且本发明并不限于本文所给出的详细内容。例如,各种元件或组件可以组合或集成在另一系统中,或者一些特征可以省略或不实施。
[0218]
另外,在不脱离本发明范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、组件、技术或方法组合或集成。其它变更、替换、更替示例对本领域技术人员而言是显而易见的,均不脱离此处公开的精神和范围。
再多了解一些

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

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

相关文献