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

视频码流编解码方法及对应的编解码器和介质与流程

2022-12-20 20:24:54 来源:中国专利 TAG:

视频码流编解码方法及对应的编解码器和介质
1.本技术是分案申请,原申请的申请号是202080040219.8,原申请日是2020年5月27日,原申请的全部内容通过引用结合在本技术中。
技术领域
2.本发明大体上描述了用于在视频译码中支持运动矢量修正的技术。更具体而言,本发明支持当参考图像来自与当前图像的层不同的层时禁用运动矢量修正。


背景技术:

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


技术实现要素:

4.第一方面涉及一种由视频解码器实现的对经编码的视频码流进行解码的方法。所述方法包括:所述视频解码器接收包括参考图像列表的经编码的视频码流;所述视频解码器从所述参考图像列表中获取当前图像的参考图像;当所述参考图像与所述当前图像处于同一层时,所述视频解码器将运动矢量修正标志设置为第一值,以对所述当前图像的当前块启用运动矢量修正;当所述参考图像与所述当前图像处于不同层时,所述视频解码器将所述运动矢量修正标志设置为第二值,以对所述当前图像的所述当前块禁用所述运动矢量修正;当所述运动矢量修正标志设置为所述第一值时,所述视频解码器修正与所述当前块对应的运动矢量。
5.该方法提供了支持当参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正的技术。能够在参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正可以避免视频译码错误(例如,除零问题)。因此,视频译码中的编码器/解码器(又名“编解码器”)相对于当前编解码器得到了改进。实际上,当视频在被发送、接收和/或观看时,改进的视频译码过程为用户提供了更好的用户体验。
6.可选地,在上述任一方面中,提供了该方面的另一种实现方式:即使当所述运动矢量修正被禁用时,也对包括所述当前图像的整个编码视频序列(coded video sequence,cvs)启用参考图像重采样(reference picture resampling,rpr)。
7.可选地,在上述任一方面中,提供了该方面的另一种实现方式:使用层标识符来确定所述参考图像是否与所述当前图像处于同一层中,或者所述参考图像是否与所述当前图
像处于不同层中。
8.可选地,在上述任一方面中,提供了该方面的另一种实现方式:所述层标识符指定为nuh_layer_id。
9.可选地,在上述任一方面中,提供了该方面的另一种实现方式:所述运动矢量修正标志设置在所述经编码的视频码流的条带头中。
10.可选地,在上述任一方面中,提供了该方面的另一种实现方式:所述运动矢量修正标志是解码器侧运动矢量修正(decoder-side motion vector refinement,dmvr)标志或双向光流(bi-directional optical flow,bdof)标志。
11.可选地,在上述任一方面中,提供了该方面的另一种实现方式:在电子设备的显示器上显示使用所述当前块生成的图像。
12.第二方面涉及一种由视频编码器实现的对视频码流进行编码的方法。所述方法包括:所述视频编码器从所述视频码流中的参考图像列表中获取当前图像的参考图像;当所述参考图像与所述当前图像处于同一层时,所述视频编码器将运动矢量修正标志设置为第一值,以对所述当前图像的当前块启用运动矢量修正;当所述参考图像与所述当前图像处于不同层时,所述视频编码器将所述运动矢量修正标志设置为第二值,以对所述当前图像的所述当前块禁用所述运动矢量修正;当所述运动矢量修正标志设置为所述第一值时,所述视频编码器修正与所述当前块对应的运动矢量。
13.该方法提供了支持当参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正的技术。能够在参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正可以避免视频译码错误(例如,除零问题)。因此,视频译码中的编码器/解码器(又名“编解码器”)相对于当前编解码器得到了改进。实际上,当视频在被发送、接收和/或观看时,改进的视频译码过程为用户提供了更好的用户体验。
14.可选地,在上述任一方面中,提供了该方面的另一种实现方式:所述视频编码器根据所述参考图像确定所述当前图像的运动矢量;所述视频编码器根据所述运动矢量对所述当前图像进行编码;所述视频编码器使用假设参考解码器对所述当前图像进行解码。
15.可选地,在上述任一方面中,提供了该方面的另一种实现方式:即使当所述运动矢量修正被禁用时,也对包括所述当前图像的整个编码视频序列(coded video sequence,cvs)启用参考图像重采样(reference picture resampling,rpr)。
16.可选地,在上述任一方面中,提供了该方面的另一种实现方式:使用层标识符来确定所述参考图像是否与所述当前图像处于同一层中,或者所述参考图像是否与所述当前图像处于不同层中。
17.可选地,在上述任一方面中,提供了该方面的另一种实现方式:所述层标识符指定为nuh_layer_id。
18.可选地,在上述任一方面中,提供了该方面的另一种实现方式:所述运动矢量修正标志设置在所述经编码的视频码流的条带头中。
19.可选地,在上述任一方面中,提供了该方面的另一种实现方式:向视频解码器发送包括所述当前块的所述视频码流。
20.第三方面涉及一种解码设备。所述解码设备包括:接收器,用于接收经编码的视频码流;与所述接收器耦合的存储器,所述存储器存储指令;与所述存储器耦合的处理器,所
述处理器用于执行所述指令以使所述解码设备:接收包括参考图像列表的所述经编码的视频码流;从所述参考图像列表中获取当前图像的参考图像;当所述参考图像与所述当前图像处于同一层时,将运动矢量修正标志设置为第一值,以对所述当前图像的当前块启用运动矢量修正;当所述参考图像与所述当前图像处于不同层时,将所述运动矢量修正标志设置为第二值,以对所述当前图像的所述当前块禁用所述运动矢量修正;当所述运动矢量修正标志设置为所述第一值时,修正与所述当前块对应的运动矢量。
21.该解码设备提供了支持当参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正的技术。能够在参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正可以避免视频译码错误(例如,除零问题)。因此,视频译码中的编码器/解码器(又名“编解码器”)相对于当前编解码器得到了改进。实际上,当视频在被发送、接收和/或观看时,改进的视频译码过程为用户提供了更好的用户体验。
22.可选地,在上述任一方面中,提供了该方面的另一种实现方式:即使当所述运动矢量修正被禁用时,也对包括所述当前图像的整个编码视频序列(coded video sequence,cvs)启用参考图像重采样(reference picture resampling,rpr)。
23.可选地,在上述任一方面中,该方面的另一种实现方式提供了一种显示器,所述显示器用于显示根据所述当前块生成的图像。
24.第四方面涉及一种编码设备。所述编码设备包括:包括指令的存储器;与所述存储器耦合的处理器,所述处理器用于实现所述指令以使所述编码设备:从所述视频码流中的参考图像列表中获取当前图像的参考图像;当所述参考图像与所述当前图像处于同一层时,将运动矢量修正标志设置为第一值,以对所述当前图像的当前块启用运动矢量修正;当所述参考图像与所述当前图像处于不同层时,将所述运动矢量修正标志设置为第二值,以对所述当前图像的所述当前块禁用所述运动矢量修正;当所述运动矢量修正标志设置为所述第一值时,修正与所述当前块对应的运动矢量;与所述处理器耦合的发送器,所述发送器用于向视频解码器发送包括所述当前块的视频码流。
25.该编码设备提供了支持当参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正的技术。能够在参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正可以避免视频译码错误(例如,除零问题)。因此,视频译码中的编码器/解码器(又名“编解码器”)相对于当前编解码器得到了改进。实际上,当视频在被发送、接收和/或观看时,改进的视频译码过程为用户提供了更好的用户体验。
26.可选地,在上述任一方面中,提供了该方面的另一种实现方式:即使当所述运动矢量修正被禁用时,也对包括所述当前图像的整个编码视频序列(coded video sequence,cvs)启用参考图像重采样(reference picture resampling,rpr)。
27.可选地,在上述任一方面中,提供了该方面的另一种实现方式:所述存储器在所述发送器向所述视频解码器发送所述码流之前存储所述视频码流。
28.第五方面涉及一种译码装置。所述译码装置包括:接收器,用于接收图像进行编码或接收码流进行解码;与所述接收器耦合的发送器,所述发送器用于将所述码流发送到解码器或将解码图像发送到显示器;与所述接收器或所述发送器中的至少一个耦合的存储器,所述存储器用于存储指令;与所述存储器耦合的处理器,所述处理器用于执行存储在所述存储器中的所述指令,以执行本文公开的任一种方法。
29.可选地,在上述任一方面中,该方面的另一种实现方式提供了一种显示器,所述显示器用于显示根据所述当前块生成的图像。
30.该译码装置提供了支持当参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正的技术。能够在参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正可以避免视频译码错误(例如,除零问题)。因此,视频译码中的编码器/解码器(又名“编解码器”)相对于当前编解码器得到了改进。实际上,当视频在被发送、接收和/或观看时,改进的视频译码过程为用户提供了更好的用户体验。
31.第六方面涉及一种系统。所述系统包括:编码器;与所述编码器通信的解码器,其中,所述编码器或所述解码器包括本文公开的所述解码设备、所述编码设备或所述译码装置。
32.该系统提供了支持当参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正的技术。能够在参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正可以避免视频译码错误(例如,除零问题)。因此,视频译码中的编码器/解码器(又名“编解码器”)相对于当前编解码器得到了改进。实际上,当视频在被发送、接收和/或观看时,改进的视频译码过程为用户提供了更好的用户体验。
33.第七方面涉及一种译码模块。所述译码模块包括:接收模块,用于接收图像进行编码或接收码流进行解码;与所述接收模块耦合的发送模块,所述发送模块用于将所述码流发送到解码模块或将解码图像发送到显示模块;与所述接收模块或所述发送模块中的至少一个耦合的存储模块,所述存储模块用于存储指令;与所述存储模块耦合的处理模块,所述处理模块用于执行存储在所述存储模块中的所述指令,以执行本文公开的任一种方法。
34.该译码模块提供了支持当参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正的技术。能够在参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正可以避免视频译码错误(例如,除零问题)。因此,视频译码中的编码器/解码器(又名“编解码器”)相对于当前编解码器得到了改进。实际上,当视频在被发送、接收和/或观看时,改进的视频译码过程为用户提供了更好的用户体验。
附图说明
35.为了更全面地理解本发明,现在参考以下结合附图和具体实施方式进行的简要描述,其中,相似的附图标记表示相似的部件。
36.图1是可以利用视频译码技术的示例性译码系统的框图。
37.图2是可以实现视频译码技术的示例性视频编码器的框图。
38.图3是可以实现视频译码技术的视频解码器示例的框图。
39.图4示出了用于实现空间可适性的多层译码的示例。
40.图5是单向帧间预测示例的示意图。
41.图6是双向帧间预测示例的示意图。
42.图7示出了视频码流。
43.图8示出了图像的分割技术。
44.图9是对经编码的视频码流进行解码的方法的实施例。
45.图10是对经编码的视频码流进行编码的方法的实施例。
46.图11是视频译码设备的示意图。
47.图12是译码模块的实施例的示意图。
具体实施方式
48.首先应理解,尽管下文提供了一个或多个实施例的说明性实现方式,但所公开的系统和/或方法可使用任何数量的技术来实现,无论这些技术是当前已知还是现有的。本发明决不应限于下文所说明的说明性实现方式、附图和技术,包括本文所说明并描述的示例性设计和实现方式,而是可在所附权利要求书的范围以及其等效物的完整范围内修改。
49.本文所使用的分辨率描述了视频文件中的像素数量。即,分辨率是投影图像以像素测量的宽度和高度。例如,视频的分辨率可能为1280(水平像素)
×
720(垂直像素)。这通常简写为1280
×
720,或缩写为720p。双向光流(bi-directional optical flow,bdof)、解码器侧运动矢量修正(decoder-side motion vector refinement,dmvr)以及带有运动矢量差的融合(merge with motion vector difference,mmvd)是用于修正预测块的运动或运动矢量的过程、算法或译码工具。参考图像重采样(reference picture resampling,rpr)的特征是提供在不需要在分辨率更改位置处对图像进行帧内译码的情况下,在码流中间更改经编码图像的空间分辨率的能力。
50.图1为可以采用本文描述的视频译码技术的示例性译码系统10的框图。如图1所示,译码系统10包括源设备12,源设备12提供稍后待目的地设备14解码的经编码的视频数据。具体地,源设备12可以通过计算机可读介质16将视频数据提供给目的地设备14。源设备12和目的地设备14可以包括各种设备中的任一个,包括台式电脑、笔记本(例如,膝上型)电脑、平板电脑、机顶盒、“智能”手机和“智能”平板等电话手机、电视、摄像机、显示设备、数字媒体播放器、视频游戏机、视频流设备等。在一些情况下,源设备12和目的地设备14可以用于无线通信。
51.目的地设备14可以通过计算机可读介质16接收待解码的经编码的视频数据。计算机可读介质16可以包括能够将经编码的视频数据从源设备12移动到目的地设备14的任何类型的介质或设备。在一个示例中,计算机可读介质16可以包括通信介质,以使源设备12能够将经编码的视频数据直接实时地发送到目的地设备14。经编码的视频数据可以根据通信标准(例如,无线通信协议)来调制,然后发送给目的地设备14。该通信介质可以包括任何无线或有线通信介质,例如,射频(radio frequency,rf)频谱或一个或多个物理传输线。该通信介质可以形成基于分组的网络的一部分,分组网络例如为局域网、广域网或全球网络(例如,互联网)。该通信介质可以包括路由器、交换机、基站或任何其它可用于促进源设备12与目的地设备14之间通信的设备。
52.在一些示例中,经编码的数据可以从输出接口22输出到存储设备。类似地,经编码的数据可以通过输入接口从存储设备中存取。该存储设备可以包括各种分布式或本地存取的数据存储介质中的任一种,例如,硬盘驱动器、蓝光光盘、数字视频光盘(digital video disk,dvd)、只读光盘存储器(compact disc read-only memory,cd-rom)、闪存、易失性或非易失性存储器,或任何其它适合用于存储经编码的视频数据的数字存储介质。在另一示例中,存储设备可以对应于文件服务器或可以存储由源设备12生成的经编码的视频的另一中间存储设备。目的地设备14可以通过流式传输或下载方式从存储设备中存取所存储的视
频数据。文件服务器可以是能够存储经编码的视频数据并将该经编码的视频数据发送给目的地设备14的任何类型的服务器。示例性文件服务器包括万维网服务器(例如,用于网站)、文件传输协议(file transfer protocol,ftp)服务器、网络附属存储(network attached storage,nas)设备或本地磁盘驱动器。目的地设备14可以通过包括互联网连接的任何标准数据连接存取经编码的视频数据。标准数据连接可以包括无线信道(例如,wi-fi连接)、有线连接(例如,数字用户线(digital subscriber line,dsl)、电缆调制解调器等)或适于存取在文件服务器中存储的经编码的视频数据的两者组合。经编码的视频数据从存储设备的传输可以是流式传输、下载传输或其组合。
53.本发明的技术不一定限于无线应用或设置。这些技术可以应用于视频译码以支持各种多媒体应用中的任一种,例如,空中电视广播、有线电视传输、卫星电视传输、http动态自适应流媒体(dynamic adaptive streaming over http,dash)等互联网流式视频传输、将数字视频编码以存储于数据存储介质中、对存储于数据存储介质中的数字视频解码,或其它应用。在一些示例中,译码系统10可以用于支持单向或双向视频传输,以支持视频流式传输、视频播放、视频广播和/或视频电话等应用。
54.在图1的示例中,源设备12包括视频源18、视频编码器20和输出接口22。目的地设备14包括输入接口28、视频解码器30和显示设备32。根据本发明,源设备12的视频编码器20和/或目的地设备14的视频解码器30可以用于应用视频译码技术。在其它示例中,源设备和目的地设备可以包括其它组件或装置。例如,源设备12可以从外部视频源(如外部摄像机)接收视频数据。类似地,目的地设备14可以与外部显示设备连接,而不是包括集成显示设备。
55.图1所示的译码系统10仅仅是一个示例。视频译码技术可以由任何数字视频编码和/或解码设备执行。尽管本发明的技术通常由视频译码设备执行,但这些技术也可以由视频编码器/解码器(通常称为“编解码器”)执行。此外,本发明的技术还可以由视频预处理器执行。视频编码器和/或解码器可以是图形处理单元(graphics processing unit,gpu)或类似设备。
56.源设备12和目的地设备14仅仅是此类译码设备的示例,其中,源设备12生成经编码的视频数据,以发送给目的地设备14。在一些示例中,源设备12和目的地设备14可以基本上对称地操作,使得源设备12和目的地设备14都包括视频编码和解码组件。因此,译码系统10可以支持视频设备12和14之间的单向或双向视频传输,例如,用于视频流式传输、视频播放、视频广播或视频电话。
57.源设备12的视频源18可以包括视频捕获设备(例如,摄像机)、包括先前捕获的视频的视频档案库,和/或从视频内容提供方接收视频的视频输入接口。在另一替代方案中,视频源18可以生成基于计算机图形的数据作为源视频,或直播视频、存档视频和计算机生成视频的组合。
58.在一些情况下,当视频源18是摄像机时,源设备12和目的地设备14可以组成摄像手机或可视电话。但是,如上所述,本发明中描述的技术通常可以适用于视频译码,并且可以应用于无线应用和/或有线应用。在每种情况下,所捕获、预捕获或计算机生成的视频都可以由视频编码器20进行编码。然后,经编码的视频信息可以通过输出接口22输出到计算机可读介质16。
59.计算机可读介质16可以包括瞬态介质,例如,无线广播或有线网络传输,还可以包括存储介质(即,非瞬时性存储介质),例如,硬盘、闪存盘、光盘、数字视频光盘、蓝光光盘或其它计算机可读介质。在一些示例中,网络服务器(未示出)可以从源设备12接收经编码的视频数据,并且通过网络传输等将经编码的视频数据提供给目的地设备14。类似地,介质生产设施(例如,光盘冲压设施)的计算设备可以从源设备12接收经编码的视频数据,并产生包括经编码的视频数据的光盘。因此,在各种示例中,计算机可读介质16可以理解为包括一个或多个各种形式的计算机可读介质。
60.目的地设备14的输入接口28从计算机可读介质16接收信息。计算机可读介质16的信息可以包括由视频编码器20定义的语法信息。该语法信息还由视频解码器30使用,包括描述块和其它编码单元(例如,图像组(group of picture,gop))的特征和/或处理方式的语法元素。显示设备32将经解码的视频数据显示给用户,并且可以包括各种显示设备中的任一种,例如阴极射线管(cathode ray tube,crt)、液晶显示器(liquid crystal display,lcd)、等离子体显示器、有机发光二极体(organic light emitting diode,oled)显示器或其它类型的显示设备。
61.视频编码器20和视频解码器30可以根据视频编码标准(例如,目前开发的高效视频编码(efficiency video coding,hevc)标准)进行操作,并且可以遵守hevc测试模型(hevc test model,hm)。或者,视频编码器20和视频解码器30可以根据其它专有或行业标准进行操作,这些标准例如为国际电信联盟电信标准化部门(international telecommunications union telecommunication standardization sector,itu-t)h.264标准(还称为运动图像专家组(motion picture expert group,mpeg)-4第10部分,高级视频编码(advanced video coding,avc))、h.265/hevc及此类标准的扩展版本。但是,本发明的技术不限于任何特定的编码标准。视频编码标准的其它示例包括mpeg-2和itu-t h.263。尽管在图1中未示出,但是在一些方面中,视频编码器20和视频解码器30可以分别与音频编码器和音频解码器集成,并且可以包括合适的复用器-解复用器(multiplexer-demultiplexer,mux-demux)单元或其它硬件和软件,以对共同数据流或单独数据流中的音频和视频都进行编码处理。如果适用,mux-demux单元可以遵守itu h.223复用器协议,或用户数据报协议(user datagram protocol,udp)等其它协议。
62.视频编码器20和视频解码器30可以分别实现为各种合适的编码器电路中的任一种,例如,一个或多个微处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field programmable gate array,fpga)、离散逻辑、软件、硬件、固件或其任何组合。当上述技术部分以软件实现时,一种设备可以将该软件的指令存储在合适的非瞬时性计算机可读介质中,并且在硬件中使用一个或多个处理器来执行这些指令,以执行本发明的技术。视频编码器20和视频解码器30都可以包括在一个或多个编码器或解码器中,其中任一个可以集成为相应设备中的组合编码器/解码器(encoder/decoder,codec)的一部分。包括视频编码器20和/或视频解码器30的设备可以包括集成电路、微处理器和/或无线通信设备(例如,蜂窝电话)。
63.图2为可以实现视频译码技术的视频编码器20示例的框图。视频编码器20可以对视频条带(slice)内的视频块执行帧内译码和帧间译码。帧内译码依赖于空间预测来减少
或去除给定视频帧或图像内的视频中的空间冗余。帧间译码依赖于时间预测来减少或去除视频序列的相邻帧或图像内的视频中的时间冗余。帧内模式(i模式)可以指若干种基于空间的译码模式中的任一种。帧间模式(例如,单向预测(uni-prediction/uni prediction)(p模式)或双向预测(bi-prediction/bi prediction)(b模式))可以指若干种基于时间的译码模式中的任一种。
64.如图2所示,视频编码器20接收待编码的视频帧内的当前视频块。在图2的示例中,视频编码器20包括模式选择单元40、参考帧存储器64、加法器50、变换处理单元52、量化单元54以及熵编码单元56。模式选择单元40又包括运动补偿单元44、运动估计单元42、帧内预测(intra-predition/intra prediction)单元46和分割单元48。为了视频块重建,视频编码器20还包括反量化单元58、逆变换单元60和加法器62。去块效应滤波器(图2中未示出)也包括在内,以对块边界进行滤波,从而从重建视频中去除块性伪影。如果需要,去块效应滤波器通常对加法器62的输出进行滤波。除去块效应滤波器之外,还可以使用其它(环内或环后)滤波器。为了简洁起见而未示出此类滤波器,但是如果需要,此类滤波器(作为环内滤波器)可以对加法器50的输出进行滤波。
65.在编码过程期间,视频编码器20接收待译码的视频帧或条带。可以将帧或条带划分成多个视频块。运动估计单元42和运动补偿单元44相对于一个或多个参考帧中的一个或多个块对接收到的视频块执行帧间预测译码,以提供时间预测。帧内预测单元46还可以相对于与待译码块位于同一帧或条带中的一个或多个相邻块对接收到的视频块执行帧内预测译码,以提供空间预测。视频编码器20可以执行多个译码回合,例如以选择用于视频数据的每一块的适当译码模式。
66.此外,分割单元48可以根据先前译码回合中对先前分割方案的评估而将视频数据的块分割成子块。例如,分割单元48可以最初将帧或条带分割成多个最大编码单元(largest coding unit,lcu),并且根据率失真分析(例如,率失真优化)将每个lcu分割成多个子编码单元(sub-coding unit,sub-cu)。模式选择单元40可以进一步产生指示lcu分割成多个子cu的四叉树数据结构。四叉树的叶节点cu可以包括一个或多个预测单元(prediction unit,pu)和一个或多个变换单元(transform unit,tu)。
67.本发明使用术语“块”来指代hevc上下文中的cu、pu或tu中的任一个或其它标准上下文中的类似数据结构(例如,h.264/avc中的宏块及其子块)。cu包括编码节点、与编码节点关联的pu和tu。cu的大小与编码节点的大小对应,呈正方形。cu的大小范围可以为8
×
8个像素到最大值为64
×
64个像素或更大的树块大小。每个cu可以包括一个或多个pu和一个或多个tu。与cu关联的语法数据可以描述(例如)将cu分割为一个或多个pu。对cu进行跳过模式或直接模式编码、进行帧内预测模式编码或进行帧间预测(inter-predictio/inter prediction)模式编码,分割模式可能有所不同。pu可以分割成非正方形。与cu关联的语法数据还可以描述(例如)根据四叉树将cu分割成一个或多个tu。tu可以是正方形或非正方形(例如,矩形)。
68.模式选择单元40可以根据误差结果等选择帧内或帧间译码模式中的一种,将所得到的帧内或帧间译码块提供给加法器50以生成残差块数据,并提供给加法器62以重建编码块以用作参考帧。模式选择单元40还将语法元素(例如,运动矢量、帧内模式指示符、分割信息和其它此类语法信息)提供给熵编码单元56。
69.运动估计单元42和运动补偿单元44可以高度集成,但出于概念目的而分别说明。由运动估计单元42执行的运动估计为生成运动矢量的过程,这些运动矢量估计视频块的运动。例如,运动矢量可以表示当前视频帧或图像内的视频块的pu相对于参考帧(或其它经编码单元)内的预测块(其相对于当前帧(或其它经编码单元)内的正被编码的当前块)的位移。预测块为发现在像素差方面与待译码块高度匹配的块。所述像素差可以通过绝对差和(sum of absolute difference,sad)、平方差和(sum of square difference,ssd)或其它差度量进行确定。在一些示例中,视频编码器20可以计算存储于参考帧存储器64中的参考图像的子整数像素位置的值。例如,视频编码器20可以插值参考图像的四分之一像素位置、八分之一像素位置或其它分数像素位置的值。因此,运动估计单元42可以执行相对于整数像素位置和分数像素位置的运动搜索,并以分数像素精度输出运动矢量。
70.运动估计单元42通过将帧间译码条带中的视频块的pu的位置与参考图像的预测块的位置进行比较而计算该pu的运动矢量。参考图像可以选自第一参考图像列表(列表0)或第二参考图像列表(列表1),其中每一个列表标识存储于参考帧存储器64中的一个或多个参考图像。运动估计单元42将计算得到的运动矢量发送给熵编码单元56和运动补偿单元44。
71.由运动补偿单元44执行的运动补偿可以包括根据运动估计单元42确定的运动矢量来提取或生成预测块。另外,在一些示例中,运动估计单元42和运动补偿单元44可以在功能上集成。一旦接收到当前视频块的pu的运动矢量,运动补偿单元44可以定位在其中一个参考图像列表中运动矢量指向的预测块。加法器50通过从正被译码的当前视频块的像素值中减去预测块的像素值,从而形成像素差值来形成残差视频块,如下所述。通常,运动估计单元42执行关于亮度分量的运动估计,运动补偿单元44将根据亮度分量计算得到的运动矢量用于色度分量和亮度分量两者。模式选择单元40还可以生成与视频块和视频条带关联的语法元素,以供视频解码器30在解码视频条带的视频块时使用。
72.帧内预测单元46可以对当前块进行帧内预测,以替代由运动估计单元42和运动补偿单元44执行的帧间预测,如上文所述。具体地,帧内预测单元46可以确定帧内预测模式,以用于对当前块进行编码。在一些示例中,帧内预测单元46可以(例如)在单独的编码过程期间使用各种帧内预测模式对当前块进行编码,而帧内预测单元46(或在一些示例中,模式选择单元40)可以从经测试的模式中选择合适的帧内预测模式进行使用。
73.例如,帧内预测单元46可以使用针对各种经测试的帧内预测模式的率失真分析而计算率失真值,并在经测试模式中选择具有最佳率失真特性的帧内预测模式。率失真分析通常确定编码块与经编码以产生编码块的原始未编码块之间的失真(或误差)量,以及用于产生编码块的码率(即,比特数)。帧内预测单元46可以根据各个编码块的失真和速率计算比率,以判断哪种帧内预测模式对于该块表现最佳率失真值。
74.另外,帧内预测单元46可以用于使用深度建模模式(depth modeling mode,dmm)对深度图像的深度块进行译码。模式选择单元40可以确定可用dmm模式是否比帧内预测模式和其它dmm模式(例如,使用率失真优化(rate-distortion optimization,rdo))产生更好的译码结果。与深度图像对应的纹理图像的数据可以存储于参考帧存储器64中。运动估计单元42和运动补偿单元44还可以用于对深度图像的深度块进行帧间预测。
75.在选择块的帧内预测模式(例如,传统的帧内预测模式或其中一个dmm模式)之后,
帧内预测单元46可以将信息提供给熵编码单元56,该信息表示为块选择的帧内预测模式。熵编码单元56可以对表示所选帧内预测模式的信息进行编码。视频编码器20可以在所发送的码流中携带配置数据,所述配置数据可以包括多个帧内预测模式索引表和多个经修改的帧内预测模式索引表(也称为码字映射表),各种块的编码上下文的定义,待用于每个编码上下文的最有可能帧内预测模式、帧内预测模式索引表和经修改的帧内预测模式索引表的指示。
76.视频编码器20通过从正被译码的原始视频块中减去来自模式选择单元40的预测数据而形成残差视频块。加法器50表示执行这种减法运算的一个或多个组件。
77.变换处理单元52将离散余弦变换(discrete cosine transform,dct)或概念上类似的变换等变换应用于残差块,从而产生包括残差变换系数值的视频块。变换处理单元52可以执行概念上类似于dct的其它变换。还可以使用小波变换、整数变换、子频带变换或其它类型的变换。
78.变换处理单元52将变换应用于残差块,从而产生残差变换系数块。变换可以将残差信息从像素值域转换到变换域,例如频域。变换处理单元52可以将所得到的变换系数发送给量化单元54。量化单元54对变换系数进行量化以进一步降低码率。量化过程可以减小与部分或全部系数关联的位深度。量化程度可以通过调整量化参数来修改。在一些示例中,量化单元54可以接着对包括量化变换系数的矩阵执行扫描。或者,熵编码单元56可以执行扫描。
79.在量化之后,熵编码单元56对量化变换系数进行熵编码。例如,熵编码单元56可以执行上下文自适应可变长度编码(context adaptive variable length coding,cavlc)、上下文自适应二进制算术编码(context adaptive binary arithmetic coding,cabac)、基于语法的上下文自适应二进制算术编码(syntax-based context-adaptive binary arithmetic coding,sbac)、概率区间分割熵(probability interval partitioning entropy,pipe)编码或其它熵编码技术。在基于上下文的熵编码的情况中,上下文可以基于相邻块。在由熵编码单元56执行熵编码之后,经编码的码流可以发送给另一设备(例如,视频解码器30)或存档以供稍后发送或检索。
80.反量化单元58和逆变换单元60分别应用反量化和逆变换,以在像素域中重建残差块,(例如)以供稍后用作参考块。运动补偿单元44可以通过将残差块加到参考帧存储器64内的其中一个帧的预测块中来计算参考块。运动补偿单元44还可以将一个或多个插值滤波器应用于重建残差块,以计算子整数像素值以供用于运动估计中。加法器62将重建残差块加到由运动补偿单元44产生的运动补偿预测块中,以产生重建视频块以供存储于参考帧存储器64中。重建视频块可以由运动估计单元42和运动补偿单元44用作参考块,以对后续视频帧中的块进行帧间译码。
81.图3为可以实现视频译码技术的视频解码器30示例的框图。在图3的示例中,视频解码器30包括熵解码单元70、运动补偿单元72、帧内预测单元74、反量化单元76、逆变换单元78、参考帧存储器82和加法器80。在一些示例中,视频解码器30可以执行与参照视频编码器20(图2)描述的编码过程大体相反的解码过程。运动补偿单元72可以根据从熵解码单元70接收到的运动矢量来生成预测数据,而帧内预测单元74可以根据从熵解码单元70接收到的帧内预测模式指示符来生成预测数据。
82.在解码过程期间,视频解码器30从视频编码器20接收经编码的视频码流,该经编码的视频码流表示经编码的视频条带的视频块及关联的语法元素。视频解码器30的熵解码单元70对码流进行熵解码以生成量化系数、运动矢量或帧内预测模式指示符和其它语法元素。熵解码单元70将运动矢量和其它语法元素转发给运动补偿单元72。视频解码器30可以接收视频条带级和/或视频块级的语法元素。
83.当视频条带经译码为帧内译码(i)条带时,帧内预测单元74可以根据指示的帧内预测模式和来自当前帧或图像的先前解码块的数据为当前视频条带的视频块生成预测数据。当视频帧经译码为帧间译码(例如,b、p或gpb)条带时,运动补偿单元72根据从熵解码单元70接收到的运动矢量和其它语法元素为当前视频条带的视频块产生预测块。这些预测块可以根据其中一个参考图像列表内的其中一个参考图像而产生。视频解码器30可以根据存储于参考帧存储器82中的参考图像,使用默认构建技术来构建参考帧列表:列表0和列表1。
84.运动补偿单元72通过解析运动矢量和其它语法元素针对当前视频条带的视频块确定预测信息,并使用所述预测信息为正被解码的当前视频块产生预测块。例如,运动补偿单元72使用接收到的一些语法元素来确定用于对视频条带的视频块进行译码的预测模式(例如,帧内预测或帧间预测)、帧间预测条带类型(例如,b条带、p条带或gpb条带)、条带的一个或多个参考图像列表的构建信息、条带的每个帧间编码视频块的运动矢量、条带的每个帧间译码视频块的帧间预测状态和用于对当前视频条带中的视频块进行解码的其它信息。
85.运动补偿单元72还可以根据插值滤波器进行插值。运动补偿单元72可以使用由视频编码器20在视频块编码期间使用的插值滤波器来计算参考块的子整数像素的插值。在这种情况下,运动补偿单元72可以根据接收到的语法元素来确定由视频编码器20使用的插值滤波器,并使用这些插值滤波器来产生预测块。
86.与深度图像对应的纹理图像的数据可以存储于参考帧存储器82中。运动补偿单元72还可以用于对深度图像的深度块进行帧间预测。
87.在一个实施例中,视频解码器30包括用户界面(user interface,ui)84。用户界面84用于接收视频解码器30的用户(例如,网络管理员)的输入。通过用户界面84,用户能够管理或更改视频解码器30上的设置。例如,用户能够输入或以其它方式提供参数(例如,标志)的值,以便根据用户的偏好控制视频解码器30的配置和/或操作。例如,用户界面84可以是支持用户通过图形图标、下拉菜单、复选框等与视频解码器30交互的图形用户界面(graphical user interface,gui)。在某些情况下,用户界面84可以通过键盘、鼠标或其它外围设备从用户接收信息。在一个实施例中,用户能够通过智能手机、平板设备、相对视频解码器30远程定位的个人计算机等访问用户界面84。本文所使用的用户界面84可以称为外部输入端或外部装置。
88.考虑到上述情况,视频压缩技术执行空间(帧内)预测和/或时间(帧间)预测来减少或去除视频序列中固有的冗余。对于基于块的视频译码,视频条带(即视频图像或视频图像的一部分)可以分割成多个视频块,所述多个视频块还可以称为树块、编码树块(coding tree block,ctb)、编码树单元(coding tree unit,ctu)、编码单元(coding unit,cu)和/或编码节点。图像的帧内译码(i)条带中的视频块是相对于同一图像中的相邻块中的参考样本使用空间预测进行编码的。图像的帧间译码(p或b)条带中的视频块可以使用相对于同
一图像内的相邻块中的参考样本的空间预测,或者使用相对于其它参考图像中的参考样本的时间预测。图像可以称为帧,参考图像可以称为参考帧。
89.空间预测或时间预测为待译码块产生预测块。残差数据表示待译码原始块与预测块之间的像素差。帧间译码块根据运动矢量和残差数据进行编码,所述运动矢量指向组成所述预测块的参考样本的块,所述残差数据表示所述经译码块与所述预测块之间的差值。帧内译码块是根据帧内译码模式和残差数据进行编码的。为了进一步压缩,所述残差数据可以从像素域变换到变换域,从而产生可以接着进行量化的残差变换系数。量化变换系数最初以二维阵列排列,并且可以按顺序扫描,以产生变换系数的一维矢量。熵编码可以用于实现进一步压缩。
90.图像和视频压缩发展迅速,由此产生了各种编码标准。这些视频编码标准包括itu-t h.261、国际标准化组织/国际电工委员会(international organization for standardization/international electrotechnical commission,iso/iec)mpeg-1第2部分、itu-t h.262或iso/iec mpeg-2第2部分、itu-t h.263、iso/iec mpeg-4第2部分、高级视频编码(advanced video coding,avc)(也称为itu-t h.264或iso/iec mpeg-4第10部分)以及高效视频编码(high efficiency video coding,hevc)(也称为itu-t h.265或mpeg-h第2部分)。avc包括可适性视频编码(scalable video coding,svc)、多视图视频编码(multiview video coding,mvc)和多视图视频编码加深度(multiview video coding plus depth,mvc d)以及3d avc(3d-avc)等扩展版。hevc包括可适性hevc(scalable hevc,shvc)、多视图hevc(multiview hevc,mv-hevc)、3d hevc(3d-hevc)等扩展版。
91.还有一个新的视频编码标准,名为通用视频编码(versatile video coding,vvc),正在由itu-t和iso/iec的联合视频专家组(joint video experts team,jvet)开发。虽然vvc标准有多个工作草案,但本文参考的是vvc的其中一个工作草案(working draft,wd),即b.bross、j.chen和s.liu,“通用视频编码(草案5)(versatile video coding(draft 5))”,jvet-n1001-v3,第13届jvet会议,2019年3月27日(vvc草案5)。
92.本文公开的技术的描述是基于itu-t和iso/iec的联合视频专家组(joint video experts team,jvet)正在开发的视频编码标准通用视频编码(versatile video coding,vvc)。但是,这些技术还适用于其它视频编解码规范。
93.参考图像重采样(reference picture resampling,rpr)特征是在不需要在分辨率更改位置处对图像进行帧内译码的情况下,在码流中间更改经编码图像的空间分辨率的能力。要实现此特征,图像需要能够参考空间分辨率与当前图像的空间分辨率不同的一个或多个参考图像,以便进行帧间预测。因此,需要对这种参考图像或其一部分进行重采样,以对当前图像进行编码和解码。因此,称为rpr。此特征也可以称为自适应分辨率变化(adaptive resolution change,arc)或其它名称。有一些使用案例或应用场景可以受益于rpr特征,如下所示。
94.视频电话和会议中的速率自适应。这是为了使经编码的视频适应不断变化的网络条件。当网络条件变差,导致可用带宽降低时,编码器可以通过编码较低分辨率的图像来适应这种情况。
95.多方视频会议中的主动发言者变化。对于多方视频会议,主动发言者的视频大小通常大于其他与会者的视频大小。当主动发言者发生变化时,每个与会者的图像分辨率也
可能需要调整。当活跃发言者经常发生变化时,更加需要arc特征。
96.流式传输快速启动。对于流式传输应用,通常应用在开始显示图像之前会缓冲到一定长度的解码图像。以较低分辨率启动码流使应用可以在缓冲区中拥有足够的图像,以更快地开始显示。
97.流式传输中的自适应流切换。http动态自适应流媒体(dynamic adaptive streaming over http,dash)规范包括名为@mediastreamstructureid的特征。此特征可以实现在hevc中具有不可解码前置图像的开放gop随机接入点(例如,伴随关联的随机接入跳过前置(random access skipped leading,rasl)图像的清理随机接入(clean random access,cra)图像)处的不同表示之间进行切换。当同一视频的两种不同表示的码率不同但空间分辨率相同,而它们的@mediastreamstructureid值相同时,可以在伴随关联的rasl图像的cra图像处执行两种表示之间的切换,并且与cra图像处切换关联的rasl图像可以以可接受的质量解码,从而实现无缝切换。利用arc,@mediastreamstructureid特征也可以用于在具有不同空间分辨率的各dash表示之间切换。
98.视频译码的可适性通常通过使用多层译码技术来支持。多层码流包括基本层(base layer,bl)和一个或多个增强层(enhancement layer,el)。可适性的示例包括空间可适性、质量/信噪比(signal-to-noise,snr)可适性、多视图可适性等。当使用多层译码技术时,可以(1)在不使用参考图像,即,使用帧内预测的情况下,(2)通过参考同一层中的参考图像,即,使用帧间预测,或(3)通过参考其它一个或多个层中的参考图像,即,使用层间预测,对图像或其一部分进行译码。用于当前图像的层间预测的参考图像称为层间参考图像(inter-layer reference picture,ilrp)。
99.图4示出了用于实现空间可适性400的多层译码的示例。层n中图像402的分辨率与层n 1中图像404的分辨率不同(例如,分辨率更低)。在一个实施例中,层n被认为是基础层,层n 1被认为是增强层,如上所述。在一个实施例中,层n和n 1各自通过层标识符唯一标识,该层标识符可以指定为nuh_layer_id。在一个实施例中,长期参考图像(long-term reference picture,ltrp)是nuh_layer_id等于当前图像的nuh_layer_id的图像。在一个实施例中,不同层中的图像被标识为长期参考图像。层n中的图像402和层n 1中的图像404可以使用帧间预测(如实线箭头所示)进行译码。图像402也可以使用层间预测(如虚线箭头所示)进行译码。
100.在rpr的上下文中,参考图像可以通过从下层选择参考图像,或通过使用层间预测根据下层参考图像生成高层参考图像来重采样。
101.以前的h.26x视频编码系列支持从一个或多个配置文件实现一个或多个单独配置文件的可适性,以实现单层译码。可适性视频编码(scalable video coding,svc)是avc/h.264的可扩展版,支持空间、时间和质量可适性。对于svc,在el图像中的每个宏块(macroblock,mb)中指示标志,以表示el mb是否使用来自下层的并置块进行预测。基于并置块的预测可以包括纹理、运动矢量和/或译码模式。svc的实现方式不能在其设计中直接重用未经修改的h.264/avc实现方式。svc el宏块语法和解码过程与h.264/avc语法和解码过程不同。
102.可适性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)级别实现的。
103.当ilrp的空间分辨率与正在编码或解码的当前图像的空间分辨率不同时,空间可适性使用参考图像或其部分的重采样。参考图像重采样可以在图像级或编码块级实现。
104.在视频编解码器规范中,需要标识图像以用于多种目的,包括用作帧间预测中的参考图像、用于解码图像缓冲区(decoded picture buffer,dpb)中的图像的输出、用于运动矢量缩放、用于加权预测等。
105.在avc和hevc中,图像可以通过图像顺序编号(picture order count,poc)标识。
106.在avc和hevc中,dpb中的图像可以被标识为“用于短期参考”、“用于长期参考”或“不用于参考”。一旦图像被标识为“不用于参考”,该图像就不能再用于预测,而且当该图像不再需要输出时,该图像可以从dpb中去除。
107.avc中存在两种参考图像:短期参考图像和长期参考图像。当参考图像不再需要用于预测参考时,该参考图像可以被标识为“不用于参考”。三种状态(短期参考、长期参考、不用于参考)之间的转换通过解码参考图像标识过程进行控制。存在两种可选的解码参考图像标识机制:隐式滑动窗口过程和显式内存管理控制操作(memory management control operation,mmco)过程。滑动窗口过程在参考帧的数量等于给定的最大数量(sps中的max_num_ref_frames)时,将短期参考图像标识为“不用于参考”。这些短期参考图像以先入先出的方式存储,使得最近解码的短期图像保存在dpb中。
108.显式mmco过程可以包括多个mmco命令。mmco命令可以将一个或多个短期或长期参考图像标识为“不用于参考”,将所有图像标识为“不用于参考”,或将当前参考图像或现有的短期参考图像标识为长期参考图像并将长期图像索引分配给该长期参考图像。
109.在avc中,参考图像标识操作以及从dpb输出和去除图像的过程是在图像完成解码之后执行的。
110.hevc引入了一种不同的参考图像管理方法,称为参考图像集(reference picture set,rps)。rps概念与avc中的mmco/滑动窗口的最根本区别在于,为每个特定条带提供由当前图像或任何后续图像使用的参考图像的完整集合。因此,指示了必须保存在dpb中以供当前图像或后续图像使用的所有图像的完整集合。这与avc方案不同,avc方案只指示了dpb的相对变化。使用rps概念,不需要解码顺序靠前的图像的信息来保持dpb中参考图像的正确状态。
111.为了充分发挥rps的优点并提高抗误码能力,hevc与avc相比,改变了图像解码和dpb操作的顺序。在avc中,图像标识和缓冲区操作(从dpb输出和去除解码图像)通常都是在当前图像完成解码之后进行的。在hevc中,首先从当前图像的条带头中解码出rps,然后通常进行图像标识和缓冲区操作,最后对当前图像进行解码。
112.最新的vvc wd包括基于两个参考图像列表(参考图像列表0和参考图像列表1)的
参考图像管理方法。通过这种方法,直接构建图像的参考图像列表,而不使用参考图像列表初始化过程和参考图像列表修改过程。此外,参考图像标识直接基于两个参考图像列表。
113.运动矢量修正是用于修改运动矢量以获取当前块与参考块之间更优的匹配(例如,残差更少)从而实现更好的译码结果的过程。vvc包括一些帧间译码工具,如双向光流(bi-directional optical flow,bdof)、解码器侧运动矢量修正(decoder-side motion vector refinement,dmvr)和带有运动矢量差的融合(merge with motion vector difference,mmvd),其中涉及基于增量poc的运动矢量缩放和/或样本值缩放。在基于vvc且使用层间预测的多层视频编解码器中,无法应用此类工具中使用的基于增量poc的缩放,因为并置图像和当前图像与相同的呈现时间或捕获时间关联,因此,通常具有相同的poc值,这将导致除零问题。但是,缺乏这种机制来禁用这种行为。
114.本文公开了当参考图像来自与当前图像的层不同的层时,支持选择性禁用运动矢量修正(例如dmvr、bdof和mmvd)的技术。能够在参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正可以避免视频译码错误(例如,除零问题)。因此,视频译码中的编码器/解码器(又名“编解码器”)相对于当前编解码器得到了改进。实际上,当视频在被发送、接收和/或观看时,改进的视频译码过程为用户提供了更好的用户体验。
115.图5是单向帧间预测500示例的示意图。单向帧间预测500可以用于确定在分割图像时创建的编码块和/或解码块的运动矢量。
116.单向帧间预测500采用包括参考块531的参考帧530来预测当前帧510中的当前块511。如图所示,参考帧530可以在时间上位于当前帧510之后(例如,作为下一个参考帧),但在一些示例中,也可以在时间上位于当前帧510之前(例如,作为前一个参考帧)。当前帧510是在特定时间进行编码/解码的示例帧/图像。当前帧510包括当前块511中的一个对象,该对象与参考帧530中的参考块531中的一个对象匹配。参考帧530是对当前帧510进行编码用作参考的帧,参考块531是参考帧530中的一个块,这个块包括的对象也包括在当前帧510中的当前块511中。
117.当前块511是译码过程中在指定时间点进行编码/解码的任何编码单元。当前块511可以是整个分割块,也可以是采用仿射帧间预测时的子块。当前帧510与参考帧530间隔一定时间距离(temporal distance,td)533。td 533表示视频序列中的当前帧510与参考帧530之间的时间量,可以以帧为单位测量。当前块511的预测信息可以通过表示各帧之间的方向和时间距离的参考索引对参考帧530和/或参考块531参考。在td 533表示的时间段内,当前块511中的对象从当前帧510中的一个位置移动到参考帧530中的另一个位置(例如,参考块531的位置)。例如,该对象可以沿着运动路径(trajectory)513移动,运动路径513表示对象随时间移动的方向。运动矢量535描述该对象在td 533内沿着运动路径513移动的方向和幅度。因此,经编码的运动矢量535、参考块531和包括当前块511与参考块531之间差值的残差提供足够信息来重建当前块511并且在当前帧510中定位当前块511。
118.图6是双向帧间预测600示例的示意图。双向帧间预测600可以用于确定在分割图像时创建的编码块和/或解码块的运动矢量。
119.双向帧间预测600类似于单向帧间预测500,但采用一对参考帧来预测当前帧610中的当前块611。因此,当前帧610和当前块611分别基本上类似于当前帧510和当前块511。当前帧610在时间上位于前一个参考帧620与下一个参考帧630之间,其中,前一个参考帧
620在视频序列中出现在当前帧610之前,下一个参考帧630在视频序列中出现在当前帧610之后。前一个参考帧620和下一个参考帧630在其它方面基本上类似于参考帧530。
120.当前块611与前一个参考帧620中的前一个参考块621和下一个参考帧630中的下一个参考块631匹配。这种匹配表示,在视频序列的过程中,一个对象沿着运动路径613从前一个参考块621中的位置经过当前块611移动到下一个参考块631中的位置。当前帧610与前一个参考帧620间隔一定的前一个时间距离(td0)623,且与下一个参考帧630间隔一定的下一个时间距离(td1)633。td0 623表示视频序列中前一个参考帧620与当前帧610之间以帧为单位的时间量。td1 633表示视频序列中当前帧610与下一个参考帧630之间以帧为单位的时间量。因此,该对象在由td0 623表示的时间段内沿着运动路径613从前一个参考块621移动到当前块611。该对象还在由td1 633表示的时间段内沿着运动路径613从当前块611移动到下一个参考块631。当前块611的预测信息可以通过一对表示各帧之间的方向和时间距离的参考索引对前一个参考帧620和/或前一个参考块621以及下一个参考帧630和/或下一个参考块631参考。
121.前一个运动矢量(mv0)625描述该对象在td0 623(例如,在前一个参考帧620与当前帧610之间)内沿着运动路径613移动的方向和幅度。下一个运动矢量(mv1)635描述该对象在td1 633(例如,在当前帧610与下一个参考帧630之间)内沿着运动路径613移动的方向和幅度。因此,在双向帧间预测600中,当前块611可以通过前一个参考块621和/或下一个参考块631、mv0 625和mv1 635进行译码和重建。
122.在一个实施例中,帧间预测和/或双向帧间预测可以基于逐个样本(例如,逐个像素)而不是基于逐个块执行。即,可以针对当前块611中的每个样本确定指向前一个参考块621和/或下一个参考块631中的每个样本的运动矢量。在这些实施例中,图6中描绘的运动矢量625和运动矢量635表示对应于当前块611、前一个参考块621和下一个参考块631中的多个样本的多个运动矢量。
123.在融合模式和先进的运动矢量预测(advanced motion vector prediction,amvp)模式中,候选列表通过按照候选列表确定模式定义的顺序将候选运动矢量添加到候选列表中生成的。这类候选运动矢量可以包括根据单向帧间预测500、双向帧间预测600或其组合的运动矢量。具体地,运动矢量是在相邻块进行编码时针对这类块生成的。这类运动矢量被添加到当前块的候选列表中,而且当前块的运动矢量是从该候选列表中选择的。然后,运动矢量可以指示为选定运动矢量在候选列表中的索引。解码器可以使用与编码器相同的过程构建候选列表,并可以根据指示的索引从候选列表中确定选定的运动矢量。因此,候选运动矢量包括根据单向帧间预测500和/或双向帧间预测600生成的运动矢量,具体取决于在编码这类相邻块时所使用的方法。
124.图7示出了视频码流700。本文使用的视频码流700还可以称为经编码的视频码流、码流或其变体。如图7所示,码流700包括序列参数集(sequence parameter set,sps)702、图像参数集(picture parameter set,pps)704、条带头706和图像数据708。
125.sps 702包括图像序列(sequence of picture,sop)中的所有图像共有的数据。相比之下,pps 704包括整个图像共有的数据。条带头706包括当前条带的信息,例如条带类型、待使用的参考图像等。sps 702和pps 704可以统称为参数集。sps 702、pps 704和条带头708是网络抽象层(network abstraction layer,nal)单元的类型。nal单元是一种语法
结构,包括待遵循的数据类型(例如,经译码的视频数据)的指示。nal单元分为视频编码层(video coding layer,vcl)和非vcl nal单元。vcl nal单元包括表示视频图像中样本值的数据,非vcl nal单元包括任何关联的附加信息,例如参数集(可应用于大量vcl nal单元的重要报头数据)和补充增强信息(定时信息和其它补充数据,该补充数据可以增强解码视频信号的可用性,但不是解码视频图像中样本的值所必需的)。本领域技术人员将理解,码流700在实际应用中可以包括其它参数和信息。
126.图7的图像数据708包括与正在编码或解码的图像或视频关联的数据。图像数据708可以简称为码流700中携带的负载或数据。在一个实施例中,图像数据708包括编码视频序列(coded video sequence,cvs)714(或clvs),该cvs 714包括多个图像710。cvs 714是视频码流700中每个编码层视频序列(coded layer video sequence,clvs)的编码视频序列。需要说明的是,当视频码流700包括单层时,cvs和clvs相同。cvs和clvs仅在视频码流700包括多个层时不同。
127.如图7所示,每个图像710的条带可以包含在其自己的vcl nal单元712中。cvs 714中的vcl nal单元712的集合可以称为接入单元。
128.图8示出了图像810的分割技术800。图像810可以类似于图7中的任何图像710。如图所示,图像810可以被分割为多个条带812。条带是帧(例如图像)的空间上不同的区域,与同一帧中任何其它区域分开编码。虽然图8中描绘了三个条带812,但在实际应用中可以使用更多或更少的条带。每个条带812可以被分割为多个块814。图8中的块814可以类似于图6中的当前块611、前一个参考块621和下一个参考块631。块814可以表示cu。虽然图8中描绘了四个块814,但在实际应用中可以使用更多或更少的块。
129.每个块814可以被分割为多个样本816(例如,像素)。在一个实施例中,每个块814的大小以亮度样本测量。虽然图8中描绘了十六个样本816,但在实际应用中可以使用更多或更少的样本。
130.图9为由视频解码器(例如视频解码器30)实现的对经编码的视频码流进行解码的方法900的一个实施例。方法900可以在从视频编码器(例如视频编码器20)直接或间接地接收解码码流之后执行。方法900通过支持当参考图像来自与当前图像的层不同的层时选择性禁用运动矢量修正来改进解码过程。能够以这种方式选择性禁用运动矢量修正可以提高译码效率。因此,实际上,提高了编解码器的性能,从而提供了更好的用户体验。
131.在步骤902中,视频解码器接收经编码的视频码流(例如,码流700)。经编码的视频码流包括参考图像列表。参考图像列表是可以用于帧间预测的参考图像的列表。参考图像列表可以指定为参考图像列表(reference picture list,rpl)0和rpl 1、refpiclist[0]和refpiclist[1]等等。在一个实施例中,参考图像列表结构包括参考图像列表。在一个实施例中,参考图像列表用于双向帧间预测。在步骤904中,视频解码器从参考图像列表中获取当前图像的参考图像。
[0132]
在步骤906中,当参考图像与当前图像处于同一层(例如,参考图像都在图4中的层n中)时,视频解码器将运动矢量修正标志设置为第一值,以对当前图像的当前块启用运动矢量修正。在一个实施例中,第一值为1、真(true)或一些其它值。
[0133]
在步骤908中,当参考图像位于与当前图像的层不同的层(例如,参考图像在图4中的层n 1中,当前图像在层n中)时,视频解码器将运动矢量修正标志设置为第二值,以对当
picture resampling,rpr)。
[0144]
在一个实施例中,视频解码器使用层标识符来确定参考图像是否与当前图像处于同一层中,或者参考图像是否与当前图像处于不同层中。在一个实施例中,层标识符指定为nuh_layer_id。在一个实施例中,运动矢量修正标志设置在经编码的视频码流的条带头中。
[0145]
在一个实施例中,运动矢量修正标志是解码器侧运动矢量修正(decoder-side motion vector refinement,dmvr)标志或双向光流(bi-directional optical flow,bdof)标志。
[0146]
在步骤1008中,当运动矢量修正标志设置为第一值时,视频编码器修正与当前块对应的运动矢量。在一个实施例中,使用dmvr、bdof或mmvd来修正运动矢量。
[0147]
在一个实施例中,视频编码器生成包含当前块的视频码流,并向视频解码器发送该码流。在一个实施例中,视频编码器存储视频码流,以发送给视频解码器。
[0148]
在一个实施例中,当来自rpl 0的cu的参考图像或来自rpl 1的cu的参考图像来自当前图像的不同层时,标志设置为假,该标志等于1时表示对cu使用dmvr。
[0149]
在一个实施例中,仅当以下条件均不为真时,才对当前图像中的cu应用基于poc增量的运动矢量缩放。
[0150]
当前图像与来自rpl 0的cu的参考图像之间的poc增量和来自rpl 1的cu的参考图像与当前图像之间的poc增量不同。
[0151]
参考图像来自与当前图像的层不同的层。或者,该条件替换为“当前图像与rpl 0的参考图像之间的poc增量或rpl 1的参考图像与当前图像之间的poc增量等于0。”[0152]
或者,为条带的每个参考图像推导标志,以向参考图像表示条带中的cu是否可以使用基于poc增量的运动矢量缩放。该标志可以在参考图像列表构建过程中推导。
[0153]
在一个实施例中,当来自rpl 0的cu的参考图像或来自rpl 1的cu的参考图像来自当前图像的不同层时,标志设置为假,该标志等于1时表示对cu使用bdof。
[0154]
在一个实施例中,当来自rpl 0的cu的参考图像或来自rpl 1的cu的参考图像来自当前图像的不同层时,不对以mmvd模式译码的cu应用基于poc增量的运动矢量缩放。
[0155]
以下语法和语义可用于实现本文公开的实施例。以下描述是相对于基础文本,该基础文本是最新的vvc草案规范。换句话说,只描述了增改的内容,而下文未提到的基础文本中的文本按原样适用。相对于基础文本的添加文本以粗体显示,删除的文本以斜体显示。
[0156]
描述了以帧间预测模式编码的编码单元的总体解码过程。
[0157]
该过程的输入为:
[0158]
亮度位置(xcb,ycb),表示当前编码块的左上样本相对于当前图像的左上亮度样本的位置;
[0159]
变量cbwidth,表示当前编码块以亮度样本计算的宽度;
[0160]
变量cbheight,表示当前编码块以亮度样本计算的高度;
[0161]
变量treetype,表示是否使用单树或双树,如果使用双树,则表示当前树是否对应于亮度分量或色度分量。
[0162]
该过程的输出为在环内滤波前经修改的重建图像。
[0163]
调用如vvc标准的第8.7.1节所指定的量化参数的推导过程,其中,亮度位置(xcb,ycb)、当前编码块以亮度样本计算的宽度cbwidth和当前编码块以亮度样本计算的高度
cbheight,以及变量treetype作为输入。
[0164]
以帧间预测模式编码的编码单元的解码过程包括以下顺序步骤:
[0165]
1.变量dmvrflag设置为0。
[0166]
2.当前编码单元的运动矢量分量和参考索引如下推导:
[0167]
如果merge_triangle_flag[xcb][ycb]、inter_affine_flag[xcb][ycb]和merge_subblock_flag[xcb][ycb]均等于0,则适用以下情况:
[0168]
调用第8.5.2.1节中指定的运动矢量分量和参考索引的推导过程,其中,亮度编码块位置(xcb,ycb)、亮度编码块宽度cbwidth和亮度编码块高度cbheight作为输入,亮度运动矢量mvl0[0][0]和mvl1[0][0]、参考索引refidxl0和refidxl1以及预测列表利用标志predflagl0[0][0]和predflagl1[0][0],以及双向预测权重索引gbiidx作为输出。
[0169]
当满足以下所有条件时,dmvrflag设置为1:
[0170]
sps_dmvr_enabled_flag等于1
[0171]
merge_flag[xcb][ycb]等于1
[0172]
predflagl0[0][0]和predflagl1[0][0]均等于1
[0173]
mmvd_flag[xcb][ycb]等于0
[0174]
diffpicordercnt(currpic,refpiclist[0][refidxl0])等于diffpicordercnt(refpiclist[1][refidxl1],currpic)
[0175]
cbheight大于或等于8
[0176]
cbheight*cbwidth大于或等于64
[0177]
refpiclist[0][refidxl0]的nuh_layer_id与当前图像currpic的nuh_layer_id相同。
[0178]
refpiclist[1][refidxl1]的nuh_layer_id与当前图像currpic的nuh_layer_id相同。
[0179]
如果dmvrflag等于1,则适用以下情况:
[0180]
对于x为0和1,通过调用第8.5.7.2节中指定的过程推导由亮度样本的有序二维阵列refpiclx
l
和色度样本的两个有序二维阵列refpiclx
cb
和refpiclx
cr
组成的参考图像,其中,x和refidxlx作为输入。
[0181]
亮度编码子块在水平方向上的数量numsbx和在垂直方向上的数量numsby、子块宽度sbwidth和子块高度sbheight如下推导:
[0182]
numsbx=(cbwidth》16)?(cbwidth》》4):1
ꢀꢀꢀꢀ
(8-255)
[0183]
numsby=(cbheight》16)?(cbheight》》4):1
ꢀꢀꢀꢀ
(8-256)
[0184]
sbwidth=(cbwidth》16)?16:cbwidth
ꢀꢀꢀꢀ
(8-257)
[0185]
sbheight=(cbheight》16)?16:cbheight
ꢀꢀꢀꢀ
(8-258)
[0186]
对于xsbidx=0..numsbx

