掌桥专利:专业的专利平台
掌桥专利
首页

不允许未使用的层包括在多层视频码流中

文献发布时间:2024-04-18 19:59:31


不允许未使用的层包括在多层视频码流中

相关申请案交叉申请

本专利申请要求由王业奎于2019年9月24日提交的、发明名称为“不允许不必要的和未使用的层包括在多层视频码流中(Disallowing Unnecessary And Unused Layers InMulti-Layer Video Bitstreams)”的申请号为62/905,136的美国临时专利申请的权益,其内容通过引用的方式并入本申请中。

技术领域

本发明大体上描述了视频译码中多层视频码流的技术。更具体地,本发明确保在视频译码中,不必要的和/或未使用的层不允许包括在多层码流中。

背景技术

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

发明内容

第一方面涉及一种视频解码器实现的解码方法,包括:所述视频解码器接收包括视频参数集(video parameter set,VPS)和多个层的视频码流,其中,每个层包括在所述VPS指定的至少一个输出层集(output layer set,OLS)中;所述视频解码器对来自所述多个层中的一个层的图像进行解码。

所述方法提供了不允许未使用的层包括在多层视频码流中的技术。也就是说,任何未在至少一个输出层集(output layer set,OLS)中使用的层都被约束为不包括在多层码流中。这避免了译码过程中的无关信息,提高了译码效率。因此,视频译码中的编码器/解码器(又称为编解码器)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时为用户提供更好的体验。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述图像包括在所述至少一个OLS的输出层中,每个层在所述OLS中指定。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,从所述至少一个OLS中选择输出层用于所述解码。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,从所选择的输出层中选择所述图像用于所述解码。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述多个层中的每个层包括视频编码层(video coding layer,VCL)网络抽象层(network abstractionlayer,NAL)单元和相关联的非VCL NAL单元的集合,所述VCL NAL单元都具有特定层标识符(identifier,ID)值。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述至少一个OLS包括两个输出层,所述两个输出层中的一个输出层参考所述两个输出层中的另一个输出层。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述至少一个OLS包括多个输出层。

可选地,在上述任一个方面中,在所述方面的另一种实现方式中,对于所述VPS中指定的具有特定层ID值的所述多个层中的每个层,所述至少一个OLS中的所述层中的一个层也应具有所述特定层ID值。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,在电子设备的显示器上显示解码图像。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述视频解码器接收包括第二视频参数集(video parameter set,VPS)和第二多个层的第二视频码流,其中,至少一个层不包括在所述第二VPS指定的至少一个输出层集(output layer set,OLS)中;所述第二视频码流被接收到之后,采取一些其它纠正措施,以确保在对来自所述第二多个层中的一个层的图像进行解码之前,对应于所述第二视频码流的一致性码流被接收到。

第二方面涉及一种视频编码器实现的对视频码流进行编码的方法。所述方法包括视频编码器实现的编码方法,所述方法包括:所述视频编码器生成多个层和指定一个或多个输出层集(output layer set,OLS)的视频参数集(video parameter set,VPS),其中,所述视频编码器被约束,使得所述多个层中的每个层都包括在所述VPS指定的所述OLS中的至少一个OLS中;所述视频编码器将所述多个层和所述VPS编码到视频码流中;所述视频编码器存储所述视频码流,用于传输到视频解码器。

所述方法提供了不允许未使用的层包括在多层视频码流中的技术。也就是说,任何未在至少一个输出层集(output layer set,OLS)中使用的层都被约束为不包括在多层码流中。这避免了译码过程中的无关信息,提高了译码效率。因此,视频译码中的编码器/解码器(又称为编解码器)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时为用户提供更好的体验。

可选地,根据上述任一方面中,在所述方面的另一种实现方式中,所述一个或多个OLS中的每个OLS包括一个或多个输出层,所述输出层中的每个输出层包括一个或多个图像,不存在从所述一个或多个OLS中排除的层。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述多个层中的每个层包括视频编码层(video coding layer,VCL)网络抽象层(network abstractionlayer,NAL)单元和相关联的非VCL NAL单元的集合,所述VCL NAL单元都具有特定层标识符(identifier,ID)值。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述OLS中的一个OLS包括两个输出层,所述两个输出层中的一个输出层参考所述两个输出层中的另一个输出层。

可选地,在前述任一方面中,在所述方面的另一种实现方式中,对于所述VPS中指定的具有特定层ID值的所述多个层中的每个层,所述一个或多个OLS中的所述层中的一个层也应具有所述特定层ID值。

第三方面涉及一种解码设备。所述解码设备包括:接收器,所述接收器用于接收包括视频参数集(video parameter set,VPS)和多个层的视频码流,其中,每个层包括在所述VPS指定的至少一个输出层集(output layer set,OLS)中;耦合到所述接收器的存储器,所述存储器存储指令;耦合到所述存储器的处理器,所述处理器用于执行所述指令,以使所述解码设备对来自所述多个层中的一个层的图像进行解码以获得解码图像。

解码设备提供了不允许未使用的层包括在多层视频码流中的技术。也就是说,任何未在至少一个输出层集(output layer set,OLS)中使用的层都被约束为不包括在多层码流中。这避免了译码过程中的无关信息,提高了译码效率。因此,视频译码中的编码器/解码器(又称为编解码器)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时为用户提供更好的体验。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述图像包括在所述至少一个OLS的输出层中,每个层在所述OLS中指定。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述处理器还用于在对所述图像进行解码之前,从所述至少一个OLS中选择输出层。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述处理器还用于在所述输出层被选择之后,从所述输出层中选择所述图像。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述多个层中的每个层包括视频编码层(video coding layer,VCL)网络抽象层(network abstractionlayer,NAL)单元和相关联的非VCL NAL单元的集合,所述VCL NAL单元都具有特定层标识符(identifier,ID)值。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述至少一个OLS包括两个输出层,所述两个输出层中的一个输出层参考所述两个输出层中的另一个输出层。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述至少一个OLS包括一个或多个输出层。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述处理器用于执行所述指令,以进一步使所述解码设备执行以下操作:接收包括第二视频参数集(videoparameter set,VPS)和第二多个层的第二视频码流,其中,至少一个层不包括在所述第二VPS指定的至少一个输出层集(output layer set,OLS)中;所述第二视频码流被接收到之后,采取一些其它纠正措施,以确保在对来自所述第二多个层中的一个层的图像进行解码之前,对应于所述第二视频码流的一致性码流被接收到。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,包括用于显示所述解码图像的显示器。

第四方面涉及一种解码设备。所述编码设备包括:包括指令的存储器;耦合到所述存储器的处理器,所述处理器用于执行所述指令,以使所述编码设备执行以下操作:生成多个层和指定一个或多个输出层集(output layer set,OLS)的视频参数集(videoparameter set,VPS),其中,所述视频编码器被约束,使得所述多个层中的每个层都包括在所述VPS指定的所述OLS中的至少一个OLS中;将所述多个层和所述VPS编码到视频码流中;耦合到所述处理器的发送器,所述发送器用于向视频解码器发送所述视频码流。

解码设备提供了不允许未使用的层包括在多层视频码流中的技术。也就是说,任何未在至少一个输出层集(output layer set,OLS)中使用的层都被约束为不包括在多层码流中。这避免了译码过程中的无关信息,提高了译码效率。因此,视频译码中的编码器/解码器(又称为编解码器)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时为用户提供更好的体验。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述一个或多个OLS中的每个OLS包括一个或多个输出层,所述输出层中的每个输出层包括一个或多个图像。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述多个层中的每个层包括视频编码层(video coding layer,VCL)网络抽象层(network abstractionlayer,NAL)单元和相关联的非VCL NAL单元的集合,所述VCL NAL单元都具有特定层标识符(identifier,ID)值。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,所述OLS中的一个OLS包括两个输出层,所述两个输出层中的一个输出层参考所述两个输出层中的另一个输出层。

可选地,在前述任一方面中,在所述方面的另一种实现方式中,对于所述VPS中指定的具有特定层ID值的所述多个层中的每个层,所述一个或多个OLS中的所述层中的一个层也应具有所述特定层ID值。

第五方面涉及一种译码装置。所述译码装置包括:接收器,用于接收用于编码的图像或接收用于解码的码流;耦合到所述接收器的发送器,所述发送器用于将所述码流发送到解码器或将解码图像发送到显示器;耦合到所述接收器和所述发送器中的至少一个的存储器,所述存储器用于存储指令;耦合到所述存储器的处理器,所述处理器用于执行存储在所述存储器中的所述指令,以执行本文公开的任一方法。

译码装置提供了不允许未使用的层包括在多层视频码流中的技术。也就是说,任何未在至少一个输出层集(output layer set,OLS)中使用的层都被约束为不包括在多层码流中。这避免了译码过程中的无关信息,提高了译码效率。因此,视频译码中的编码器/解码器(又称为编解码器)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时为用户提供更好的体验。

可选地,根据上述任一方面,在所述方面的另一种实现方式中,包括用于显示所述解码图像的显示器。

第六方面涉及一种系统。所述系统包括编码器;与所述编码器通信的解码器,其中,所述编码器或所述解码器包括本文公开的解码设备、编码设备或译码装置。

所述系统提供了不允许未使用的层包括在多层视频码流中的技术。也就是说,任何未在至少一个输出层集(output layer set,OLS)中使用的层都被约束为不包括在多层码流中。这避免了译码过程中的无关信息,提高了译码效率。因此,视频译码中的编码器/解码器(又称为编解码器)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时为用户提供更好的体验。

