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

一种码流解码的方法、解码器及存储码流的设备与流程

2022-12-06 19:41:36 来源:中国专利 TAG:

一种码流解码的方法、解码器及存储码流的设备
1.相关申请案交叉引用
2.本技术是分案申请,原申请的申请号是202080019614.8,原申请日是2020年03月11日,原申请的全部内容通过引用结合在本技术中。
技术领域
3.本发明大体上涉及视频译码,具体涉及在视频译码中对图像中的子图像进行译码。


背景技术:

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


技术实现要素:

5.在一个实施例中,本发明包括一种在解码器中实现的方法,所述方法包括:所述解码器的接收器接收码流,所述码流包括与图像相关联的多个子图像和标志,其中,所述子图像包括在视频译码层(video coding layer,vcl)网络抽象层(network abstraction layer,nal)单元中;当所述标志被设置为第一值时,处理器确定与所述图像相关联的所有vcl nal单元的第一nal单元类型值都相同;当所述标志被设置为第二值时,所述处理器确定包括所述图像中的一个或多个子图像的vcl nal单元的第一nal单元类型值与包括所述图像中的一个或多个子图像的vcl nal单元的第二nal单元类型值不同;所述处理器根据所述第一nal单元类型值或所述第二nal单元类型值,对所述一个或多个子图像进行解码。
6.一个图像可以分割为多个子图像。这些子图像可以译码到单独的子码流中,然后单独的子码流可以合并到码流中,以发送到解码器。例如,子图像可以用于虚拟现实(virtual reality,vr)应用。在一个具体的示例中,用户可以在任何时候只查看vr图像的一部分。相应地,不同的子图像可以以不同的分辨率传输,使得可以为有可能显示的子图像分配更多的带宽,并且可以压缩不太可能显示的子图像,以提高译码效率。此外,视频流可以通过使用帧内随机接入点(intra-random access point,irap)图像进行编码。irap图像根据帧内预测进行译码,可以在不参考其它图像的情况下进行解码。非irap图像可以根据帧间预测进行译码,并可以通过参考其它图像进行解码。非irap图像比irap图像压缩更明显。但是,视频序列必须使用irap图像开始解码,因为所述irap图像包括足够的数据,可以
在不参考其它图像的情况下进行解码。irap图像可用于子图像中,支持动态分辨率变化。因此,视频系统可以为更有可能被观看(例如,根据用户当前视角)的子图像传输更多的irap图像,为不太可能被观看的子图像传输更少的irap图像,以进一步提高译码效率。但是,子图像是同一图像的一部分。因此,该方案可以得到同时包括irap子图像和非irap子图像的图像。一些视频系统不具备处理同时具有irap和非irap区域的混合图像的能力。本发明包括表示图像是否是混合图像的标志,因此同时包括irap分量和非irap分量。根据此标志,所述解码器在解码时可以以不同方式处理不同的子图像,以便正确地解码和显示所述图像/子图像。所述标志可以存储在pps中,并可以称为mixed_nalu_types_in_pic_flag。因此,所公开的机制可以实现附加功能。此外,所公开的机制可以在使用子图像码流时实现分辨率动态地改变。因此,所公开的机制可以在流式传输vr视频时传输低分辨率的子图像码流,而不会显著降低用户体验。因此,所公开的机制提高了译码效率,因此降低了所述编码器和所述解码器处网络资源、内存资源和处理资源的使用率。
7.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述码流包括图像参数集(picture parameter set,pps),所述图像参数集包括所述标志。
8.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述第一nal单元类型值表示所述图像包括帧内随机接入点(intra-random access point,irap)子图像,所述第二nal单元类型值表示所述图像包括非irap子图像。
9.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述第一nal单元类型值等于具有可解码随机接入前置图像的即时解码刷新(instantaneous decoding refresh,idr)(idr_w_radl)、没有前置图像的idr(idr_n_lp),或纯随机接入(clean random access,cra)nal单元类型(cra_nut)。
10.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述第二nal单元类型值等于后置图像nal单元类型(trail_nut)、可解码随机接入前置图像nal单元类型(radl_nut),或跳过随机接入前置图像(random access skipped leading,rasl)nal单元类型(rasl_nut)。
11.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述标志为mixed_nalu_types_in_pic_flag。
12.可选地,根据上述任一方面,在所述方面的另一种实现方式中,当表示参考所述pps的图像具有多个所述vcl nal单元且所述vcl nal单元不具有相同的nal单元类型(nal_unit_type)值时,mixed_nalu_types_in_pic_flag等于1,当表示参考所述pps的图像具有一个或多个vcl nal单元且所述vcl nal单元具有相同的nal_unit_type值时,mixed_nalu_types_in_pic_flag等于0。
13.在一个实施例中,本发明包括一种在编码器中实现的方法,所述方法包括:所述处理器确定图像是否包括多个不同类型的子图像;所述处理器将所述图像中的所述子图像编码到码流中的多个vcl nal单元中;所述处理器将标志编码到所述码流中,其中,当与所述图像相关联的所有vcl nal单元的第一nal单元类型值相同时,所述标志被设置为第一值,当包括所述图像中的一个或多个子图像的vcl nal单元的第一nal单元类型值与包括所述图像中的一个或多个子图像的vcl nal单元的第二nal单元类型值不同时,所述标志被设置为第二值;耦合到所述处理器的存储器存储所述码流,以发送到解码器。
14.一个图像可以分割为多个子图像。这样的子图像可以译码到单独的子码流中,然后单独的子码流可以合并到码流中,以发送到解码器。例如,子图像可以用于虚拟现实(virtual reality,vr)应用。在一个具体的示例中,用户可以在任何时候只查看vr图像的一部分。相应地,不同的子图像可以以不同的分辨率传输,使得可以为有可能显示的子图像分配更多的带宽,并且可以压缩不太可能显示的子图像,以提高译码效率。此外,视频流可以通过使用帧内随机接入点(intra-random access point,irap)图像进行编码。irap图像根据帧内预测进行译码,可以在不参考其它图像的情况下进行解码。非irap图像可以根据帧间预测进行译码,并可以通过参考其它图像进行解码。非irap图像比irap图像压缩更明显。但是,视频序列必须使用irap图像开始解码,因为所述irap图像包括足够的数据,可以在不参考其它图像的情况下进行解码。irap图像可用于子图像中,并可以实现动态分辨率更改。因此,视频系统可以为更有可能被观看(例如,根据用户当前视角)的子图像传输更多的irap图像,为不太可能被观看的子图像传输更少的irap图像,以进一步提高译码效率。但是,子图像是同一图像的一部分。因此,该方案可能产生同时包括irap子图像和非irap子图像的图像。一些视频系统不具备处理同时具有irap和非irap区域的混合图像的能力。本发明包括表示图像是否是混合图像的标志,因此同时包括irap分量和非irap分量。根据此标志,所述解码器在解码时可以以不同方式处理不同的子图像,以便正确地解码和显示所述图像/子图像。所述标志可以存储在pps中,并可以称为mixed_nalu_types_in_pic_flag。因此,所公开的机制可以实现附加功能。此外,所公开的机制可以在使用子图像码流时实现分辨率动态地改变。因此,所公开的机制可以在流式传输vr视频时传输低分辨率的子图像码流,而不会显著降低用户体验。因此,所公开的机制提高了译码效率,因此降低了所述编码器和所述解码器处网络资源、内存资源和处理资源的使用率。
15.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述方法还包括将pps编码到所述码流中,其中,所述标志被编码到所述pps中。
16.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述第一nal单元类型值表示所述图像包括irap子图像,所述第二nal单元类型值表示所述图像包括非irap子图像。
17.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述第一nal单元类型值等于idr_w_radl、idr_n_lp或cra_nut。
18.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述第二nal单元类型值等于trail_nut、radl_nut或rasl_nut。
19.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述标志为mixed_nalu_types_in_pic_flag。
20.可选地,根据上述任一方面,在所述方面的另一种实现方式中,当表示参考所述pps的图像具有多个所述vcl nal单元且所述vcl nal单元不具有相同的nal_unit_type值时,mixed_nalu_types_in_pic_flag等于1,当表示参考所述pps的图像具有一个或多个vcl nal单元且所述vcl nal单元具有相同的nal_unit_type值时,mixed_nalu_types_in_pic_flag等于0。
21.在一个实施例中,本发明包括一种视频译码设备,包括:处理器、与所述处理器耦合的接收器和与所述处理器耦合的存储器;与所述处理器耦合的发送器,其中,所述处理
器、接收器、存储器和发送器用于执行上述方面中任一方面所述的方法。
22.在一个实施例中,本发明包括一种非瞬时性计算机可读介质,包括供视频译码设备使用的计算机程序产品,所述计算机程序产品包括存储在所述非瞬时性计算机可读介质中的计算机可执行指令,当处理器执行所述计算机可执行指令时,所述视频译码设备执行任一上述方面所述的方法。
23.在一个实施例中,本发明包括一种解码器,所述解码器包括:接收模块,用于接收码流,其中,所述码流包括与图像相关联的多个子图像和标志,所述子图像包括在多个vcl nal单元中;确定模块,用于:当所述标志被设置为第一值时,确定与所述图像相关联的所有vcl nal单元的第一nal单元类型值都相同;当所述标志被设置为第二值时,确定包括所述图像中的一个或多个子图像的vcl nal单元的第一nal单元类型值与包括所述图像中的一个或多个子图像的vcl nal单元的第二nal单元类型值不同;解码模块,用于根据所述第一nal单元类型值或所述第二nal单元类型值,对所述一个或多个子图像进行解码。
24.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述解码器还用于执行任一上述方面所述的方法。
25.在一个实施例中,本发明包括一种编码器,所述编码器包括:确定模块,用于确定图像是否包括多个不同类型的子图像;编码模块,用于:将所述图像中的所述子图像编码到码流中的多个vcl nal单元中;将标志编码到所述码流中,其中,当与所述图像相关联的所有vcl nal单元的第一nal单元类型值相同时,所述标志被设置为第一值,当包括所述图像中的一个或多个子图像的vcl nal单元的第一nal单元类型值与包括所述图像中的一个或多个子图像的vcl nal单元的第二nal单元类型值不同时,所述标志被设置为第二值;存储模块,用于存储所述码流,以发送到解码器。
26.可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述编码器还用于执行上述任一方面所述的方法。
27.为了描述的清晰性,上述任一实施例可以与上述其它任一或多个实施例结合以创建本发明范围内的新实施例。
28.这些和其它特征将结合附图和权利要求书从以下详细描述中更清楚地理解。
附图说明
29.为了更透彻地理解本发明,现参阅结合附图和具体实施方式而描述的以下简要说明,其中的相同附图标记表示相同部分。
30.图1为对视频信号进行译码的示例性方法的流程图。
31.图2为用于视频译码的示例性编解码(编解码器)系统的示意图。
32.图3为示例性视频编码器的示意图。
33.图4为示例性视频解码器的示意图。
34.图5为示例性译码视频序列的示意图。
35.图6为从虚拟现实(virtual reality,vr)图像视频流划分的多个子图像视频流的示意图。
36.图7为包括具有混合网络抽象层(network abstraction layer,nal)单元类型的图像的示例性码流的示意图。
37.图8为示例性视频译码设备的示意图。
38.图9为将包括具有混合nal单元类型的图像的视频序列编码到码流中的示例性方法的流程图。
39.图10为从码流中解码包括具有混合nal单元类型的图像的视频序列的示例性方法的流程图。
40.图11为用于将包括具有混合nal单元类型的图像的视频序列编码到码流中的示例性系统的示意图。
具体实施方式
41.首先应理解,尽管下文提供一项或多项实施例的说明性实现方式,但本发明所公开的系统和/或方法可使用任何数目的技术来实施,无论该技术是当前已知还是现有的。本发明决不应限于下文所说明的说明性实现方式、附图和技术,包括本文所说明并描述的示例性设计和实现方式,而是可在所附权利要求书的范围以及其等效物的完整范围内修改。
42.本文中使用以下缩略语:编码视频序列(coded video sequence,cvs)、解码图像缓冲器(decoded picture buffer,dpb)、即时解码刷新(instantaneous decoding refresh,idr)、帧内随机接入点(intra-random access point,irap)、最低有效位(least significant bit,lsb)、最高有效位(most significant bit,msb)、网络抽象层(network abstraction layer,nal)、图像顺序编号(picture order count,poc)、原始字节序列载荷(raw byte sequence payload,rbsp)、序列参数集(sequence parameter set,sps)、工作草案(working draft,wd)。
43.许多视频压缩技术可以用来减小视频文件,同时尽量减少数据丢失。例如,视频压缩技术可以包括执行空间(例如,帧内)预测和/或时间(例如,帧间)预测来减少或去除视频序列中的数据冗余。对于基于块的视频译码,视频条带(slice)(例如,视频图像或视频图像的一部分)可以分割成视频块,视频块也可以称为树块(treeblock)、编码树块(coding tree block,ctb)、编码树单元(coding tree unit,ctu)、译码单元(coding unit,cu)和/或编码节点。一个图像的帧内译码(i)条带中的视频块使用针对同一图像内的相邻块中的参考样本的空间预测进行译码。一个图像的帧间译码单向预测(p)或双向预测(b)条带中的视频块可以采用针对同一图像内的相邻块中的参考样本的空间预测或者采用针对其它参考图像中的参考样本的时间预测进行译码。图像(picture/image)可以称为帧(frame),参考图像可以称为参考帧。空间或时间预测会产生表示图像块的预测块。残差数据表示原始图像块和预测块之间的像素差。相应地,帧间译码块根据指向构成预测块的参考样本的块的运动矢量和表示编码块与预测块之间的差值的残差数据进行编码,而帧内译码块根据帧内译码模式和残差数据进行编码。为了进一步压缩,残差数据可以从像素域变换到变换域,从而产生残差变换系数,然后可以量化残差变换系数。量化变换系数最初可以排列于二维阵列中。可以扫描量化变换系数,以产生变换系数的一维矢量。可以应用熵译码来实现更大程度的压缩。下文将更详细地讨论这些视频压缩技术。
44.为了保证经编码视频能够被准确解码,按照对应的视频编码标准进行视频编码和解码。这些视频编码标准包括国际电信联盟电信标准化部门(international telecommunication union telecommunication 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)中,所述工作草案包括jvet-m1001-v6,提供算法描述、vvc wd的编码端描述以及参考软件。
45.视频译码系统可以通过使用irap图像和非irap图像来编码视频。irap图像是根据帧内预测进行译码的图像,用作视频序列的随机接入点。在帧内预测中,图像中的块通过参考同一图像中的其它块进行译码。这与使用帧间预测的非irap图像形成了鲜明对比。在帧间预测中,当前图像中的块通过参考与当前图像不同的参考图像中的其它块进行译码。由于irap图像是在不参考其它图像的情况下译码的,因此可以在不首先解码任何其它图像的情况下解码irap图像。因此,解码器可以在任何irap图像处开始解码视频序列。相反,非irap图像参考其它图像进行译码,因此解码器通常无法在非irap图像处开始解码视频序列。irap图像也会刷新dpb。这是因为irap图像是cvs的起点,cvs中的图像不参考先前cvs中的图像。因此,irap图像还可以停止与帧间预测相关的译码错误,因为此类错误不能通过irap图像传播。然而,从数据大小的角度来看,irap图像明显大于非irap图像。因此,视频序列通常包括许多非irap图像,其中穿插的irap图像数量较少,以平衡译码效率与功能。例如,60帧的cvs可以包括一个irap图像和59个非irap图像。
46.在一些情况下,视频译码系统可以用于对虚拟现实(virtual reality,vr)视频进行译码,vr视频也可以称为360度视频。vr视频可以包括视频内容的球体,显示起来就像用户在球体的中心一样。仅向用户显示球体的一部分(称为视角)。例如,用户可以使用头戴式显示器(head mounted display,hmd),所述头戴式显示器根据用户的头部移动选择和显示球体的视角。这样产生了身临视频所描绘的虚拟空间的效果。为了实现这一结果,视频序列中的每个图像包括相应瞬间的视频数据的整个球体。但是,仅向用户显示图像的一小部分(例如,单个视角)。图像的其余部分将被丢弃,而不被呈现。通常传输整个图像,以便可以根据用户头部移动动态地选择和显示不同的视角。这种方法可能会导致视频文件大小非常大。
47.为了提高译码效率,一些系统将图像分成子图像。子图像是图像的定义空间区域。每个子图像都包括图像的对应视角。视频可以以两种或两种以上分辨率进行编码。每个分辨率都被编码到不同的子码流中。当用户流式传输vr视频时,译码系统可以根据用户使用的当前视角将子码流合并为码流进行传输。具体地,从高分辨率子码流获得当前视角,从低分辨率码流获得未被查看的视角。这样,最高质量的视频被显示给用户,低质量的视频被丢
弃。如果用户选择新的视角,则将向用户显示较低分辨率的视频。解码器可以请求新的视角接收更高分辨率的视频。然后,编码器可以相应地改变合并过程。一旦到达irap图像,解码器就可以开始在新的视角解码高分辨率视频序列。这种方法显著提高了视频压缩,而不会对用户的观看体验产生不好影响。
48.对上述办法的一个关注是,改变分辨率所需的时间长度是基于在到达irap图像之前的时间长度。这是因为解码器无法在非irap图像处开始解码不同视频序列,如上所述。减少这种延迟的一种方法是包括更多的irap图像。但是,这也增大了文件大小。为了平衡功能与译码效率,不同的视角/子图像可以包括不同频率的irap图像。例如,更有可能被查看的视角可能比其它视角具有更多的irap图像。例如,在篮球背景中,与篮筐和/或中场相关的视角可以以比查看看台或天花板的视角更高的频率包括irap图像,因为用户不太可能查看此类视角。
49.这种方法会产生其它问题。具体地,包含视角的子图像是单个图像的一部分。当不同的子图像具有不同频率的irap图像时,有些图像既包括irap子图像,也包括非irap子图像。这是一个问题,因为图像是通过使用nal单元存储在码流中的。nal单元是包括图像的参数集或条带以及对应的条带头的存储单元。接入单元是包括整个图像的单元。因此,接入单元包括与图像相关的所有nal单元。nal单元还包括一个类型,该类型表示包括条带的图像类型。在一些视频系统中,与单个图像相关的所有nal单元(例如,包括在同一接入单元中)都需要具有相同的类型。因此,当图像同时包括irap子图像和非irap子图像时,nal单元存储机制可能会停止正确操作。
50.本文公开了调整nal存储方案以支持同时包括irap子图像和非irap子图像的图像的机制。这反过来又允许包括不同视角的不同irap子图像频率的vr视频。在第一示例中,本文公开了表示图像是否是混合图像的标志。例如,所述标志可以表示图像同时包括irap子图像和非irap子图像。根据此标志,所述解码器在解码时可以以不同方式处理不同的子图像,以便正确地解码和显示所述图像/子图像。所述标志可以存储在图像参数集(picture parameter set,pps)中,并可以称为mixed_nalu_types_in_pic_flag。
51.在第二示例中,本文公开了表示图像是否是混合图像的标志。例如,所述标志可以表示图像同时包括irap子图像和非irap子图像。此外,所述标志约束图像,使得混合图像正好包括两种nal单元类型,包括一种irap类型和一种非irap类型。例如,图像可以包括irap nal单元,所述irap nal单元包括具有可解码随机接入前置图像的即时解码刷新(instantaneous decoding refresh,idr)(idr_w_radl)、没有前置图像的idr(idr_n_lp),或纯随机接入(clean random access,cra)nal单元类型(cra_nut)。此外,所述图像可以包括非irap nal单元,所述非irap nal单元包括且仅包括以下中的一个:后置图像nal单元类型(trail_nut)、可解码随机接入前置图像nal单元类型(radl_nut),或跳过随机接入前置图像(random access skipped leading,rasl)nal单元类型(rasl_nut)。根据此标志,所述解码器在解码时可以以不同方式处理不同的子图像,以便正确地解码和显示所述图像/子图像。所述标志可以存储在pps中,并可以称为mixed_nalu_types_in_pic_flag。
52.图1为对视频信号进行译码的示例性操作方法100的流程图。具体地,在编码器侧对视频信号进行编码。编码过程通过使用各种机制来压缩视频信号,从而减小视频文件。较小的文件大小有助于压缩视频文件传输给用户,同时减少相关的带宽开销。然后,解码器对
压缩视频文件进行解码,以重建原始视频信号,向终端用户显示。解码过程通常与编码过程一样,有助于解码器以相同方式重建视频信号。
53.在步骤101中,将视频信号输入到编码器中。例如,视频信号可以是存储在存储器中的未压缩的视频文件。又如,视频文件可以由视频捕获设备(例如,摄像机)捕获,并且进行编码以支持视频的实时流传输。视频文件可以同时包括音频分量和视频分量。视频分量包括一系列图像帧,当按顺序观看时,这些图像帧会产生运动的视觉效果。这些帧包括以光表示的像素(本文称为亮度分量(或亮度样本))和颜色(称为色度分量(或颜色样本))。在一些示例中,所述帧还可以包括深度值以支持三维查看。
54.在步骤103中,将视频分割成块。分割包括将每个帧中的像素细分为正方形和/或矩形块以进行压缩。例如,在高效视频编码(high efficiency video coding,hevc)(也称为h.265和mpeg-h第2部分)中,可以首先将帧划分为编码树单元(coding tree unit,ctu),这些编码树单元是预定义大小(例如,64个像素
×
64个像素)的块。ctu包括亮度样本和色度样本。可以使用编码树将ctu分成块,然后递归地细分这些块,直到获得支持进一步编码的配置结构。例如,可以细分帧的亮度分量,直到各个块包括相对均匀的亮度(lighting)值。此外,可以细分帧的色度分量,直到各个块包括相对均匀的颜色值。因此,视频帧的内容不同,分割机制就不同。
55.在步骤105中,使用各种压缩机制来压缩在步骤103中分割的图像块。例如,可以使用帧间预测和/或帧内预测。帧间预测旨在利用一个事实,即一个共同场景中的对象往往出现在连续的帧中。因此,无需在相邻帧中重复描述在参考帧中描绘对象的块。一个对象(如一张桌子)可以在多个帧中保持恒定的位置。因此,该桌子只描述一次,相邻帧可以回指参考帧。模式匹配机制可用于匹配跨多个帧的对象。此外,由于对象移动或摄像机移动等原因,移动对象可以跨多个帧表示。在特定示例中,一个视频可以跨多个帧显示在屏幕上移动的汽车。运动矢量可以用来描述这种移动。运动矢量是一个二维矢量,提供从对象在一个帧中的坐标与该对象在参考帧中的坐标之间的偏移。因此,帧间预测可将当前帧中的图像块编码为运动矢量集,表示当前帧中的图像块与参考帧中的对应块之间的偏移。
56.帧内预测对公共帧中的块进行编码。帧内预测利用了以下事实:亮度分量和色度分量往往聚集在一个帧中。例如,一棵树的一部分中的一片绿色往往与几片类似的绿色相邻。帧内预测使用多种方向性预测模式(例如,hevc中的33个模式)、平面模式和直流(direct current,dc)模式。方向性模式表示当前块的样本与相邻块在对应方向上的样本相似/相同。平面模式表示可以根据行边缘的邻块对行/列(例如平面)上的一系列块进行插值。实际上,平面模式通过在变化值中使用相对恒定的斜率来表示亮度/颜色在行/列之间的平滑过渡。dc模式用于边界平滑,表示块和方向性预测模式的角方向相关的所有相邻块的样本相关的平均值相似/相同。因此,帧内预测块可以将图像块表示为各种关系预测模式值而不是实际值。此外,帧间预测块可以将图像块表示为运动矢量值而不是实际值。在这两种情况下,预测块在某些情况下可以不完全表示图像块。任何差异都存储在残差块中。可以对残差块进行变换以进一步压缩文件。
57.在步骤107中,可以应用各种滤波技术。在hevc中,根据环内滤波方案应用滤波器。以上讨论的基于块的预测可在解码器中创建块状图像。此外,基于块的预测方案可以对块进行编码,然后重建经编码块,以供以后用作参考块。环内滤波方案迭代地将噪声抑制滤波
器、去块效应滤波器、自适应环路滤波器和样本自适应偏移(sample adaptive offset,sao)滤波器应用到块/帧。这些滤波器减少了这些块伪影,以便可以准确地重建经编码文件。此外,这些滤波器减少了重建参考块伪影,使得伪影不太可能在基于重建参考块编码的后续块中产生其它的伪影。
58.在步骤109中,一旦视频信号被分割、压缩和滤波,则将所得数据编码到码流中。码流包括上述数据以及任何期望支持解码器中适当的视频信号重建的指示数据。例如,这些数据可以包括分割数据、预测数据、残差块和向解码器提供译码指令的各种标志。码流可以存储在存储器中,所述码流用于根据请求发送到解码器。码流还可以向多个解码器广播和/或组播。码流的创建是一个迭代过程。因此,步骤101、103、105、107和109可以在多个帧和块上连续和/或同时发生。图1所示的顺序是为了清楚和便于讨论而呈现的,并非旨在将视频译码过程限制于特定顺序。
59.在步骤111中,解码器接收码流并开始解码过程。具体地,解码器使用熵解码方案将码流转换为对应的语法和视频数据。在步骤111中,解码器使用码流中的语法数据来确定帧的分割。所述分割应与步骤103中的块分割的结果匹配。现在描述在步骤111中使用的熵编码/解码。编码器在压缩过程中做出许多选择,例如根据输入图像中的值的空间定位从多个可能选项中选择块分割方案。指示确切的选项可以使用大量的二进制位。本文中使用的二进制位是当作变量的二进制值(例如,可以根据上下文变化的比特值)。熵编码有助于编码器丢弃任何明显不适合特定情况的选项,从而留下一组可使用的选项。然后,为每个可使用的选项分配一个码字。码字的长度基于可允许选项的数目(例如,一个二进制位用于两个选项,两个二进制位用于三个到四个选项)。然后,编码器对所选选项的码字进行编码。此方案减小了码字的大小,因为码字的大小与期望的一样大,以唯一地指示可使用选项的小子集中的一个选项,而不是唯一地指示所有可能选项的可能大集中的选项。然后,解码器通过以与编码器类似的方式确定可使用选项集对所述选项进行解码。通过确定可使用选项集,解码器可以读取码字并确定编码器做出的选择。
60.在步骤113中,解码器执行块解码。具体地,解码器进行逆变换来生成残差块。然后,解码器使用残差块和对应的预测块,根据分割来重建图像块。预测块可包括编码器在步骤105中生成的帧内预测块和帧间预测块。然后,根据在步骤111中确定的分割数据将重建图像块放置在重建视频信号的帧中。步骤113的语法还可以通过上文讨论的熵编码在码流中指示。
61.在步骤115中,以类似于编码器在步骤107的方式对重建视频信号的帧执行滤波。例如,可以对帧使用噪声抑制滤波器、去块效应滤波器、自适应环路滤波器和sao滤波器以消除块伪影。一旦帧被滤波,可以在步骤117中将视频信号输出到显示器以供终端用户查看。
62.图2是用于视频译码的示例性编码和解码(编解码)系统200的示意图。具体地,编解码系统200能够实现操作方法100。广义地,编解码器系统200用于描述编码器和解码器中使用的组件。如关于操作方法100中的步骤101和103所讨论,编解码系统200接收视频信号并对视频信号进行分割,产生分割视频信号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。现对这些组件加以说明。
63.分割视频信号201是已通过编码树分割成像素块的捕获视频序列。编码树使用各种划分模式将像素块细分为更小的像素块。然后,可以将这些块进一步细分为更小的块。所述块可以称为编码树上的节点。将较大的父节点划分为较小的子节点。节点被细分的次数称为节点/编码树的深度。在某些情况下,划分的块可以包括在译码单元(coding unit,cu)中。例如,cu可以是ctu的子部分,包括亮度块、红差色度(cr)块和蓝差色度(cb)块以及cu的对应语法指令。划分模式可以包括二叉树(binary tree,bt)、三叉树(triple tree,tt)和四叉树(quad tree,qt),用于将节点分别划分为形状不同的两个、三个或四个子节点,具体取决于所使用的划分模式。将分割视频信号201转发到总体译码器控制组件211、变换缩放和量化组件213、帧内估计组件215、滤波器控制分析组件227和运动估计组件221进行压缩。
64.总体译码器控制组件211用于根据应用约束条件做出与将视频序列的图像编码到码流中相关的决策。例如,总体译码器控制组件211管理码率/码流大小相对于重建质量的优化。可以根据存储空间/带宽可用性和图像分辨率请求做出这些决策。总体译码器控制组件211还根据传输速度管理缓冲器的利用率,以减轻缓存欠载和超载问题。为了管理这些问题,总体译码器控制组件211管理由其它组件进行的分割、预测和滤波。例如,总体译码器控制组件211可以动态增加压缩复杂度以增大分辨率和带宽利用率,或者降低压缩复杂度以降低分辨率和带宽利用率。因此,总体译码器控制组件211控制编解码系统200的其它组件来平衡视频信号重建质量与码率问题。总体译码器控制组件211创建控制数据,控制其它组件的操作。还将控制数据转发到标头格式和cabac组件231,以在码流中进行编码,从而指示在解码器中解码的参数。
65.分割视频信号201还发送到运动估计组件221和运动补偿组件219进行帧间预测。可以将分割视频信号201的帧或条带分为多个视频块。运动估计组件221和运动补偿组件219根据一个或多个参考帧中的一个或多个块对所接收视频块执行帧间预测译码以提供时间预测。编解码系统200可以执行多个译码过程,以便为每个视频数据块选择适当的译码模式,等等。
66.运动估计组件221和运动补偿组件219可以高度集成,但出于概念的目的单独说明。由运动估计组件221执行的运动估计是生成运动矢量的过程,运动矢量用于估计视频块的运动。例如,运动矢量可以指示编码对象相对于预测块的位移。预测块是被发现在像素差方面与待编码块紧密匹配的块。预测块也可以称为参考块。这种像素差可以通过绝对差和(sum of absolute 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可以确定当前块/帧的多个参考块、多个运动矢量等,并且可以选择具有最佳率失真特性的参考块、运动矢量等。最佳率失真特性平衡视频重建的质量(例如,压缩造成的数据丢失量)和译码效率(例如,最终编码的大小)。
67.在一些示例中,编解码系统200可以计算存储在解码图像缓冲器组件223中的参考图像的子整数像素位置的值。例如,视频编解码系统200可对参考图像的四分之一像素位置、八分之一像素位置或其它分数像素位置的值进行插值。因此,运动估计组件221可执行有关于整像素位置和分数像素位置的运动搜索,并输出具有分数像素精度的运动矢量。运动估计组件221通过比较pu的位置与参考图像的预测块的位置来计算经帧间编码条带中视频块的pu的运动矢量。运动估计组件221将计算的运动矢量作为运动数据输出至标头格式和cabac组件231进行编码,将运动输出至运动补偿组件219。
68.由运动补偿组件219执行的运动补偿可涉及根据由运动估计组件221确定的运动矢量获取或生成预测块。同样,在一些示例中,运动估计组件221和运动补偿组件219可以在功能上集成。在接收当前视频块的pu的运动矢量之后,运动补偿组件219可以定位运动矢量指向的预测块。然后,通过从正在编码的当前视频块的像素值中减去预测块的像素值,产生像素差值,从而形成残差视频块。通常,运动估计组件221对亮度分量进行运动估计,运动补偿组件219将根据亮度分量计算的运动矢量用于色度分量和亮度分量。将预测块和残差块转发到变换缩放和量化组件213。
69.分割视频信号201还发送到帧内估计组件215和帧内预测组件217。与运动估计组件221和运动补偿组件219一样,帧内估计组件215和帧内预测组件217可以高度集成,但出于概念的目的单独说明。帧内估计组件215和帧内预测组件217根据当前帧中的块对当前块进行帧内预测,以替代如上所述的由运动估计组件221和运动补偿组件219在帧之间执行的帧间预测。具体地,帧内估计组件215确定用于对当前块进行编码的帧内预测模式。在一些示例中,帧内估计组件215从多个测试的帧内预测模式中选择适当的帧内预测模式对当前块进行编码。然后,将所选择的帧内预测模式转发到标头格式和cabac组件231进行编码。
70.例如,帧内估计组件215使用各种测试的帧内预测模式的率失真分析来计算率失真值,并在测试的模式中选择具有最佳率失真特性的帧内预测模式。率失真分析通常确定经编码块和为了产生经编码块进行编码的原始未编码块之间的失真(或误差)量以及用于产生经编码块的码率(例如,比特数)。帧内估计组件215根据各种经编码块的失真和速率计算比率,确定哪种帧内预测模式得到块的最佳率失真值。另外,帧内估计组件215可用于根据率失真优化(rate-distortion optimization,rdo)使用深度建模模式(depth modeling mode,dmm)对深度图的深度块进行编码。
71.当在编码器上实现时,帧内预测组件217可根据由帧内估计组件215确定的已选帧内预测模式从预测块中生成残差块,或者当在解码器上实现时,从码流中读取残差块。残差块包括预测块和原始块之间的值差,表示为矩阵。然后,将残差块转发到变换缩放和量化组件213。帧内估计组件215和帧内预测分量217可以对亮度分量和色度分量执行操作。
72.变换缩放和量化组件213用于进一步压缩残差块。变换缩放和量化组件213将离散
余弦变换(discrete cosine transform,dct)、离散正弦变换(discrete sine transform,dst)等变换或概念上类似的变换应用于残差块,产生包括残差变换系数值的视频块。还可以使用小波变换、整数变换、子带变换或其它类型的变换。变换可将残差信息从像素值域变换到变换域,例如频域。变换缩放和量化组件213还用于根据频率等对变换残差信息进行缩放。这种缩放涉及对残差信息应用缩放因子,以便在不同的粒度上量化不同的频率信息,会影响重建视频的最终视觉质量。变换缩放和量化分量213还用于量化变换系数以进一步降低码率。量化过程可以减少与部分或全部系数相关的位深度。可以通过调整量化参数来修改量化程度。在一些示例中,变换缩放和量化组件213随后可对包括量化变换系数的矩阵进行扫描。将量化变换系数转发到标头格式和cabac组件231,以编码到码流中。
73.缩放和逆变换组件229进行变换缩放和量化组件213的逆操作以支持运动估计。缩放和逆变换组件229进行反缩放、逆变换和/或反量化来重建像素域中的残差块,例如,后续用作参考块,该参考块可成为另一当前块的预测块。运动估计组件221和/或运动补偿组件219可以通过将残差块与对应预测块相加来计算参考块,以用于对后续块/帧进行运动估计。将滤波器应用于重建参考块,以减少在缩放、量化和变换过程中产生的伪影。当预测后续块时,这些伪影可以产生不准确的预测(并产生其它伪影)。
74.滤波器控制分析组件227和环内滤波器组件225将滤波器应用于残差块和/或重建图像块。例如,缩放和逆变换组件229中的变换残差块可以与帧内预测组件217和/或运动补偿组件219中的对应预测块组合以重建原始图像块。然后,可以将滤波器应用于重建图像块。在一些示例中,可以将滤波器应用于残差块。与图2中的其它组件一样,滤波器控制分析组件227和环内滤波器组件225高度集成且可以一起实现,但出于概念目的单独描述。应用于重建参考块的滤波器应用于特定空间区域,并且包括多个参数以调整如何应用这些滤波器。所述滤波器控制分析组件227分析重建参考块,以确定应在哪里应用这些滤波器并设置对应的参数。这些数据作为滤波器控制数据转发到标头格式和cabac组件231进行编码。环内滤波器组件225根据滤波器控制数据应用这些滤波器。滤波器可以包括去块效应滤波器、噪声抑制滤波器、sao滤波器和自适应环路滤波器。这些滤波器可以根据示例应用于空间/像素域(例如,在重建像素块上)或频域中。
75.当作为编码器操作时,将滤波后的重建图像块、残差块和/或预测块存储在解码图像缓冲器组件223中,以供以后进行如上所述的运动估计。当作为解码器操作时,解码图像缓冲器组件223存储重建块和滤波块并向显示器转发重建块和滤波块,作为输出视频信号的一部分。解码图像缓冲器组件223可以是能够存储预测块、残差块和/或重建图像块的任何存储器设备。
76.标头格式和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)编码或其它熵编码技术来对所述信息进行编码。在熵编码之后,经编码码流可以发送到另一设备(例如,视频解码器)或存档以供稍后发送或检索。
77.图3为示例性视频编码器300的框图。视频编码器300可用于实现编解码系统200的编码功能和/或实现操作方法100的步骤101、103、105、107和/或109。编码器300对输入视频信号进行分割,产生和分割视频信号201基本相似的分割视频信号301。然后,通过编码器300的组件将分割视频信号301压缩和编码到码流中。
78.具体地,将分割视频信号301转发给帧内预测组件317进行帧内预测。帧内预测组件317可与帧内估计组件215和帧内预测组件217基本相似。分割视频信号301还转发到运动补偿组件321,用于根据解码图像缓冲器323中的参考块进行帧间预测。运动补偿组件321可与运动估计组件221和运动补偿组件219基本相似。将帧内预测组件317和运动补偿组件321中的预测块和残差块转发到变换和量化组件313以对残差块进行变换和量化。变换和量化组件313可与变换缩放和量化组件213基本相似。将变换和量化残差块和对应的预测块(以及相关控制数据)转发到熵编码组件331以编码到码流中。熵编码组件331可与标头格式和cabac组件231基本相似。
79.变换和量化残差块和/或对应的预测块也从变换和量化组件313转发到逆变换和量化组件329以重建为参考块供运动补偿组件321使用。逆变换和量化组件329可与缩放和逆变换组件229基本相似。根据示例,也将环内滤波器组件325中的环内滤波器应用于残差块和/或重建参考块。环内滤波器组件325可与滤波器控制分析组件227和环内滤波器组件225基本相似。如关于环内滤波器组件225所讨论,环内滤波器组件325可以包括多个滤波器。然后,将滤波块存储在解码图像缓冲器组件323中,以供运动补偿组件321用作参考块。解码图像缓冲器组件323可与解码图像缓冲器组件223基本相似。
80.图4为示例性视频解码器400的框图。视频解码器400可用于实现编解码系统200的解码功能和/或实现操作方法100的步骤111、113、115和/或117。例如,解码器400从编码器300接收码流,并根据所述码流生成重建输出视频信号以向终端用户显示。
81.码流由熵解码组件433接收。熵解码组件433用于实现熵解码方案,例如cavlc、cabac、sbac、pipe译码或其它熵编码技术。例如,熵解码组件433可以使用标头信息来提供上下文以解译在码流中编码为码字的其它数据。解码信息包括对视频信号进行解码所需的任何信息,例如总体控制数据、滤波器控制数据、分割信息、运动数据、预测数据和残差块的量化变换系数。将量化变换系数转发到逆变换和量化组件429以重建为残差块。逆变换和量化组件429可与逆变换和量化组件329基本相似。
82.将重建残差块和/或预测块转发到帧内预测组件417以根据帧内预测操作重建为图像块。帧内预测组件417可与帧内估计组件215和帧内预测组件217相似。具体地,帧内预测组件417使用预测模式来定位帧中的参考块,并将残差块应用于结果以重建帧内预测图像块。重建帧内预测图像块和/或残差块以及对应的帧间预测数据通过环内滤波器组件425转发到解码图像缓冲器组件423,解码图像缓冲器组件423和环内滤波器组件425可以分别与解码图片缓冲器组件223和环内滤波器组件225基本相似。环内滤波器组件425对重建图像块、残差块和/或预测块进行滤波,并且这些信息存储在解码图像缓冲器组件423中。将解
码图像缓冲器组件423中的重建图像块转发到运动补偿组件421进行帧间预测。运动补偿组件421可与运动估计组件221和/或运动补偿组件219基本相似。具体地,运动补偿组件421使用参考块中的运动矢量来生成预测块,并将残差块应用于结果中以重建图像块。所得重建块还可以通过环内滤波器组件425转发到解码图像缓冲器组件423。解码图像缓冲器组件423继续存储其它重建图像块,这些图像块可以通过分割信息重建成帧。这些帧也可以按顺序排列。所述顺序作为重建输出视频信号向显示屏输出。
83.图5为示例性cvs 500的示意图。例如,根据方法100,cvs 500可以由编解码系统200和/或编码器300等编码器进行编码。此外,cvs 500可以由编解码系统200和/或解码器400等解码器解码。cvs 500包括以解码顺序508译码的图像。解码顺序508是图像在码流中定位的顺序。然后,cvs 500中的图像以呈现顺序510输出。呈现顺序510是解码器可以显示图像以导致所产生的视频正确显示的顺序。例如,cvs 500中的图像通常可以按呈现顺序510定位。然而,某些图像可以移动到不同的位置以提高译码效率,例如通过将类似的图像放置在更靠近的位置以支持帧间预测。以这种方式移动这些图像产生解码顺序508。在所示的示例中,图像以解码顺序508从0到4进行索引。在呈现顺序510中,索引2和索引3处的图像已经移动到索引0处的图像前面。
84.cvs 500包括irap图像502。irap图像502是根据帧内预测译码的图像,用作cvs 500的随机接入点。具体地,irap图像502中的块通过参考irap图像502中的其它块进行译码。由于irap图像502是在不参考其它图像的情况下译码的,因此可以在不首先解码任何其它图像的情况下解码irap图像502。因此,解码器可以在irap图像502处开始解码cvs 500。此外,irap图像502可以导致dpb被刷新。例如,在irap图像502之后呈现的图像可以不依赖于irap图像502之前的图像(例如,图像索引0)进行帧间预测。因此,一旦irap图像502被解码,图像缓冲器就可以被刷新。这具有停止任何与帧间预测相关的译码错误的效果,因为这些错误不能通过irap图像502传播。irap图像502可以包括各种类型的图像。例如,irap图像可以译码为idr或cra。idr是一个帧内译码图像,它开始新的cvs 500并刷新图像缓冲器。cra是一个帧内译码图像,它充当随机接入点,而不开始新的cvs 500或刷新图像缓冲器。这样,与cra相关联的前置图像504可以参考cra之前的图像,而与idr相关联的前置图像504可以不参考idr之前的图像。
85.cvs 500还包括各种非irap图像。这些非irap图像包括前置图像504和后置图像506。前置图像504是在解码顺序508上位于irap图像502之后,但在呈现顺序510上位于irap图像502之前的图像。后置图像506在解码顺序508和呈现顺序510上位于irap图像502之后。前置图像504和后置图像506都是根据帧间预测进行译码的。后置图像506是参考irap图像502或位于irap图像502之后的图像进行译码的。因此,一旦irap图像502被解码,后置图像506总是可以被解码。前置图像504可以包括跳过随机接入前置(random access skipped leading,rasl)图像和可解码随机接入前置(random access decodable leading,radl)图像。rasl图像通过参考irap图像502之前的图像进行译码,但是在irap图像502之后的位置进行译码。由于rasl图像依赖于之前的图像,因此当解码器在irap图像502开始解码时,rasl图像不能被解码。因此,当irap图像502用作随机接入点时,rasl图像被跳过并且不被解码。但是,当解码器使用之前的irap图像(在索引0之前且未显示)作为随机接入点时,rasl图像被解码和显示。radl图像是参考irap图像502和/或irap图像502之后的图像进行
译码的,但在呈现顺序510上定位在irap图像502之前。由于radl图像不依赖于irap图像502之前的图像,因此当irap图像502是随机接入点时,radl图像可以被解码和显示。
86.cvs 500中的图像都可以存储在接入单元中。此外,图像可以被划分为条带,并且条带可以包括在nal单元中。nal单元是包括图像的参数集或条带以及对应的条带头的存储单元。nal单元被分配类型,以向解码器指示nal单元中包括的数据类型。例如,irap图像502中的条带可以包括在具有radl(idr_w_radl)nal单元的idr、没有前置图像的idr(idr_n_lp)nal单元、cra nal单元等中。idr_w_radl nal单元表示irap图像502是与radl前置图像504相关联的idr图像。idr_n_lp nal单元表示irap图像502是不与任何前置图像504相关联的idr图像。cra nal单元表示irap图像502是可以与前置图像504相关联的cra图像。非irap图像中的条带也可以放置在nal单元中。例如,后置图像506中的条带可以放置在后置图像nal单元类型(trail_nut)中,表示后置图像506是帧间预测译码图像。前置图像504中的条带可以包括在rasl nal单元类型(rasl_nut)和/或radl nal单元类型(radl_nut)中,可以表示对应的图像是对应类型的帧间预测译码的前置图像504。通过在对应的nal单元中指示(signal)图像中的条带,解码器可以很容易地确定应用于每个图像/条带的适当解码机制。
87.图6为从vr图像视频流600中划分出来的多个子图像视频流601、602和603的示意图。例如,子图像视频流601至603中的每一个和/或vr图像视频流600可以译码到cvs 500中。因此,根据方法100,子图像视频流601至603和/或vr图像视频流600可以由编解码系统200和/或编码器300等编码器进行编码。此外,子图像视频流601至603和/或vr图像视频流600可以由编解码系统200和/或解码器400等解码器解码。
88.vr图像视频流600包括随时问呈现的多个图像。具体地,vr通过对视频内容的球体进行译码来运行,显示起来就像用户在球体的中心一样。每个图像都包括整个球体。同时,仅向用户显示图像的一部分(称为视角)。例如,用户可以使用头戴式显示器(head mounted display,hmd),所述头戴式显示器根据用户的头部移动选择和显示球体的视角。这样产生了身临视频所描绘的虚拟空间的效果。为了实现这一结果,视频序列中的每个图像包括相应瞬间的视频数据的整个球体。但是,仅向用户显示图像的一小部分(例如,单个视角)。图像的其余部分将被丢弃,而不被呈现。通常传输整个图像,以便可以根据用户头部移动动态地选择和显示不同的视角。
89.在所示的示例中,vr图像视频流600的图像可以根据可用视角被细分为子图像。因此,每个图像和对应的子图像包括时间位置(例如,图像顺序)作为时间表示的一部分。子图像视频流601至603是在随时间进行一致细分时创建的。这种一致细分产生子图像视频流601至603,其中每个流包括相对于vr图像视频流600中的对应图像具有预定大小、形状和空间位置的子图像集。此外,子图像视频流601至603中的子图像集的时间位置在展示时间内发生变化。这样,子图像视频流601至603中的子图像可以根据时间位置在时域上对齐。然后,可以根据预定义的空间位置在空域中合并来自每个时间位置的子图像视频信号601至603的子图像,以重建vr图像视频流600进行显示。具体地,子图像视频流601至603可以分别被编码到单独的子码流中。当这些子码流合并在一起时,它们会产生一个码流,该码流随时间包括整个图像集。生成的码流可以传输到解码器,以便根据用户当前选择的视角进行解码和显示。
90.vr视频的一个问题是,所有子图像视频流601至603可以以高质量(例如,高分辨
率)传输给用户。这允许解码器动态选择用户的当前视角,并实时显示对应子图像视频流601至603中的子图像。然而,用户可以仅查看单个视角,例如从子图像视频流601查看,而子图像视频流602和603被丢弃。因此,以高质量传输子图像视频流602和603可能会浪费大量的带宽。为了提高译码效率,vr视频可以被编码到多个视频流600中,其中每个视频流600以不同的质量/分辨率编码。这样,解码器可以传输对当前子图像视频流601的请求。作为响应,编码器(或中间条带器或其它内容服务器)可以从更高质量的视频流600中选择更高质量的子图像视频流601,从更低质量的视频流600中选择更低质量的子图像视频流602和603。然后,编码器可以将这些子码流合并成一个完整的编码码流,以便传输到解码器。这样,解码器接收一系列图像,其中当前视角质量较高,其它视角质量较低。此外,最高质量的子图像通常显示给用户(没有头部移动),低质量的子图像通常被丢弃,使功能和译码效率得以平衡。
91.在用户从观看子图像视频流601转向子图像视频流602的情况下,解码器请求以更高质量传输新的当前子图像视频流602。然后,编码器可以相应地改变合并机制。如上所述,解码器只可以在irap图像502处开始解码新的cvs 500。因此,子图像视频流602以较低的质量显示,直到达到irap图像/子图像。然后,可以以更高质量解码irap图像,以开始解码子图像视频流602的更高质量版本。这种方法显著提高了视频压缩,而不会对用户的观看体验产生不好影响。
92.对上述办法的一个关注是,改变分辨率所需的时间长度是基于在视频流中到达irap图像之前的时间长度。这是因为解码器无法开始在非irap图像处开始解码子图像视频流602的不同版本。减少这种延迟的一种方法是包括更多的irap图像。但是,这也增大了文件大小。为了平衡功能与译码效率,不同的视角/子图像视频流601至603可以包括不同频率的irap图像。例如,更有可能被查看的视角/子图像视频流601至603可以比其它视角/子图像视频流601至603具有更多的irap图像。例如,在篮球背景中,与篮筐和/或中场相关的视角/子图像视频流601至603可以包括比查看看台或天花板的视角/子图像视频流601至603更频繁的irap图像,因此,用户不太可能查看视角/子图像视频流601至603。
93.这种方法会产生其它问题。具体地,共享poc的子图像视频流601至603中的子图像是单个图像的一部分。如上所述,根据图像类型,图像中的条带包括在nal单元中。在一些视频译码系统中,与单个图像相关的所有nal单元都被限制为包括相同的nal单元类型。当不同的子图像视频流601至603具有不同频率的irap图像时,有些图像既包括irap子图像,也包括非irap子图像。这违反了每个图像只可以使用相同类型的nal单元的约束条件。
94.本发明通过删除图像中条带的所有nal单元使用相同的nal单元类型的约束条件来解决这个问题。例如,图像包括在接入单元中。通过删除此约束条件,接入单元可以包括irap nal单元类型和非irap nal单元类型。此外,可以编码标志以表示图像/接入单元何时包括irap nal单元类型和非irap nal单元类型的混合图像/接入单元。在一些示例中,所述标志是图像标志中的混合nal单元类型(mixed_nalu_types_in_pic_flag)。此外,可以应用约束条件,要求单个混合图像/接入单元只能包括一种类型的irap nal单元和一种类型的非irap nal单元。这可以防止意外的nal单元类型混合情况发生。如果可以存在这样的混合情况,解码器必须设计成管理这样的混合情况。这将不必要地增加所需的硬件复杂性,而不会为编码过程提供额外的好处。例如,混合图像可以包括选自idr_w_radl、idr_n_lp或cra_
nut中的一种类型的irap nal单元。此外,混合图像可以包括选自trail_nut、radl_nut和rasl_nut中的一种类型的非irap nal单元。下面将更详细地讨论该方案的示例性实现方式。
95.图7为包括具有混合nal单元类型的图像的示例性码流700的示意图。例如,码流700可以由编解码系统200和/或编码器300生成,由编解码系统200和/或解码器400根据方法100进行解码。此外,码流700可以包括从多个子图像视频流601至603以多种视频分辨率合并的vr图像视频流600,其中,每个子图像视频流包括位于不同空间位置的cvs 500。
96.码流700包括序列参数集(sequence parameter set,sps)710、多个图像参数集(picture parameter sets,pps)711、多个条带头715和图像数据720。sps 710包括码流700中包括的视频序列中所有图像共用的序列数据。这些数据可以包括图像大小、位深度、译码工具参数、码率限制等。pps 711包括应用于整个图像的参数。因此,视频序列中的每个图像可以参考pps 711。应注意,虽然每个图像都参考pps 711,但是在一些示例中,单个pps 711可以包括多个图像的数据。例如,可以根据类似的参数对多个类似的图像进行编码。在这种情况下,单个pps 711可以包括用于此类类似图像的数据。pps 711可以表示可用于对应图像中的条带的译码工具、量化参数、偏移等。条带头715包括图像中的每个条带特有的参数。因此,视频序列中的每个条带可以有一个条带头715。条带头715可以包括条带类型信息、图像顺序编号(picture order count,poc)、参考图像列表、预测权重、分块入口点、去块效应滤波参数等。应注意,在一些上下文中,条带头715也可以称为分块组头。
97.图像数据720包括根据帧间预测和/或帧内预测进行编码的视频数据以及对应的变换和量化残差数据。例如,视频序列包括译码为图像数据720的多个图像721。图像721是视频序列中的单个帧,因此在显示视频序列时通常以单个单元显示。然而,可以显示子图像723以实现虚拟现实等技术。多个图像721各自参考pps 711。图像721可以分为子图像723、分块和/或条带。子图像723是一致地应用在编码视频序列上的图像721的空间区域。因此,子图像723可以由hmd在vr上下文中显示。此外,可以从对应分辨率的子图像视频流601至603中获得具有指定poc的子图像723。子图像723可以参考sps 710。在一些系统中,条带725称为包括分块的分块组。条带725和/或分块的分块组参考条带头715。条带725可以被定义为图像721的分块内的整数个完整分块或整数个连续完整ctu行,这些分块或行仅包括在单个nal单元中。因此,条带725进一步划分为ctu和/或ctb。根据编码树,将ctu/ctb进一步划分为编码块。然后可以根据预测机制对编码块进行编码/解码。
98.参数集和/或条带725在nal单元中译码。nal单元可以被定义为包括要遵循的数据类型的指示的语法结构,以及包括该数据的rbsp形式的字节,必要时穿插预防混淆字节。更具体地,nal单元是包括图像721中的参数集或条带725以及对应的条带头715的存储单元。具体地,vcl nal单元740是包括图像721中的条带725和对应的条带头715的nal单元。此外,非vcl nal单元730包括参数集,例如sps 710和pps 711。可以使用几种类型的nal单元。例如,sps 710和pps 711可以分别包括在sps nal单元类型(sps_nut)731和pps nal单元类型(pps_nut)732中,都是非vcl nal单元730。
99.如上所述,irap图像502等irap图像可以包括在irap nal单元745中。前置图像504和后置图像506等非irap图像可以包括在非irap nal单元749中。具体地,irap nal单元745是包括从irap图像或子图像中获取的条带725的任何nal单元。非irap nal单元749是包括
从不是irap图像或子图像(例如,前置图像或后置图像)的任何图像中获取的条带725的任何nal单元。irap nal单元745和非irap nal单元749都是vcl nal单元740,因为它们都包括条带数据。在示例性实施例中,irap nal单元745可以包括来自没有前置图像的idr图像或与分别在idr_n_lp nal单元741或idr_w_radl nal单元742中的radl图像相关联的idr图像的条带725。此外,irap nal单元745可以包括来自cra_nut 743中的cra图像的条带725。在示例性实施例中,非irap nal单元749可以包括来自分别在rasl_nut 746、radl_nut 747或trail_nut 748中的rasl图像、radl图像或后置图像的条带725。在一个示例性实施例中,下面显示了按nal单元类型排序的可能nal单元的完整列表。
100.101.[0102][0103]
如上所述,vr视频流可以包括具有不同频率的irap图像的子图像723。这样,用户不太可能查看的空间区域使用更少的irap图像,而用户可能经常查看的空间区域使用更多的irap图像。这样,用户可能定期切换回的空间区域可以快速调整到更高分辨率。当这种方法导致图像721包括irap nal单元745和非irap nal单元749时,图像721称为混合图像。此条件可以由图像标志727中的混合nal单元类型(mixed_nalu_types_in_pic_flag)指示。mixed_nalu_types_in_pic_flag 727可以在pps 711中设置。此外,当表示参考pps 711的每个图像721具有多个vcl nal单元740并且vcl nal单元740不具有相同的nal单元类型(nal_unit_type)值时,mixed_nalu_types_in_pic_flag 727可以被设置为1。此外,当表示参考pps 711的每个图像721具有一个或多个vcl nal单元740并且参考pps 711的每个图像721的vcl nal单元740都具有相同的nal_unit_type值时,mixed_nalu_types_in_pic_flag 727可以被设置为0。
[0104]
此外,可以使用一种约束条件,即当设置有mixed_nalu_types_in_pic_flag 727时,图像721中的一个或多个子图像723的vcl nal单元740都具有第一特定nal单元类型值,并且图像721中的其它vcl nal单元740都具有不同的第二特定nal单元类型值。例如,约束条件可以要求混合图像721包括单一类型的irap nal单元745和单一类型的非irap nal单元749。例如,图像721可以包括一个或多个idr_n_lp nal单元741、一个或多个idr_w_radl nal单元742或一个或多个cra_nut 743,但不是这些irap nal单元745的任何组合。此外,图像721可以包括一个或多个rasl_nut 746、一个或多个radl_nut747或一个或多个trail_nut 748,但不包括这些irap nal单元745的任何组合。
[0105]
在一个示例性实现方式中,图像类型用于定义解码过程。这些过程包括例如通过图像顺序编号(picture order count,poc)推导图像标识、在解码图像缓冲器(decoded picture buffer,dpb)中标记参考图像状态、从dpb输出图像等。图像可以基于包括所有编码图像或其子部分的nal单元类型按类型进行标识。在一些视频译码系统中,图像类型可以包括即时解码刷新(instantaneous decoding refresh,idr)图像和非idr图像。在其它视频译码系统中,图像类型可以包括后置图像、时间子层接入(temporal sub-layer access,tsa)图像、步进式时间子层接入(step-wise temporal sub-layer access,stsa)图像、可解码随机接入前置(random access decodable leading,radl)图像、跳过随机接入前置(random access skipped leading,rasl)图像、断点连接接入(broken-link access,bla)图像、即时随机接入图像和纯随机接入图像。这些图像类型可以根据图像是子层参考图像还是子层非参考图像进一步区分。bla图像可以进一步区分为具有前置图像的bla、具有radl图像的bla和没有前置图像的bla。idr图像可以进一步区分为具有radl图像的idr和没有前置图像的idr。
[0106]
这些图像类型可以用于实现各种视频相关功能。例如,可以使用idr、bla和/或cra图像来实现irap图像。irap图像可能提供以下功能/好处。irap图像的存在可以表示解码过程可以从该图像启动。此功能允许实现随机接入功能,在该功能中,只要irap图像存在于码流中的指定位置,解码过程就开始于该位置。在码流开始时,这种位置不是必要的。irap图像的存在还刷新解码过程,使得从irap图像开始的编码图像(不包括rasl图像)在不参考位于irap图像之前的图像的情况下被译码。因此,位于码流中的irap图像停止传播解码错误。因此,位于irap图像之前的编码图像的解码错误不能通过irap图像并按解码顺序传播到irap图像之后的图像中。
[0107]
irap图像提供了各种功能,但对压缩效率造成了不良影响。因此,irap图像的存在可能会导致码率激增。这种对压缩效率的不良影响有多种原因。例如,irap图像是一种帧内预测图像,比用作非irap图像的帧间预测图像表示的比特要多得多。此外,irap图像的存在违背了帧间预测中使用的时间预测。具体地,irap图像通过从dpb中删除之前的参考图像来刷新解码过程。删除之前的参考图像会降低参考图像的可用性,以对解码顺序在irap图像之后的图像进行译码,因此降低了此过程的效率。
[0108]
idr图像可以采用与其它irap图像类型不同的指示(signal)和推导过程。例如,与idr相关的指示和推导过程可以将poc的最高有效位(most significant bit,msb)部分设置为0,而不是从之前的关键图像中推导出msb。此外,idr图像的条带头可以不包括用于帮助参考图像管理的信息。同时,其它图像类型,如cra、后置、tsa等,可以包括参考图像信息,如参考图像集(reference picture set,rps)或参考图像列表,可用于实现参考图像标记过程。参考图像标记过程是确定dpb中参考图像的状态为用于参考或未用于参考的过程。对于idr图像,可以不指示(signal)这些信息,因为idr的存在表示解码过程应仅将dpb中的所有参考图像标记为未使用的参考图像。
[0109]
除了图像类型外,poc的图像标识还用于多种目的,例如用于管理帧间预测中的参考图像、用于从dpb中输出图像、用于运动矢量缩放、用于加权预测等。例如,在一些视频译码系统中,dpb中的图像可以被标记为用于短期参考、用于长期参考或未用于参考。一旦图像被标记为未用于参考,该图像就不能再用于预测。当不再需要输出这种图像时,可以从dpb中删除图像。在其它视频译码系统中,参考图像可以被标记为短期和长期参考。当不再需要所述图像用于预测参考时,所述参考图像可以被标记为未用于参考。这些状态之间的转换可以由解码的参考图像标记过程控制。隐式滑动窗口过程和/或显式内存管理控制操作(memory management control operation,mmco)过程可以用作解码参考图像标记机制。当参考帧个数等于给定的最大个数(sps中的max_num_ref_frames)时,滑动窗口过程将短期参考图像标记为未用于参考。以先入先出的方式存储短期参考图像使得最近解码的短期图像保存在dpb中。显式mmco过程可以包括多个mmco命令。mmco命令可以将一个或多个短期或长期参考图像标记为“不用于参考”,将所有图像标记为“不用于参考”,或者将当前参考图像或现有短期参考图像标记为“长期参考”,并给长期参考图像分配长期图像索引。
[0110]
在一些视频译码系统中,参考图像标记操作以及从dpb中输出和删除图像的过程是在对图像进行解码后执行的。其它视频译码系统使用rps进行参考图像管理。rps机制和mmco/滑动窗口过程之间最根本的区别是,对于每个特定条带,rps提供了当前图像或任何后续图像使用的完整参考图像集。因此,在rps中指示了必须保留在dpb中供当前或未来图
像使用的所有图像的完整集合。这与mmco/滑动窗口方案不同,avc方案只指示与dpb的相对变化。在rps概念中,不需要从解码顺序中的早期图像中获得信息来维持dpb中参考图像的正确状态。在一些视频译码系统中,为了利用rps的优势,提高容错性,改变了图像解码和dpb操作的顺序。在一些视频译码系统中,图像标记和缓冲操作中,从dpb中输出和删除解码图像通常都应用在对当前图像进行解码之后。在其它视频译码系统中,rps首先从当前图像的条带头中解码,然后通常在对当前图像进行解码之前执行图像标记和缓冲操作。
[0111]
在vvc中,参考图像管理方法可以总结如下。直接指示并推导两个参考图像列表,表示为列表0和列表1。这两个参考列表不是基于如上所述的rps或滑动窗口加mmco过程。参考图像标记直接基于参考图像列表0和1,利用参考图像列表中的活动和非活动表项,而在ctu的帧间预测中,只有活动表项可以用作参考索引。用于推导两个参考图像列表的信息由sps、pps和条带头中的语法元素和语法结构指示(signal)。预定义的rpl结构在sps中指示,以便通过在条带头中参考来使用。为所有类型的条带生成两个参考图像列表,包括双向帧间预测(b)条带、单向帧间预测(p)条带和帧内预测(i)条带。可以在不使用参考图像列表初始化过程或参考图像列表修改过程的情况下构建两个参考图像列表。长期参考图像(long-term reference picture,ltrp)由poc lsb标识。增量poc msb周期可以为ltrp指示,如逐幅图像确定。
[0112]
为了对视频图像进行编码,首先对图像进行分割,并将各个分割部分编码到码流中。图像分割方案有多种。例如,图像可以被分割成常规条带、非独立条带、分块(tile)和/或根据波前并行处理(wavefront parallel processing,wpp)进行分割。为了简单起见,hevc对编码器进行限制,使得在将条带分割成用于视频编码的ctb组时,只能使用常规条带、非独立条带、分块、wpp及其组合。这种分割方式可以用于支持最大传输单元(maximum transfer unit,mtu)大小匹配、并行处理和减小端到端时延。mtu表示单个数据包能够传输的最大数据量。如果数据包载荷超过mtu,则通过分片过程将数据包载荷划分为两个数据包。
[0113]
常规条带,也简称为条带,是图像分割后得到的部分,可以独立于同一图像中的其它常规条带重建,但是由于存在环路滤波操作,还存在相互依赖关系。每个常规条带被封装在自己的网络抽象层(network abstraction layer,nal)单元中进行传输。此外,为了支持独立重建,可以禁用帧内预测(帧内样本预测、运动信息预测、编码模式预测)和跨条带边界的熵编码依赖。这种独立重建支持并行化。例如,基于常规条带的并行化减少了处理器间或核间通信。然而,由于常规条带都是独立的,因此每个条带都与单独的条带头相关联。由于每个条带都具有条带头比特开销,且缺乏跨条带边界的预测,所以使用常规条带会产生大量的编码开销。此外,可以使用常规条带来支持匹配mtu大小要求。具体地,由于常规条带封装在单独的nal单元中,并且可以进行独立编码,所以每个常规条带需要小于mtu方案中的mtu,以避免该条带被拆分成多个数据包。因此,为了实现并行化mtu大小匹配,图像中的条带布局会互相矛盾。
[0114]
非独立条带与常规条带类似,但缩短了条带头,可以在不破坏帧间预测的情况下对图像树块边界进行分割。相应地,非独立条带允许将常规条带分散到多个nal单元,这样可以在完成整个常规条带的编码之前,先将该常规条带的一部分发送出去,从而减小端到端时延。
[0115]
图像可以分割为分块组/条带和分块。分块是覆盖图像的矩形区域的ctu序列。分块组/条带包括图像的多个分块。光栅扫描分块组模式和矩形分块组模式可用于创建分块。在光栅扫描分块组模式中,一个分块组包括一个图像的分块光栅扫描中的分块序列。在矩形条带分块组模式中,分块组包括一个图像的若干个分块,这些分块共同组成图像的矩形区域。矩形分块组中的分块按分块组的分块光栅扫描顺序排列。例如,分块可以是图像中由水平和垂直边界形成的分割部分,这些边界形成了分块的列和行。分块可以按光栅扫描顺序(从右到左、从上到下)进行编码。ctb的扫描顺序为在一个分块内执行扫描的顺序。相应地,在进行到下一个分块中的ctb之前,第一分块中的ctb按照光栅扫描顺序进行编码。与常规条带类似,分块消除了对帧间预测依和熵解码的依赖。但是,单独的nal单元中可以不包括分块,因此,分块不能用于mtu大小匹配。每个分块可以由一个处理器/核处理,用于对相邻分块进行解码的处理单元之间的帧间预测所采用的处理器间/核间通信可以限于传输共享的条带头(当相邻分块在同一条带中时)以及共享与环路滤波相关的重建样本和元数据。当条带中包括多个分块时,可以在条带头中指示除条带中的第一入口点(entry point)偏移之外的每个分块的入口点字节偏移。对于每个条带和分块,需要满足以下条件中的至少一个:(1)条带中的所有编码树块属于同一分块;(2)分块中的所有编码树块属于同一条带。
[0116]
在wpp中,图像被分割成单行ctb。熵解码和预测机制可以使用其它行中的ctb的数据。并行处理通过ctb行的并行解码实现。例如,当前行可以与前一行并行解码。但是,当前行的解码会比前几行的译码过程延迟两个ctb。这种延迟确保在对当前ctb进行译码之前,与位于当前行中的当前ctb上方和右侧ctb相关的数据可用。当用图形表示时,这种方法显示为波面(wavefront)。这种交错式开始解码可以使用与图像包括的ctb行一样多的处理器/核来实现并行化。由于允许在图像内的相邻树块行之间进行帧间预测,因此可能需要大量处理器间/核间通信来实现帧内预测。wpp分割不考虑nal单元大小。因此,wpp不支持mtu大小匹配。然而,常规条带可以与wpp结合使用,并具有一定的译码开销,以根据需要实现mtu大小匹配。最终,波前段可以正好包含一个ctb行。此外,当使用wpp时,当条带在ctb行中开始时,条带应在同一ctb行中结束。
[0117]
分块也可以包括运动约束分块集。运动约束分块集(motion constrained tile set,mcts)是一种分块集,设计目的是限制相关运动矢量指向mcts内部的整样本位置和指向仅需要mcts内部的整样本位置进行插值的分数样本位置。此外,不允许将根据mcts外部的块推导出的运动矢量候选用于时间运动矢量预测。这样,在分块都包括在mcts中的情况下,每个mcts可以独立解码。时间mcts补充增强信息(supplemental enhancement information,sei)消息可以用于表示码流中存在mcts并指示所述mcts。mcts sei消息提供补充信息(详述为sei消息语义的一部分),该补充信息可以用于提取mcts子码流,以生成用于mcts集的一致性码流。该信息包括多个提取信息集,每个提取信息集定义多个mcts集并且包括要在mcts子码流提取过程使用的替换视频参数集(video parameter set,vps)、序列参数集(sequence parameter set,sps)和图像参数集(picture parameter set,pps)的原始字节序列载荷(raw bytes sequence payload,rbsp)字节。因为一个或所有条带地址相关的语法元素(包括first_slice_segment_in_pic_flag和slice_segment_address)可以在提取的子码流中采用不同的值,所以在按照mcts子码流提取过程提取子码流时,可以重写或替换参数集(vps、sps、pps),并更新条带头。
[0118]
vr应用,也称为360度视频应用,可以仅显示完整球体的一部分,因此仅显示整个图像的子集。可以采用基于超文本传输协议(hypertext transfer protocol,dash)机制的动态自适应流的视角相关360传输来降低码率,并支持通过流机制传输360度视频。此机制将球体/投影图像划分为多个mcts,例如通过使用立方体投影(cubemap projection,cmp)。两个或两个以上码流可以用不同的空间分辨率或质量进行编码。当将数据传送到解码器时,将传输来自高分辨率/质量码流的mcts,用于要显示的视角(例如,前视角)。将针对其它视角传输来自低分辨率/质量码流的mcts。这些mcts以一定的方式打包,然后发送到接收器进行解码。期望用户查看的视角由高分辨率/高质量的mcts表示,以创建正面的观看体验。当用户的头转动以查看另一个视角(例如,左视角或右视角)时,显示的内容在系统正在为新视角获取高分辨率/质量mcts的短时间内来自较低分辨率/质量视角。当用户头部旋转以查看另一个视角时,用户头部旋转的时间与看到视角的更高分辨率/质量表示的时间之间存在延迟。此延迟取决于系统为该视角获取更高分辨率/质量mcts的速度,而这反过来又取决于irap周期。irap周期是两个irap发生之间的间隔。此延迟与irap周期有关,因为新视角的mcts只能从irap图像开始解码。
[0119]
例如,如果irap周期每一秒钟编码一次,则以下情况适用。如果用户的头在系统开始获取新的片段/irap周期之前转动以查看新的视角,则延迟的最佳情况与网络往返延迟相同。在这种情况下,系统将能够立即为新视角请求更高分辨率/质量的mcts,因此唯一的延迟是网络往返延迟,即提取请求的延迟加上所请求的mcts的传输时间,假设最小缓冲延迟可以设置为约0,传感器延迟很小,可以忽略不计。例如,网络往返延迟可以在200毫秒左右。如果用户的头在系统刚刚请求下一个片段之后转头查看新视角,则延迟的最坏情况为irap周期 网络往返延迟。码流可以用更频繁的irap图像编码,使得irap周期更短,以改善上面的最坏情况,因为这减少了总体延迟。然而,随着压缩效率降低,这种方法会增加带宽要求。
[0120]
在示例性实现方式中,允许同一经译码图像中的子图像包括不同的nal_unit_type值。此机制说明如下。图像可以分为子图像。子图像是一组矩形的分块组/条带,以分块组开始,所述分块组的tile_group_address等于0。每个子图像可以参考对应的pps,因此可以具有单独的分块分区。可以在pps中表示存在子图像。在解码过程中,每个子图像都被视为图像。跨子图像边界的环内滤波可能始终禁用。子图像宽度和高度可以以亮度ctu大小为单位表示。子图像在图像中的位置可以不被指示,但可以使用以下规则推导。子图像以ctu光栅扫描顺序在图像中获取下一个这样的未占用位置,该图像足够大,可以在图像边界内包含子图像。用于解码每个子图像的参考图像是通过从解码图像缓冲器中的参考图像中提取与当前子图像并置的区域来生成的。提取的区域是解码的子图像,因此帧间预测发生在图像内相同大小和相同位置的子图像之间。在这种情况下,允许编码图像中的不同nal_unit_type值使得源自随机接入图像的子图像和源自非随机接入图像的子图像能够在没有实质困难(例如,没有vcl级别的修改)的情况下合并到相同的编码图像中。这种好处也适用于基于mcts的编码。
[0121]
在其它情况下,允许在编码图像中使用不同的nal_unit_type值可能是有益的。例如,用户可以比其它区域更频繁地查看360度视频内容的一些区域。为了在译码效率和mcts/基于子图像的视角相关360度视频传输中的平均可比质量视角切换延迟之间建立更
好的平衡,可以为比其它区域更常见的区域编码更频繁的irap图像。可比质量视角切换延迟是用户从第一视角切换到第二视角时经历的延迟,直到第二视角的呈现质量达到与第一视角相当的呈现质量。
[0122]
另一种实现方式采用以下解决方案来支持图像中的混合nal单元类型,包括poc推导和参考图像管理。参数集中存在标志(sps_mixed_til_groups_in_pic_flag),该标志由分块组直接或间接参考,以表示是否可能存在具有混合irap和非irap子图像的图像。对于包括idr分块组的nal单元,对应的分块组标头中存在标志(poc_msb_reset_flag),以表示是否在图像的poc推导中重置poc msb。定义了一个与图像相关联的名为picrefreshflag的变量。此标志表示在对图像进行解码时是否应刷新poc推导和dpb状态。picrefreshflag值的推导方式如下:如果当前分块组包括在码流的第一接入单元中,则picrefreshflag被设置为1。否则,如果当前分块组是idr分块组,则picrefreshflag被设置为等于sps_mixed_tile_groups_in_pic_flag?poc_msb_reset_flag:1。否则,如果当前分块组是cra分块组,则以下情况适用。如果当前接入单元是译码序列的第一个接入单元,则picrefreshflag被设置为1。当接入单元紧跟序列结束nal单元或关联变量handlecraasfirstpicincvsflag被设置为1时,当前接入单元是译码序列的第一个接入单元。否则,picrefreshflag被设置为0(例如,当前分块组不属于码流中的第一接入单元,也不是irap分块组)。
[0123]
当picrefreshflag等于1时,在推导图像的poc期间,poc msb(picordercntmsb)的值将重置为0。用于参考图像管理的信息,如参考图像集(reference picture set,rps)或参考图像列表(reference picture list,rpl),无论对应的nal单元类型如何,都会在分块组/条带头中指示。在每个分块组开始解码时构建参考图像列表,不考虑nal单元类型。参考图像列表可以包括rpl方法的refpiclist[0]和refpiclist[1]、rps方法的refpiclist0[]和refpiclist1[]或类似的列表,包括用于图像的帧间预测操作的参考图像。当picrefreshflag等于1时,在参考图像标记过程中,dpb中的所有参考图像都被标记为“未用于参考”。
[0124]
这种实现方式与某些问题有关。例如,当不可以在图像中混合nal_unit_type值时,当图像是否为irap图像的推导和变量norasloutputflag的推导在图像级别描述时,解码器可以在接收到任何图像的第一vcl nal单元之后执行这些推导。然而,由于支持图像中的混合nal单元类型,解码器在执行上述推导之前必须等待图像的其它vcl nal单元到达。在最坏的情况下,解码器必须等待图像的最后一个vcl nal单元到达。此外,这些系统可以在idr nal单元的分块组标头中指示(signal)标志,以表示poc msb是否在图像的poc推导中重置。该机制存在以下问题。此机制不支持混合cra nal单元类型和非irap nal单元类型的情况。此外,当irap(idr或cra)nal单元是否与图像中的非irap nal单元混合的状态发生变化时,在vcl nal单元的分块组/条带头中指示(signal)此信息将要求在码流提取或合并期间更改值。每当用户请求视频时,就会发生条带头的重写,因此需要大量的硬件资源。此外,除了特定irap nal单元类型和特定非irap nal单元类型的混合之外,可以存在图像中不同nal单元类型的一些其它混合。这种灵活性不能为实际用例提供支持,同时它们使编解码器的设计复杂化,这不必要地增加了解码器的复杂性,从而增加了相关的实现成本。
[0125]
一般来说,本发明描述了在视频译码中支持基于子图像或mcts的随机接入的技术。更具体地,本发明描述了用于支持图像中混合nal单元类型的改进设计,所述图像用于
支持子图像或基于mcts的随机接入。这些技术的描述基于vvc标准,但也适用于其它视频/媒体编解码器规范。
[0126]
为了解决上述问题,公开了以下示例性实现方式。这些实现方式可以单独应用,也可以组合应用。在一个示例中,每个图像都与图像是否包括混合nal_unit_type值的指示相关联。此指示在pps中指示。此指示支持确定是否重置poc msb和/或通过将所有参考图像标记为未用于参考来重置dpb。当在pps中指示(signal)所述指示时,pps中的值的改变可以在合并或单独提取期间进行。然而,这是可以接受的,因为在这种码流提取或合并期间,pps被重写并被其它机制取代。
[0127]
或者,此指示可以在分块组标头中指示,但对于图像的所有分块组,此指示必须相同。但是,在这种情况下,在mcts/子图像序列的子码流提取过程中,可能需要更改该值。或者,此指示可以在nal单元标头中指示,但对于图像的所有分块组,此指示必须相同。但是,在这种情况下,在mcts/子图像序列的子码流提取过程中,可能需要更改该值。或者,可以通过定义这类其它vcl nal单元类型来指示此指示,当用于图像时,图像的所有vcl nal单元都需要具有相同的nal单元类型值。但是,在这种情况下,在mcts/子图像序列的子码流提取过程中,可能需要更改vcl nal单元的nal单元类型值。或者,可以通过定义这些其它irap vcl nal单元类型来指示此指示,当用于图像时,图像的所有vcl nal单元都应具有相同的nal单元类型值。但是,在这种情况下,在mcts/子图像序列的子码流提取过程中,可能需要更改vcl nal单元的nal单元类型值。或者,具有至少一个具有任何irap nal单元类型的vcl nal单元的每个图像可以与图像是否包括混合nal单元类型值的指示相关联。
[0128]
此外,可以应用约束条件,使得通过仅允许混合irap和非irap nal单元类型,以有限的方式允许在图像中混合nal_unit_type值。对于任何特定图像,所有vcl nal单元都具有相同的nal单元类型,或者某些vcl nal单元具有特定的irap nal单元类型,其余的具有特定的非irap vcl nal单元类型。换句话说,任何特定图像的vcl nal单元不能具有多个irap nal单元类型,也不能具有多个非irap nal单元类型。只有当图像不包括混合的nal_unit_type值,并且vcl nal单元具有irap nal单元类型时,所述图像才可被视为irap图像。对于不属于irap图像的任何irap nal单元(包括idr),poc msb不可以重置。对于不属于irap图像的任何irap nal单元(包括idr),dpb不会重置,因此不会将所有参考图像标记为未用于参考。如果图像的至少一个vcl nal单元是irap nal单元,则图像的temporalid可以被设置为0。
[0129]
以下是上述一个或多个方面的具体实现方式。irap图像可以定义为经译码图像,mixed_nalu_types_in_pic_flag的值等于0,并且每个vcl nal单元的nal_unit_type在idr_w_radl至rsv_irap_vcl13范围内(包括端值)。示例性pps的语法和语义如下:
[0130]
mixed_nalu_types_in_pic_flag被设置为0,表示参考pps的每个图像都有多个vcl nal单元,并且这些nal单元的nal_unit_type值不相同。mixed_nalu_types_in_pic_flag被设置为0,表示参考pps的每个图像的vcl nal单元具有相同的nal_unit_type值。
[0131]
示例性分块组/条带头的语法如下:
[0132]
[0133][0134][0135]
示例性nal单元报头的语义如下:对于任何特定图像的vcl nal单元,需要满足以下两个条件之一。所有vcl nal单元都具有相同的nal_unit_type值。一些vcl nal单元具有
特定的irap nal单元类型值(即,在idr_w_radl至rsv_irap_vcl13范围内(包括端值)的nal_unit_type的值),而所有其它vcl nal单元具有特定的非irap vcl nal单元类型(即,在trail_nut至rsv_vcl_7范围内(包括端值),或在rsv_vcl14至rsv_vcl15范围内(包括端值)的nal_unit_type的值)。nuh_temporal_id_plus1-1表示nal单元的时间标识符。nuh_temporal_id_plus1的值应不等于0。
[0136]
变量temporalid的推导方式如下:
[0137]
temporalid=nuh_temporal_id_plus1-1
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(7-1)
[0138]
当nal_unit_type在idr_w_radl至rsv_irap_vcl13的范围内(包括端值)时,对于图像的vcl nal单元,无论图像的其它vcl nal单元的nal_unit_type值如何,图像的所有vcl nal单元的temporalid均需要等于0。同一个接入单元中所有vcl nal单元的temporalid值必须相同。经译码图像或接入单元的temporalid值为经译码图像或接入单元的vcl nal单元的temporalid值。
[0139]
经译码图像的示例性解码过程如下:对于当前图像currpic,解码过程如下:本文中对nal单元的解码进行说明。以下解码过程使用分块组标头层中及以上的语法元素。根据本文中所规定来推导与图像顺序编号相关的变量和函数。仅对图像的第一个分块组/条带调用上述解码过程。在每个分块组/条带的解码过程开始时,调用参考图像列表构建的解码过程来推导参考图像列表0(refpiclist[0])和参考图像列表1(refpiclist[1])。如果当前图像是idr图像,则可以出于码流一致性检查的目的调用用于参考图像列表构建的解码过程,但是对于对当前图像或按照解码顺序在当前图像之后的图像可能不是必要的。
[0140]
用于参考图像列表构建的解码过程如下:在每个分块组的解码过程开始时调用所述解码过程。参考图像通过参考索引寻址。参考索引是参考图像列表的索引。解码i分块组时,不使用参考图像列表对分块组数据进行解码。解码p分块组时,仅使用参考图像列表0(即refpiclist[0])对分块组数据进行解码。当对b分块组进行解码时,参考图像列表0和参考图像列表1(refpiclist[1])用于对分块组数据进行解码。在每个分块组的解码过程开始时,推导参考图像列表refpiclist[0]和refpiclist[1]。参考图像列表用于标记参考图像或对分块组数据进行解码。对于idr图像的任一分块组或非idr图像的i分块组,可以出于码流一致性检查的目的推导refpiclist[0]和refpiclist[1],但是对于对当前图像或在解码顺序上位于当前图像之后的图像进行解码是不必要的。对于p分块组,可以出于码流一致性检查的目的推导refpiclist[1],但是对于对当前图像或在解码顺序上位于当前图像之后的图像进行解码是不必要的。
[0141]
图8为示例性视频译码设备800的示意图。视频译码设备800适用于实现本文所述的所公开示例/实施例。视频译码设备800包括下行端口820、上行端口850和/或收发单元(tx/rx)810。收发单元810包括发送器和/或接收器,用于通过网络在上行和/或下行进行数据通信。视频译码设备800还包括:处理器830,包括用于处理数据的逻辑单元和/或中央处理单元(central processing unit,cpu);和用于存储数据的存储器832。视频译码设备800还可以包括与上行端口850和/或下行端口820耦合的电组件、光电(optical-to-electrical,oe)组件、电光(electrical-to-optical,eo)组件,和/或无线通信组件,用于通过电通信网络、光通信网络或无线通信网络进行数据通信。视频译码设备800还可以包括输入和/或输出(input/output,i/o)设备860,用于与用户进行数据通信。i/o设备860可以
包括输出设备,例如显示视频数据的显示器、输出音频数据的扬声器等。i/o设备860还可以包括键盘、鼠标、轨迹球等输入设备和/或与上述输出设备进行交互的对应接口。
[0142]
处理器830由硬件和软件实现。处理器830可以实现为一个或多个cpu芯片、一个或多个核(例如,作为多核处理器)、一个或多个现场可编程门阵列(field-programmable gate array,fpga)、一个或多个专用集成电路(application specific integrated circuit,asic)以及一个或多个数字信号处理器(digital signal processor,dsp)。处理器830与下行端口820、tx/rx 810、上行端口850和存储器832通信。处理器830包括译码模块814。译码模块814实现本文描述的公开实施例,例如方法100、方法900和/或方法1000,它们可以采用cvs 500、vr图像shipin600和/或码流700。译码模块814还可以实现本文描述的任何其它方法/机制。此外,译码模块814可以实现编解码系统200、编码器300和/或解码器400。例如,译码模块814可以在pps中设置标志,表示图像何时包括irap和非irap nal单元,并将这些图像限制为仅包括单一类型的irap nal单元和单一类型的非irap nal单元。因此,译码模块814使视频译码设备800在译码视频数据时提供其它功能和/或译码效率。因此,译码模块814改进了视频译码设备800的功能,并解决了视频译码领域特有的问题。此外,译码模块814影响了视频译码设备800到不同状态的转换。或者,编码模块814可以实现为存储在存储器832中并由处理器830执行的指令(例如实现为存储在非瞬时性介质中的计算机程序产品)。
[0143]
存储器832包括一种或多种存储器类型,例如磁盘、磁带机、固态硬盘、只读存储器(read onlymemory,rom)、随机存取存储器(random access memory,ram)、闪存、三态内容寻址存储器(temary content-addressable memory,tcam)、静态随机存取存储器(static random-access memory,sram)等。存储器832可以用作溢出数据存储设备,以在选择程序来执行时存储这些程序以及存储在执行程序过程中读取的指令和数据。
[0144]
图9为将包括具有混合nal单元类型的图像的cvs 500等视频序列编码到码流700等码流中的示例性方法900的流程图,所述码流700包括从多个视频分辨率的多个子图像视频流601至603合并的vr图像视频流600。方法900可以由编解码系统200、编码器300和/或视频译码设备800等编码器在执行方法100时执行。
[0145]
方法900可以开始于:编码器接收包括多个vr图像等图像的视频序列,并根据用户输入等确定将所述视频序列编码到码流中。在步骤901中,编码器确定当前图像是否包括多个不同类型的子图像。这些类型可以包括具有irap子图像的一部分的图像的至少一个条带和具有非irapnal子图像的一部分的图像的至少一个条带。在步骤903中,编码器将图像的子图像的条带编码到码流中的多个vcl nal单元中。这些vcl nal单元可以包括一个或多个irap nal单元和一个或多个非irap nal单位。例如,编码步骤可以包括将不同分辨率的子码流合并到单个码流中,以发送到解码器。
[0146]
在步骤905中,编码器将pps编码到码流中,并将标志编码到码流中的pps中。在特定示例中,对pps进行编码可以包括改变之前编码的pps以包括标志值,例如响应于合并子码流。当与图像相关联的所有vcl nal单元的nal单元类型值相同时,标志可以被设置为第一值。当包括图像中的一个或多个子图像的vcl nal单元的第一nal单元类型值与包括图像中的一个或多个子图像的vcl nal单元的第二nal单元类型值不同时,标志还可以被设置为第二值。例如,第一nal单元类型值可以表示图像包括irap子图像,第二nal单元类型值可以
表示图像也包括非irap子图像。此外,第一nal单元类型值可以等于idr_w_radl、idr_n_lp或cra_nut中的一个。此外,第二nal单元类型值可以等于trail_nut、radl_nut或rasl_nut中的一个。在一个具体的示例中,该标志可以是mixed_nalu_types_in_pic_flag。在一个特定的示例中,mixed_nalu_types_in_pic_flag可以被设置为1,以便表示参考包括所述标志的pps的每个图像具有多个vcl nal单元。此外,该标志表示与对应图像相关联的vcl nal单元并不都具有相同的nal单元类型(nal_unit_type)值。在另一个特定示例中,mixed_nalu_types_in_pic_flag可以被设置为0,以便表示参考包括所述标志的pps的每个图像具有一个或多个vcl nal单元。此外,所述标志表示对应图像的所有vcl nal单元具有相同的nal_unit_type值。
[0147]
在步骤907中,编码器可以存储码流,以发送到解码器。
[0148]
图10为从码流700等码流中解码包括具有混合nal单元类型的图像的cvs 500等视频序列的示例性方法1000的流程图,所述码流700包括从多个视频分辨率的多个子图像视频流601至603合并的vr图像视频流600。方法1000可以由编解码系统200、解码器400和/或视频译码设备800等解码器在执行方法100时执行。
[0149]
解码器开始接收表示视频序列的经译码数据的码流,例如作为方法900的结果时,开始执行方法1000。在步骤1001中,解码器接收码流。所述码流包括与图像相关联的多个子图像和标志。在一个具体的示例中,码流可以包括pps,所述pps包括标志。此外,子图像包括在多个vcl nal单元中。例如,与子图像相关联的条带包括在vcl nal单元中。
[0150]
在步骤1003中,当所述标志被设置为第一值时,解码器确定与所述图像相关联的所有vcl nal单元的nal单元类型值都相同。此外,当所述标志被设置为第二值时,解码器确定包括所述图像中的一个或多个子图像的vcl nal单元的第一nal单元类型值与包括所述图像中的一个或多个子图像的vcl nal单元的第二nal单元类型值不同。例如,第一nal单元类型值可以表示图像包括irap子图像,第二nal单元类型值可以表示图像也包括非irap子图像。此外,第一nal单元类型值可以等于idr_w_radl、idr_n_lp或cra_nut中的一个。此外,第二nal单元类型值可以等于trail_nut、radl_nut或rasl_nut中的一个。在一个具体的示例中,该标志可以是mixed_nalu_types_in_pic_flag。当表示参考pps的每个图像具有多个vcl nal单元并且vcl nal单元不具有相同的nal单元类型(nal_unit_type)值时,mixed_nalu_types_in_pic_flag可以被设置为1。此外,当参考pps的每个图像具有一个或多个vcl nal单元并且参考pps的每个图像的vcl nal单元都具有相同的nal_unit_type值时,mixed_nalu_types_in_pic_flag可以被设置为0。
[0151]
在步骤1005中,解码器可以根据nal单元类型值对一个或多个子图像进行解码。在步骤1007中,解码器还可以转发一个或多个子图像,以显示为解码视频序列的一部分。
[0152]
图11为用于将包括具有混合nal单元类型的图像的cvs 500等视频序列编码到码流700等码流中的示例性系统1100的示意图,所述码流700包括从多个视频分辨率的多个子图像视频流601至603合并的vr图像视频流600。系统1100可以由编解码系统200、编码器300、解码器400和/或视频译码设备800等编码器和解码器实现。此外,系统1100可以用于实现方法100、方法900和/或方法1000。
[0153]
系统1100包括视频编码器1102。视频编码器1102包括确定模块1101,用于确定图像是否包括多个不同类型的子图像。视频编码器1102还包括编码模块1103,用于将图像的
子图像编码到码流中的多个vcl nal单元中。编码模块1103还用于将标志编码到所述码流中,其中,当与所述图像相关联的所有vcl nal单元的nal单元类型值相同时,所述标志被设置为第一值,当包括所述图像中的一个或多个子图像的vcl nal单元的第一nal单元类型值与包括所述图像中的一个或多个子图像的vcl nal单元的第二nal单元类型值不同时,所述标志被设置为第二值。视频编码器1102还包括存储模块1105,用于存储码流,以发送到解码器。视频编码器1102还包括发送模块1107,用于将码流发送到视频解码器1110。视频编码器1102还可以用于执行方法900的任一步骤。
[0154]
系统1100还包括视频解码器1110。视频解码器1110包括接收模块1111,用于接收码流,所述码流包括与图像相关联的多个子图像和标志,其中,所述子图像包括在多个vcl nal单元中。视频解码器1110还包括确定模块1113,用于当所述标志被设置为第一值时,确定与所述图像相关联的所有vcl nal单元的nal单元类型值都相同。确定模块1113还用于当所述标志被设置为第二值时,解码器确定包括所述图像中的一个或多个子图像的vcl nal单元的第一nal单元类型值与包括所述图像中的一个或多个子图像的vcl nal单元的第二nal单元类型值不同。视频解码器1110还包括解码模块1115,用于根据nal单元类型值解码一个或多个子图像。视频解码器1110还包括转发模块1117,用于转发作为解码视频序列一部分显示的一个或多个子图像。视频解码器1110还可以用于执行方法1000的任一步骤。
[0155]
当第一组件和第二组件之间除了线、迹或其它介质之外没有其它中间组件时,第一组件直接与第二组件耦合。当第一组件和第二组件之间存在线、迹或其它介质之外的其它中间组件时,第一组件间接与第二组件耦合。术语“耦合”及其变体包括直接耦合和间接耦合。除非另有说明否则使用术语“约”是指以下描述的数字的
±
10%。
[0156]
还应当理解,本文中阐述的示例性方法的步骤不一定需要按照所描述的顺序执行,并且这些方法的步骤的顺序应当理解为仅仅是示例性的。同样地,在与本发明各种实施例相一致的方法中,这些方法可以包括其它步骤,并且某些步骤可以省略或合并。
[0157]
虽然本发明提供多个具体实施例,但应当理解,所公开的系统和方法也可通过其它多种具体形式体现,而不会脱离本发明的精神或范围。本发明的示例应被视为说明性而非限制性的,且本发明并不限于本文本所给出的细节。例如,各种元件或组件可以在另一系统中组合或合并,或者某些特征可以省略或不实现。
[0158]
此外,在不脱离本发明的范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、组件、技术或方法进行组合或集成。其它改变、替换、更替示例对本领域技术人员而言是显而易见的,均不脱离本文所公开的精神和范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献