1且ysbidx=0..numsby

1,适用以下情况。
[0187]
亮度运动矢量mvlx[xsbidx][ysbidx]和预测列表利用标志predflaglx[xsbidx][ysbidx](x等于0和1),以及亮度位置(xsb[xsbidx][ysbidx],ysb[xsbidx][ysbidx])(表示编码子块的左上样本相对于当前图像的左上亮度样本的位置)如下推导:
[0188]
mvlx[xsbidx][ysbidx]=mvlx[0]0.ꢀꢀꢀꢀ
(8-259)
[0189]
predflaglx[xsbidx][ysbidx]=predflaglx[0]0.ꢀꢀꢀꢀ
(8-260)
[0190]
xsb[xsbidx][ysbidx]=xcb xsbidx*sbwidth
ꢀꢀꢀꢀ
(8-261)
[0191]
ysb[xsbidx][ysbidx]=ycb ysbidx*sbheight
ꢀꢀꢀꢀ
(8-262)
[0192]
调用第8.5.3.1节中指定的解码器侧运动矢量修正过程,其中,xsb[xsbidx][ysbidx]、ysb[xsbidx][ysbidx]、sbwidth、sbheight、运动矢量mvlx[xsbidx][ysbidx]和参考图像阵列refpiclxl作为输入,增量运动矢量dmvlx[xsbidx][ysbidx]作为输出,其中,x等于0和1。
[0193]
调用第8.5.2.13节中的色度运动矢量的推导过程,其中,mvlx[xsbidx][ysbidx]和refidxlx作为输入,mvclx[xsbidx][ysbidx]作为输出,其中,x等于0和1。
[0194]
否则(dmvrflag等于0),适用以下情况。
[0195]
当treetype等于single_tree,且predflaglx[0][0](x为0或1)等于1时,调用第8.5.2.13节中的色度运动矢量的推导过程,其中,mvlx[0][0]和refidxlx作为输入,mvclx[0][0]作为输出。
[0196]
亮度编码子块在水平方向上的数量numsbx和在垂直方向上的数量numsby均设置为1。
[0197]
否则,如果merge_triangle_flag[xcb][ycb]等于1,inter_affine_flag[xcb][ycb]和merge_subblock_flag[xcb][ycb]都等于0,则调用第8.5.4.1节中指定的三角运动矢量分量和参考索引的推导过程,其中,亮度编码块位置(xcb,ycb)、亮度编码块宽度cbwidth和亮度编码块高度cbheight作为输入,亮度运动矢量mvla和mvlb、色度运动矢量mvcla和mvclb、参考索引refidxla和refidxlb以及预测列表标志predflagla和predflaglb作为输出。
[0198]
否则(inter_affine_flag[xcb][ycb]或merge_subblock_flag[xcb][ycb]等于1),调用第8.5.5.1节中指定的子块运动矢量分量和参考索引的推导过程,其中,亮度编码块位置(xcb,ycb)、亮度编码块宽度cbwidth、亮度编码块高度cbheight作为输入,参考索引refidxl0和refidxl1、亮度编码子块在水平方向上的数量numsbx和在垂直方向上的数量numsby、预测列表利用标志predflaglx[xsbidx][ysbidx]、亮度运动矢量阵列mvlx[xsbidx][ysbidx]、色度运动矢量阵列mvclx[xsbidx][ysbidx](其中,xsbidx=0..(cbwidth》》2)

1且ysbidx=0..(cbheight》》2)

1并且x为0或1)以及双向预测权重索引gbiidx作为输出。
[0199]
3.对于xsbidx=0..numsbx