第七方面涉及一种译码模块。所述译码模块包括:接收模块,用于接收图像进行编码或接收码流进行解码;发送模块,耦合到所述接收模块并用于向解码模块发送所述码流或向显示模块发送经解码图像;存储模块,耦合到所述接收模块或所述发送模块中的至少一个并用于存储指令;处理模块,耦合到所述存储模块并用于执行存储在所述存储模块中的所述指令,以执行本文公开的任何一种方法。

译码模块提供了不允许未使用的层包括在多层视频码流中的技术。也就是说,任何未在至少一个输出层集(output layer set,OLS)中使用的层都被约束为不包括在多层码流中。这避免了译码过程中的无关信息,提高了译码效率。因此,视频译码中的编码器/解码器(又称为编解码器)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时为用户提供更好的体验。

为了清楚起见,上述任一实施例可以与上述其它实施例中任何一个或多个组合以创建本发明范围内的新实施例。

从结合附图和权利要求书的以下详细描述中,将更清楚地理解这些和其它特征。

附图说明

为了更完整地理解本发明,结合附图和具体实施方式,参考以下简要描述,其中,相同的附图标记表示相同的部件。

图1为对视频信号进行译码的示例性方法的流程图。

图2为用于视频译码的示例性编码和解码(编解码)系统的示意图。

图3为示例性视频编码器的示意图。

图4为示例性视频解码器的示意图。

图5示出了一种用于空间可适性的多层译码的示例。

图6示出了使用输出层集(output layer set,OLS)的多层译码的示例。

图7示出了视频码流的实施例。

图8为对编码视频码流进行解码的方法的实施例。

图9为对编码视频码流进行编码的方法的实施例。

图10为视频译码设备的示意图。

图11为译码模块的一个实施例的示意图。

具体实施方式

首先应理解,尽管下文提供了一个或多个实施例的说明性实现方式,但所公开的系统和/或方法可以使用任何数量的技术来实现,无论该技术是当前已知的技术还是现有的技术。本发明不应限于下文所说明的说明性实现方式、附图和技术,包括本文所说明和描述的示例性设计和实现方式,而是可在所附权利要求书的范围以及其等效部分的完整范围内修改。

以下术语的定义如下所述,除非在本文相反的上下文中使用。具体地,以下定义旨在更加清晰地描述本发明。但是,术语在不同的上下文中可能会有不同的描述。因此,以下定义应当视为补充信息,不应当视为对此处为这些术语提供的描述的任何其它定义进行限制。

码流是包括视频数据的位序列,这些视频数据被压缩以在编码器和解码器之间传输。编码器是一种采用编码过程将视频数据压缩到码流中的设备。解码器是一种采用解码过程从码流中重建视频数据进行显示的设备。图像是创建帧或其场的亮度样本和/或色度样本组成的阵列。为了清楚论述,正在编码或解码的图像可以称为当前图像。参考图像是包括可以在根据帧间预测和/或层间预测通过参考对其它图像进行译码时使用的参考样本的图像。参考图像列表是用于帧间预测和/或层间预测的一列参考图像。一些视频译码系统使用两个参考图像列表,这两个参考图像列表可以表示为参考图像列表1和参考图像列表0。参考图像列表结构是包括多个参考图像列表的可寻址语法结构。帧间预测是通过参考与当前图像不同的参考图像中的指示样本对当前图像中的样本进行译码的机制,其中,参考图像和当前图像位于同一层中。参考图像列表结构条目是参考图像列表结构中的可寻址位置,该可寻址位置表示与参考图像列表相关联的参考图像。条带头是译码条带(slice)的一部分,该译码条带包括与条带中表示的分块(tile)中的所有视频数据相关的数据元素。图像参数集(picture parameter set,PPS)是包括与整个图像相关的数据的参数集。更具体地,PPS是一种包括应用于0个或0个以上完整的编码图像的语法元素的语法结构,0个或0个以上完整的编码图像根据每个图像头中的语法元素确定。序列参数集(sequenceparameter set,SPS)是包括与图像序列相关的数据的参数集。接入单元(access unit,AU)是与相同显示时间(例如,相同图像顺序编号)相关联的一个或多个译码图像的集合,这些译码图像用于从解码图像缓冲区(decoded picture buffer,DPB)中输出(例如,显示给用户)。接入单元分隔符(access unit delimiter,AUD)是一种指示符或数据结构,用于指示AU的开始或AU之间的边界。解码视频序列是由解码器重建的准备向用户显示的图像序列。

网络抽象层(network abstraction layer,NAL)单元是一种语法结构,包括原始字节序列载荷(raw byte sequence payload,RBSP)形式的数据、数据类型的指示,并根据需要穿插预防混淆字节。视频编码层(video coding layer,VCL)NAL单元是编码为包括视频数据(例如图像的编码条带)的NAL单元。非VCL NAL单元是包括非视频数据(例如支持视频数据的解码、一致性检查的执行或其它操作的语法和/或参数)的NAL单元。层是VCL NAL单元和相关联的非VCL NAL单元的集合,这些VCL NAL单元共享指定的特征(例如,公共分辨率、帧率、图像大小等)。层的VCL NAL单元可以共享特定NAL单元头层标识符(nuh_layer_id)值。编码图像是图像的编码表示,在接入单元(access unit,AU)内包括具有特定NAL单元头层标识符(nuh_layer_id)值的VCL NAL单元,并且包括图像的所有编码树单元(codingtree unit,CTU)。解码图像是通过将解码过程应用于编码图像而产生的图像。

输出层集(output layer set,OLS)是层集合,其中,一个或多个层被指定为输出层。输出层是指定用于输出(例如,到显示器)的层。第零个(第0个)OLS是只包括最低层(具有最低层标识符的层)的OLS,因此只包括输出层。视频参数集(video parameter set,VPS)是一个数据单元,包括与整个视频相关的参数。层间预测是通过参考参考层中的参考图像对当前层中的当前图像进行译码的机制,其中,当前图像和参考图像包括在同一AU中,参考层包括的nuh_layer_id比当前层包括的nuh_layer_id小。

本文使用以下缩略语:编码树块(coding tree block,CTB)、编码树单元(codingtree unit,CTU)、编码单元(coding unit,CU)、编码视频序列(coded video sequence,CVS)、联合视频专家组(joint video experts team,JVET)、运动约束分块集(motion-constrained tile set,MCTS)、最大传输单元(maximum transfer unit,MTU)、网络抽象层(network abstraction layer,NAL)、图像顺序编号(picture order count,POC)、图像参数集(picture parameter set,PPS)、原始字节序列载荷(raw byte sequence payload,RBSP)、序列参数集(sequence parameter set,SPS)、通用视频编码(versatile videocoding,VVC)和工作草案(working draft,WD)。

图1为对视频信号进行译码的示例性操作方法100的流程图。具体地,在编码器侧对视频信号进行编码。编码过程通过使用各种机制对视频信号进行压缩,以减小视频文件大小。较小的文件大小有利于在减少相关的带宽开销的同时,将压缩的视频文件发送给用户。然后,解码器对压缩的视频文件进行解码,以重建原始视频信号,用于向终端用户显示。解码过程通常与编码过程对应,便于解码器一致地重建视频信号。

在步骤101中,将视频信号输入编码器。例如,视频信号可以是存储在存储器中的未压缩的视频文件。又例如,视频文件可以由视频捕获设备(例如摄像机)捕获,并进行编码以支持视频的直播。视频文件可以包括音频分量和视频分量。视频分量包括一系列图像帧,当按顺序观看时,这些图像帧会产生运动的视觉效果。这些帧包括根据光(本文称为亮度分量(或亮度样本))和颜色(称为色度分量(或色度样本))表示的像素。在一些示例中,这些帧还可以包括深度值以支持三维观看。

在步骤103中,将视频分割为块。分割包括将每个帧中的像素细分为方块和/或矩形块,用于进行压缩。例如,在高效视频编码(High Efficiency Video Coding,HEVC)(还称为H.265和MPEG-H第2部分)中,可以首先将帧划分成编码树单元(coding tree unit,CTU),它们是预定义大小(例如,64个像素×64个像素)的块。CTU包括亮度样本和色度样本。可以使用编码树将CTU划分为块,然后递归细分这些块,直到获得支持进一步编码的配置。例如,帧的亮度分量可以细分,直到各个块包括相对均匀的亮度值。此外,帧的色度分量可以细分,直到各个块包括相对均匀的颜色值。因此,分割机制根据视频帧的内容而不同。

在步骤105中,使用各种压缩机制来压缩在步骤103中分割的图像块。例如,可以使用帧间预测和/或帧内预测。帧间预测旨在利用公共场景中的对象往往出现在连续帧中这一事实。因此,无需在相邻帧中对参考帧中描绘对象的块进行重复描述。具体地,一个对象(如一张桌子)可以在多个帧中保持在恒定的位置。因此,只描述一次桌子,相邻帧可以重新参考参考帧。模式匹配机制可以用于匹配多个帧中的对象。此外,由于对象移动或摄像机移动等,移动对象可以通过多个帧表示。在一个具体的示例中,视频可以通过多个帧显示在屏幕上移动的汽车。运动矢量可以用于描述这种移动。运动矢量是一个二维矢量,提供从帧中对象的坐标到参考帧中该对象的坐标的偏移。因此,帧间预测可以将当前帧中的图像块编码为运动矢量集,表示相对于参考帧中对应块的偏移。

