一种存储码流的装置、方法及分发码流的系统与流程

文档序号:33343189发布日期:2023-03-04 02:59阅读:26来源:国知局
一种存储码流的装置、方法及分发码流的系统与流程
一种存储码流的装置、方法及分发码流的系统
1.本技术是分案申请,原申请的申请号是202080019678.8,原申请日是2020年03月11日,原申请的全部内容通过引用结合在本技术中。
技术领域
2.本发明大体上涉及视频译码,具体涉及视频译码中图像的子图像的译码。


背景技术:

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


技术实现要素:

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