1,ysbidx=0..numsby

1,解码器侧运动矢量修正之后的亮度运动矢量阵列refmvlx[xsbidx][ysbidx]和色度运动矢量阵列refmvclx[xsbidx][ysbidx](x为0和1)如下推导。
[0200]
如果dmvrflag等于1,则调用第8.5.2.13节中的色度运动矢量的推导过程,其中,refmvlx[xsbidx][ysbidx]和refidxlx作为输入,refmvclx[xsbidx][ysbidx]作为输出,并且输入refmvlx[xsbidx][ysbidx]如下推导:
[0201]
refmvlx[xsbidx][ysbidx]=mvlx[xsbidx][ysbidx] dmvlx[xsbidx][ysbidx]
[0202]
(8-263)
[0203]
否则(dmvrflag等于0),适用以下情况:
[0204]
refmvlx[xsbidx][ysbidx]=mvlx[xsbidx][ysbidx]
ꢀꢀꢀꢀ
(8-264)
[0205]
refmvclx[xsbidx][ysbidx]=mvclx[xsbidx][ysbidx]
ꢀꢀꢀꢀ
(8-265)
[0206]
注-阵列refmvlx存储在mvdmvrlx中,用于第8.5.2.12节中并置运动矢量的推导过程。非修正亮度运动矢量阵列mvlx用于空间运动矢量预测和去块效应滤波边界强度推导过程。
[0207]
4.当ciip_flag[xcb][ycb]等于1时,调用8.5.6中指定的组合的融合和帧内预测中的帧内预测模式的推导过程。
[0208]
5.当前编码单元的预测样本如下推导。
[0209]
如果merge_triangle_flag[xcb][ycb]等于0,则当前编码单元的预测样本如下推导。
[0210]
调用第8.5.7.1节中指定的帧间块的解码过程,其中,亮度编码块位置(xcb,ycb)、亮度编码块宽度cbwidth和亮度编码块高度cbheight、亮度编码子块在水平方向上的数量numsbx和在垂直方向上的数量numsby、亮度运动矢量mvl0[xsbidx][ysbidx]和mvl1[xsbidx][ysbidx]、经修正的亮度运动矢量refmvl0[xsbidx][ysbidx]和refmvl1[xsbidx][ysbidx](xsbidx=0..numsbx

1且ysbidx=0..numsby

1)、参考索引refidxl0和refidxl1、预测列表利用标志predflagl0[xsbidx][ysbidx]和predflagl1[xsbidx][ysbidx]、泛化双向预测权重索引gbiidx和设置为0的变量cidx作为输入,作为预测亮度样本的(cbwidth)
×
(cbheight)阵列predsamples
l
的帧间预测样本(predsamples)作为输出。
[0211]
调用第8.5.7.1节中指定的帧间块的解码过程,其中,亮度编码块位置(xcb,ycb)、亮度编码块宽度cbwidth和亮度编码块高度cbheight、亮度编码子块在水平方向上的数量numsbx和在垂直方向上的数量numsby、色度运动矢量mvcl0[xsbidx][ysbidx]和mvcl1[xsbidx][ysbidx]、经修正的色度运动矢量refmvcl0[xsbidx][ysbidx]和refmvcl1[xsbidx][ysbidx](xsbidx=0..numsbx

1且ysbidx=0..numsby

1)、参考索引refidxl0和refidxl1、预测列表利用标志predflagl0[xsbidx][ysbidx]和predflagl1[xsbidx][ysbidx]、泛化双向预测权重索引gbiidx和设置为1的变量cidx作为输入,作为色度分量cb的预测色度样本的(cbwidth/2)
×
(cbheight/2)阵列predsamples
cb
的帧间预测样本(predsamples)作为输出。
[0212]
调用第8.5.7.1节中指定的帧间块的解码过程,其中,亮度编码块位置(xcb,ycb)、亮度编码块宽度cbwidth和亮度编码块高度cbheight、亮度编码子块在水平方向上的数量numsbx和在垂直方向上的数量numsby、色度运动矢量mvcl0[xsbidx][ysbidx]和mvcl1[xsbidx][ysbidx]、经修正的色度运动矢量refmvcl0[xsbidx][ysbidx]和refmvcl1[xsbidx][ysbidx](xsbidx=0..numsbx

1且ysbidx=0..numsby

1)、参考索引refidxl0和refidxl1、预测列表利用标志predflagl0[xsbidx][ysbidx]和predflagl1[xsbidx][ysbidx]、泛化双向预测权重索引gbiidx和设置为2的变量cidx作为输入,作为色度分量cr的预测色度样本的(cbwidth/2)
×
(cbheight/2)阵列predsamples
cr
的帧间预测样本(predsamples)作为输出。
[0213]
否则(merge_triangle_flag[xcb][ycb]等于1),调用第8.5.8.1节中指定的三角帧间块的解码过程,其中,亮度编码块位置(xcb,ycb)、亮度编码块宽度cbwidth和亮度编码块高度cbheight、亮度运动矢量mvla和mvlb、色度运动矢量mvcla和mvclb、参考索引refidxla和refidxlb、预测列表标志predflagla和predflaglb作为输入,帧间预测样本(predsamples)作为输出,这些帧间预测样本(predsamples)是预测亮度样本的(cbwidth)
×
(cbheight)阵列predsamples
l
和预测色度样本的两个(cbwidth/2)
×
(cbheight/2)阵列predsamples
cb
和predsamples
cr
,各自对应色度分量cb和cr中的每一个。
[0214]
6.变量numsbx[xcb][ycb]和numsby[xcb][ycb]分别设置为等于numsbx和numsby。
[0215]
7.当前编码单元的残差样本如下推导。
[0216]
调用第8.5.9节中指定的以帧间预测模式编码的编码块的残差信号的解码过程,其中,设置为等于亮度位置(xcb,ycb)的位置(xtb0,ytb0)、设置为等于亮度编码块宽度cbwidth的宽度ntbw、设置为等于亮度编码块高度cbheight的高度ntbh以及设置为0的变量cidx作为输入,阵列ressamples
l
作为输出。
[0217]
调用第8.5.9节中指定的以帧间预测模式编码的编码块的残差信号的解码过程,其中,设置为等于色度位置(xcb/2,ycb/2)的位置(xtb0,ytb0)、设置为等于色度编码块宽度cbwidth/2的宽度ntbw、设置为等于色度编码块高度cbheight/2的高度ntbh以及设置为1的变量cidx作为输入,阵列ressamples
cb
作为输出。
[0218]
调用第8.5.9节中指定的以帧间预测模式编码的编码块的残差信号的解码过程,其中,设置为等于色度位置(xcb/2,ycb/2)的位置(xtb0,ytb0)、设置为等于色度编码块宽度cbwidth/2的宽度ntbw、设置为等于色度编码块高度cbheight/2的高度ntbh以及设置为2的变量cidx作为输入,阵列ressamples
cr
作为输出。
[0219]
8.当前编码单元的重建样本如下推导。
[0220]
调用第8.7.5节中指定的颜色分量的图像重建过程,其中,设置为等于(xcb,ycb)的块位置(xb,yb)、设置为等于cbwidth的块宽度bwidth、设置为等于cbheight的块高度bheight、设置为0的变量cidx、设置为等于predsamples
l
的(cbwidth)
×
(cbheight)阵列predsamples和设置为等于ressamples
l
的(cbwidth)
×
(cbheight)阵列ressamples作为输入,输出为环内滤波前经修改的重建图像。
[0221]
调用第8.7.5节中指定的颜色分量的图像重建过程,其中,设置为等于(xcb/2,ycb/2)的块位置(xb,yb)、设置为等于cbwidth/2的块宽度bwidth、设置为等于cbheight/2的块高度bheight、设置为1的变量cidx、设置为等于predsamples
cb
的(cbwidth/2)
×
(cbheight/2)阵列predsamples和设置为等于ressamples
cb
的(cbwidth/2)
×
(cbheight/2)阵列ressamples作为输入,输出为环内滤波前经修改的重建图像。
[0222]
调用第8.7.5节中指定的颜色分量的图像重建过程,其中,设置为等于(xcb/2,ycb/2)的块位置(xb,yb)、设置为等于cbwidth/2的块宽度bwidth、设置为等于cbheight/2的块高度bheight、设置为2的变量cidx、设置为等于predsamples
cr
的(cbwidth/2)
×
(cbheight/2)阵列predsamples和设置为等于ressamples
cr
的(cbwidth/2)
×
(cbheight/2)阵列ressamples作为输入,输出为环内滤波前经修改的重建图像。
[0223]
描述了融合运动矢量差值的推导过程。
[0224]
该过程的输入为:
[0225]
当前亮度编码块的左上样本相对于当前图像的左上亮度样本的亮度位置(xcb,ycb);
[0226]
参考索引refidxl0和refidxl1;
[0227]
预测列表利用标志predflagl0和predflagl1。
[0228]
该过程的输出是1/16分数样本精度mmvdl0和mmvdl1中的亮度融合运动矢量差值。
[0229]
变量currpic表示当前图像。
[0230]
亮度融合运动矢量差值mmvdl0和mmvdl1如下推导。如果predflagl0和predflagl1都等于1,则适用以下情况:
[0231]
currpocdiffl0=diffpicordercnt(currpic,refpiclist[0][refidxl0])
ꢀꢀꢀꢀ
(8-356)
[0232]
currpocdiffl1=diffpicordercnt(currpic,refpiclist[1][refidxl1])
ꢀꢀꢀꢀ
(8-357)
[0233]
如果currpocdiffl0等于currpocdiffl1,或者refpiclist[0][refidxl0]或refpiclist[1][refidxl1]的nuh_layer_id与当前图像的nuh_layer_id相同,则适用以下情况:
[0234]
mmvdl0[0]=mmvdoffset[xcb][ycb]0.ꢀꢀꢀꢀ
(8-358)
[0235]
mmvdl0[1]=mmvdoffset[xcb][ycb][1]
ꢀꢀꢀꢀ
(8-359)
[0236]
mmvdl1[0]=mmvdoffset[xcb][ycb]0.ꢀꢀꢀꢀ
(8-360)
[0237]
mmvdl1[1]=mmvdoffset[xcb][ycb][1]
ꢀꢀꢀꢀ
(8-361)
[0238]
否则,如果abs(currpocdiffl0)大于或等于abs(currpocdiffl1),则适用以下情况:
[0239]
td=clip3(

128,127,currpocdiffl0)
ꢀꢀꢀꢀ
(8-362)
[0240]
tb=clip3(

128,127,currpocdiffl1)
ꢀꢀꢀꢀ
(8-363)
[0241]
tx=(16384 (abs(td)》》1))/td
ꢀꢀꢀꢀ
(8-364)
[0242]
distscalefactor=clip3(

4096,4095,(tb*tx 32)》》6)
ꢀꢀꢀꢀ
(8-365)
[0243]
mmvdl0[0]=mmvdoffset[xcb][ycb]0.ꢀꢀꢀꢀ
(8-366)
[0244]
mmvdl0[1]=mmvdoffset[xcb][ycb][1]
ꢀꢀꢀꢀ
(8-367)
[0245]
mmvdl1[0]=clip3(
–215
,2
15

1,sign(distscalefactor*mmvdl0[0])*((abs(distscalefactor*mmvdl0[0]) 127)》》8))
ꢀꢀꢀꢀ
(8-368)
[0246]
mmvdl1[1]=clip3(
–215
,2
15

1,sign(distscalefactor*mmvdl0[1])*((abs(distscalefactor*mmvdl0[1]) 127)》》8))
ꢀꢀꢀꢀ
(8-369)
[0247]
否则(abs(currpocdiffl0)小于abs(currpocdiffl1)),适用以下情况:
[0248]
td=clip3(

128,127,currpocdiffl1)
ꢀꢀꢀꢀ
(8-370)
[0249]
tb=clip3(

128,127,currpocdiffl0)
ꢀꢀꢀꢀ
(8-371)
[0250]
tx=(16384 (abs(td)》》1))/td
ꢀꢀꢀꢀ
(8-372)
[0251]
distscalefactor=clip3(

4096,4095,(tb*tx 32)》》6)
ꢀꢀꢀꢀ
(8-373)
[0252]
mmvdl1[0]=mmvdoffset[xcb][ycb]0.ꢀꢀꢀꢀ
(8-374)
[0253]
mmvdl1[1]=mmvdoffset[xcb][ycb][1]
ꢀꢀꢀꢀ
(8-375)
[0254]
mmvdl0[0]=clip3(
–215
,2
15

1,sign(distscalefactor*mmvdl1[0])*((abs(distscalefactor*mmvdl1[0]) 127)》》8))
ꢀꢀꢀꢀ
(8-376)
[0255]
mmvdl0[1]=clip3(
–215
,2
15

1,sign(distscalefactor*mmvdl1[1])*((abs(distscalefactor*mmvdl1[1]) 127)》》8))
ꢀꢀꢀꢀ
(8-377)
[0256]
否则(predflagl0或predflagl1等于1),对于x为0和1,适用以下情况:
[0257]
mmvdlx[0]=(predflaglx==1)?mmvdoffset[xcb][ycb][0]:0
ꢀꢀꢀꢀ
(8-378)
[0258]
mmvdlx[1]=(predflaglx==1)?mmvdoffset[xcb][ycb][1]:0
ꢀꢀꢀꢀ
(8-379)
[0259]
描述了帧间块的解码过程。
[0260]
当对以帧间预测模式编码的编码单元进行解码时调用该过程。
[0261]
该过程的输入为:
[0262]
亮度位置(xcb,ycb),表示当前编码块的左上样本相对于当前图像的左上亮度样本的位置;
[0263]
变量cbwidth,表示当前编码块以亮度样本计算的宽度;
[0264]
变量cbheight,表示当前编码块以亮度样本计算的高度;
[0265]
变量numsbx和numsby,表示水平方向和垂直方向上的亮度编码子块的数量;
[0266]
运动矢量mvl0[xsbidx][ysbidx]和mvl1[xsbidx][ysbidx],其中,xsbidx=0..numsbx