帧内预测对公共帧中的块进行编码。帧内预测利用亮度分量和色度分量往往在帧中聚集这一事实。例如,一棵树的一部分中的一片绿色往往与几片类似的绿色相邻。帧内预测使用多种方向预测模式(例如,HEVC中有33种模式)、平面模式和直流(direct current,DC)模式。方向模式表示当前块与对应方向的邻块的样本类似/相同。平面模式表示可以根据行边缘处的邻块对行/列(例如平面)上的一系列块进行插值。实际上,平面模式通过使用变化值的相对恒定的斜率来表示光/颜色在行/列上的平滑转变。DC模式用于边界平滑,表示块和与所有邻块的样本相关联的平均值类似/相同,所述邻块与方向预测模式的角方向相关联。因此,帧内预测块可以将图像块表示为各种关系预测模式值而非实际值。此外,帧间预测块可以将图像块表示为运动矢量值而非实际值。在任一种情况下,预测块在一些情况下可能无法精确地表示图像块。所有差值都存储在残差块中。可以对残差块进行变换以进一步压缩文件。

在步骤107中,可以应用各种滤波技术。在HEVC中,根据环内滤波方案应用滤波器。上文描述的基于块的预测可能使得在解码器侧创建块状图像。此外,基于块的预测方案可以对块进行编码,然后重建编码块,以供以后用作参考块。环内滤波方案迭代地将噪声抑制滤波器、去块效应滤波器、自适应环路滤波器和样本自适应偏移(sample adaptiveoffset,SAO)滤波器用于块/帧。这些滤波器减少了此类块伪影,从而可以准确地重建编码文件。此外,这些滤波器减少了重建参考块中的伪影,使得伪影不太可能在根据重建参考块编码的后续块中产生其它伪影。

在步骤109中,一旦对视频信号进行了分割、压缩和滤波,则将所得数据编码到码流中。所述码流包括上述数据以及支持在解码器侧进行适当的视频信号重建所需要的任何指示(signal)数据。例如,此类数据可以包括分割数据、预测数据、残差块和向解码器提供译码指令的各种标志。码流可以存储在存储器中,用于在请求时传输到解码器。还可以向多个解码器广播和/或组播所述码流。创建码流是一个迭代过程。因此,步骤101、103、105、107和109可以在多个帧和块中连续和/或同时执行。图1所示的顺序是为了清楚和便于描述而呈现的,并非旨在将视频译码过程限制于特定顺序。

在步骤111中,解码器接收码流并开始解码过程。具体地,解码器使用熵解码方案将码流转换为对应的语法数据和视频数据。在步骤111中,解码器使用码流中的语法数据来确定帧的分割部分。分割应与步骤103中的块分割结果匹配。这里描述了步骤111中使用的熵编码/熵解码。编码器在压缩过程中进行许多选择,例如根据一个或多个输入图像中值的空间定位从多个可能选择中选择块分割方案。指示确切的选择可能会使用大量的位元。本文所使用的位元是被视为变量的二进制值(例如,可以根据上下文变化的位值)。熵编码使得编码器可以丢弃任何明显不适合特定情况的选项,从而留下一组可使用的选项。然后,为每个可使用的选项分配码字。码字的长度取决于可使用的选项的数量(例如,一个位元对应两个选项,两个位元对应三个或四个选项等)。然后,编码器对所选选项的码字进行编码。该方案减小了码字的大小,因为码字的大小与唯一地表示从可使用的选项的小子集中的一个选项,而非唯一地表示从所有可能选项的潜在大集中的选项所需要的码字一样大。然后,解码器通过以与编码器类似的方式确定可使用的选项集来对该选择进行解码。通过确定可使用的选项集,解码器可以读取码字并确定编码器做出的选择。

在步骤113中,解码器执行块解码。具体地,解码器进行逆变换来生成残差块。然后,解码器使用残差块和对应的预测块,根据分割重建图像块。预测块可以包括在步骤105中编码器侧生成的帧内预测块和帧间预测块。然后,根据在步骤111中确定的分割数据将重建图像块定位到重建视频信号的帧中。步骤113的语法还可以通过上文描述的熵编码在码流中指示。

在步骤115中,以类似于步骤107的方式在编码器侧对重建视频信号的帧进行滤波。例如,可以对帧应用噪声抑制滤波器、去块效应滤波器、自适应环路滤波器和SAO滤波器以去除块伪影。一旦对帧进行滤波,在步骤117中,可以将视频信号输出到显示器以供终端用户观看。

图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。这里对这些组件进行描述。

分割视频信号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进行压缩。

通用译码器控制组件211用于根据应用约束做出与将视频序列的图像编码到码流中相关的决策。例如,通用译码器控制组件211管理码率/码流大小相对于重建质量的优化。此类决策可以根据存储空间/带宽可用性和图像分辨率请求做出。通用译码器控制组件211还根据传输速度管理缓冲区使用率,以缓解缓冲区欠载和超载问题。为了解决这些问题,通用译码器控制组件211管理由其它组件进行的分割、预测和滤波。例如,通用译码器控制组件211可以动态地提高压缩复杂度以提高分辨率和提高带宽使用率,或者降低压缩复杂度以降低分辨率和带宽使用率。因此,通用译码器控制组件211控制编解码系统200的其它组件,以平衡视频信号重建质量与码率问题。通用译码器控制组件211创建控制数据,这些控制数据控制其它组件的操作。控制数据还被转发到标头格式和CABAC组件231,以编码到码流中,从而指示用于在解码器中进行解码的参数。

分割视频信号201还被发送至运动估计组件221和运动补偿组件219,用于进行帧间预测。分割视频信号201的帧或条带可以划分为多个视频块。运动估计组件221和运动补偿组件219相对于一个或多个参考帧中的一个或多个块对接收到的视频块进行帧间预测译码以提供时间预测。编解码系统200可以执行多个译码过程,以便为每个视频数据块选择适当的译码模式等等。

运动估计组件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可以确定当前块/帧的多个参考块、多个运动矢量等,并且可以选择具有最佳率失真特性的参考块、运动矢量等。最佳率失真特性平衡视频重建的质量(例如,压缩造成的数据丢失量)与译码效率(例如,最终编码的大小)。

在一些示例中,编解码系统200可以计算存储在解码图像缓冲区组件223中的参考图像的子整数像素位置的值。例如,视频编解码系统200可以对参考图像的四分之一像素位置、八分之一像素位置或其它分数像素位置的值进行插值。因此,运动估计组件221可以执行相对于全像素位置和分数像素位置的运动搜索,并输出具有分数像素精度的运动矢量。运动估计组件221通过将PU的位置与参考图像的预测块的位置进行比较来计算帧间译码条带中视频块的PU的运动矢量。运动估计组件221将计算的运动矢量作为运动数据输出到标头格式和CABAC组件231以进行编码,并将运动输出到运动补偿组件219。

运动补偿组件219执行的运动补偿可以涉及根据运动估计组件221所确定的运动矢量获取或生成预测块。另外,在一些示例中,运动估计组件221和运动补偿组件219可以在功能上集成。在接收到当前视频块的PU的运动矢量之后,运动补偿组件219可以定位运动矢量指向的预测块。然后,通过从正被译码的当前视频块的像素值中减去预测块的像素值,形成像素差值,从而形成残差视频块。通常,运动估计组件221相对于亮度分量执行运动估计,运动补偿组件219将根据亮度分量计算的运动矢量用于色度分量和亮度分量。将预测块和残差块转发到变换缩放和量化组件213。

分割视频信号201也被发送到帧内估计组件215和帧内预测组件217。如同运动估计组件221和运动补偿组件219,帧内估计组件215和帧内预测组件217可以高度集成,但出于概念目的分开示出。帧内估计组件215和帧内预测组件217相对于当前帧中的块对当前块进行帧内预测,以替代如上所述的由运动估计组件221和运动补偿组件219在各帧之间执行的帧间预测。具体地,帧内估计组件215确定帧内预测模式,用于对当前块进行编码。在一些示例中,帧内估计组件215从多个测试的帧内预测模式中选择适当的帧内预测模式来对当前块进行编码。然后,将所选择的帧内预测模式转发到标头格式和CABAC组件231用于进行编码。

例如,帧内估计组件215使用对各种测试的帧内预测模式的率失真分析来计算率失真值,并在测试的模式中选择具有最佳率失真特性的帧内预测模式。率失真分析通常确定编码块与经编码以产生编码块的原始未编码块之间的失真(或误差)量,以及用于生成编码块的码率(例如,位数)。帧内估计组件215根据各种编码块的失真和速率计算比率,以确定哪种帧内预测模式表现出块的最佳率失真值。此外,帧内估计组件215可以用于根据率失真优化(rate-distortion optimization,RDO),使用深度建模模式(depth modelingmode,DMM)对深度图的深度块进行译码。

当在编码器上实现时,帧内预测组件217可以根据由帧内估计组件215确定的所选帧内预测模式从预测块生成残差块,或者当在解码器上实现时,从码流读取残差块。残差块包括预测块与原始块之间的值差,表示为矩阵。然后,残差块被转发到变换缩放和量化组件213。帧内估计组件215和帧内预测组件217可以对亮度分量和色度分量进行操作。

变换缩放和量化组件213用于进一步压缩残差块。变换缩放和量化组件213对残差块应用变换,如离散余弦变换(discrete cosine transform,DCT)、离散正弦变换(discrete sine transform,DST)或概念上类似的变换,从而产生包括残差变换系数值的视频块。还可以使用小波变换、整数变换、子带变换或其它类型的变换。变换可以将残差信息从像素值域转换到变换域,如频域。变换缩放和量化组件213还用于根据频率等对变换的残差信息进行缩放。这种缩放涉及对残差信息应用缩放因子,以便在不同粒度下量化不同的频率信息,这可能会影响重建视频的最终视觉质量。变换缩放和量化组件213还用于对变换系数进行量化以进一步降低码率。量化过程可以降低与一些或全部系数相关的位深度。量化程度可以通过调整量化参数来修改。在一些示例中,变换缩放和量化组件213随后可以对包括量化变换系数的矩阵进行扫描。量化变换系数被转发到标头格式和CABAC组件231,以编码到码流中。