1且ysbidx=0..numsby

1;
[0267]
经修正的运动矢量refmvl0[xsbidx][ysbidx]和refmvl1[xsbidx][ysbidx],其中,xsbidx=0..numsbx

1且ysbidx=0..numsby

1;
[0268]
参考索引refidxl0和refidxl1;
[0269]
预测列表利用标志predflagl0[xsbidx][ysbidx]和predflagl1[xsbidx][ysbidx],其中,xsbidx=0..numsbx

1且ysbidx=0..numsby

1;
[0270]
双向预测权重索引gbiidx;
[0271]
变量cidx,表示当前块的颜色分量索引。
[0272]
该过程的输出为:
[0273]
预测样本的阵列predsamples。
[0274]
设predsamplesl0
l
、predsamplesl1
l
和predsamplesintra
l
为预测亮度样本值的(cbwidth)
×
(cbheight)阵列,predsamplesl0
cb
、predsamplesl1
cb
、predsamplesl0
cr
和predsamplesl1
cr
、predsamplesintra
cb
以及predsamplesintra
cr
为预测色度样本值的(cbwidth/2)
×
(cbheight/2)阵列。
[0275]
当前编码子块以亮度样本计算的宽度subcbwidth和高度subcbheight如下推导:
[0276]
sbwidth=cbwidth/numsbx
ꢀꢀꢀꢀ
(8-793)
[0277]
sbheight=cbheight/numsby
ꢀꢀꢀꢀ
(8-794)
[0278]
对于子块索引(xsbidx,ysbidx)处的每个编码子块,其中,xsbidx=0..numsbx

1且ysbidx=0..numsby

1,适用以下情况。
[0279]
亮度位置(xsb,ysb)表示当前编码子块的左上样本相对于当前图像的左上亮度样本的位置,如下推导:
[0280]
(xsb,ysb)=(xcb xsbidx*sbwidth,ycb ysbidx*sbheight)(8-795)
[0281]
变量currpic表示当前图像,变量bdofflag如下推导。
[0282]
如果满足以下所有条件,则bdofflag设置为真。
[0283]
sps_bdof_enabled_flag等于1。
[0284]
predflagl0[xsbidx][ysbidx]和predflagl1[xsbidx][ysbidx]均等于1。
[0285]
diffpicordercnt(currpic,refpiclist[0][refidxl0])*diffpicordercnt(currpic,refpiclist[1][refidxl1])小于0。
[0286]
motionmodelidc[xcb][ycb]等于0。
[0287]
merge_subblock_flag[xcb][ycb]等于0。
[0288]
gbiidx[xcb][ycb]等于0。
[0289]
cidx等于0。
[0290]
refpiclist[0][refidxl0]的nuh_layer_id与当前图像的nuh_layer_id相同。
[0291]
refpiclist[1][refidxl1]的nuh_layer_id与当前图像的nuh_layer_id相同。
[0292]
否则,bdofflag设置为假。
[0293]
对于x为0和1中的每一个,当predflaglx[xsbidx][ysbidx]等于1时,适用以下情况。
[0294]
通过调用第8.5.7.2节中指定的过程推导由亮度样本的有序二维阵列refpiclx
l
和色度样本的两个有序二维阵列refpiclx
cb
和refpiclx
cr
组成的参考图像,其中,x和refidxlx作为输入。
[0295]
运动矢量偏移mvoffset设置为等于refmvlx[xsbidx][xsbidx]