缩放和逆变换组件229应用变换缩放和量化组件213的逆操作以支持运动估计。缩放和逆变换组件229应用逆缩放、逆变换和/或反量化以重建像素域中的残差块,例如,以供以后用作参考块,参考块可成为另一当前块的预测块。运动估计组件221和/或运动补偿组件219可以通过将残差块添加回对应的预测块来计算参考块,以用于后续块/帧的运动估计。滤波器用于重建参考块,以减少在缩放、量化和变换期间产生的伪影。当对后续块进行预测时,此类伪影可能导致预测不准确(并产生其它伪影)。

滤波器控制分析组件227和环内滤波器组件225将滤波器用于残差块和/或重建图像块。例如,缩放和逆变换组件229的变换残差块可以与帧内预测组件217和/或运动补偿组件219的对应的预测块合并以重建原始图像块。然后,滤波器可以用于重建图像块。在一些示例中,滤波器可以转而用于残差块。如同图2中的其它组件,滤波器控制分析组件227和环内滤波器组件225高度集成,可以一起实现,但出于概念目的分开示出。用于重建参考块的滤波器用于特定空间区域,包括多个参数以调整应用此类滤波器的方式。滤波器控制分析组件227对重建参考块进行分析,以确定应应用此类滤波器的位置并设置对应的参数。此类数据作为滤波器控制数据被转发到标头格式和CABAC组件231用于进行编码。环内滤波器组件225根据滤波器控制数据应用此类滤波器。滤波器可以包括去块效应滤波器、噪声抑制滤波器、SAO滤波器和自适应环路滤波器。此类滤波器可以根据示例用于空域/像素域(例如,针对重建像素块)或频域中。

当作为编码器时,将滤波重建图像块、残差块和/或预测块存储在解码图像缓冲区组件223中,以供以后用于运动估计,如上所述。当作为解码器时,解码图像缓冲区组件223存储经重建和滤波的块并将其作为输出视频信号的一部分向显示器转发。解码图像缓冲区组件223可以是能够存储预测块、残差块和/或重建图像块的任何存储设备。

标头格式和CABAC组件231从编解码系统200的各组件接收数据并将此类数据编码到编码码流中,用于传输到解码器。具体地,标头格式和CABAC组件231生成各种标头以对控制数据(如通用控制数据和滤波器控制数据)进行编码。此外,预测数据(包括帧内预测)和运动数据,以及量化变换系数数据形式的残差数据均编码在码流中。最终码流包括解码器重建原始的分割视频信号201所需要的所有信息。这些信息还可以包括帧内预测模式索引表(也称为码字映射表)、各种块的编码上下文的定义、最可能的帧内预测模式的指示、分割信息的指示等。这些数据可以通过熵编码技术进行编码。例如,可以使用上下文自适应可变长度编码(context adaptive variable length coding,CAVLC)、CABAC、基于语法的上下文自适应二进制算术编码(syntax-based context-adaptive binary arithmeticcoding,SBAC)、概率区间分割熵(probability interval partitioning entropy,PIPE)编码或其它熵编码技术对信息进行编码。在熵编码之后,可以将编码码流发送到另一设备(例如,视频解码器)或存档以供后续发送或检索。

图3为示例性视频编码器300的框图。视频编码器300可以用于实现编解码系统200的编码功能和/或实现操作方法100的步骤101、103、105、107和/或109。编码器300对输入视频信号进行分割,从而产生分割视频信号301,其中,分割视频信号301实质上类似于分割视频信号201。然后,通过编码器300的组件压缩分割视频信号301并将其编码到码流中。

具体地,分割视频信号301被转发到帧内预测组件317用于进行帧内预测。帧内预测组件317实质上可以类似于帧内估计组件215和帧内预测组件217。分割视频信号301还被转发到运动补偿组件321,用于根据解码图像缓冲区组件323中的参考块进行帧间预测。运动补偿组件321实质上可以类似于运动估计组件221和运动补偿组件219。帧内预测组件317和运动补偿组件321的预测块和残差块被转发到变换和量化组件313以用于对残差块进行变换和量化。变换和量化组件313实质上可以类似于变换缩放和量化组件213。变换和量化残差块和对应的预测块(连同相关控制数据)被转发到熵编码组件331用于编码到码流中。熵编码组件331可以实质上类似于标头格式和CABAC组件231。

变换和量化残差块和/或对应的预测块也从变换和量化组件313转发到逆变换和反量化组件329以重建成参考块供运动补偿组件321使用。逆变换和反量化组件329实质上可以类似于缩放和逆变换组件229。根据示例,环内滤波器组件325中的环内滤波器还用于残差块和/或重建参考块。环内滤波器组件325实质上可以类似于滤波器控制分析组件227和环内滤波器组件225。如关于环内滤波器组件225所描述,环内滤波器组件325可以包括多个滤波器。然后,滤波块存储在解码图像缓冲区组件323中,以供运动补偿组件321用作参考块。解码图像缓冲区组件323实质上可以类似于解码图像缓冲区组件223。

图4为示例性视频解码器400的框图。视频解码器400可以用于实现编解码系统200的解码功能和/或实现操作方法100的步骤111、113、115和/或117。例如,解码器400从编码器300接收码流,并根据该码流生成重建输出视频信号,用于向终端用户显示。

该码流由熵解码组件433接收。熵解码组件433用于实现熵解码方案,如CAVLC、CABAC、SBAC、PIPE译码或其它熵译码技术。例如,熵解码组件433可以使用标头信息来提供上下文以解释在码流中编码为码字的其它数据。解码信息包括对视频信号进行解码所需的任何信息,如通用控制数据、滤波器控制数据、分割信息、运动数据、预测数据和残差块中的量化变换系数。量化变换系数被转发到逆变换和反量化组件429以重建成残差块。逆变换和反量化组件429可以类似于逆变换和反量化组件329。

重建残差块和/或预测块被转发到帧内预测组件417,以根据帧内预测操作重建成图像块。帧内预测组件417可以类似于帧内估计组件215和帧内预测组件217。具体地,帧内预测组件417使用预测模式来定位帧中的参考块,并将残差块用于结果以重建帧内预测图像块。重建帧内预测图像块和/或残差块以及对应的帧间预测数据通过环内滤波器组件425转发到解码图像缓冲区组件423。解码图像缓冲区组件423和环内滤波器组件425实质上可以分别类似于解码图像缓冲区组件223和环内滤波器组件225。环内滤波器组件425对重建图像块、残差块和/或预测块进行滤波,并且此类信息存储在解码图像缓冲区组件423中。解码图像缓冲区组件423的重建图像块被转发到运动补偿组件421进行帧间预测。运动补偿组件421实质上可以类似于运动估计组件221和/或运动补偿组件219。具体地,运动补偿组件421使用参考块的运动矢量来生成预测块,并将残差块用于结果以重建图像块。所得重建块还可以通过环内滤波器组件425转发到解码图像缓冲区组件423。解码图像缓冲区组件423继续存储其它重建图像块,这些重建图像块可以通过分割信息重建成帧。此类帧也可以位于序列中。该序列作为重建输出视频信号向显示器输出。

考虑到上述情况,视频压缩技术执行空间(帧内)预测和/或时间(帧间)预测以减少或去除视频序列中固有的冗余。对于基于块的视频译码,可以将视频条带(例如,视频图像或视频图像的一部分)分割为视频块,视频块也可以称为树块、编码树块(coding treeblock,CTB)、编码树单元(coding tree unit,CTU)、编码单元(coding unit,CU)和/或编码节点。参照同一图像的相邻块中的参考样本使用空间预测对图像内的帧内编码(I)条带中的视频块进行编码。图像内的帧间编码(P或B)条带中的视频块参照同一图像的相邻块中的参考样本使用空间预测,或者参照其它参考图像中的参考样本使用时间预测。图像可以称为帧,参考图像可以称为参考帧。POC是与每个图像相关联的变量,该变量唯一地标识编码层视频序列(coded layer video sequence,CLVS)中的所有图像中的相关联的图像。POC表示何时从DPB输出相关联的图像,并表示相关联的图像在输出顺序中相对于同一CLVS中的要从DPB输出的其它图像在输出顺序中的位置的位置。标志是一个变量或单比特语法元素,可以取两个可能的值(0和1)之一。

通过空间预测或时间预测,产生待编码块的预测块。残差数据表示待编码的原始块与预测块之间的像素差。根据运动矢量和残差数据对帧间译码块进行编码,其中,运动矢量指向构成预测块的参考样本的块,残差数据表示编码块与预测块之间的差值。根据帧内编码模式和残差数据对帧内编码块进行编码。为了进一步压缩,可以将残差数据从像素域变换到变换域,从而产生接着进行量化的残差变换系数。可以扫描最初以二维阵列排列的量化变换系数以生成变换系数的一维矢量,并且可以应用熵编码以实现进一步压缩。