mvlx[xsbidx][ysbidx]。
[0296]
当满足以下一个或多个条件时,mvoffset[0]设置为0:
[0297]
xsb不等于xcb,mvoffset[0]小于0;
[0298]
(xsb sbwidth)不等于(xcb cbwidth)且mvoffset[0]大于0。
[0299]
当满足以下一个或多个条件时,mvoffset[1]设置为0:
[0300]
ysb不等于ycb,mvoffset[1]小于0;
[0301]
(ysb sbheight)不等于(ycb cbheight)且mvoffset[1]大于0。
[0302]
如果cidx等于0,则适用以下情况:
[0303]
通过调用第8.5.7.3节中指定的分数样本插值过程推导阵列predsampleslx
l
,其中,亮度位置(xcb,ycb)、以亮度样本计算的编码子块宽度sbwidth和编码子块高度sbheight、亮度运动矢量偏移mvoffset、经修正的亮度运动矢量refmvlx[xsb][xsb]、参考阵列refpiclx
l
、bdofflag和cidx作为输入。
[0304]
否则,如果cidx等于1,则适用以下情况。
[0305]
通过调用第8.5.7.3节中指定的分数样本插值过程推导阵列predsampleslx
cb
,其中,亮度位置(xcb,ycb)、编码子块宽度sbwidth/2、编码子块高度sbheight/2、色度运动矢量偏移mvoffset、经修正的色度运动矢量refmvlx[xsb][xsb]、参考阵列refpiclx
cb
、bdofflag和cidx作为输入。
[0306]
否则(cidx等于2),适用以下情况。
[0307]
通过调用第8.5.7.3节中指定的分数样本插值过程推导阵列predsampleslx
cr
,其中,亮度位置(xcb,ycb)、编码子块宽度sbwidth/2、编码子块高度sbheight/2、色度运动矢量偏移mvoffset、经修正的色度运动矢量refmvlx[xsb][xsb]、参考阵列refpiclx
cr
、bdofflag和cidx作为输入。
[0308]
如果bdofflag等于真,则适用以下情况。
[0309]
变量移位设置为max(2,14

bitdepthy)。
[0310]
变量cudiffthres、bdofblkdiffthres和cusumdiff如下推导:
[0311]
cudiffthres=(1《《(bitdepthy–
8 shift))*cbwidth*cbheight
ꢀꢀꢀꢀ
(8-796)
[0312]
bdofblkdiffthres=1《《(bitdepthy–
3 shift)
ꢀꢀꢀꢀ
(8-797)
[0313]
cusumdiff=0
ꢀꢀꢀꢀ
(8-798)
[0314]
对于xidx=0..(sbwidth》》2)

1且yidx=0..(sbheight》》2)

1,变量bdofblksumdiff和双向光流利用标志bdofutilizationflag[xidx][yidx]如下推导:
[0315][0316]
bdofutilizationflag[xidx][yidx]=bdofblksumdiff》=bdofblkdiffthres
ꢀꢀꢀꢀ
(8-800)
[0317]
cusumdiff =bdofblksumdiff
ꢀꢀꢀꢀ
(8-801)
[0318]
当cusumdiff小于cudiffthres时,bdofflag设置为假。
[0319]
预测样本的阵列predsamples如下推导。
[0320]
如果cidx等于0,则当前亮度编码子块内的预测样本predsamples[x
l
xsb][y
l
ysb](x
l
=0..sbwidth

1且y
l
=0..sbheight

1)如下推导:
[0321]
如果bdofflag等于真,则调用第8.5.7.4节中指定的双向光流样本预测过程,其中,设置为等于亮度编码子块宽度sbwidth的ncbw、设置为等于亮度编码子块高度sbheight的ncbh、样本阵列predsamplesl0
l
和predsamplesl1
l
,以及变量predflagl0[xsbidx][ysbidx]、predflagl1[xsbidx][ysbidx]、refidxl0、refidxl1和bdofutilizationflag[xidx][yidx](xidx=0..(sbwidth》》2)

1,yidx=0..(sbheight》》2)

1)作为输入,predsamples[x
l
xsb][y
l
ysb]作为输出。
[0322]
否则(bdofflag等于假),调用第8.5.7.5节中指定的加权样本预测过程,其中,亮度编码子块宽度sbwidth、亮度编码子块高度sbheight、样本阵列predsamplesl0
l
和predsamplesl1
l
,以及变量predflagl0[xsbidx][ysbidx]、predflagl1[xsbidx][ysbidx]、refidxl0、refidxl1、gbiidx和cidx作为输入,predsamples[x
l
xsb][y
l
ysb]作为输出。
[0323]
否则,如果cidx等于1,则通过调用第8.5.7.5节中指定的加权样本预测过程推导当前色度分量cb编码块内的预测样本predsamples[xc xcb/2][yc ycb/2](xc=0..cbwidth/2

1且yc=0..cbheight/2

1),其中,设置为等于cbwidth/2的编码块宽度ncbw、设置为等于cbheight/2的编码块高度ncbh、样本阵列predsamplesl0
cb
和predsamplesl1
cb
,以及变量predflagl0[xsbidx][ysbidx]、predflagl1[xsbidx][ysbidx]、refidxl0、refidxl1、gbiidx和cidx作为输入。
[0324]
否则(cidx等于2),通过调用第8.5.7.5节中指定的加权样本预测过程推导当前色度分量cr编码块内的预测样本predsamples[xc xcb/2][yc ycb/2](xc=0..cbwidth/2

1且yc=0..cbheight/2

1),其中,设置为等于cbwidth/2的编码块宽度ncbw、设置为等于cbheight/2的编码块高度ncbh、样本阵列predsamplesl0
cr
和predsamplesl1
cr
,以及变量predflagl0[xsbidx][ysbidx]、predflagl1[xsbidx][ysbidx]、refidxl0、refidxl1、gbiidx和cidx作为输入。
[0325]
当cidx等于0时,对于x=0..sbwidth