图像和视频压缩发展迅速,编码标准多样化。这些视频编码标准包括ITU-TH.261、国际标准化组织/国际电工委员会(international organization forstandardization/international electrotechnical commission,ISO/IEC)MPEG-1第2部分、ITU-T H.262或ISO/IEC MPEG-2第2部分、ITU-T H.263、ISO/IEC MPEG-4第2部分、高级视频编码(advanced video coding,AVC)(也称为ITU-T H.264或ISO/IEC MPEG-4第10部分),以及高效视频编码(high efficiency video coding,HEVC)(也称为ITU-T H.265或MPEG-H第2部分)。AVC包括可适性视频编码(scalable video coding,SVC)、多视点视频编码(multiview video coding,MVC)和多视图加深度视频编码(multiview video codingplus depth,MVC+D)以及3D AVC(3D-AVC)等扩展版。HEVC包括可适性HEVC(scalable HEVC,SHVC)、多视点HEVC(multiview HEVC,MV-HEVC)和3D HEVC(3D-HEVC)等扩展版。

通用视频编码(versatile video coding,VVC)是ITU-T和ISO/IEC联合视频专家组(joint video experts team,JVET)开发的一种新的视频编码标准。虽然VVC标准有几个工作草案(working draft,WD),但本文特别参考VVC中的一个工作草案,即B.Bross、J.Chen和S.Liu的“通用视频编码(草案5)(Versatile Video Coding(Draft 5))”JVET-N1001-v3,第13次JVET会议,2019年3月27日(VVC草案5)。

视频译码中的可适性通常通过多层译码技术来支持。多层码流包括基本层(baselayer,BL)和一个或多个增强层(enhancement layer,EL)。可适性的示例包括空间可适性、质量/信噪比(signal-to-noise,SNR)可适性、多视图可适性等。当使用的是多层译码技术时,图像或其一部分可以在以下情况下进行译码:(1)不使用参考图像,即,使用帧内预测,(2)参考同一层中的参考图像,即,使用帧间预测,或(3)参考其它层中的参考图像,即,使用层间预测。用于当前图像的层间预测的参考图像称为层间参考图像(inter-layerreference picture,ILRP)。

图5为基于层的预测500的示例的示意图。例如,在块压缩步骤105、块解码步骤113、运动估计组件221、运动补偿组件219、运动补偿组件321和/或运动补偿组件421处执行基于层的预测500来确定MV。基于层的预测500与单向帧间预测和/或双向帧间预测共存,但也在不同层中的图像之间执行。

基于层的预测500应用于不同层中的图像511、512、513和514与图像515、516、517和518之间。在所示示例中,图像511、512、513和514是层N+1 532的一部分,图像515、516、517和518是层N 531的一部分。层(例如层N 531和/或层N+1 532)是一组图像,这些图像都与类似的大小、质量、分辨率、信噪比、能力等类似的特征值相关联。在所示示例中,与层N531相比,层N+1 532与更大的图像大小相关联。因此,在本示例中,层N+1 532中的图像511、512、513和514比层N 531中的图像515、516、517和518大(例如,高度和宽度大,因此样本更多)。但是,这些图像可以通过其它特征划分为层N+1 532和层N 531。虽然只示出了两层:层N+1 532和层N 531,但一组图像可以根据相关联的特征划分为任意数量的层。层N+1 532和层N 531也可以用层ID表示。层ID是与图像相关联的数据项,并表示该图像是表示的层的一部分。因此,图像511至518中的每个图像可以与对应的层ID相关联,以表示层N+1 532或层N531中的哪个层包括对应的图像。

不同的层531和532中的图像511至518交替显示。因此,不同层531和532中的图像511至518可以共享相同的时间标识符(identifier,ID),并且可以包括在同一AU中。本文所使用的AU是与用于从DPB输出的同一显示时间相关联的一个或多个译码图像的集合。例如,如果需要较小的图像,则解码器可以在当前显示时间对图像515进行解码并显示,或者如果需要较大的图像,则解码器可以在当前显示时间对图像511进行解码并显示。因此,高层N+1532中的图像511至514与低层N 531中的对应图像515至518包括基本上相同的图像数据(尽管图像大小不同)。具体地,图像511与图像515包括基本上相同的图像数据,图像512与图像516包括基本上相同的图像数据,以此类推。

图像511至518可以通过参考同一层(N 531或N+1 532)中的其它图像511至518进行译码。参考同一层中的一个图像对另一个图像进行译码即为帧间预测523,帧间预测523与单向帧间预测和/或双向帧间预测共存。帧间预测523由实线箭头表示。例如,图像513可以通过将层N+1 532中的图像511、512和/或514中的一个或两个图像用作参考的帧间预测523来译码,其中,单向帧间预测使用一个图像作为参考,和/或双向帧间预测使用两个图像作为参考。此外,图像517可以通过将层N 531中的图像515、516和/或518中的一个或两个图像用作参考的帧间预测523来译码,其中,单向帧间预测使用一个图像作为参考,和/或双向帧间预测使用两个图像作为参考。在执行帧间预测523时,当将一个图像用作同一层中另一个图像的参考时,该图像可以称为参考图像。例如,图像512可以是用于根据帧间预测523对图像513进行译码的参考图像。帧间预测523也可以称为多层上下文中的层内预测。因此,帧间预测523是通过参考与当前图像不同的参考图像中的指示样本对当前图像中的样本进行译码的机制,其中,参考图像和当前图像位于同一层中。

图像511至518也可以通过参考不同层中的其它图像511至518进行译码。这个过程称为层间预测521,由虚线箭头表示。层间预测521是通过参考参考图像中的指示样本对当前图像中的样本进行译码的机制,其中,当前图像和参考图像位于不同的层中,因此具有不同的层ID。例如,低层N 531中的图像可以用作对高层N+1 532中的对应图像进行译码的参考图像。在一个具体的示例中,图像511可以根据层间预测521通过参考图像515进行译码。在这种情况下,图像515被用作层间参考图像。层间参考图像是用于层间预测521的参考图像。在大多数情况下,对层间预测521进行约束,使得当前图像(例如图像511)只能使用同一AU中包括的且位于低层中的一个或多个层间参考图像,例如图像515。当多个层(例如,两层以上)可用时,层间预测521可以根据层级比当前图像低的多个层间参考图像对当前图像进行编码/解码。

视频编码器可以使用基于层的预测500来通过帧间预测523和层间预测521的许多不同组合和/或排列对图像511至518进行编码。例如,图像515可以根据帧内预测进行译码。然后,通过将图像515用作参考图像,图像516至518可以根据帧间预测523进行译码。此外,通过将图像515用作层间参考图像,图像511可以根据层间预测521进行译码。然后,通过将图像511用作参考图像,图像512至514可以根据帧间预测523进行译码。因此,参考图像可以作为不同译码机制的单层参考图像和层间参考图像。通过根据低层N 531图像对高层N+1532图像进行译码,高层N+1 532可以避免使用帧内预测,帧内预测的译码效率比帧间预测523和层间预测521的译码效率低得多。因此,帧内预测译码效率低下,只适用于最小/最低质量的图像,因此只适用于对最少量的视频数据进行译码。用作参考图像和/或层间参考图像的图像可以在参考图像列表结构中包括的一个或多个参考图像列表的条目中表示。

图5中的每个AU 506可以包括几个图像。例如,一个AU 506可以包括图像511和515。另一个AU 506可以包括图像512和516。事实上,每个AU 506是与相同显示时间(例如,相同时间ID)相关联的一个或多个译码图像的集合,这些译码图像用于从解码图像缓冲区(decoded picture buffer,DPB)中输出(例如,显示给用户)。每个AUD 508是用于指示AU(例如,AU 508)的开始或AU之间的边界的指示符或数据结构。

以前的H.26x视频编码系列支持根据用于单层译码的档次(profile)实现单独档次中的可适性。可适性视频编码(scalable video coding,SVC)是AVC/H.264的可扩展版,支持空间可适性、时间可适性和质量可适性。对于SVC,在EL图像的每个宏块(macroblock,MB)中指示了一个标志,用于表示EL MB是否使用较低层中的并置块进行预测。根据并置块进行的预测可以包括纹理、运动矢量和/或译码模式。SVC的实现方式不能在其设计中直接重用未经修改的H.264/AVC实现方式。SVC EL宏块语法和解码过程与H.264/AVC语法和解码过程不同。

可适性HEVC(scalable HEVC,SHVC)是HEVC/H.265标准的扩展版,支持空间可适性和质量可适性;多视图HEVC(multiview HEVC,MV-HEVC)是HEVC/H.265的扩展版,支持多视图可适性;3D HEVC(3D-HEVC)是HEVC/H.264的扩展版,支持比MV-HEVC更高级、更高效的三维(three dimensional,3D)视频译码。需要说明的是,时间可适性是单层HEVC编解码器的组成部分。HEVC的多层扩展的设计采用了如下理念:用于层间预测的经解码图像仅来自同一接入单元(access unit,AU),并当作长期参考图像(long-term reference picture,LTRP),并分配有一个或多个参考图像列表中的参考索引和当前层中的其它时间参考图像。层间预测(inter-layer prediction,ILP)是在预测单元(prediction unit,PU)级通过将参考索引的值设置为参考一个或多个参考图像列表中的一个或多个层间参考图像而实现的。

需要说明的是,参考图像重采样和空间可适性特征都需要对参考图像或其一部分进行重采样。参考图像重采样(reference picture resampling,RPR)可以在图像级或编码块级实现。但是,当RPR称为译码特征时,它是单层译码的特征。即便如此,从编解码器设计的角度来看,可以或甚至优选使用相同的重采样滤波器,以实现单层译码的RPR特征和多层译码的空间可适性特征。

图6示出了利用输出层集(output layer set,OLS)的基于层的预测600的示例,例如,在块压缩步骤105、块解码步骤113、运动估计组件221、运动补偿组件219、运动补偿组件321和/或运动补偿组件421处执行基于层的预测600来确定MV。基于层的预测500与单向帧间预测和/或双向帧间预测共存,但也在不同层中的图像之间执行。图6的基于层的预测类似于图5的预测。因此,为了简洁起见,不再重复对基于层的预测进行完整描述。

图6的编码视频序列(coded video sequence,CVS)690中的一些层包括在OLS中。OLS是层集合,其中,一个或多个层被指定为输出层。输出层是OLS的输出层。图6示出了三个不同的OLS,即OLS1、OLS2和OLS 3。如图所示,OLS1包括层N 631和层N+1 632。OLS2包括层N631、层N+1 632、层N+2633和层N+1 634。OLS 3包括层N 631、层N+1 632和层N+2 633。尽管示出了三个OLS,但在实际应用中可以使用不同数量的OLS。

不同OLS中的每一个OLS可以包括任何数量的层。生成不同的OLS是为了适应具有不同译码能力的各种不同设备。例如,可以生成仅包括两层的OLS1,以适应译码能力相对有限的移动电话。另一方面,可以生成包括四层的OLS2,以适应大屏幕电视,与移动电话相比,能够对较高层进行解码。可以生成包括三层的OLS 3,以适应个人电脑、膝上型电脑或平板电脑,与移动电话相比,能够对较高层进行解码,但不能像大屏幕电视那样对最高层进行解码。

图6中的层可以彼此独立。也就是说,每个层都可以在不使用层间预测(inter-layer prediction,ILP)的情况下译码。在这种情况下,这些层被称为同播层。图6中的一个或多个层也可以使用ILP进行译码。这些层是否为同播层,或者一些层是否使用ILP进行译码,是通过视频参数集(video parameter set,VPS)中的标志进行指示的,这将在下面更全面地进行论述。当一些层使用ILP时,层之间的层依赖关系也会在VPS中进行指示。

在一个实施例中,当这些层是同播层时,仅选择一层用于解码和输出。在一个实施例中,当一些层使用ILP时,所有层(例如,整个码流)都被指定为解码,并且这些层中的一些层被指定为输出层。例如,一个或多个输出层可以是(1)仅最高层,(2)所有层,或(3)最高层加上指示的较低层集合。例如,当最高层加上指示的较低层集合被VPS中的标志指定为用于输出时,来自OLS2的层N+3 634(其为最高层)以及层N 631和层N+1 632(它们是较低层)被输出。

仍然参考图6,一些层不包括在任何OLS中。例如,层N+4 635不包括在OLS1、OLS2和OLS 3中的任何一个中。这些层被称为未使用的层。不幸的是,SHVC和MV-HEVC允许这种未使用的层包括在多层视频码流中,这不必要地增加了译码资源的负担,降低了译码效率。

本文公开了不允许未使用的层包括在多层视频码流中的技术。也就是说,任何未在至少一个输出层集(output layer set,OLS)中使用的层都被约束为不包括在多层码流中。这避免了译码过程中的无关信息,提高了译码效率。因此,视频译码中的编码器/解码器(又称为编解码器)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时为用户提供更好的体验。

图7示出了视频码流700的实施例。本文使用的视频码流700也可以称为编码视频码流、码流或其变体。如图7所示,码流700包括至少一个图像单元(picture unit,PU)701。虽然图7中示出了三个PU 701,但在实际应用中,码流700中可以存在不同数量的PU 701。每个PU 701是根据指定的分类规则彼此相关联的NAL单元的集合,按解码顺序连续,并且正好包括一个译码图像(例如,图像714)。

在一个实施例中,每个PU 701包括以下中的一个或多个:解码能力信息(decodingcapability information,DCI)702、视频参数集(video parameter set,VPS)704、序列参数集(sequence parameter set,SPS)706、图像参数集(picture parameter set,PPS)708、图像头(picture header,PH)712和图像714。DCI 702、VPS 704、SPS 706和PPS 708中的每一个都可以统称为参数集。在一个实施例中,码流700还可以包括图7未示出的其它参数集,例如自适应参数集(adaption parameter set,APS)。APS是一种包括应用于0个或0个以上条带的语法元素的语法结构,0个或0个以上条带根据条带头中的0个或0个以上语法元素确定。

DCI 702也可以称为解码参数集(decoding parameter set或decoder parameterset,DPS),是包括应用于整个码流的语法元素的语法结构。DCI 702包括在视频码流(例如,码流700)的生存期内保持恒定的参数,该生存期可以转换为会话的生存期。DCI 702可以包括档次、级别和子档次信息,以确定保证永远不会被超过(即使会话中发生视频序列的拼接)的最大复杂性互操作点。DCI 702还可选地包括约束标志,这些约束标志指示视频码流将受如这些标志的值所指示的某些特征的使用的约束。这样,码流可以被标记为不使用某些工具,这允许在解码器实现中分配资源。与所有参数集一样,DCI 702在第一次被参考,并且尤其被视频序列中的第一个图像参考时存在,这意味着DCI 702必须在码流中的第一NAL单元之间发送。虽然码流中可以有多个DCI 702,但其中的语法元素的值在被参考时不能不一致。

VPS 704包括用于增强层的参考图像集构建的解码依赖关系或信息。VPS 704提供了可扩展序列的整体视角或视图,包括提供了哪些类型的操作点、这些操作点的档次、层次和级别,以及码流的一些其它高级属性,这些属性可以用作会话协商和内容选择等的基础。

在一个实施例中,当指示一些层使用ILP时,VPS 704指示VPS指定的OLS总数等于层数,指示第i个OLS包括层索引从0到i(包括端值)的层,并指示对于每个OLS,仅OLS中的最高层被输出。

在一个实施例中,VPS 704包括对应于CLVS和/或视频码流中的OLS的语法和语义。以下对应于VPS 704语法和语义可以用于实现本文公开的实施例。

VPS 704的语法可以如下。

/>

VPS 704的语义可以如下。在一个实施例中,VPS 704包括下面指出的一个或多个标志和参数。

VPS原始字节序列载荷(raw byte sequence payload,RBSP)在被参考之前应可用于解码过程、包括在Temporal Id等于0的至少一个接入单元中,或通过外部模块提供。包括VPS RBSP的VPS NAL单元的nuh_layer_id应等于vps_layer_id[0]。

CVS中具有特定vps_video_parameter_set_id值的所有VPS NAL单元应具有相同的内容。vps_video_parameter_set_id为VPS提供了一个标识符,以供其它语法元素参考。vps_max_layers_minus1+1表示参考VPS的每个CVS中的最大允许层数。vps_max_sub_layers_minus1+1表示参考VPS的每个CVS中可能存在的时间子层的最大数量。vps_max_sub_layers_minus1的值应在0至6的范围内(包括端值)。

vps_all_independent_layers_flag等于1表示CVS中的所有层都是独立译码的,而不使用层间预测。vps_all_independent_layers_flag等于0表示CVS中的一个或多个层可以使用层间预测。如果不存在,则vps_all_independent_layers_flag的值被推断为等于1。当vps_all_independent_layers_flag等于1时,vps_independent_layer_flag[i]的值被推断为等于1。当vps_all_independent_layers_flag等于0时,vps_independent_layer_flag[0]的值被推断为等于1。

vps_layer_id[i]表示第i层的nuh_layer_id值。对于m和n的任何两个非负整数值,当m小于n时,vps_layer_id[m]的值应小于vps_layer_id[n]。vps_independent_layer_flag[i]等于1表示索引为i的层不使用层间预测。vps_independent_layer_flag[i]等于0表示索引为i的层可以使用层间预测,且VPS中存在vps_layer_dependency_flag[i]。如果不存在,则vps_independent_layer_flag[i]的值被推断为等于1。

vps_direct_dependency_flag[i][j]等于0表示索引为j的层不是索引为i的层的直接参考层。vps_direct_dependency_flag[i][j]等于1表示索引为j的层是索引为i的层的直接参考层。对于在0到vps_max_layers_minus1的范围内(包括端值)的i和j,当vps_direct_dependency_flag[i][j]不存在时,其被推断为等于0。

变量DirectDependentLayerIdx[i][j],表示第i层的第j个直接依赖层,推导过程如下。

变量GeneralLayerIdx[i],表示nuh_layer_id等于vps_layer_id[i]的层的层索引,推导过程如下。

for(i=0;i<=vps_max_layers_minus1;i++)

GeneralLayerIdx[vps_layer_id[i]]=i

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。

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被保留,供ITU-T|ISO/IEC将来使用。当vps_all_independent_layers_flag等于1,并且each_layer_is_an_ols_flag等于0时,ols_mode_idc的值被推断为等于2。

当ols_mode_idc等于2时,num_output_layer_sets_minus1+1表示VPS指定的OLS总数。

变量TotalNumOlss,表示VPS指定的OLS总数,推导过程如下:

当ols_mode_idc等于2时,layer_included_flag[i][j]表示第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中。

变量NumLayersInOls[i],表示第i个OLS中的层数,变量LayerIdInOls[i][j],表示第i个OLS中的第j层的nuh_layer_id值,推导过程如下。

变量OlsLayeIdx[i][j],表示nuh_layer_id等于LayerIdInOls[i][j]的层的OLS层索引,推导过程如下。