1且y=0..sbheight

1,进行以下赋值:
[0326]
mvl0[xsb x][ysb y]=mvl0[xsbidx][ysbidx]
ꢀꢀꢀꢀ
(8-802)
[0327]
mvl1[xsb x][ysb y]=mvl1[xsbidx][ysbidx]
ꢀꢀꢀꢀ
(8-803)
[0328]
mvdmvrl0[xsb x][ysb y]=refmvl0[xsbidx][ysbidx]
ꢀꢀꢀꢀ
(8-804)
[0329]
mvdmvrl1[xsb x][ysb y]=refmvl1[xsbidx][ysbidx]
ꢀꢀꢀꢀ
(8-805)
[0330]
refidxl0[xsb x][ysb y]=refidxl0
ꢀꢀꢀꢀ
(8-806)
[0331]
refidxl1[xsb x][ysb y]=refidxl1
ꢀꢀꢀꢀ
(8-807)
[0332]
predflagl0[xsb x][ysb y]=predflagl0[xsbidx][ysbidx]
ꢀꢀꢀꢀ
(8-808)
[0333]
predflagl1[xsb x][ysb y]=predflagl1[xsbidx][ysbidx]
ꢀꢀꢀꢀ
(8-809)
[0334]
gbiidx[xsb x][ysb y]=gbiidx(8-810)
[0335]
当ciip_flag[xcb][ycb]等于1时,预测样本的阵列predsamples修改如下。
[0336]
如果cidx等于0,则适用以下情况。
[0337]
调用第8.4.4.2.1节中指定的一般帧内样本预测过程,其中,设置为等于(xcb,ycb)的位置(xtbcmp,ytbcmp)、设置为等于intrapredmodey[xcb][ycb]的帧内预测模式predmodeintra、设置为等于cbwidth的变换块宽度ntbw和等于cbheight的高度ntbh、设置为等于cbwidth的编码块宽度ncbw和等于cbheight的高度ncbh以及变量cidx作为输入,并将输出分配给(cbwidth)
×
(cbheight)阵列predsamplesintra
l

[0338]
调用第8.5.7.6节中指定的组合的融合和帧内预测的加权样本预测过程,其中,编码块宽度cbwidth、编码块高度cbheight、分别设置为等于predsamples和predsamplesintra
l
的样本阵列predsamplesinter和predsamplesintra、设置为等于intrapredmodey[xcb][ycb]的帧内预测模式predmodeintra以及颜色分量索引cidx作为输入,并将输出分配给(cbwidth)
×
(cbheight)阵列predsamples。
[0339]
否则,如果cidx等于1,则适用以下情况。
[0340]
调用第8.4.4.2.1节中指定的一般帧内样本预测过程,其中,设置为等于(xcb/2,ycb/2)的位置(xtbcmp,ytbcmp)、设置为等于intrapredmodey[xcb][ycb]的帧内预测模式predmodeintra、设置为等于cbwidth/2的变换块宽度ntbw和等于cbheight/2的高度ntbh、设置为等于cbwidth/2的编码块宽度ncbw和等于cbheight/2的高度ncbh以及变量cidx作为输入,并将输出分配给(cbwidth/2)
×
(cbheight/2)阵列predsamplesintra
cb

[0341]
调用第8.5.7.6节中指定的组合的融合和帧内预测的加权样本预测过程,其中,编码块宽度cbwidth/2、编码块高度cbheight/2、分别设置为等于predsamples
cb
和predsamplesintra
cb
的样本阵列predsamplesinter和predsamplesintra、设置为等于intrapredmodey[xcb][ycb]的帧内预测模式predmodeintra以及颜色分量索引cidx作为输入,并将输出分配给(cbwidth/2)
×
(cbheight/2)阵列predsamples。
[0342]
否则(cidx等于2),适用以下情况:
[0343]
调用第8.4.4.2.1节中指定的一般帧内样本预测过程,其中,设置为等于(xcb/2,ycb/2)的位置(xtbcmp,ytbcmp)、设置为等于intrapredmodey[xcb][ycb]的帧内预测模式predmodeintra、设置为等于cbwidth/2的变换块宽度ntbw和等于cbheight/2的高度ntbh、设置为等于cbwidth/2的编码块宽度ncbw和等于cbheight/2/的高度ncbh以及变量cidx作为输入,并将输出分配给(cbwidth/2)
×
(cbheight/2)阵列predsamplesintra
cr

[0344]
调用第8.5.7.6节中指定的组合的融合和帧内预测的加权样本预测过程,其中,编码块宽度cbwidth/2、编码块高度cbheight/2、分别设置为等于predsamples
cr
和predsamplesintra
cr
的样本阵列predsamplesinter和predsamplesintra、设置为等于intrapredmodey[xcb][ycb]的帧内预测模式predmodeintra以及颜色分量索引cidx作为输入,并将输出分配给(cbwidth/2)
×
(cbheight/2)阵列predsamples。
[0345]
图11为本发明实施例提供的视频译码设备1100(例如视频编码器20或视频解码器30)的示意图。视频译码设备1100适用于实现本文描述的公开实施例。视频译码设备1100包括:入端口1110和接收单元(rx)1120,用于接收数据;处理器、逻辑单元或中央处理单元(central processing unit,cpu)1130,用于处理数据;发送单元(tx)1140和出端口1150,用于发送数据;存储器1160,用于存储数据。视频译码设备1100还可以包括与入端口1110、接收单元1120、发送单元1140和出端口1150耦合的光电(optical-to-electrical,oe)组件和电光(electrical-to-optical,eo)组件,用作光信号或电信号的出口或入口。
[0346]
处理器1130通过硬件和软件实现。处理器1130可以实现为一个或多个cpu芯片、核(例如,多核处理器)、现场可编程门阵列(field-programmable gate array,fpga)、专用集成电路(application specific integrated circuit,asic)和数字信号处理器(digital signal processor,dsp)。处理器1130与入端口1110、接收单元1120、发送单元1140、出端口1150和存储器1160通信。处理器1130包括译码模块1170。译码模块1170实现上文描述的公开实施例。例如,译码模块1170实现、处理、准备或提供各种编解码功能。因此,将译码模块1170包括在内使得视频译码设备1100的功能得到了显著改进,并且实现了视频译码设备1100到不同状态的转换。或者,以存储在存储器1160中并由处理器1130执行的指令来实现译码模块1170。
[0347]
视频译码设备1100还可以包括输入和/或输出(input/output,i/o)设备1180,用于与用户进行数据通信。i/o设备1180可以包括输出设备,例如显示视频数据的显示器、输出音频数据的扬声器等。i/o设备1180还可以包括键盘、鼠标、轨迹球等输入设备和/或与此类输出设备进行交互的对应接口。
[0348]
存储器1160包括一个或多个磁盘、磁带机和固态硬盘,可以用作溢出数据存储设备,用于在选择执行程序时存储此类程序,并且存储在程序执行过程中读取的指令和数据。存储器1160可以是易失性和/或非易失性的,并且可以是只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、三态内容寻址存储器(ternary content-addressable memory,tcam)和/或静态随机存取存储器(static random-access memory,sram)。
[0349]
图12为译码模块1200的实施例的示意图。在一个实施例中,译码模块1200在视频译码设备1202(例如视频编码器20或视频解码器30)中实现。视频译码设备1202包括接收模块1201。接收模块1201用于接收图像进行编码或者接收码流进行解码。视频译码设备1202包括与接收模块1201耦合的发送模块1207。发送模块1207用于向解码器发送所述码流或者向显示模块(例如多个i/o设备1180中的一个i/o设备)发送解码图像。
[0350]
视频译码设备1202包括存储模块1203。存储模块1203与接收模块1201或发送模块1207中的至少一个耦合。存储模块1203用于存储指令。视频译码设备1202还包括处理模块1205。处理模块1205与存储模块1203耦合。处理模块1205用于执行存储在存储模块1203中的指令,以执行本文公开的方法。
[0351]
还应当理解,本文中阐述的示例性方法的步骤不一定需要按照所描述的顺序执行,并且这些方法的步骤的顺序应当理解为仅仅是示例性的。同理,在与本发明各种实施例相一致的方法中,这些方法可以包括其它步骤,并且某些步骤可以省略或组合。
[0352]
虽然本发明提供了若干个实施例,但应该理解,在不脱离本发明的精神或范围的
情况下,所公开的系统和方法可以通过其它多种具体形式体现。本发明示例应被视为说明性而非限制性的,且本发明并不限于本文所给出的详细内容。例如,各种元件或组件可以组合或集成在另一系统中,或者一些特征可以省略或不实施。
[0353]
另外,在不脱离本发明范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、模块、技术或方法组合或集成。示出或描述为彼此耦合、或直接耦合、或彼此通信的其它项目可通过某种接口、设备或中间组件以电方式、机械方式或其它方式间接耦合或通信。变化、替换和变更的其它示例可由本领域技术人员确定,并可在不脱离本文公开的精神和范围的情况下举例。
再多了解一些

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

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

相关文献