for(i=0,i

for j=0;j

OlsLayeIdx[i][LayerIdInOls[i][j]]=j

每个OLS中的最低层应为独立层。换句话说,对于0至TotalNumOlss-1范围内(包括端值)的每个i,vps_independent_layer_flag[GeneralLayerIdx[LayerIdInOls[i][0]]]的值应等于1。

每个层应包括在VPS指定的至少一个OLS中。也就是说,对于特定nuh_layer_idnuhLayerId值等于的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的输出层的(直接或间接)参考层。

当ols_mode_idc等于2时,vps_output_layer_flag[i][j]表示第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层不被输出,推导过程如下。

说明–第0个OLS仅包括最低层(即,nuh_layer_id等于vps_layer_id[0]的层),对于第0个OLS,唯一包括的层被输出。

vps_constraint_info_present_flag等于1表示VPS中存在general_constraint_info()语法结构。vps_constraint_info_present_flag等于0表示VPS中不存在general_constraint_info()语法结构。

在符合本VVC草案此版本的码流中,vps_reserved_zero_7bits应等于0。vps_reserved_zero_7bits的其它值被保留,供ITU-T|ISO/IEC将来使用。在一个实施例中,解码器应忽略vps_reserved_zero_7bits的值。

general_hrd_params_present_flag等于1表示SPS RBSP语法结构中存在语法元素num_units_in_tick和time_scale,以及语法结构general_hrd_parameters()。general_hrd_params_present_flag等于0表示SPS RBSP语法结构中不存在语法元素num_units_in_tick和time_scale,以及语法结构general_hrd_parameters()。

num_units_in_tick是以频率time_scale Hz工作的时钟的时间单元数,该频率对应于时钟计时周期计数器的一个增量(称为时钟计时周期)。num_units_in_tick应大于0。时钟计时周期(以秒为单位)等于num_units_in_tick除以time_scale的商。例如,当视频信号的图像速率为25Hz时,time_scale可以等于27,000,000,num_units_in_tick可以等于1,080,000,因此时钟计时周期可以等于0.04秒。

time_scale是一秒钟内通过的时间单位数。例如,使用27MHz时钟测量时间的时间坐标系的time_scale为27,000,000。time_scale的值应大于0。

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语法元素。

SPS 706包括对图像序列(sequence of picture,SOP)中所有图像通用的数据。SPS 706是一种包括应用于0个或0个以上完整的CLVS的语法元素的语法结构,0个或0个以上完整的CLVS根据PPS中的语法元素的内容确定,而且PPS由每个图像头中的语法元素参考。相比之下,PPS 708包括对整个图像通用的数据。PPS 708是一种包括应用于0个或0个以上完整的编码图像的语法元素的语法结构,0个或0个以上完整的编码图像根据每个图像头(例如PH 712)中的语法元素确定。

DCI 702、VPS 704、SPS 706和PPS 708包括在不同类型的网络抽象层(networkabstraction layer,NAL)单元中。NAL单元是一种语法结构,包括待遵循的数据类型(例如,编码视频数据)的表示。NAL单元分为视频编码层(video coding layer,VCL)NAL单元和非VCL NAL单元。VCL NAL单元包括表示视频图像中样本值的数据,非VCL NAL单元包括任何关联的附加信息,如参数集(可应用于多个VCL NAL单元的重要数据)和补充增强信息(定时信息和其它补充数据,可用于增强解码视频信号的可用性,但不是解码视频图像中样本的值所必需的)。

在一个实施例中,DCI 702包括在指定为DCI NAL单元或DPS NAL单元的非VCL NAL单元中。也就是说,DCI NAL单元具有DCI NAL单元类型(NAL uni t type,NUT),DPS NAL单元具有DPS NUT。在一个实施例中,VPS 704包括在指定为VPS NAL单元的非VCL NAL单元中。因此,VPS NAL单元具有一个VPS NUT。在一个实施例中,SPS 706是被指定为SPS NAL单元的非VCL NAL单元。因此,SPS NAL单元具有SPS NUT。在一个实施例中,PPS 708包括在指定为PPS NAL单元的非VCL NAL单元中。因此,PPS NAL单元具有一个PPS NUT。

PH 712是包括应用于译码图像(例如,图像714)的所有条带(例如,条带718)的语法元素的语法结构。在一个实施例中,PH 712是被指定为PH NAL单元的新型非VCL NAL单元。因此,PH NAL单元具有PH NUT(例如,PH_NUT)。在一个实施例中,每个PU 701中包括一个且仅一个PH 712。也就是说,PU 701包括单个或单独的PH 712。在一个实施例中,码流700中的每个图像701正好存在一个PH NAL单元。

在一个实施例中,与PH 712相关联的PH NAL单元具有时间ID和层ID。时间ID标识符指示PH NAL单元相对于码流(例如,码流701)中的其它PH NAL单元在时间上的位置。层ID指示包括PH NAL单元的层(例如,层531或层532)。在一个实施例中,时间ID类似于POC,但不同于POC。POC按顺序唯一地标识每个图像。在单层码流中,时间ID和POC将是相同的。在多层码流中(例如,见图5),同一AU中的图像将具有不同的POC,但具有相同的时间ID。

在一个实施例中,PH NAL单元在包括相关联的图像714的第一条带718的VCL NAL单元之前。这建立了PH 712和与PH 712相关联的图像714的条带718之间的关联,而不需要在PH 712中指示并从条带头720中参考的图像头ID。因此,可以推断,两个PH 712之间的所有VCL NAL单元属于同一图像714,并且图像714与两个PH 712之间的第一PH 712相关联。在一个实施例中,PH 712之后的第一VCL NAL单元包括与PH 712相关联的图像714的第一条带718。

在一个实施例中,PH NAL单元遵循图像级别参数集(例如,PPS)或更高级别参数集,例如DCI(又称为DPS)、VPS、SPS、PPS等,这些参数集的时间ID和层ID分别小于PH NAL单元的时间ID和层ID。因此,这些参数集不会在图像或接入单元中重复。由于此顺序,PH 712可以立即解析。也就是说,包括与整个图像相关的参数的参数集位于PH NAL单元之前的码流中。任何包括部分图像的参数的部分都位于PH NAL单元之后。

在一个替代方案中,PH NAL单元遵循图像级别参数集和前缀补充增强信息(supplemental enhancement information,SEI)消息,或更高级别参数集,例如DCI(又称为DPS)、VPS、SPS、PPS、APS、SEI消息等。

例如,图像714为黑白格式的亮度样本阵列或4:2:0、4:2:2和4:4:4彩色格式的亮度样本阵列和两个对应的色度样本阵列。在一个实施例中,每个PU 701中包括一个且仅一个图像714。因此,在每个PU 701中只有一个PH 712,并且只有一个对应于该PH 712的图像714。也就是说,PU 701包括单个或单独的图像714。

图像714可以是帧或字段。但是,在一个CVS 716中,所有图像714都是帧,或所有图像714都是字段。CVS 716是视频码流700中的每个编码层视频序列(coded layer videosequence,CLVS)的编码视频序列。需要说明的是,当视频码流700包括单个层时,CVS 716和CLVS相同。CVS 716和CLVS仅在视频码流700包括多个层时才不同(例如,如图5和图6所示)。

每个图像714包括一个或多个条带718。条带718是图像(例如,图像714)的整数个完整分块或分块内的整数个连续完整的CTU行。每个条带718仅包括在单个NAL单元(例如,VCL NAL单元)中。分块(未示出)是图像(例如,图像714)中的特定分块列和特定分块行内的CTU的矩形区域。CTU(未示出)是具有三个样本阵列的图像中的亮度样本的CTB、色度样本的两个对应的CTB,或是黑白图像或使用三个单独的颜色平面和用于对样本进行译码的语法结构译码的图像中的样本的CTB。CTB(未示出)是N×N的样本块,其中,N可以设为某个值以将分量分割为CTB,这是一种分割。块(未示出)是M×N(M列×N行)个样本(例如,像素)阵列,或M×N个变换系数阵列等。

在一个实施例中,每个条带718包括条带头720。条带头720是译码条带718的一部分,包括与条带718中表示的所有分块或一个分块中的CTU行相关的数据元素。也就是说,条带头720包括条带718的信息,例如条带类型、待使用的参考图像等。

图像714及其条带718包括与所编码或解码的图像或视频关联的数据。因此,图像714及其条带718可以简单地称为码流700中携带的载荷或数据。

本领域技术人员将理解,码流700在实际应用中可以包括其它参数和信息。

图8为视频解码器(例如视频解码器400)实现的解码方法800的一个实施例。方法800可以在直接或间接从视频编码器(例如,视频编码器300)接收到码流之后执行。方法800通过不允许不必要的层包括在多层视频码流中来改进解码过程。也就是说,任何未在至少一个输出层集(output layer set,OLS)中使用的层都被约束为不包括在多层码流中。这避免了译码过程中的无关信息,提高了译码效率。因此,视频译码中的编码器/解码器(又称为编解码器)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时为用户提供更好的体验。

在框802中,视频解码器接收包括VPS(例如,VPS 704)和多个层(例如,层N 631、层N+1 632等)的视频码流。在一个实施例中,每个层包括在VPS指定的至少一个OLS(例如,OLS1、OLS2等)中。也就是说,对于特定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。

在一个实施例中,视频解码器期望每个层包括在由如以上所描述的基于VVC或一些其它标准的VPS指定的至少一个OLS(例如,OLS1、OLS2等)中。但是,如果解码器确定此条件不成立,则解码器可以检测错误、指示错误、请求重新发送修订后的码流(或其一部分),或采取一些其它纠正措施以确保接收到一致的码流。

nuh_layer_id在码流中进行指示,用于确定nuhLayerId。nuh_layer_id和nuhLayerId中的每一个都包括用于唯一地标识层的标识符(identifier,ID)。vps_layer_id[k]用于表示VPS 704中的层ID。vps_max_layers_minus1用于表示OLS中的最大层数。TotalNumOlss用于表示CLVS和/或码流中包括的OLS总数。最后,NumLayersInOls表示OLS中的层数。

在一个实施例中,编码器可用的每个层都在解码器接收到的VPS中指定。也就是说,解码器接收到的VPS指定每个层,而不论解码器接收到的OLS中是否包括每个层。在一个实施例中,由编码器生成的每个OLS在解码器接收到的VPS中指定。也就是说,解码器接收到的VPS指定每个OLS,而无论解码器是否接收到该OLS。

在一个实施例中,所述多个层中的每个层包括视频编码层(video coding layer,VCL)网络抽象层(network abstraction layer,NAL)单元和相关联的非VCL NAL单元的集合,所述VCL NAL单元都具有特定层标识符(identifier,ID)值。在一个实施例中,所述至少一个OLS包括两个输出层,所述两个输出层中的一个输出层参考所述两个输出层中的另一个输出层。在一个实施例中,所述至少一个OLS包括一个或多个输出层。在一个实施例中,对于所述VPS中指定的具有特定层ID值的多个层中的每个层,所述至少一个OLS中的所述层中的一个层也应具有所述特定层ID值。

在框804中,视频解码器对来自多个层中的一个层的图像(例如,图像615)进行解码。在一个实施例中,图像包括在至少一个OLS的输出层中。

在一个实施例中,方法800还包括在解码之前从至少一个OLS中选择输出层。在一个实施例中,方法800还包括在输出层被选择之后从输出层选择图像。

在图像被解码之后,该图像可以用于生成或产生图像或视频序列,以便在电子设备(例如智能手机、平板电脑、膝上型电脑、个人电脑等)的显示器或屏幕上显示给用户。

图9为视频编码器(例如,视频编码器300)实现的对视频码流进行编码的方法900的实施例。当图像(例如,视频中的图像)需要编码到视频码流中并且发送到视频解码器(例如,视频解码器400)时,可以执行方法900。方法900通过不允许不必要的层包括在多层视频码流中来改进编码过程。也就是说,任何未在至少一个输出层集(output layer set,OLS)中使用的层都被约束为不包括在多层码流中。这避免了译码过程中的无关信息,提高了译码效率。因此,视频译码中的编码器/解码器(又称为编解码器)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时为用户提供更好的体验。

在框902中,视频编码器生成多个层(例如,层N 631、层N+1 632等)和指定一个或多个OLS(例如,OLS1、OLS2等)的VPS(例如,VPS 704)。在一个实施例中,多个层中的每个层包括在VPS指定的OLS中的至少一个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。在一个实施例中,视频编码器被约束,使得多个层中的每个层都包括在VPS指定的OLS中的至少一个OLS中。也就是说,视频编码器需要多个层中的每个层包括在VPS指定的OLS中的至少一个OLS中。这样的约束或要求确保码流符合VVC或一些其它标准,如本文所示进行修改。但是,编码器也能够在不受这种约束的其它模式下操作,例如在不同标准或同一标准的不同版本下操作。

nuh_layer_id在码流中进行指示,用于确定nuhLayerId。nuh_layer_id和nuhLayerId中的每一个都包括用于唯一地标识层的标识符(identifier,ID)。vps_layer_id[k]用于表示VPS 704中的层ID。vps_max_layers_minus1用于表示OLS中的最大层数。TotalNumOlss用于表示CLVS和/或码流中包括的OLS总数。最后,NumLayersInOls表示OLS中的层数。

在一个实施例中,所述一个或多个OLS中的每个OLS包括一个或多个输出层,所述输出层中的每个输出层包括一个或多个图像。在一个实施例中,所述多个层中的每个层包括视频编码层(video coding layer,VCL)网络抽象层(network abstraction layer,NAL)单元和相关联的非VCL NAL单元的集合,所述VCL NAL单元都具有特定层标识符(identifier,ID)值。

在一个实施例中,所述OLS中的一个OLS包括两个输出层,所述两个输出层中的一个输出层参考所述两个输出层中的另一个输出层。在一个实施例中,对于所述VPS中指定的具有特定层ID值的多个层中的每个层,所述一个或多个OLS中的所述层中的一个层也应具有所述特定层ID值。

在一个实施例中,设置在编码器中的假设参考解码器(hypothetical referencedecoder,HRD)将检查所有层和OLS。当HRD找到不在本文所描述的任何OLS中的层时,HRD将返回一致性测试错误。也就是说,HRD一致性测试确保没有未使用的层。因此,编码器根据无未使用的层要求编码,但HRD执行此要求。

在框904中,视频编码器将多个层和VPS编码到视频码流中。在步骤906中,视频编码器存储视频码流,用于传输到视频解码器。视频码流传输到视频解码器之前,可以存储在存储器中。所述视频解码器接收到视频码流之后,可以对编码视频码流进行解码(例如,如以上所描述),以生成或产生用于在电子设备(例如,智能手机、平板电脑、膝上型电脑、个人电脑等)的显示器或屏幕上向用户显示的图像或视频序列。

图10为根据本发明实施例的视频译码设备1000(例如视频编码器300或视频解码器400)的示意图。视频译码设备1000适合于实现如本文所描述的公开实施例。视频译码设备1000包括:用于接收数据的入端口1010和接收单元(Rx)1020;用于处理数据的处理器、逻辑单元或中央处理单元(central processing unit,CPU)1030;用于发送数据的发送单元(Tx)1040和出端口1050;用于存储数据的存储器1060。视频译码设备1000还可以包括耦合到入端口1010、接收单元1020、发送单元1040和出端口1050的光电(optical-to-electrical,OE)组件和电光(electrical-to-optical,EO)组件,用作光信号或电信号的出口或入口。

处理器1030通过硬件和软件实现。处理器1030可以实现为一个或多个CPU芯片、核(例如,多核处理器)、现场可编程门阵列(field-programmable gate array,FPGA)、专用集成电路(application specific integrated circuit,ASIC)和数字信号处理器(digitalsignal processor,DSP)。处理器1030与入端口1010、接收单元1020、发送单元1040、出端口1050和存储器1060通信。处理器1030包括译码模块1070。译码模块1070实现以上所描述的公开实施例。例如,译码模块1070实现、处理、准备或提供各种编解码功能。因此,将译码模块1070包括在内,这为视频译码设备1000的功能提供了实质性的改进,并且影响了视频译码设备1000到不同状态的转换。或者,以存储在存储器1060中并由处理器1030执行的指令来实现译码模块1070。

视频译码设备1000还可以包括用于与用户进行数据通信的输入和/或输出(I/O)设备1080。I/O设备1080可以包括输出设备,例如用于显示视频数据的显示器、用于输出音频数据的扬声器等。I/O设备1080还可以包括输入设备,例如键盘、鼠标、轨迹球等,和/或用于与这些输出设备交互的对应的接口。

存储器1060包括一个或多个磁盘、磁带机和固态硬盘,并且可以用作溢出数据存储设备,以在选择此类程序用于执行时存储程序,以及存储在程序执行期间读取的指令和数据。存储器1060可以是易失性和/或非易失性的,并且可以是只读存储器(read-onlymemory,ROM)、随机存取存储器(random access memory,RAM)、三态内容寻址存储器(ternary content-addressable memory,TCAM)和/或静态随机存取存储器(staticrandom-access memory,SRAM)。

图11为译码模块1100的一个实施例的示意图。在一个实施例中,译码模块1100在视频译码设备1102(例如,视频编码器300或视频解码器400)中实现。视频译码设备1102包括接收模块1101。接收模块1101用于接收用于进行编码的图像,或接收用于进行解码的码流。视频译码设备1102包括耦合到接收模块1101的发送模块1107。发送模块1107用于将码流发送到解码器或将解码图像发送到显示模块(例如,I/O设备1080中的一个)。

视频译码设备1102包括存储模块1103。存储模块1103耦合到接收模块1101或发送模块1107中的至少一个。存储模块1103用于存储指令。视频译码设备1102还包括处理模块1105。处理模块1105耦合到存储模块1103。处理模块1105用于执行存储在存储模块1103中的指令以执行本文公开的方法。

还应理解,本文中阐述的示例性方法的步骤不一定需要按照所描述的顺序执行,并且这些方法的步骤的顺序应理解为仅仅是示例性的。同样地,在与本发明各种实施例相一致的方法中,这些方法可以包括其它步骤,并且某些步骤可以省略或组合。

尽管本发明中已经提供了几个实施例,但应理解的是,在不偏离本发明的精神或范围的情况下,所公开的系统和方法可以以许多其它特定形式实现。当前的这些示例被认为是说明性的而非限制性的,并且意图不限于本文给出的细节。例如,各种元件或组件可以组合或集成在另一个系统中,或者可以省略或不实现一些特征。

此外,在不偏离本发明范围的情况下,在各种实施例中描述和示出为分立的或独立的技术、系统、子系统和方法,可以与其它系统、模块、技术或方法组合或集成。示出或论述为相互耦合、直接耦合或通信的其它项目可以通过电、机械或其它方式通过一些接口、设备或中间组件间接耦合或通信。改变、替换和更改的其它示例可以由本领域技术人员确定,并且可以在不偏离本文所公开的精神和范围的情况下进行。

相关技术
  • 一种面向新轮轨列车的自动对中双轴转向架系统
  • 一种三轴式轮轨型双齿轮结构天线座架装置
  • 一种方位俯仰型双齿轮轮轨式大型天线座架
技术分类

06120116521717