经译码的视频码流的解码方法,解码设备,译码系统转让专利

申请号 : CN202111341983.1

文献号 : CN114584775B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 弗努·亨德里王业奎

申请人 : 华为技术有限公司

摘要 :

本发明提供一种用于对经译码的视频码流进行解码的方法。所述方法包括:获得在所述经译码的视频码流中表示的第一参考图像列表结构和第二参考图像列表结构;根据所述第一参考图像列表结构和所述第二参考图像列表结构,推导当前条带的第一参考图像列表和第二参考图像列表,其中,所述当前条带包括帧内(I)条带或单向预测(P)条带;在推导所述第一参考图像列表和所述第二参考图像列表之后,获得所述当前条带的至少一个重建块。

权利要求 :

1.一种由视频解码器实现的对经译码的视频码流进行解码的方法,其特征在于,所述方法包括:获得在所述经译码的视频码流中表示的第一参考图像列表结构和第二参考图像列表结构;

根据所述第一参考图像列表结构和所述第二参考图像列表结构,推导当前条带的第一参考图像列表和第二参考图像列表,其中,所述当前条带包括帧内(I)条带、单向预测(P)条带或双向预测(B)条带;

在推导所述第一参考图像列表和所述第二参考图像列表之后,获得所述当前条带的至少一个重建块;

所述第一参考图像列表结构或所述第二参考图像列表结构中的表项的顺序与对应参考图像列表中对应的参考图像的顺序相同,其中所述第一参考图像列表结构中的每个表项描述了所述第一参考图像列表中的所述每个表项对应的参考图像,其中所述第二参考图像列表结构中的每个表项描述了所述第二参考图像列表中的所述每个表项对应的参考图像。

2.根据权利要求1所述的方法,其特征在于,所述顺序为从0到指示值。

3.根据权利要求2所述的方法,其特征在于,所述指示值为从0到由sps_max_dec_pic_buffering_minus1指示的值。

4.根据权利要求1至3中任一项所述的方法,其特征在于,所述第一参考图像列表为RefPictList[0]。

5.根据权利要求1至3中任一项所述的方法,其特征在于,所述第二参考图像列表为RefPictList[1]。

6.根据权利要求1至3中任一项所述的方法,其特征在于,所述至少一个重建块用于生成在电子设备的显示器上显示的图像。

7.根据权利要求1至3中任一项所述的方法,其特征在于,所述第一或第二参考图像列表包括用于帧间预测的一列参考图像。

8.根据权利要求7所述的方法,其特征在于,对所述P条带或所述B条带进行所述帧间预测。

9.根据权利要求1至3中任一项所述的方法,其特征在于,条带头包括表示为ref_pic_list_sps_flag[i]的参考图像列表序列参数集(sequence parameter set,SPS)标志。

10.根据权利要求1至3中任一项所述的方法,其特征在于,条带头包括表示为num_ref_idx_active_override_flag的数量参考索引激活覆写标志。

11.根据权利要求1所述的方法,其特征在于,所述第一或者第二参考图像列表为RefPictList[0]或RefPictList[1],所述第一参考图像列表结构或所述第二参考图像列表结构中的表项的顺序与对应参考图像列表中的参考图像的顺序相同。

12.一种解码设备,其特征在于,所述解码设备包括:

接收器,用于接收经译码的视频码流;

与所述接收器耦合的存储器,其中,所述存储器存储指令;

与所述存储器耦合的处理器,其中,所述处理器用于执行存储在所述存储器中的所述指令,以使得所述处理器:获得在所述经译码的视频码流中表示的第一参考图像列表结构和第二参考图像列表结构;

根据所述第一参考图像列表结构和所述第二参考图像列表结构,推导当前条带的第一参考图像列表和第二参考图像列表,其中,所述当前条带包括帧内(I)条带、单向预测(P)条带或双向预测(B)条带;

在推导所述第一参考图像列表和所述第二参考图像列表之后,获得所述当前条带的至少一个重建块;

所述第一参考图像列表结构或所述第二参考图像列表结构中的表项的顺序与对应参考图像列表中对应的参考图像的顺序相同,其中所述第一参考图像列表结构中的每个表项描述了所述第一参考图像列表中的所述每个表项对应的参考图像,其中所述第二参考图像列表结构中的每个表项描述了所述第二参考图像列表中的所述每个表项对应的参考图像。

13.根据权利要求12所述的解码设备,其特征在于,所述解码设备还包括显示器,用于根据所述至少一个重建块显示图像。

14.一种译码装置,其特征在于,所述译码装置包括:

接收器,用于接收码流进行解码;

与所述接收器耦合的发送器,其中,所述发送器用于向显示器发送解码图像;

与所述接收器和所述发送器中的至少一个耦合的存储器,其中,所述存储器用于存储指令;

与所述存储器耦合的处理器,其中,所述处理器用于执行存储在所述存储器中的所述指令,以执行根据权利要求1至11中任一项所述的方法。

15.一种译码系统,其特征在于,所述系统包括:

编码器;

与所述编码器通信的解码器,其中,所述编码器或所述解码器包括根据权利要求12至

14中任一项所述的解码设备或译码装置。

16.一种译码模块,其特征在于,所述译码模块包括:

接收模块,用于接收码流进行解码;

与所述接收模块耦合的发送模块,其中,所述发送模块用于向显示模块发送解码图像;

与所述接收模块或所述发送模块中的至少一个耦合的存储模块,其中,所述存储模块用于存储指令;

与所述存储模块耦合的处理模块,其中,所述处理模块用于执行存储在所述存储模块中的指令,以执行根据权利要求1至11中任一项所述的方法。

说明书 :

经译码的视频码流的解码方法,解码设备,译码系统

[0001] 相关申请交叉引用
[0002] 本专利申请要求王业奎等人于2018年8月17日提交的申请号为62/719,360、发明名称为“视频译码中的参考图像管理(Reference Picture Management in Video Coding)”的美国临时专利申请的权益,其全部内容通过引用的方式并入本文中。

技术领域

[0003] 本发明大体上涉及用于视频译码中的参考图像管理技术。更具体地,本发明描述了用于构建参考图像列表和标识参考图像的技术。

背景技术

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

发明内容

[0005] 第一方面涉及一种用于对经译码的视频码流进行解码的方法。所述方法包括:获得在所述经译码的视频码流中表示的第一参考图像列表结构和第二参考图像列表结构;根据所述第一参考图像列表结构和所述第二参考图像列表结构,推导当前条带的第一参考图像列表和第二参考图像列表,其中,所述当前条带包括帧内(I)条带、单向预测(P)条带或双向预测(B)条带;在推导所述第一参考图像列表和所述第二参考图像列表之后,获得所述当前条带的至少一个重建块。
[0006] 上述方法提供的技术简化了参考图像列表的指示(signaling)并提高了参考图像列表指示的效率,从而改进了整体译码过程。
[0007] 根据所述第一方面,在所述方法的第一种实现方式中,所述参考图像列表结构中的表项的顺序与对应参考图像列表中的参考图像的顺序相同。
[0008] 根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第二种实现方式中,所述顺序为从0到指示值。
[0009] 根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第三种实现方式中,所述指示值为从0到由sps_max_dec_pic_buffering_minus1指示的值。
[0010] 根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第四种实现方式中,所述参考图像列表为RefPictList[0]。
[0011] 根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第五种实现方式中,所述参考图像列表为RefPictList[1]。
[0012] 根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第六种实现方式中,所述至少一个重建块用于生成在电子设备的显示器上显示的图像。
[0013] 根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第七种实现方式中,所述参考图像列表包括用于帧间预测的一列参考图像。
[0014] 根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第八种实现方式中,对所述P条带或所述B条带进行所述帧间预测。
[0015] 根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第九种实现方式中,条带头包括表示为ref_pic_list_sps_flag[i]的参考图像列表序列参数集(sequence parameter set,SPS)标志。
[0016] 根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第十种实现方式中,所述条带头包括表示为num_ref_idx_active_override_flag的数量参考索引激活覆写标志。
[0017] 根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第十一种实现方式中,所述参考图像列表为RefPictList[0]或RefPictList[1],所述参考图像列表结构中的表项的顺序与对应参考图像列表中的参考图像的顺序相同。
[0018] 根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第十二种实现方式中,所述当前条带为所述I条带或所述P条带。
[0019] 第二方面涉及一种解码设备。所述解码设备包括:接收器,用于接收经译码的视频码流;与所述接收器耦合的存储器,其中,所述存储器存储指令;与所述存储器耦合的处理器,其中,所述处理器用于执行存储在所述存储器中的所述指令,以使得所述处理器:获得在所述经译码的视频码流中表示的第一参考图像列表结构和第二参考图像列表结构;根据所述第一参考图像列表结构和所述第二参考图像列表结构,推导当前条带的第一参考图像列表和第二参考图像列表,其中,所述当前条带包括帧内(I)条带、单向预测(P)条带或双向预测(B)条带;在推导所述第一参考图像列表和所述第二参考图像列表之后,获得所述当前条带的至少一个重建块。
[0020] 所述解码设备提供的技术简化了参考图像列表的指示并提高了参考图像列表指示的效率。从而改进了整体译码过程。
[0021] 根据所述第二方面,在所述解码设备的第一种实现方式中,所解码设备还包括:显示器,用于根据所述至少一个重建块显示图像。
[0022] 第三方面涉及一种译码装置。所述译码装置包括:接收器,用于接收码流进行解码;与所述接收器耦合的发送器,其中,所述发送器用于向显示器发送解码图像;与所述接收器和所述发送器中的至少一个耦合的存储器,其中,所述存储器用于存储指令;与所述存储器耦合的处理器,其中,所述处理器用于执行存储在所述存储器中的所述指令,以执行上述方面或实现方式中任一种所述的方法。
[0023] 第四方面涉及一种系统。所述系统包括编码器和与所述编码器通信的解码器。所述编码器或所述解码器包括上述方面或实现方式中任一种所述的解码设备或译码装置。
[0024] 所述系统提供的技术简化了参考图像列表的指示并提高了参考图像列表指示的效率,从而改进了整体译码过程。
[0025] 第五方面涉及一种译码模块。所述译码模块包括:接收模块,用于接收图像进行编码或接收码流进行解码;与所述接收模块耦合的发送模块,其中,所述发送模块用于向解码器发送所述码流或向显示模块发送解码图像;与所述接收模块或所述发送模块中的至少一个耦合的存储模块,其中,所述存储模块用于存储指令;与所述存储模块耦合的处理模块,其中,所述处理模块用于执行存储在所述存储模块中的所述指令,以执行上述方面或实现方式中任一种所述的方法。
[0026] 所述译码模块提供的技术简化了参考图像列表的指示并提高了参考图像列表指示的效率,从而改进了整体译码过程。

附图说明

[0027] 为了更全面地理解本发明,现在参考下文结合附图和详细说明进行的简要描述,其中,相似附图标记表示相似部件。
[0028] 图1为可以采用双向预测技术的示例性译码系统的框图。
[0029] 图2为可以实现双向预测技术的示例性视频编码器的框图。
[0030] 图3为可以实现双向预测技术的示例性视频解码器的框图。
[0031] 图4为包括图像的参考图像集(reference picture set,RPS)的示意图,该图像包括RPS的所有子集中的表项。
[0032] 图5为对经译码的视频码流进行解码的方法的实施例。
[0033] 图6为视频译码设备的示意图。
[0034] 图7为译码模块的一个实施例的示意图。

具体实施方式

[0035] 图1为可以采用本文描述的视频译码技术的示例性译码系统10的框图。如图1所示,译码系统10包括源设备12,其中,源设备12提供稍后由目的地设备14解码的经编码的视频数据。具体地,源设备12可以通过计算机可读介质16向目的地设备14提供视频数据。源设备12和目的地设备14可以包括多种设备中的任一个,包括台式电脑、笔记本(即膝上型)电脑、平板电脑、机顶盒、“智能”手机和“智能”板(pad)等电话手机、电视、相机、显示设备、数字媒体播放器、视频游戏机、视频流设备等。在一些情况下,源设备12和目的地设备14可以用于无线通信。
[0036] 目的地设备14可以通过计算机可读介质16接收待解码的经编码的视频数据。计算机可读介质16可以包括任何类型的能够将经编码的视频数据从源设备12传递到目的地设备14的介质或设备。在一个示例中,计算机可读介质16可以包括通信介质,以使源设备12能够实时地将经编码的视频数据直接发送到目的地设备14。经编码的视频数据可以根据无线通信协议等通信标准进行调制,并发送到目的地设备14。通信介质可以包括任何无线或有线通信介质,例如射频(radio frequency,RF)频谱或一条或多条物理传输线。通信介质可以构成分组网络(例如局域网、广域网,或因特网等全球网络)的一部分。通信介质可以包括路由器、交换机、基站或任何其它可以用于从源设备12到目的地设备14进行通信的设备。
[0037] 在一些示例中,可以将经编码的数据从输出接口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)、电缆调制解调器等)或两者适于存取存储在文件服务器上的经编码的视频数据的组合。经编码的视频数据从存储设备的传输可以是流式传输、下载传输或其组合。
[0038] 本发明的技术不一定限于无线应用或设置。这些技术可以应用于视频译码以支持各种多媒体应用中的任一种,例如空中电视广播、有线电视传输、卫星电视传输、互联网流媒体视频传输(例如HTTP动态自适应流媒体(dynamic adaptive streaming over HTTP,DASH))、将数字视频编码到数据存储介质中、对存储在数据存储介质上的数字视频进行解码,或其它应用。在一些示例中,译码系统10可以用于支持单向或双向视频传输,从而支持视频流式传输、视频播放、视频广播和/或视频电话等应用。
[0039] 在图1的示例中,源设备12包括视频源18、视频编码器20和输出接口22。目的地设备14包括输入接口28、视频解码器30和显示设备32。根据本发明,源设备12中的视频编码器20和/或目的地设备14中的视频解码器30可以用于使用视频译码技术。在其它示例中,源设备和目的地设备可以包括其它组件或装置。例如,源设备12可以从外部视频源(例如外部相机)接收视频数据。同样地,目的地设备14可以与外部显示设备连接,而不是包括集成显示设备。
[0040] 图1所示的译码系统10仅仅是一个示例。视频译码技术可以由任何数字视频编码和/或解码设备执行。尽管本发明中的技术通常由视频译码设备执行,但这些技术还可以由视频编码器/解码器(通常称为“编解码器(CODEC)”)执行。此外,本发明中的技术还可以由视频预处理器执行。视频编码器和/或解码器可以是图形处理单元(graphics processing unit,GPU)或类似设备。
[0041] 源设备12和目的地设备14仅仅是此类译码设备的示例,其中,源设备12生成经译码的视频数据以发送到目的地设备14。在一些示例中,源设备12和目的地设备14可以基本上对称地操作,使得源设备12和目的地设备14都包括视频编码和解码组件。因此,译码系统10可以支持视频设备12和14之间的单向或双向视频传输,例如用于视频流式传输、视频播放、视频广播或视频电话。
[0042] 源设备12中的视频源18可以包括视频捕获设备(例如摄影机)、包括之前捕获的视频的视频档案库,和/或从视频内容提供方接收视频的视频输入接口。或者,视频源18可以生成基于计算机图形的数据作为源视频,或作为直播视频、存档视频和计算机生成视频的组合。
[0043] 在一些情况下,当视频源18是摄影机时,源设备12和目的地设备14可以形成摄像头手机或可视电话。然而,如上所述,本发明中描述的技术通常可以适用于视频译码,也可以应用于无线应用和/或有线应用。在每种情况下,视频编码器20可以对所捕获、预捕获或计算机生成的视频进行编码。然后,可以通过输出接口22将经编码的视频信息输出到计算机可读介质16上。
[0044] 计算机可读介质16可以包括无线广播或有线网络传输等瞬态介质,还可以包括存储介质(即非瞬时性存储介质),例如硬盘、闪存盘、光盘、数字视频光盘、蓝光光盘或其它计算机可读介质。在一些示例中,网络服务器(未示出)可以从源设备12接收经编码的视频数据,并且例如通过网络传输等向目的地设备14提供经编码的视频数据。类似地,介质生产设施(例如光盘冲压设施)中的计算设备可以从源设备12接收经编码的视频数据,并产生包括经编码的视频数据的光盘。因此,在各种示例中,计算机可读介质16可以理解为包括一个或多个各种形式的计算机可读介质。
[0045] 目的地设备14中的输入接口28从计算机可读介质16接收信息。计算机可读介质16接收到的信息可以包括由视频编码器20定义的语法信息,其中,该语法信息也由视频解码器30使用,包括描述块和其它经译码单元(例如图像组(group of picture,GOP))的特征和/或处理方式的语法元素。显示设备32向用户显示解码视频数据,并且可以包括各种显示设备中的任一个,例如阴极射线管(cathode ray tube,CRT)、液晶显示器(liquid crystal display,LCD)、等离子体显示器、有机发光二极体(organic light emitting diode,OLED)显示器或其它类型的显示设备。
[0046] 视频编码器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)等其它协议。
[0047] 视频编码器20和视频解码器30可以分别实现为各种合适的编码器电路中的任一个,例如一个或多个微处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(field programmable gate array,FPGA)、离散逻辑、软件、硬件、固件或它们的任何组合。当上述技术部分以软件实现时,一种设备可以将该软件的指令存储在合适的非瞬时性计算机可读介质中,并且使用一个或多个处理器在硬件中执行这些指令,以执行本发明的技术。视频编码器20和视频解码器30都可以包括在一个或多个编码器或解码器中,编码器或解码器可以集成为相应设备中的组合编码器/解码器(编解码器)的一部分。一种包括视频编码器20和/或视频解码器30的设备可以包括集成电路、微处理器和/或蜂窝电话等无线通信设备。
[0048] 图2为可以实现视频译码技术的示例性视频编码器20的框图。视频编码器20可以对视频条带(slice)内的视频块执行帧内译码和帧间译码。帧内译码依赖于空间预测来减少或去除某个视频帧或图像内的视频中的空间冗余。帧间译码依赖于时间预测来减少或去除视频序列的相邻帧或图像内的视频中的时间冗余。帧内模式(I模式)可以是若干基于空间的译码模式中的任一种。帧间模式(例如单向预测(uni‑directional/uni prediction)(P模式)或双向预测(bi‑prediction/bi prediction)(B模式)可以是若干基于时间的译码模式中的任一种。
[0049] 如图2所示,视频编码器20接收待编码的视频帧内的当前视频块。在图2的示例中,视频编码器20包括模式选择单元40、参考帧存储器64、求和器50、变换处理单元52、量化单元54和熵译码单元56。模式选择单元40又包括运动补偿单元44、运动估计单元42、帧内预测单元46和分割单元48。为了重建视频块,视频编码器20还包括反量化单元58、逆变换单元60和求和器62。还可以包括去块效应滤波器(图2未示出)以对块边界进行滤波,从而从重建视频中去除块状伪影。如果需要,去块效应滤波器通常对求和器62的输出进行滤波。除去块效应滤波器之外,还可以使用其它滤波器(循环内或循环后)。出于简洁而未示出此类滤波器,但是如果需要,此类滤波器(作为环内滤波器)可以对求和器50的输出进行滤波。
[0050] 在编码过程中,视频编码器20接收待译码的视频帧或条带。可以将该帧或条带划分成多个视频块。运动估计组件42和运动补偿组件44相对于一个或多个参考帧中的一个或多个块对所接收的视频块执行帧间预测译码,以实现时间预测。帧内预测单元46还可以相对于与待译码的视频块位于同一帧或条带中的一个或多个相邻块对所接收的视频块执行帧内预测译码,以实现空间预测。视频编码器20可以执行多个译码回合,(例如)为每个视频数据块选择合适的译码模式。
[0051] 此外,分割单元48可以根据在之前译码回合中对之前分割方案的评估将视频数据块分割成子块。例如,分割单元48最初可以将帧或条带分割成最大译码单元(largest coding unit,LCU),并且根据率失真分析(例如率失真优化)将每个LCU都分割成子译码单元(sub‑coding unit,sub‑CU)。模式选择单元40还可以产生指示将LCU分割成子CU的四叉树数据结构。四叉树中的叶节点CU可以包括一个或多个预测单元(prediction unit,PU)和一个或多个变换单元(transform unit,TU)。
[0052] 本发明使用术语“块”来指代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可以是正方形或非正方形(例如矩形)。
[0053] 模式选择单元40可以根据误差结果等选择帧内或帧间译码模式中的一种,将所得到的经帧内或帧间译码的块提供给加法器50以生成残差块数据,并提供给求和器62来重建经编码块以用作参考帧。模式选择单元40还将语法元素(例如运动向量、帧内模式指示符、分割信息和其它此类语法信息)提供给熵译码单元56。
[0054] 运动估计单元42和运动补偿单元44可以高度集成,但是出于概念目的而单独说明。由运动估计单元42执行的运动估计是生成运动向量的过程,这些运动向量用于估计视频块的运动。运动向量(例如)可以指示当前视频帧或图像内的视频块的PU相对于参考帧(或其它经译码单元)内的预测块(相对于当前帧(或其它经译码单元)内的正被译码的当前块)的位移。预测块是在像素差方面与待译码块高度匹配的块,其中,该像素差可以通过绝对差和(sum of absolute difference,SAD)、平方差和(sum of square difference,SSD)或其它差度量进行确定。在一些示例中,视频编码器20可以计算存储在参考帧存储器64中的参考图像的子整数像素位置的值。例如,视频编码器20可以内插参考图像的四分之一像素位置、八分之一像素位置或其它分数像素位置的值。因此,运动估计单元42可以执行相对于完整像素位置和分数像素位置的运动搜索,并输出具有分数像素精度的运动向量。
[0055] 运动估计单元42通过将帧间译码条带中的视频块的PU的位置与参考图像中的预测块的位置进行比较来计算该PU的运动向量。可以从第一参考图像列表(列表0)或第二参考图像列表(列表1)中选择该参考图像,每个列表标识存储在参考帧存储器64中的一个或多个参考图像。运动估计单元42将计算出的运动向量发送到熵编码单元56和运动补偿单元44。
[0056] 由运动补偿单元44执行的运动补偿可以涉及根据由运动估计单元42确定的运动向量来获取或生成预测块。另外,在一些示例中,运动估计单元42和运动补偿单元44可以在功能上集成。在接收到当前视频块的PU的运动向量之后,运动补偿单元44可以即刻定位运动向量在其中一个参考图像列表中所指向的预测块。求和器50通过从正被译码的当前视频块的像素值中减去预测块的像素值来形成残差视频块,从而形成像素差值,如下文所述。一般而言,运动估计单元42执行相对于亮度分量的运动估计,运动补偿单元44将根据亮度分量计算出的运动向量用于色度分量和亮度分量两者。模式选择单元40还可以生成与视频块和视频条带相关的语法元素,以供视频解码器30在解码视频条带中的视频块时使用。
[0057] 如上文所述,作为由运动估计单元42和运动补偿单元44执行的帧间预测的替代,帧内预测单元46可以对当前块进行帧内预测。具体而言,帧内预测单元46可以确定待用于对当前块进行编码的帧内预测模式。在一些示例中,帧内预测单元46可以(例如)在单独的编码回合中使用各种帧内预测模式对当前块进行编码,而且帧内预测单元46(或在一些示例中,模式选择单元40)可以从所测试的模式中选择合适的帧内预测模式进行使用。
[0058] 例如,帧内预测单元46可以使用对于各种所测试的帧内预测模式的率失真分析来计算率失真值,并在所测试的模式中选择率失真特性最佳的帧内预测模式。率失真分析一般确定经编码块与原始、未经编码块(曾经被编码以产生经编码块)之间的失真(或误差)量,以及确定用于产生经编码块的码率(即比特数)。帧内预测单元46可以根据各种经编码块的失真和速率计算比率,以判断哪种帧内预测模式展现该块的最佳率失真值。
[0059] 另外,帧内预测单元46可以用于使用深度建模模式(depth modeling mode,DMM)对深度图像中的深度块进行译码。模式选择单元40可以判断可用DMM模式是否比帧内预测模式和其它DMM模式(例如使用率失真优化(rate‑distortion optimization,RDO))产生更好的译码结果。对应于深度图像的纹理图像的数据可以存储在参考帧存储器64中。运动估计单元42和运动补偿单元44也可以用于对深度图像中的深度块进行帧间预测。
[0060] 在选择块的帧内预测模式(例如传统的帧内预测模式或其中一个DMM模式)之后,帧内预测单元46可以将信息提供给熵译码单元56,该信息指示为块选择的帧内预测模式。熵译码单元56可以对指示所选帧内预测模式的信息进行编码。视频编码器20可以在所发送的码流中携带以下内容:配置数据,可以包括多个帧内预测模式索引表和多个经修改的帧内预测模式索引表(也称为码字映射表);各种块的编码上下文的定义;待用于每个编码上下文的最有可能帧内预测模式、帧内预测模式索引表和经修改的帧内预测模式索引表的指示。
[0061] 视频编码器20通过从正被译码的原始视频块中减去来自模式选择单元40的预测数据而形成残差视频块。求和器50是执行这种减法操作的一个或多个组件。
[0062] 变换处理单元52将变换(例如离散余弦变换(discrete cosine transform,DCT)或概念上类似的变换)应用于残差块,从而产生包括残差变换系数值的视频块。变换处理单元52可以执行概念上类似于DCT的其它变换。还可以使用小波变换、整数变换、子频带变换或其它类型的变换。
[0063] 变换处理单元52将变换应用于残差块,从而产生残差变换系数块。上述变换可以将残差信息从像素域转换到变换域(例如频域)。变换处理单元52可以将所得到的变换系数发送到量化单元54。量化单元54量化这些变换系数以进一步减小码率。该量化过程可以减小与部分或全部系数相关联的位深度。可以通过调整量化参数来修改量化程度。在一些示例中,量化单元54可以接着对包括量化变换系数的矩阵执行扫描。或者,熵编码单元56可以执行扫描。
[0064] 在量化之后,熵译码单元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)或进行存档以供稍后发送或检索。
[0065] 反量化单元58和逆变换单元60分别应用反量化和逆变换以在像素域中重建残差块,(例如)以供稍后用作参考块。运动补偿单元44可以通过将残差块加到参考帧存储器64的其中一个帧的预测块来计算参考块。运动补偿单元44还可以将一个或多个内插滤波器应用于重建后的残差块,以计算在运动估计中使用的子整数像素值。求和器62将重建后的残差块与由运动补偿单元44产生的运动补偿预测块相加,以产生重建视频块,存储在参考帧存储器64中。重建后的视频块可以由运动估计单元42和运动补偿单元44用作参考块以对后续视频帧中的块进行帧间译码。
[0066] 图3为可以实现视频译码技术的示例性视频解码器30的框图。在图3的示例中,视频解码器30包括熵解码单元70、运动补偿单元72、帧内预测单元74、反量化单元76、逆变换单元78、参考帧存储器82和求和器80。在一些示例中,视频解码器30可以执行解码回合,该解码回合一般与参照视频编码器20(图2)描述的编码回合互逆。运动补偿单元72可以根据从熵解码单元70接收到的运动向量来生成预测数据,而帧内预测单元74可以根据从熵解码单元70接收到的帧内预测模式指示符来生成预测数据。
[0067] 在解码过程中,视频解码器30从视频编码器20接收经编码的视频码流,该经编码的视频码流表示经编码的视频条带中的视频块和相关联的语法元素。视频解码器30中的熵解码单元70对码流进行熵解码以生成量化系数、运动矢量或帧内预测模式指示符和其它语法元素。熵解码单元70将运动向量和其它语法元素转发到运动补偿单元72。视频解码器30可以接收视频条带级和/或视频块级的语法元素。
[0068] 当视频条带被译码为经帧内译码(I)条带时,帧内预测单元74可以根据指示的帧内预测模式和来自当前帧或图像中的之前解码块的数据为当前视频条带中的视频块生成预测数据。当视频帧被译码为经帧间译码(即B、P或GPB)条带时,运动补偿单元72根据从熵解码单元70接收到的运动矢量和其它语法元素为当前视频条带中的视频块产生预测块。这些预测块可以根据其中一个参考图像列表内的其中一个参考图像而产生。视频解码器30可以根据存储在参考帧存储器82中的参考图像使用默认构建技术来构建参考帧列表:列表0和列表1。
[0069] 运动补偿单元72通过解析运动向量和其它语法元素为当前视频条带中的视频块确定预测信息,并使用该预测信息为正被解码的当前视频块产生预测块。例如,运动补偿单元72使用所接收的一些语法元素来确定用于对视频条带中的视频块进行译码的预测模式(例如帧内预测或帧间预测)、帧间预测条带类型(例如B条带、P条带或GPB条带)、条带中的一个或多个参考图像列表的构建信息、条带中的每个经帧间编码视频块的运动向量、条带中的每个经帧间译码视频块的帧间预测状态以及用于对当前视频条带中的视频块进行解码的其它信息。
[0070] 运动补偿单元72还可以根据内插滤波器来执行内插。运动补偿单元72可以使用由视频编码器20在视频块的编码过程中所使用的内插滤波器来计算参考块的子整数像素的内插值。在这种情况下,运动补偿单元72可以根据所接收的语法元素来确定由视频编码器20使用的内插滤波器,并使用该内插滤波器来产生预测块。
[0071] 对应于深度图像的纹理图像的数据可以存储在参考帧存储器82中。运动补偿单元72还可以用于对深度图像中的深度块进行帧间预测。
[0072] 图像和视频压缩发展迅速,译码标准多样化。这些视频译码标准包括ITU‑T H.261、国际标准化组织(International Organization for Standardization,ISO)/国际电工委员会(International Electrotechnical Commission,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)以及3D AVC(3D‑AVC)等扩展版。HEVC包括可分级HEVC(Scalable HEVC,SHVC)、多视点HEVC(Multiview HEVC,MV‑HEVC)和3D HEVC(3D‑HEVC)等扩展版。
[0073] 通用视频译码(Versatile Video Coding,VVC)是ITU‑T和ISO/IEC组成的联合视频专家组(joint video experts team,JVET)开发的一种新的视频译码标准。在撰写时,VVC的最新工作草案(Working Draft,WD)已列入JVET‑K1001‑v1中。JVET文档JVET‑K0325‑v3包括对VVC高级语法的更新。
[0074] 一般而言,本发明描述了基于正在开发的VVC标准的技术。然而,这些技术也应用于其它视频/媒体编解码规范。
[0075] 视频压缩技术执行空间(帧内)预测和/或时间(帧间)预测以减少或去除视频序列中固有的冗余。对于基于块的视频译码,可以将视频条带(例如视频图像或视频图像的一部分)分割成视频块,视频块也可以称为树块、译码树块(coding tree block,CTB)、译码树单元(coding tree unit,CTU)、译码单元(coding unit,CU)和/或译码节点。参照同一图像的相邻块中的参考像素点使用空间预测对图像内的经帧内译码(I)条带中的视频块进行编码。图像内的帧间译码(P或B)条带中的视频块参照同一图像的相邻块中的参考像素点使用空间预测,或者参照其它参考图像中的参考像素点使用时间预测。图像可以称为帧,参考图像可以称为参考帧。
[0076] 通过空间或时间预测,产生待译码块的预测块。残差数据表示待译码的原始块与预测块之间的像素差。根据运动矢量和残差数据对经帧间译码块进行编码,其中,运动矢量指向构成预测块的参考像素点的块,残差数据指示经译码块与预测块之间的差值。根据帧内译码模式和残差数据对经帧内译码块进行编码。为了进一步压缩,可以将残差数据从像素域变换到变换域,从而产生接着进行量化的残差变换系数。可以扫描最初以二维阵列排列的量化变换系数,产生变换系数的一维向量,并且可以应用熵译码以实现进一步压缩。
[0077] 在视频编解码规范中,识别图像用于多种用途,包括用作帧间预测中的参考图像、用于从解码图像缓冲器(decoded picture buffer,DPB)输出的图像、用于运动矢量的缩放、用于加权预测等。在AVC和HEVC中,图像可以通过图像顺序编号(picture order count,POC)识别。在AVC和HEVC中,DPB中的图像可以被标识为“用于短期参考”、“用于长期参考”或“不用于参考”。一旦图像被标识为“不用于参考”,则该图像不可以再用于预测。当不再需要输出该图像时,可以从DPB中删除该图像。
[0078] AVC中有两种类型的参考图像:短期参考图像和长期参考图像。当参考图像不再用于预测参考时,可以将该参考图像标识为“不用于参考”。这三种状态(短期参考、长期参考、不用于参考)之间的转换通过解码参考图像标识过程进行控制。存在两种替代的解码参考图像标识机制:隐式滑动窗口过程和显式内存管理控制操作(memory management control operation,MMCO)过程。当参考帧的数量等于给定的最大数量(序列参数集(sequence parameter set,SPS)中的max_num_ref_frames)时,滑动窗口过程将短期参考图像标识为“不用于参考”。以先入先出的方式存储短期参考图像,使得最近解码短期图像保存在DPB中。
[0079] 显式MMCO过程可以包括多个MMCO命令。MMCO命令可以将一个或多个短期或长期参考图像标识为“不用于参考”,将所有图像标识为“不用于参考”,或者将当前参考图像或现有的短期参考图像标识为长期参考图像,然后将长期图像索引分配给长期参考图像。
[0080] 在AVC中,参考图像标识操作以及从DPB中输出和删除图像的过程是在对图像进行解码之后执行的。
[0081] HEVC引入了一种不同的参考图像管理方法,称为参考图像集(reference picture set,RPS)。RPS概念与AVC中的MMCO/滑动窗口过程的最根本区别在于,每个特定条带具有一个由当前图像或任何后续图像使用的完整参考图像集。因此,指示了必须保存在DPB中供当前图像或后续图像使用的所有图像的完整集合。这与AVC方案不同,AVC方案只指示DPB的相对变化。利用RPS概念,不需要解码顺序中靠前的图像的信息来维持DPB中参考图像的正确状态。
[0082] 为了充分发挥RPS的优点,并提高抗误码能力,与AVC相比改变了HEVC中的图像解码和DPB操作的顺序。在AVC中,通常在对当前图像进行解码之后进行图像标识和缓冲器操作(都从DPB中输出和删除解码图像)。在HEVC中,首先从当前图像的条带头中解码出RPS,然后通常在对当前图像进行解码之前进行图像标识和缓冲器操作。
[0083] HEVC中的每个条带头必须包括用于指示包括条带的图像的RPS的参数。唯一的例外情况是没有为解码即时刷新(Instantaneous Decoding Refresh,IDR)条带指示RPS,而是推断RPS为空。对于不属于IDR图像的I条带,即使这些I条带属于I图像,也可以提供RPS,因为可能存在解码顺序在I图像之后的图像,这些图像根据解码顺序在I图像之前的图像进行帧间预测。RPS中的图像数量不超过SPS中的语法元素sps_max_dec_pic_buffering指示的DPB大小限制。
[0084] 每个图像都与表示输出顺序的POC值相关。条带头包括固定长度码字pic_order_cnt_lsb,表示完整POC值的最低有效位(least significant bit,LSB),也称为POC LSB。在SPS中指示码字的长度,而长度可以(例如)介于4到16个比特之间。RPS使用POC来识别参考图像。除了POC值之外,每个条带头还直接包括或使用SPS中的RPS中每个图像的POC值(或LSB)的经译码表示。
[0085] 每个图像的RPS包括五个不同的参考图像列表,也称为五个RPS子集。RefPicSetStCurrBefore包括解码顺序和输出顺序在当前图像之前的所有可以在当前图像的帧间预测中使用的短期参考图像。RefPicSetStCurrAfter包括解码顺序在当前图像之前、输出顺序在当前图像之后的所有可以在当前图像的帧间预测中使用的短期参考图像。
RefPicSetStFoll包括所有可以在解码顺序在当前图像之后的一个或多个图像的帧间预测中使用、但在当前图像的帧间预测中不使用的短期参考图像。RefPicSetLtCurr包括所有可以在当前图像的帧间预测中使用的长期参考图像。RefPicSetLtFoll包括所有可以在解码顺序在当前图像之后的一个或多个图像的帧间预测中使用、但在当前图像的帧间预测中不使用的长期参考图像。
[0086] 使用最多三个循环指示RPS,这三个循环在不同类型的参考图像上迭代:POC值小于当前图像的短期参考图像、POC值大于当前图像的短期参考图像,以及长期参考图像。另外,为每个参考图像发送一个标志(used_by_curr_pic_X_flag),指示该参考图像是否由当前图像(包括在列表RefPicSetStCurrBefore、RefPicSetStCurrAfter或RefPicSetLtCurr中,或者包括在列表RefPicSetStFoll或RefPicSetLtFoll中)参考。
[0087] 图4示出了包括当前图像B14的RPS 400,当前图像B14包括RPS 400的所有子集402中的表项(例如图像)。在图4的示例中,当前图像B14只包括五个子集402(又称为RPS子集)中的每个子集中的一个图像。P8是子集402(称为RefPicSetStCurrBefore)中的图像,因为该图像在输出顺序中靠前且由B14使用。P12是子集402(称为RefPicSetStCurrAfter)中的图像,因为该图像在输出顺序中靠后且由B14使用。P13是子集402(称为RefPicSetStFoll)中的图像,因为该图像是B14不使用的短期参考图像(但是由于B15会使用,所以必须保留在DPB中)。P4是子集402(称为RefPicSetStCurrBefore)中的图像,因为该图像是B14使用的长期参考图像。I0是子集402(称为RefPicSetLtFoll)中的图像,因为该图像是当前图像不使用的长期参考图像(但是由于B15会使用,所以必须保留在DPB中)。
[0088] RPS 400中的短期参考图像可以直接包括在条带头中。或者,条带头可以只包括表示索引的语法元素,从而参考在激活SPS中发送的预定义RPS列表。可以使用两种不同方案中的任一种来指示RPS 402中的短期参考图像:下文描述的帧间RPS或这里描述的帧内RPS。当使用帧内RPS时,指示num_negative_pics和num_positive_pics,表示两个不同参考图像列表的长度。这两个列表分别包括与当前图像存在负POC差值和正POC差值的参考图像。这两个列表中的每个元素都使用可变长度码进行编码,该可变长度码表示列表中的每个元素与前一个元素的POC值的差值减一。对于每个列表中的第一个图像,指示涉及当前图像的POC值减一。
[0089] 当对序列参数集中的循环RPS进行编码时,有可能参照序列参数集中已经编码的另一个RPS对一个RPS(例如RPS 400)中的元素进行编码。这称为帧间RPS。由于序列参数集中的所有RPS都位于同一个网络抽象层(network abstraction layer,NAL)单元中,因此该方法不会产生误差稳定性问题。帧间RPS语法基于以下事实:可以根据之前解码图像的RPS预测当前图像的RPS。这是因为当前图像的所有参考图像是前一个图像的参考图像,或者是之前的解码图像。只需要指示这些图像中的哪些图像是参考图像并用于预测当前图像。因此,语法包括以下内容:索引,指向RPS以用作预测值;delta_POC,待加到预测值的delta_POC,得到当前RPS的增量POC;指示符集,指示哪些图像是参考图像以及这些图像是否只用于预测后续图像。
[0090] 希望使用长期参考图像的编码器必须将SPS语法元素long_term_ref_pics_present_flag设置为1。然后,可以通过固定长度码字poc_lsb_lt在条带头中指示长期参考图像,该固定长度码字表示每个长期图像的完整POC值的最低有效位。每个poc_lsb_lt都是为特定长期图像指示的码字pic_order_cnt_lsb的副本。还有可能在SPS中指示长期图像集,作为POC LSB值列表。然后,可以在条带头中指示长期图像的POC LSB,作为此列表的索引。
[0091] 另外还可以指示语法元素delta_poc_msb_cycle_lt_minus1,从而能够计算长期参考图像相对于当前图像的完整POC距离。要求为每个长期参考图像指示码字delta_poc_msb_cycle_lt_minus1,每个长期参考图像与RPS中的任何其它参考图像具有相同的POC LSB值。
[0092] 对于HEVC中的参考图像标识,在图像解码之前,DPB中通常存在许多图像。其中一些图像可以用于预测,因此被标识为“用于参考”。其它图像不可用于预测,而是等待输出,因此被标识为“不用于参考”。在对条带头进行解析之后,首先执行图像标识过程,然后再对条带数据进行解码。将DPB中存在的被标识为“用于参考”但不包括在RPS中的图像标识为“不用于参考”。当used_by_curr_pic_X_flag为0时,则忽略DPB中不存在的但包括在参考图像集中的图像。但是,当used_by_curr_pic_X_flag为1时,该参考图像预期用于预测当前图像,但是缺失该参考图像。这时,推断该图像无意丢失,解码器需要采取合适的措施解决这个问题。
[0093] 在对当前图像进行解码之后,将参考图像标识为“用于短期参考”。
[0094] 下面描述HEVC中的参考图像列表构建。在HEVC中,术语“帧间预测”用于表示根据除当前解码图像之外的参考图像的数据元素(例如像素点值或运动矢量)推导的预测。与在AVC中一样,可以根据多个参考图像来预测一个图像。用于帧间预测的参考图像排列在一个或多个参考图像列表中。参考索引用于识别需要使用列表中的哪些参考图像来产生预测信号。
[0095] P条带使用单个参考图像列表(列表0),B条带使用两个参考图像列表(列表0和列表1)。与AVC类似,HEVC中的参考图像列表构建包括参考图像列表初始化和参考图像列表修改。
[0096] 在AVC中,P条带(使用解码顺序)和B条带(使用输出顺序)的列表0的初始化过程是不同的。在HEVC中,两种情况都使用输出顺序。
[0097] 参考图像列表初始化根据以下三个RPS子集创建默认列表0和列表1(如果条带是B条带):RefPicSetStCurrBefore、RefPicSetStCurrAfter和RefPicSetLtCurr。首先,将输出顺序靠前(靠后)的短期图像按照它们与当前图像的POC距离,从小到大插入到列表0(列表1)中;然后,将输出顺序靠后(靠前)的短期图像按照它们与当前图像的POC距离,从小到大插入到列表0(列表1)中;最后,将长期图像插入到列表0(列表1)的末尾处。在RPS方面,对于列表0,将RefPicSetStCurrBefore中的表项插入到初始列表中,然后插入
RefPicSetStCurrAfter中的表项。之后,添加RefPicSetLtCurr中的表项(如果存在)。
[0098] 在HEVC中,当列表中的表项数量小于激活参考图像的目标数量(在图像参数集或条带头中指示)时,重复上述过程(再次添加已添加到参考图像列表中的参考图像)。当表项数量大于目标数量时,截断该列表。
[0099] 在初始化参考图像列表之后,可以修改该参考图像列表,使得可以根据参考图像列表修改命令以任何顺序(包括一个特定参考图像可以出现在列表中的多个位置的情况)排列当前图像的参考图像。当指示存在列表修改的标志设置为1时,指示固定数量(等于参考图像列表中的表项的目标数量)的命令,并且每个命令为参考图像列表插入一个表项。在命令中,通过根据RPS指示推导的当前图像的参考图像列表中的索引识别参考图像。这与H.264/AVC中的参考图像列表修改不同,在H.264/AVC中,图像通过图像编号(根据语法元素frame_num推导)或长期参考图像索引识别,并且有可能需要较少的命令,例如用于交换初始列表中的前两个表项或将一个表项插入到初始列表的起始处并移动其它表项。
[0100] 参考图像列表中不可以包括TemporalId大于当前图像的任何参考图像。HEVC码流可能包括若干个时间子层。每个NAL单元属于特定子层,由TemporalId(等于temporal_id_plus1–1)指示。
[0101] 参考图像管理直接以参考图像列表为基础。JCT‑VC文档JCTVC‑G643包括一种直接使用三个参考图像列表(参考图像列表0、参考图像列表1和闲置参考图像列表)来管理DPB中的参考图像的方法,从而避免指示和解码过程,包括(1)AVC中的滑动窗口和MMCO过程以及参考图像列表初始化和修改过程,或者(2)HEVC中的参考图像集以及参考图像列表初始化和修改过程。
[0102] 参考图像管理方法可能存在若干问题。AVC方法涉及滑动窗口、MMCO过程和参考图像列表初始化和修改过程,这些都非常复杂。此外,图像丢失可能会导致DPB的状态丢失,状态即DPB中有哪些图像用于进一步的帧间预测参考目的。HEVC方法不存在DPB状态丢失问题。然而,HEVC方法涉及一种复杂的参考图像集指示和推导过程,以及复杂的参考图像列表初始化和修改过程。JCTVC‑G643中的方法直接使用三个参考图像列表(参考图像列表0、参考图像列表1和闲置参考图像列表)来管理DPB中的参考图像,涉及以下方面:第三参考图像列表,即闲置参考图像列表;将POC差值译码为两部分:“短期”部分和经ue(v)译码的“长期”部分;POC差值译码使用的基于TemporalId的POC粒度,使用POC差值的两部分译码来确定标识为“用于短期参考”或“用于长期参考”;参考图像列表子集描述,能够通过将参考图像从某个较早放入的参考图像列表描述中删除来指示参考图像列表;通过语法元素ref_pic_list_copy_flag使能的参考图像列表复制模式;参考图像列表描述过程。上述每个方面都会使该方法变得复杂。此外,JCTVC‑G643中的参考图像列表的解码过程也很复杂。指示长期参考图像可能需要在条带头中指示POC循环(cycle)。这样效率不高。
[0103] 为了解决上述问题,本文公开了以下技术方案,其中每个技术方案可以单独应用,而其中一些技术方案可以组合应用。(1)直接基于两个参考图像列表(即参考图像列表0和参考图像列表1)标识参考图像。(1a)根据SPS、PPS和/或条带头中的语法元素和语法结构,指示用于推导两个参考图像列表的信息。(1b)在参考图像列表结构中显式地指示一个图像的两个参考图像列表。(1b.i)可以在SPS中指示在一个或多个参考图像列表结构,而且每个参考图像列表结构可以由条带头中的索引参考。(1b.ii)可以直接在条带头中指示参考图像列表0和1。(2)为所有类型的条带,即B(双向预测)条带、P(单向预测)条带和I(帧内)条带指示用于推导两个参考图像列表的信息。术语“条带(slice)”是指译码树单元的集合,例如HEVC中或最新VVC WD中的条带;条带也可以指译码树单元的一些其它集合,例如HEVC中的分块(tile)。(3)为所有类型的条带,即B条带、P条带和I条带生成两个参考图像列表。(4)直接构建两个参考图像列表,不需要进行参考图像列表初始化过程和参考图像列表修改过程。(5)在两个参考图像列表中,用于当前图像的帧间预测的参考图像只可以由列表起始处的多个表项参考。这些表项称为列表中的激活表项,而其它表项称为列表中的非激活表项。可以推导列表中的表项的总数量和激活表项的数量。(6)由参考图像列表中的非激活表项参考的图像不可以由该参考图像列表中的其它表项或其它参考图像列表中的任一表项参考。(7)长期参考图像只通过一定数量的POC LSB识别,其中,该数量可以大于在条带头中指示的用于推导POC值的POC LSB的数量,而且在SPS中指示。(8)只在条带头中指示参考图像列表结构;短期参考图像和长期参考图像都通过它们的POC LSB识别,这些POC LSB由比特数表示,这些比特数与表示在条带头中指示的用于推导POC值所使用的POC LSB的比特数不同;表示用于识别短期参考图像和长期参考图像的POC LSB所使用的比特数可以不同。(9)只在条带头中指示参考图像列表结构,不区分短期参考图像和长期参考图像,所有参考图像都称为参考图像,参考图像通过它们的POC LSB识别,这些POC LSB可以由比特数表示,该比特数与表示在条带头中指示的用于推导POC值的POC LSB所使用的比特数不同。
[0104] 下面提供本发明的第一实施例。以下描述涉及最新VVC WD。在本实施例中,在SPS中指示参考图像列表0和参考图像列表1各对应的两组参考图像列表结构。
[0105] 下面提供本文中使用的一些术语的定义。帧内随机接入点(intra random access point,IRAP)图像:每个视频译码层(video coding layer,VCL)NAL单元的nal_unit_type为IRAP_NUT的经译码图像。非IRAP图像:每个VCL NAL单元的nal_unit_type为NON_IRAP_NUT的经译码图像。参考图像列表:用于P条带或B条带的帧间预测的一列参考图像。为非IRAP图像中的每个条带生成两个参考图像列表:参考图像列表0和参考图像列表1。由与一个图像相关的两个参考图像列表中的所有表项参考的唯一图像集包括可以用于相关图像或解码顺序在相关图像之后的任一图像的帧间预测的所有参考图像。在解码P条带的条带数据时,只有参考图像列表0用于帧间预测。在解码B条带的条带数据时,两个参考图像列表都用于帧间预测。在解码I条带的条带数据时,没有参考图像列表用于帧间预测。长期参考图像(long‑term reference picture,LTRP):被标识为“用于长期参考图像”的图像。短期参考图像(short‑term reference picture,STRP):被标识为“用于短期参考图像”的图像。
[0106] VVC中的第8.3.3节“用于参考图像标识的解码过程(Decoding process for reference picture marking)”、HEVC中的第8.3.2节“用于参考图像集的解码过程(Decoding process for reference picture set)”以及AVC中的第7.4.3.3节“解码参考图像标识语义(Decoded reference picture marking semantics)”定义了术语“用于短期参考”、“用于长期参考”或“不用于参考”。本文使用的术语具有相同的含义。
[0107] 下面提供第一实施例使用的相关语法和语义。
[0108] NAL单元头语法
[0109]
[0110] 序列参数集原始字节序列载荷(Raw Byte Sequence Payload,RBSP)语法
[0111]
[0112] 图像参数集RBSP语法
[0113]
[0114]
[0115] 条带头语法
[0116]
[0117]
[0118] 参考图像列表结构语法
[0119]
[0120] NAL单元头语义
[0121] forbidden_zero_bit等于0。nal_unit_type表示NAL单元中包括的RBSP数据结构的类型。
[0122] 表7‑1:NAL单元类型代码和NAL单元类型类别
[0123]
[0124]
[0125] nuh_temporal_id_plus1减1表示NAL单元的时间标识符。nuh_temporal_id_plus1的值不等于0。变量TemporalId表示如下:TemporalId=nuh_temporal_id_plus1–1。当nal_unit_type为IRAP_NUT时,经译码条带属于IRAP图像,TemporalId等于0。接入单元中的所有VCL NAL单元具有相同的TemporalId值。经译码图像或接入单元的TemporalId值为该经译码图像或接入单元中的VCL NAL单元的TemporalId值。非VCL NAL单元的TemporalId值约束如下:如果nal_unit_type为SPS_NUT,则TemporalId等于0,且包括NAL单元的接入单元的TemporalId等于0。否则,如果nal_unit_type为EOS_NUT或EOB_NUT,则TemporalId等于0。否则,TemporalId大于或等于包括NAL单元的接入单元的TemporalId。当NAL单元为非VCL NAL单元时,TemporalId值等于包括该非VCL NAL单元应用于的所有接入单元的TemporalId值中的最小值。当nal_unit_type为PPS_NUT时,TemporalId可以大于或等于包括NAL单元的接入单元的TemporalId,因为所有图像参数集(picture parameter set,PPS)都可以包括在码流的起始处,其中,第一经译码图像的TemporalId等于0。当nal_unit_type为PREFIX_SEI_NUT或SUFFIX_SEI_NUT时,TemporalId可以大于或等于包括NAL单元的接入单元的TemporalId,因为SEI NAL单元可以包括应用于包括接入单元的码流子集的信息,其中,这些接入单元的TemporalId值大于包括SEI NAL单元的接入单元的TemporalId。nuh_reserved_zero_7bits等于‘0000000’。nuh_reserved_zero_7bits的其它值可以由ITU‑T或ISO/IEC在未来进行规定。解码器忽略(即从码流中删除并丢弃)nuh_reserved_zero_7bits的值不等于‘0000000’的NAL单元。
[0126] 序列参数集RBSP语义
[0127] log2_max_pic_order_cnt_lsb_minus4表示在用于图像顺序编号的解码过程中使(log2用的变量MaxPicOrderCntLsb的值,如下所示:MaxPicOrderCntLsb=2
_max_pic_order_cnt_lsb_minus4+4)
。log2_max_pic_order_cnt_lsb_minus4的取值范围为0~12(包括
端值)。sps_max_dec_pic_buffering_minus1加1表示CVS所需的解码图像缓冲器的最大大小,以图像存储缓冲器为单位。sps_max_dec_pic_buffering_minus1的取值范围为0~MaxDpbSize–1(包括端值),其中,MaxDpbSize如其它地方所示。long_term_ref_pics_flag为0,表示没有LTRP用于CVS中的任何经译码图像的帧间预测。long_term_ref_pics_flag为
1,表示LTRP可以用于CVS中的一个或多个经译码图像的帧间预测。additional_lt_poc_lsb表示在用于参考图像列表的解码过程中使用的变量MaxLtPicOrderCntLsb的值,如下所示:
(log2_max_pic_order_cnt_lsb_minus4+4+additional_lt_poc_lsb)
MaxLtPicOrderCntLsb=2 。additional_lt_
poc_lsb的取值范围为0~32–log2_max_pic_order_cnt_lsb_minus4–4(包括端值)。如果不存在,则推断additional_lt_poc_lsb的值等于0。num_ref_pic_lists_in_sps[i]表示SPS中包括的listIdx等于i的语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)的数量。num_ref_pic_lists_in_sps[i]的取值范围为0~64(包括端值)。对于listIdx的每个值(等于0或1),解码器需要为所有语法结构num_ref_pic_lists_in_sps[i]+1ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)分配内存,因为在当前图像的条带头中可以直接指示一个语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)。
[0128] 图像参数集RBSP语义
[0129] 当i等于0时,num_ref_idx_default_active_minus1[i]加1表示num_ref_idx_active_override_flag为0的P条带或B条带的变量NumRefIdxActive[0]的推断值;当i等于1时,num_ref_idx_default_active_minus1[i]加1表示num_ref_idx_active_override_flag为0的B条带的NumRefIdxActive[1]的推断值。num_ref_idx_default_active_minus1[i]的取值范围为0~14(包括端值)。
[0130] 条带头语义
[0131] 如果存在,条带头语法元素slice_pic_parameter_set_id和slice_pic_order_cnt_lsb中的每个的值在经译码图像的所有条带头中相同。slice_type表示条带的译码类型,如表7‑3所示。
[0132] 表7‑3:名称与slice_type的关联关系
[0133] slice_type slice_type的名称0 B(B条带)
1 P(P条带)
2 I(I条带)
[0134] 当nal_unit_type为IRAP_NUT时,即当图像为IRAP图像时,slice_type为2。slice_pic_order_cnt_lsb表示当前图像的图像顺序编号对MaxPicOrderCntLsb取模的值。语法元素slice_pic_order_cnt_lsb的长度为(log2_max_pic_order_cnt_lsb_minus4+4)个比特。slice_pic_order_cnt_lsb的取值范围为0~MaxPicOrderCntLsb–1(包括端值)。如果不存在,则推断slice_pic_order_cnt_lsb等于0。ref_pic_list_sps_flag[i]等于1,表示当前图像的参考图像列表i是根据激活SPS中的listIdx等于i的其中一个语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)推导的。ref_pic_list_sps_flag[i]等于0,表示当前图像的参考图像列表i是根据当前图像的条带头中直接包括的listIdx等于i的语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)推导的。当num_ref_pic_lists_in_sps[i]等于0时,ref_pic_list_sps_flag[i]的值等于0。ref_pic_list_idx[i]表示listIdx等于i的用于推导当前图像的参考图像列表i的语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)在激活SPS中包括的listIdx等于i的语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)列表中的索引。语法元素ref_pic_list_idx[i]由Ceil(Log2(num_ref_pic_lists_in_sps[i]))个比特表示。如果不存在,则推断ref_pic_list_idx[i]的值等于0。ref_pic_list_idx[i]的取值范围为0~num_ref_pic_lists_in_sps[i]–1(包括端值)。num_ref_idx_active_override_flag为1,表示P条带和B条带存在语法元素num_ref_idx_active_minus1[0],而B条带存在语法元素num_ref_idx_active_minus1[1]。num_ref_idx_active_override_flag为0,表示语法元素num_ref_idx_active_minus1[0]和num_ref_idx_active_minus1[1]不存在。如果存在,则num_ref_idx_active_minus1[i]表示变量NumRefIdxActive[i]的值,如下所示:NumRefIdxActive[i]=num_ref_idx_active_minus1[i]+1。num_ref_idx_active_minus1[i]的取值范围为0~14(包括端值)。
[0135] NumRefIdxActive[i]–1的值表示参考图像列表i中的可以用于解码条带的最大参考索引。当NumRefIdxActive[i]的值等于0时,参考图像列表i中没有参考索引可以用于解码条带。在i等于0或1的情况下,如果当前条带为B条带且num_ref_idx_active_override_flag为0,则推断NumRefIdxActive[i]等于num_ref_idx_default_active_minus1[i]+1。如果当前条带为P条带且num_ref_idx_active_override_flag为0,则推断NumRefIdxActive[0]等于num_ref_idx_default_active_minus1[0]+1。如果当前条带为P条带,则推断NumRefIdxActive[1]等于0。如果当前条带为I条带,则推断NumRefIdxActive[0]和NumRefIdxActive[1]都等于0。
[0136] 或者,在i等于0或1的情况下,假设将rplsIdx1设置为ref_pic_list_sps_flag[i]?ref_pic_list_idx[i]:num_ref_pic_lists_in_sps[i],并将numRpEntries[i]设置为num_strp_entries[i][rplsIdx1]+num_ltrp_entries[i][rplsIdx1]。当NumRefIdxActive[i]大于numRpEntries[i]时,将NumRefIdxActive[i]的值设置为numRpEntries[i]。
[0137] 参考图像列表结构语义
[0138] 语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)可以存在于SPS或条带头中。该语法结构的具体含义取决于是包括在条带头中还是包括在SPS中:如果存在于条带头中,则语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)表示当前图像(包括条带的图像)的参考图像列表listIdx。否则(存在于SPS中),语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)表示参考图像列表listIdx的候选,本部分剩下内容规定的语义中的术语“当前图像”是指:(1)包括一个或多个条带的每个图像,其中,一个或多个条带包括的ref_pic_list_idx[listIdx]等于在SPS中包括的语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)列表中的索引,(2)CVS中的每个图像,其中,CVS具有与激活SPS一样的SPS。num_strp_entries[listIdx][rplsIdx]表示语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的STRP表项的数量。num_ltrp_entries[listIdx][rplsIdx]表示语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的LTRP表项的数量。如果不存在,则推断num_ltrp_entries[listIdx][rplsIdx]的值等于0。变量NumEntriesInList[listIdx][rplsIdx]的推导方式如下:NumEntriesInList[listIdx][rplsIdx]=num_strp_entries[listIdx][rplsIdx]+num_ltrp_entries[listIdx][rplsIdx]。NumEntriesInList[listIdx][rplsIdx]的取值范围为0~sps_max_dec_pic_buffering_minus1(包括端值)。lt_ref_pic_flag[listIdx][rplsIdx][i]等于1,表示语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的第i个表项为LTRP表项。lt_ref_pic_flag[listIdx][rplsIdx][i]等于0,表示语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的第i个表项为STRP表项。如果不存在,则推断lt_ref_pic_flag[listIdx][rplsIdx][i]的值等于0。码流一致性的要求为:lt_ref_pic_flag[listIdx][rplsIdx][i](i的所有值在范围0~NumEntriesInList[listIdx][rplsIdx]–1(包括端值)内)的总和等于num_ltrp_entries[listIdx][rplsIdx]。当第i个表项为语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)中的第一个STRP表项时,delta_poc_st[listIdx][rplsIdx][i]表示当前图像和由第i个表项参考的图像的图像顺序编号值之间的差值,或者,当第i个表项为语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)中的STRP表项但不是第一个STRP表项时,delta_poc_st[listIdx][rplsIdx][i]表示由语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的第i个表项和前一个STRP表项参考的图像的图像顺序编号值之间的差值。delta_poc_st[listIdx][rplsIdx][i]的取值
15 15
范围为–2 ~2 –1(包括端值)。poc_lsb_lt[listIdx][rplsIdx][i]表示由语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的第i个表项参考的图像的图像顺序编号对MaxLtPicOrderCntLsb取模的值。语法元素poc_lsb_lt[listIdx][rplsIdx][i]的长度为Log2(MaxLtPicOrderCntLsb)个比特。
[0139] 下面描述解码过程。当前图像CurrPic的解码过程操作如下。下面详述NAL单元的解码。以下过程使用条带头层和更高层的语法元素详述以下解码过程。推导与图像顺序编号相关的变量和函数。只对图像中的第一个条带调用。在非IRAP图像中的每个条带的解码过程开始时,调用用于参考图像列表构建的解码过程来推导参考图像列表0(RefPicList[0])和参考图像列表1(RefPicList[1)])。调用用于参考图像标识的解码过程,其中,可以将参考图像标识为“不用于参考”或“用于长期参考”。只对图像中的第一个条带调用。调用用于译码树单元、缩放、变换、环内滤波等的解码过程。在当前图像中的所有条带都完成解码之后,将当前解码图像标识为“用于短期参考”。
[0140] 下面描述NAL单元解码过程。本过程的输入为当前图像的NAL单元及其相关的非VCL NAL单元。本过程的输出为封装在NAL单元内的已解析的RBSP语法结构。用于每个NAL单元的解码过程从NAL单元中提取RBSP语法结构,然后解析该RBSP语法结构。
[0141] 下面描述条带解码过程,包括用于图像顺序编号的解码过程。本过程的输出为当前图像的图像顺序编号PicOrderCntVal。图像顺序编号用于识别图像、在融合(merge)模式下推导运动参数、运动向量预测和解码器一致性检查。每个经译码图像都与图像顺序编号变量(表示为PicOrderCntVal)相关。如果当前图像不是IRAP图像,则变量prevPicOrderCntLsb和prevPicOrderCntMsb的推导方式如下:假设prevTid0Pic为解码顺序中的TemporalId等于0的前一个图像。将变量prevPicOrderCntLsb设置为prevTid0Pic的slice_pic_order_cnt_lsb。将变量prevPicOrderCntMsb设置为prevTid0Pic的
PicOrderCntMsb。
[0142] 当前图像的变量PicOrderCntMsb的推导方式如下:如果当前图像为IRAP图像,则将PicOrderCntMsb设置为0。否则,PicOrderCntMsb的推导方式如下:
[0143]
[0144] PicOrderCntVal的推导方式如下:PicOrderCntVal=PicOrderCntMsb+slice_pic_order_cnt_lsb。
[0145] 由于推断IRAP图像的slice_pic_order_cnt_lsb为0,而且将prevPicOrderCntLsb和prevPicOrderCntMsb都设置为0,因此所有IRAP图像的PicOrderCntVal都等于0。31 31
PicOrderCntVal的取值范围为–2 ~2 –1(包括端值)。在一个CVS中,任意两个经译码图像的PicOrderCntVal值不相同。
[0146] 在解码过程中的任何时刻,DPB中的任意两个参考图像的PicOrderCntVal&(MaxLtPicOrderCntLsb–1)的值不相同。函数PicOrderCnt(picX)表示如下:PicOrderCnt(picX)=图像picX的PicOrderCntVal。函数DiffPicOrderCnt(picA,picB)表示如下:DiffPicOrderCnt(picA,picB)=PicOrderCnt(picA)–PicOrderCnt(picB)。码流不包括使
15 15
解码过程中使用的DiffPicOrderCnt(picA,picB)的值不在范围–2 ~2 –1(包括端值)内的数据。假设X为当前图像,Y和Z为同一个译码视频序列(coded video sequence,CVS)中的另外两个图像,当DiffPicOrderCnt(X,Y)和DiffPicOrderCnt(X,Z)都为正或都为负时,认为Y和Z相对于X处于相同的输出顺序方向上。
[0147] 下面描述用于参考图像列表构建的解码过程。在非IRAP图像中的每个条带的解码过程开始时,调用本过程。参考图像通过参考索引进行寻址。参考索引是在参考图像列表中的索引。在解码I条带时,不使用参考图像列表来解码条带数据。在解码P条带时,只使用参考图像列表0(即RefPicList[0])来解码条带数据。在解码B条带时,同时使用参考图像列表0和参考图像列表1(即RefPicList[1])来解码条带数据。在非IRAP图像中的每个条带的解码过程开始时,推导参考图像列表RefPicList[0]和RefPicList[1]。使用这两个参考图像列表来标识参考图像或解码条带数据。如果非IRAP图像中的I条带不是该图像中的第一个条带,则为了检查码流一致性,可以推导RefPicList[0]和RefPicList[1],但解码当前图像或解码顺序在当前图像之后的图像不一定需要推导RefPicList[0]和RefPicList[1]。如果P条带不是图像中的第一个条带,则为了检查码流一致性,可以推导RefPicList[1],但解码当前图像或解码顺序在当前图像之后的图像不一定需要推导RefPicList[1]。参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0148]
[0149]
[0150] 在每个i等于0或1的情况下,RefPicList[i]中的前NumRefIdxActive[i]个表项称为RefPicList[i]中的激活表项,RefPicList[i]中的其它表项称为RefPicList[i]中的非激活表项。如果lt_ref_pic_flag[i][RplsIdx[i]][j]等于0,则RefPicList[i][j](j在范围0~NumEntriesInList[i][RplsIdx[i]]–1(包括端值)内)中的每个表项称为STRP表项,否则称为LTRP表项。特定图像有可能由RefPicList[0]中的表项和RefPicList[1]中的表项共同参考。特定图像还有可能由RefPicList[0]中的多个表项或RefPicList[1]中的多个表项参考。RefPicList[0]中的激活表项和RefPicList[1]中的激活表项共同参考所有可以用于当前图像和解码顺序在当前图像之后的一个或多个图像的帧间预测的参考图像。RefPicList[0]中的非激活表项和RefPicList[1]中的非激活表项共同参考所有不用于当前图像的帧间预测、但可以用于解码顺序在当前图像之后的一个或多个图像的帧间预测的参考图像。RefPicList[0]或RefPicList[1]中可以存在一个或多个等于“无参考图像”的表项,因为DPB中不存在对应的图像。忽略RefPicList[0]或RefPicList[0]中等于“无参考图像”的每个非激活表项。为RefPicList[0]或RefPicList[1]中等于“无参考图像”的每个激活表项推断无意图像丢失。
[0151] 码流一致性的要求为使用以下约束条件:在每个i等于0或1的情况下,NumEntriesInList[i][RplsIdx[i]]不小于NumRefIdxActive[i]。由RefPicList[0]或RefPicList[1]中的每个激活表项参考的图像存在于DPB中,并且其TemporalId小于或等于当前图像的TemporalId。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的任何非激活表项的表项索引不用作解码当前图像的参考索引。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的非激活表项与RefPicList[0]或RefPicList[1]中的任何其它表项不参考同一个图像。图像中的条带的RefPicList[0]或RefPicList[1]中的STRP表项与同一个图像中的同一个条带或不同条带的RefPicList[0]或RefPicList[1]中的LTRP表项不参考同一个图像。当前图像不由RefPicList[0]或RefPicList[1]中的任何表项参考。当前图像的PicOrderCntVal与由LTRP表项参考的图像的PicOrderCntVal之间的差值大于或等于224,RefPicList[0]或RefPicList[1]中不存在这种表项。假设setOfRefPics为由RefPicList[0]中的所有表项和RefPicList[1]中的所有表项参考的独特图像集。setOfRefPics中的图像数量小于或等于sps_max_dec_pic_buffering_minus1,而且一个图像中的所有条带具有相同的setOfRefPics。
[0152] 用于参考图像标识的解码过程
[0153] 在解码条带头和用于条带的参考图像列表重建的解码过程之后,但在解码条带数据之前,每个图像调用一次本过程。本过程可能使得将DPB中的一个或多个参考图像标识为“不用于参考”或“用于长期参考”。可以将DPB中的解码图像标识为“不用于参考”、“用于短期参考”或“用于长期参考”,但在解码过程中的任何给定时刻,这三种标识状态只能存在一种。将其中一个标识状态指定给图像会隐式地删除其它标识状态(如果适用)。当图像称为被标识为“用于参考”时,这统一是指将图像标识为“用于短期参考”或“用于长期参考”(但不是同时)。如果当前图像为IRAP图像,则将DPB中当前包括的所有参考图像(如果有)都标识为“不用于参考”。STRP通过它们的PicOrderCntVal值识别。LTRP通过它们的PicOrderCntVal值的Log2(MaxLtPicOrderCntLsb)个LSB识别。对于RefPicList[0]或RefPicList[1]中的每个LTRP表项,当被参考的图像为STRP时,将该图像标识为“用于长期参考”。将DPB中的未由RefPicList[0]或RefPicList[1]中的任何表项参考的每个参考图像都标识为“不用于参考”。
[0154] 下面提供本发明第二实施例的详细说明。这一部分描述上述公开内容的第二实施例。以下描述涉及最新VVC WD。在本实施例中,在SPS中指示由参考图像列表0和参考图像列表1共用的一组参考图像列表结构。
[0155] 序列参数集RBSP语法
[0156]
[0157]
[0158] 图像参数集RBSP语法
[0159]
[0160] 条带头语法
[0161]
[0162]
[0163] 参考图像列表结构语法
[0164]
[0165] 下面描述NAL单元头语义。
[0166] 序列参数集RBSP语义
[0167] log2_max_pic_order_cnt_lsb_minus4表示在用于图像顺序编号的解码过程中使(log2用的变量MaxPicOrderCntLsb的值,如下所示:MaxPicOrderCntLsb=2
_max_pic_order_cnt_lsb_minus4+4)
。log2_max_pic_order_cnt_lsb_minus4的取值范围为0~12(包括
端值)。sps_max_dec_pic_buffering_minus1加1表示CVS所需的解码图像缓冲器的最大大小,以图像存储缓冲器为单位。sps_max_dec_pic_buffering_minus1的取值范围为0~MaxDpbSize–1(包括端值),其中,MaxDpbSize如其它地方所示。num_ref_pic_lists_in_sps表示SPS中包括的语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)的数量。num_ref_pic_lists_in_sps的取值范围为0~128(包括端值)。解码器需要为所有语法结构num_short_term_ref_pic_sets+2ref_pic_list_struct(rplsIdx,ltrpFlag)分配内存,因为在当前图像的条带头中可以直接指示两个语法结构ref_pic_list_struct(rplsIdx,
ltrpFlag)。long_term_ref_pics_flag为0,表示没有LTRP用于CVS中的任一经译码图像的帧间预测。long_term_ref_pics_flag为1,表示LTRP可以用于CVS中的一个或多个经译码图像的帧间预测。additional_lt_poc_lsb表示在用于参考图像列表的解码过程中使用的变(log2
量MaxLtPicOrderCntLsb的值,如下所示:MaxLtPicOrderCntLsb=2
_max_pic_order_cnt_lsb_minus4+4+additional_lt_poc_lsb)
)。additional_lt_poc_lsb的取值范围为0~32–
log2_max_pic_order_cnt_lsb_minus4–4(包括端值)。如果不存在,则推断additional_lt_poc_lsb的值等于0。
[0168] 下面描述图像参数集RBSP语义。
[0169] 条带头语义
[0170] 如果存在,条带头语法元素slice_pic_parameter_set_id和slice_pic_order_cnt_lsb中的每个的值在经译码图像的所有条带头中相同。slice_type表示条带的译码类型,如表7‑3所示。
[0171] 表7‑3:名称与slice_type的关联关系
[0172]slice_type slice_type的名称
0 B(B条带)
1 P(P条带)
2 I(I条带)
[0173] 当nal_unit_type为IRAP_NUT时,即当图像为IRAP图像时,slice_type为2。slice_pic_order_cnt_lsb表示当前图像的图像顺序编号对MaxPicOrderCntLsb取模的值。语法元素slice_pic_order_cnt_lsb的长度为(log2_max_pic_order_cnt_lsb_minus4+4)个比特。slice_pic_order_cnt_lsb的取值范围为0~MaxPicOrderCntLsb–1(包括端值)。如果不存在,则推断slice_pic_order_cnt_lsb等于0。ref_pic_list_sps_flag[i]等于1,表示当前图像的参考图像列表i是根据激活SPS中的其中一个语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)推导的。ref_pic_list_sps_flag[i]等于0,表示当前图像的参考图像列表i是根据当前图像的条带头中直接包括的语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)推导的。当num_ref_pic_lists_in_sps等于0时,ref_pic_list_sps_flag[i]的值等于0。ref_pic_list_idx[i]表示用于推导当前图像的参考图像列表i的语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)在激活SPS中包括的语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)列表中的索引。语法元素ref_pic_list_idx[i]由Ceil(Log2(num_ref_pic_lists_in_sps))个比特表示。如果不存在,则推断ref_pic_list_idx[i]的值等于
0。ref_pic_list_idx[i]的取值范围为0~num_ref_pic_lists_in_sps–1(包括端值)。num_ref_idx_active_override_flag为1,表示P条带和B条带存在语法元素num_ref_idx_active_minus1[0],而B条带存在语法元素num_ref_idx_active_minus1[1]。num_ref_idx_active_override_flag为0,表示语法元素num_ref_idx_active_minus1[0]和num_ref_idx_active_minus1[1]不存在。
[0174] 如果存在,则num_ref_idx_active_minus1[i]表示变量NumRefIdxActive[i]的值,如下所示:NumRefIdxActive[i]=num_ref_idx_active_minus1[i]+1。num_ref_idx_active_minus1[i]的取值范围为0~14(包括端值)。NumRefIdxActive[i]–1的值表示参考图像列表i中的可以用于解码条带的最大参考索引。当NumRefIdxActive[i]的值等于0时,参考图像列表i中没有参考索引可以用于解码条带。在i等于0或1的情况下,如果当前条带为B条带且num_ref_idx_active_override_flag为0,则推断NumRefIdxActive[i]等于num_ref_idx_default_active_minus1[i]+1。如果当前条带为P条带且num_ref_idx_active_override_flag为0,则推断NumRefIdxActive[0]等于num_ref_idx_default_active_minus1[0]+1。如果当前条带为P条带,则推断NumRefIdxActive[1]等于0。如果当前条带为I条带,则推断NumRefIdxActive[0]和NumRefIdxActive[1]都等于0。
[0175] 或者,在i等于0或1的情况下,假设将rplsIdx1设置为ref_pic_list_sps_flag[i]?ref_pic_list_idx[i]:num_ref_pic_lists_in_sps[i],并将numRpEntries[i]设置为num_strp_entries[i][rplsIdx1]+num_ltrp_entries[i][rplsIdx1]。当NumRefIdxActive[i]大于numRpEntries[i]时,将NumRefIdxActive[i]的值设置为numRpEntries[i]。
[0176] 参考图像列表结构语义
[0177] 语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)可以存在于SPS或条带头中。该语法结构的具体含义取决于是包括在条带头中还是包括在SPS中:如果存在于条带头中,则语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)表示当前图像(包括条带的图像)的参考图像列表。否则(存在于SPS中),语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)表示候选参考图像列表,本部分剩下内容规定的语义中的术语“当前图像”是指:(1)包括一个或多个条带的每个图像,其中,一个或多个条带包括的ref_pic_list_idx[i]等于在SPS中包括的语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)列表中的索引,(2)CVS中的每个图像,其中,CVS具有与激活SPS一样的SPS。num_strp_entries[rplsIdx]表示语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)中的STRP表项的数量。num_ltrp_entries[rplsIdx]表示语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)中的LTRP表项的数量。如果不存在,则推断num_ltrp_entries[rplsIdx]的值等于0。
[0178] 变量NumEntriesInList[rplsIdx]的推导方式如下:NumEntriesInList[rplsIdx]=num_strp_entries[rplsIdx]+num_ltrp_entries[rplsIdx]。NumEntriesInList[rplsIdx]的取值范围为0~sps_max_dec_pic_buffering_minus1(包括端值)。lt_ref_pic_flag[rplsIdx][i]等于1,表示语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)中的第i个表项为LTRP表项。lt_ref_pic_flag[rplsIdx][i]等于0,表示语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)中的第i个表项为STRP表项。如果不存在,则推断lt_ref_pic_flag[rplsIdx][i]的值等于0。码流一致性的要求为:lt_ref_pic_flag[rplsIdx][i](i的所有值在范围0~NumEntriesInList[rplsIdx]–1(包括端值)内)的总和等于num_ltrp_entries[rplsIdx]。当第i个表项为语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)中的第一个STRP表项时,delta_poc_st[rplsIdx][i]表示当前图像和由第i个表项参考的图像的图像顺序编号值之间的差值,或者,当第i个表项为语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)中的STRP表项但不是第一个STRP表项时,delta_poc_st[rplsIdx][i]表示由语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)中的第i个表项和前一个STRP表项参考的图像的图像顺序编号值之间的差值。delta_poc_st[rplsIdx][i]15
的取值范围为0~2 –1(包括端值)。poc_lsb_lt[rplsIdx][i]表示由语法结构ref_pic_list_struct(rplsIdx,ltrpFlag)中的第i个表项参考的图像的图像顺序编号对
MaxLtPicOrderCntLsb取模的值。语法元素poc_lsb_lt[rplsIdx][i]的长度为Log2(MaxLtPicOrderCntLsb)个比特。
[0179] 使用通用解码过程,通用解码过程为本发明第一实施例的详细说明的一部分。下面描述NAL单元解码过程。使用NAL单元解码过程,NAL单元解码过程为本发明第一实施例的详细说明的一部分。
[0180] 下面描述条带解码过程。
[0181] 用于图像顺序编号的解码过程
[0182] 使用用于图像顺序编号的解码过程,解码过程为本发明第一实施例的详细说明的一部分。
[0183] 用于参考图像列表构建的解码过程
[0184] 在非IRAP图像中的每个条带的解码过程开始时,调用本过程。参考图像通过参考索引进行寻址。参考索引是在参考图像列表中的索引。在解码I条带时,不使用参考图像列表来解码条带数据。在解码P条带时,只使用参考图像列表0(即RefPicList[0])来解码条带数据。在解码B条带时,同时使用参考图像列表0和参考图像列表1(即RefPicList[1])来解码条带数据。在非IRAP图像中的每个条带的解码过程开始时,推导参考图像列表RefPicList[0]和RefPicList[1]。使用这两个参考图像列表来标识参考图像或解码条带数据。如果非IRAP图像中的I条带不是该图像中的第一个条带,则为了检查码流一致性,可以推导RefPicList[0]和RefPicList[1],但解码当前图像或解码顺序在当前图像之后的图像不一定需要推导RefPicList[0]和RefPicList[1]。如果P条带不是图像中的第一个条带,则为了检查码流一致性,可以推导RefPicList[1],但解码当前图像或解码顺序在当前图像之后的图像不一定需要推导RefPicList[1]。
[0185] 参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0186]
[0187]
[0188] 在每个i等于0或1的情况下,RefPicList[i]中的前NumRefIdxActive[i]个表项称为RefPicList[i]中的激活表项,RefPicList[i]中的其它表项称为RefPicList[i]中的非激活表项。如果lt_ref_pic_flag[RplsIdx[i]][j]等于0,则RefPicList[i][j](j在范围0~NumEntriesInList[RplsIdx[i]]–1(包括端值)内)中的每个表项称为STRP表项,否则称为LTRP表项。特定图像有可能由RefPicList[0]中的表项和RefPicList[1]中的表项共同参考。特定图像还有可能由RefPicList[0]中的多个表项或RefPicList[1]中的多个表项参考。RefPicList[0]中的激活表项和RefPicList[1]中的激活表项共同参考所有可以用于当前图像和解码顺序在当前图像之后的一个或多个图像的帧间预测的参考图像。RefPicList[0]中的非激活表项和RefPicList[1]中的非激活表项共同参考所有不用于当前图像的帧间预测、但可以用于解码顺序在当前图像之后的一个或多个图像的帧间预测的参考图像。RefPicList[0]或RefPicList[1]中可以存在一个或多个等于“无参考图像”的表项,因为DPB中不存在对应的图像。忽略RefPicList[0]或RefPicList[1]中等于“无参考图像”的每个非激活表项。为RefPicList[0]或RefPicList[1]中等于“无参考图像”的每个激活表项推断无意图像丢失。
[0189] 码流一致性的要求为使用以下约束条件:在每个i等于0或1的情况下,NumEntriesInList[RplsIdx[i]]不小于NumRefIdxActive[i]。由RefPicList[0]或RefPicList[1]中的每个激活表项参考的图像存在于DPB中,并且其TemporalId小于或等于当前图像的TemporalId。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的任何非激活表项的表项索引不用作解码当前图像的参考索引。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的非激活表项与RefPicList[0]或RefPicList[1]中的任何其它表项不参考同一个图像。图像中的条带的RefPicList[0]或RefPicList[1]中的STRP表项与同一个图像中的同一个条带或不同条带的RefPicList[0]或RefPicList[1]中的LTRP表项不参考同一个图像。当前图像不由RefPicList[0]或RefPicList[1]中的任何表项参考。当前图像的PicOrderCntVal与由LTRP表项参考的图像的PicOrderCntVal之间的差值大于或等于224,RefPicList[0]或RefPicList[1]中不存在这种表项。假设setOfRefPics为由RefPicList[0]中的所有表项和RefPicList[1]中的所有表项参考的独特图像集。setOfRefPics中的图像数量小于或等于sps_max_dec_pic_buffering_minus1,而且一个图像中的所有条带具有相同的setOfRefPics。
[0190] 下面描述用于参考图像标识的解码过程。
[0191] 在解码条带头和用于条带的参考图像列表重建的解码过程之后,但在解码条带数据之前,每个图像调用一次本过程。本过程可能使得将DPB中的一个或多个参考图像标识为“不用于参考”或“用于长期参考”。可以将DPB中的解码图像标识为“不用于参考”、“用于短期参考”或“用于长期参考”,但在解码过程中的任何给定时刻,这三种标识状态只能存在一种。将其中一个标识状态指定给图像会隐式地删除其它标识状态(如果适用)。当图像称为被标识为“用于参考”时,这统一是指将图像标识为“用于短期参考”或“用于长期参考”(但不是同时)。如果当前图像为IRAP图像,则将DPB中当前包括的所有参考图像(如果有)都标识为“不用于参考”。STRP通过它们的PicOrderCntVal值识别。LTRP通过它们的PicOrderCntVal值的Log2(MaxLtPicOrderCntLsb)个LSB识别。
[0192] 对于RefPicList[0]或RefPicList[1]中的每个LTRP表项,当被参考的图像为STRP时,将该图像标识为“用于长期参考”。将DPB中的未由RefPicList[0]或RefPicList[1]中的任何表项参考的每个参考图像都标识为“不用于参考”。
[0193] 图5为由视频解码器(例如视频解码器30)实现的对经译码的视频码流进行解码的方法500的一个实施例。方法500可以在从视频编码器(例如视频编码器20)直接或间接接收到解码码流之后执行。方法500可以用于改进解码过程(例如使解码过程比传统解码过程更高效、更快等),因为对于所有类型的条带,参考图像列表结构都包括在所述经译码的视频码流中。因此,实际上能够提高编解码器的性能,从而带来更好的用户体验。
[0194] 在步骤502中,获得在所述经译码的视频码流中表示的第一参考图像列表结构和第二参考图像列表结构。在一个实施例中,通过解析所述经译码的视频码流,获得所述第一参考图像列表结构和所述第二参考图像列表结构。
[0195] 在一个实施例中,所述第一参考图像列表结构或所述第二参考图像列表结构中的表项的顺序与对应参考图像列表中的参考图像的顺序相同。在一个实施例中,所述顺序为从0到指示值。在一个实施例中,所述指示值为从0到由sps_max_dec_pic_buffering_minus1指示的值。
[0196] 在步骤504中,根据所述第一参考图像列表结构和所述第二参考图像列表结构,推导当前条带的第一参考图像列表和第二参考图像列表。在一个实施例中,为所有类型的条带而不仅仅为双向预测或双向(B)条带推导所述第一和第二参考图像列表。在一个实施例中,所述当前条带包括帧内(I)条带或单向预测(P)条带。在一个实施例中,所述参考图像列表为RefPictList[0]或RefPictList[1]。
[0197] 在步骤506中,在推导所述第一参考图像列表和所述第二参考图像列表之后,获得所述当前条带的至少一个重建块。在一个实施例中,所述至少一个重建块用于生成在电子设备的显示器上显示的图像。
[0198] 在一个实施例中,所述参考图像列表包括用于帧间预测的一列参考图像。在一个实施例中,对所述P条带或所述B条带进行所述帧间预测。
[0199] 在一个实施例中,条带头包括表示为ref_pic_list_sps_flag[i]的参考图像列表序列参数集(sequence parameter set,SPS)标志。当这个标志为1时,第i个参考图像列表(即RefPictList[i])不在条带头中直接指示,而是从SPS中进行参考。当这个标志为0时,第i个参考图像列表(即RefPictList[i])在条带头中直接指示,而不从SPS中进行参考。在一个实施例中,所述条带头包括表示为num_ref_idx_active_override_flag的数量参考索引激活覆写标志。当这个标志为1时,每个参考图像列表中的激活表项的数量为在PPS中指示的默认值。当这个标志为0时,每个参考图像列表中的激活表项的数量在所述条带头中显式指示。
[0200] 在一个实施例中,所述参考图像列表为RefPictList[0]或RefPictList[1],所述第一参考图像列表结构或所述第二参考图像列表结构中的表项的顺序与对应参考图像列表中的参考图像的顺序相同。
[0201] 下面描述基于第一和第二实施例的替代实施例的概述。
[0202] 本部分提供本发明的其它替代实施例的简要概述。这些概述涉及第一实施例的描述内容。然而,以下可选实施例使用的本发明的基本概念也适用于第二实施例的基于本发明的实现方式。这种实现方式与如何基于第一实施例实现这些方面具有相同的精神。
[0203] 短期参考图像表项的增量POC的语义
[0204] 在本发明的一个替代实施例中,将表示参考图像列表结构ref_pic_list_struct()中的第i个表项的增量POC的语法元素的语义定义为当前图像和与第i个表项相关的参考图像之间的POC差值。本文使用的一些描述涉及本标准草案(例如VVC工作草案),其中,只示出或描述了增量。删除文本以删除线表示,任何新增文本都突出显示。
[0205] delta_poc_st[listIdx][rplsIdx][i]的语义的定义如下:delta_poc_st[listIdx][rplsIdx][i]表示当前图像和由第i个表项参考的图像的图像顺序编号值之间
15 15
的差值。delta_poc_st[listIdx][rplsIdx][i]的取值范围为–2 ~2 –1(包括端值)。
[0206] 参考图像列表构建过程中的等式需要更新。参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0207]
[0208] 长期参考图像表项指示
[0209] 在本发明的一个替换实施例中,未在包括短期参考图像表项的同一个参考图像列表结构中指示长期参考图像表项。在单独的结构中长期参考图像表项指示,而且该结构中的每个表项都具有语法元素,该语法元素描述长期参考图像表项的用于推导最终参考图像列表中的相应表项索引的预期位置。
[0210] 序列参数集RBSP语法
[0211]
[0212]
[0213] 条带头语法
[0214]
[0215]
[0216] 参考图像列表结构语法
[0217]
[0218] 长期参考图像列表结构语法
[0219]
[0220] 序列参数集RBSP语义
[0221] num_ref_pic_lists_lt_in_sps表示SPS中包括的语法结构ref_pic_list_lt_struct(ltRplsIdx)的数量。num_ref_pic_lists_lt_in_sps的取值范围为0~64(包括端值)。如果不存在,则推断num_ref_pic_lists_lt_in_sps的值等于0。
[0222] 条带头语义
[0223] ref_pic_list_lt_idx[i]表示在激活SPS中包括的语法结构ref_pic_list_lt_struct(ltRplsIdx)列表中的用于推导当前图像的参考图像列表i的索引。语法元素ref_pic_list_lt_idx[i]由Ceil(Log2(num_ref_pic_lists_lt_in_sps))个比特表示。ref_pic_list_lt_idx的取值范围为0~num_ref_pic_lists_lt_in_sps–1(包括端值)。
[0224] 参考图像列表结构语义
[0225] 语法结构ref_pic_list_struct(listIdx,rplsIdx)可以存在于SPS或条带头中。该语法结构的具体含义取决于是包括在条带头中还是包括在SPS中:如果存在于条带头中,则语法结构ref_pic_list_struct(listIdx,rplsIdx)表示当前图像(包括条带的图像)的短期参考图像列表listIdx。否则(存在于SPS中),语法结构ref_pic_list_struct(listIdx,rplsIdx)表示短期参考图像列表listIdx的候选,本部分剩下内容规定的语义中的术语“当前图像”是指:(1)包括一个或多个条带的每个图像,其中,一个或多个条带包括的ref_pic_list_idx[listIdx]等于在SPS中包括的语法结构ref_pic_list_struct(listIdx,rplsIdx)列表中的索引;(2)CVS中的每个图像,其中,CVS具有与激活SPS一样的SPS。num_strp_entries[listIdx][rplsIdx]表示语法结构ref_pic_list_struct
(listIdx,rplsIdx)中的STRP表项的数量。
[0226]
[0227] 当第i个表项为语法结构ref_pic_list_struct(listIdx,rplsIdx)中的第一个STRP表项时,delta_poc_st[listIdx][rplsIdx][i]表示当前图像和由第i个表项参考的图像的图像顺序编号值之间的差值,或者,当第i个表项为语法结构ref_pic_list_struct(listIdx,rplsIdx)中的STRP表项但不是第一个STRP表项时,delta_poc_st[listIdx][rplsIdx][i]表示由语法结构ref_pic_list_struct(listIdx,rplsIdx)中的第i个表项和前一个STRP表项参考的图像的图像顺序编号值之间的差值。delta_poc_st[listIdx]15 15
[rplsIdx][i]的取值范围为–2 ~2 –1(包括端值)。
[0228]
[0229] 长期参考图像列表结构语义
[0230] 语法结构ref_pic_list_lt_struct(ltRplsIdx)可以存在于SPS或条带头中。该语法结构的具体含义取决于是包括在条带头中还是包括在SPS中:如果存在于条带头中,则语法结构ref_pic_list_lt_struct(ltRplsIdx)表示当前图像(包括条带的图像)的长期参考图像列表。否则(存在于SPS中),语法结构ref_pic_list_struct(listIdx,rplsIdx)表示长期参考图像列表的候选,本部分剩下内容规定的语义中的术语“当前图像”是指:(1)包括一个或多个条带的每个图像,其中,一个或多个条带包括的ref_pic_list_lt_idx[i]等于在SPS中包括的语法结构ref_pic_list_lt_struct(ltRplsIdx)列表中的索引;(2)CVS中的每个图像,其中,CVS具有与激活SPS一样的SPS。num_ltrp_entries[ltRplsIdx]表示语法结构ref_pic_list_lt_struct(ltRplsIdx)中的LTRP表项的数量。poc_lsb_lt[rplsIdx][i]指示由语法结构ref_pic_list_lt_struct(rplsIdx)中的第i个表项参考的图像的图像顺序编号对MaxLtPicOrderCntLsb取模的值。语法元素poc_lsb_lt[rplsIdx][i]的长度为Log2(MaxLtPicOrderCntLsb)个比特。lt_pos_idx[rplsIdx][i]表示在参考图像列表构建之后,语法结构ref_pic_list_lt_struct(rplsIdx)中的第i个表项在参考图像列表中的索引。语法元素lt_pos_idx[rplsIdx][i]的长度为Log2(sps_max_dec_pic_buffering_minus1+1)个比特。当num_ltrp_entries[ltRplsIdx]大于1时,poc_lsb_lt[rplsIdx][i]和lt_pos_idx[rplsIdx][i]按照lt_pos_idx[rplsIdx][i]值降序排列。
[0231] 下面描述解码过程。
[0232] 用于参考图像列表构建的解码过程
[0233] 在非IRAP图像中的每个条带的解码过程开始时,调用本过程。参考图像通过参考索引进行寻址。参考索引是在参考图像列表中的索引。在解码I条带时,不使用参考图像列表来解码条带数据。在解码P条带时,只使用参考图像列表0(即RefPicList[0])来解码条带数据。在解码B条带时,同时使用参考图像列表0和参考图像列表1(即RefPicList[1])来解码条带数据。在非IRAP图像中的每个条带的解码过程开始时,推导参考图像列表RefPicList[0]和RefPicList[1]。使用这两个参考图像列表来标识参考图像或解码条带数据。如果非IRAP图像中的I条带不是该图像中的第一个条带,则为了检查码流一致性,可以推导RefPicList[0]和RefPicList[1],但解码当前图像或解码顺序在当前图像之后的图像不一定需要推导RefPicList[0]和RefPicList[1]。如果P条带不是图像中的第一个条带,则为了检查码流一致性,可以推导RefPicList[1],但解码当前图像或解码顺序在当前图像之后的图像不一定需要推导RefPicList[1]。参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0234]
[0235]
[0236] 在每个i等于0或1的情况下,RefPicList[i]中的前NumRefIdxActive[i]个表项称为RefPicList[i]中的激活表项,RefPicList[i]中的其它表项称为RefPicList[i]中的非激活表项。如果lt_ref_pic_flag[i][RplsIdx[i]][j]等于0,则RefPicList[i][j](j在范围0~NumEntriesInList[i][RplsIdx[i]]–1(包括端值)内)中的每个表项称为STRP表项,否则称为LTRP表项。特定图像有可能由RefPicList[0]中的表项和RefPicList[1]中的表项共同参考。特定图像还有可能由RefPicList[0]中的多个表项或RefPicList[1]中的多个表项参考。RefPicList[0]中的激活表项和RefPicList[1]中的激活表项共同参考所有可以用于当前图像和解码顺序在当前图像之后的一个或多个图像的帧间预测的参考图像。RefPicList[0]中的非激活表项和RefPicList[1]中的非激活表项共同参考所有不用于当前图像的帧间预测、但可以用于解码顺序在当前图像之后的一个或多个图像的帧间预测的参考图像。RefPicList[0]或RefPicList[1]中可以存在一个或多个等于“无参考图像”的表项,因为DPB中不存在对应的图像。忽略RefPicList[0]或RefPicList[0]中等于“无参考图像”的每个非激活表项。为RefPicList[0]或RefPicList[1]中等于“无参考图像”的每个激活表项推断无意图像丢失。
[0237] 码流一致性的要求为使用以下约束条件:在每个i等于0或1的情况下,RefPicList[i]中的表项的数量不小于NumRefIdxActive[i]。由RefPicList[0]或RefPicList[1]中的每个激活表项参考的图像存在于DPB中,并且其TemporalId小于或等于当前图像的TemporalId。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的任何非激活表项的表项索引不用作解码当前图像的参考索引。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的非激活表项与RefPicList[0]或RefPicList[1]中的任何其它表项不参考同一个图像。图像中的条带的RefPicList[0]或RefPicList[1]中的STRP表项与同一个图像中的同一个条带或不同条带的RefPicList[0]或RefPicList[1]中的LTRP表项不参考同一个图像。当前图像不由RefPicList[0]或RefPicList[1]中的任何表项参考。当前图像的PicOrderCntVal与由LTRP表项参考的图像的PicOrderCntVal之间的差值大于或等于224,RefPicList[0]或RefPicList[1]中不存在这种表项。假设setOfRefPics为由RefPicList[0]中的所有表项和RefPicList[1]中的所有表项参考的独特图像集。setOfRefPics中的图像数量小于或等于sps_max_dec_pic_buffering_minus1,而且一个图像中的所有条带具有相同的setOfRefPics。
[0238] 下面描述短期参考图像表项数量指示。
[0239] 在本发明的一个替代实施例中,将表示参考图像列表结构ref_pic_list_struct()中的与短期参考图像相关的表项数量的语法元素定义为num_strp_entries_minus1[listIdx][rplsIdx],而不是num_strp_entries[listIdx][rplsIdx]。这种更改对参考图像列表指示有两个影响:当使用ue(v)对元素进行译码时,可以节省指示参考图像列表结构中的与短期参考图像相关的表项数量的比特。存在隐式的约束条件,使得每个参考图像列表包括至少一个短期参考图像。为了实现这种想法,需要对第一实施例进行一些更改。
[0240] 对于条带头中的参考图像列表指示,只根据条带类型指示必要的参考图像列表,即I条带或P条带对应一个参考图像列表(即参考图像列表0)和B条带对应两个参考图像列表(即参考图像列表0和参考图像列表1)。条带头语法的更改如下:
[0241]
[0242]
[0243] 对条带头(即I条带或P条带对应参考图像列表0,B条带对应参考图像0和参考图像1)进行以上更改会避免方案存在P条带只有一个短期参考图像的问题。但是,不能在参考图像列表0和参考图像列表1中指示重复的短期参考图像,其中,参考图像列表1中的表项是非激活表项,因为参考图像列表1中的激活表项的数量必须等于0。num_strp_entries_minus1[listIdx][rplsIdx]的语义更改如下:num_strp_entries_minus1[listIdx][rplsIdx]加1表示语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的STRP表项的数量。
变量NumEntriesInList[listIdx][rplsIdx]的推导方式如下:NumRefPicEntriesInRpl[listIdx][rplsIdx]=num_strp_entries_minus1[listIdx][rplsIdx]+1+num_ltrp_entries[listIdx][rplsIdx]。NumRefPicEntries[listIdx][rplsIdx]的取值范围为1~sps_max_dec_pic_buffering_minus1(包括端值)。
[0244] 可以将当前图像包括在参考图像列表中。
[0245] 在本发明的一个替代实施例中,可以将当前图像包括在其参考图像列表中。为了支持这一特点,相对于第一和第二实施例中的描述,不需要更改语法和语义。然而,需要对在用于参考图像列表构建的解码过程中描述的码流一致性约束条件进行如下修改:码流一致性的要求为使用以下约束条件:在每个i等于0或1的情况下,NumEntriesInList[i][RplsIdx[i]]不小于NumRefIdxActive[i]。由RefPicList[0]或RefPicList[1]中的每个激活表项参考的图像存在于DPB中,并且其TemporalId小于或等于当前图像的TemporalId。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的任何非激活表项的表项索引不用作解码当前图像的参考索引。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的非激活表项与RefPicList[0]或RefPicList[1]中的任何其它表项不参考同一个图像。图像中的条带的RefPicList[0]或RefPicList[1]中的STRP表项与同一个图像中的同一个条带或不同条带的RefPicList[0]或RefPicList[1]中的LTRP表项不参考同一个图像。 在当前图像由RefPicList[i]中的表项参考时,在i等于0或1的情况下,表项索引小于
NumRefIdxActive[i]。当前图像的PicOrderCntVal与由LTRP表项参考的图像的
PicOrderCntVal之间的差值大于或等于224,RefPicList[0]或RefPicList[1]中不存在这种表项。假设setOfRefPics为由RefPicList[0]中的所有表项和RefPicList[1]中的所有表项参考的独特图像集。如果当前图像不包括在setOfRefPics中,则setOfRefPics中的图像数量小于或等于sps_max_dec_pic_buffering_minus1,否则,setOfRefPics中的图像数量小于或等于sps_max_dec_pic_buffering_minus1+1。一个图像中的所有条带具有相同的setOfRefPics。
[0246] 参考图像列表中的LTRP表项使用不同的POC LSB比特
[0247] 在本发明的一个替代实施例中,识别参考图像列表中的长期参考图像所使用的比特数在参考图像列表0和参考图像列表1之前可以不同。为了支持这一特点,需要做以下更改:
[0248]
[0249]
[0250] additional_lt_poc_lsb[i]表示在用于listIdx等于i的参考图像列表的解码过程中使用的变量MaxLtPicOrderCntLsb[i]的值,如下所示:MaxLtPicOrderCntLsb[i]=2(log2_max_pic_order_cnt_lsb_minus4+4+additional_lt_poc_lsb[i])。additional_lt_poc_lsb[i]的取值范围
为0~32–log2_max_pic_order_cnt_lsb_minus4–4(包括端值)。如果不存在,则推断additional_lt_poc_lsb[i]的值等于0。
[0251] poc_lsb_lt[listIdx][rplsIdx][i]表示由语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的第i个表项参考的图像的图像顺序编号对MaxLtPicOrderCntLsb[listIdx]取模的值。语法元素poc_lsb_lt[listIdx][rplsIdx][i]的长度为Log2(MaxLtPicOrderCntLsb[listIdx])个比特。
[0252] 参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0253]
[0254] 参考图像列表0和1使用相同的ref_pic_list_sps_flag。
[0255] 在本发明的一个替代实施例中,参考图像列表0和参考图像列表1使用一个标志来指示是否根据激活SPS中的语法结构ref_pic_list_struct()来推导这两个参考图像列表,而不是使用两个标志。此类替代的约束条件使得:根据激活SPS中的ref_pic_list_struct()推导两个参考图像列表,或者根据当前图像的条带头中直接包括的语法结构ref_pic_list_struct()推导两个参考图像列表。为了支持这一特点,需要做以下更改:
[0256]
[0257] ref_pic_list_sps_flag 等于1,表示当前图像的参考图像列表i是根据激活SPS中的 的 语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)推导的。ref_pic_list_sps_flag 等于0,表示当前图像的参考图像列表i是根据当前图像的条带头中直接包括的语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)推导的。当num_ref_pic_lists_in_sps[0]或num_ref_pic_lists_in_sps[1]等于0时,ref_pic_list_sps_flag[i]的值等于0,pic_lists_in_sps[1]等于0,ref_pic_list_sps_flag的值等于0。
[0258] 参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0259]
[0260] 长期参考图像表项的增量POC最高有效位(Most Significant Bit,MSB)指示[0261] 在本发明的一个替代实施例中,指示POC MSB循环来区分长期参考图像,而不是使用额外比特来表示ref_pic_list_struct()中的长期参考图像表项的POC LSB。在指示时,为ref_pic_list_struct()中的参考长期参考图像的每个表项指示POC MSB循环信息。语法结构ref_pic_list_struct()不在SPS中指示,但只在条带头中指示。为了支持这一特点,需要做以下更改:
[0262]
[0263]
[0264]
[0265]
[0266]
[0267]
[0268] 语法结构ref_pic_list_struct(listIdx,ltrpFlag)可以存在于条带头中。如果存在于条带头中,则语法结构ref_pic_list_struct(listIdx,ltrpFlag)表示当前图像(包括条带的图像)的参考图像列表listIdx。num_strp_entries[listIdx] 表示语法结构ref_pic_list_struct(listIdx, ltrpFlag)中的STRP表项的数量。num_ltrp_entries[listIdx] 表示语法结构ref_pic_list_struct(listIdx,
ltrpFlag)中的LTRP表项的数量。如果不存在,则推断num_ltrp_entries[listIdx][rplsIdx]的值等于0。
[0269] 变量NumEntriesInList[listIdx] 的推导方式如下:
[0270] NumRefPicEntriesInRpl[listIdx] =num_strp_entries[listIdx]+num_ltrp_entries[listIdx]
[0271] NumRefPicEntries[listIdx] 的取值范围为0~sps_max_dec_pic_buffering_minus1(包括端值)。lt_ref_pic_flag[listIdx] [i]等于1,表示语
法结构ref_pic_list_struct(listIdx, ltrpFlag)中的第i个表项为LTRP表项。
lt_ref_pic_flag[listIdx] [i]等于0,表示语法结构ref_pic_list_struct
(listIdx ,ltrpFlag)中的第i个表项为STRP表项。如果不存在,则推断lt_ref_pic_flag[listIdx] [i]的值等于0。码流一致性的要求为:lt_ref_pic_flag[listIdx][i](i的所有值在范围0~NumRefPicEntries[listIdx] –1(包括端
值)内)的总和等于num_ltrp_entries[listIdx] 。当第i个表项为语法结构ref_
pic_list_struct(listIdx ,ltrpFlag)中的第一个STRP表项时,delta_poc_st
[listIdx][rplsIdx][i]表示当前图像和由第i个表项参考的图像的图像顺序编号值之间的差值,或者,当第i个表项为语法结构ref_pic_list_struct(listIdx ltrpFlag)中的STRP表项但不是第一个STRP表项时,delta_poc_st[listIdx][rplsIdx][i]表示由语法结构ref_pic_list_struct(listIdx ,ltrpFlag)中的第i个表项和前一个STRP表项参考的图像的图像顺序编号值之间的差值。delta_poc_st[listIdx] [i]的取
15 15
值范围为–2 ~2 –1(包括端值)。poc_lsb_lt[listIdx] [i]表示由语法结构ref_pic_list_struct(listIdx ,ltrpFlag)中的第i个表项参考的图像的图像顺序编号对MaxLtPicOrderCntLsb取模的值。语法元素poc_lsb_lt[listIdx] [i]的长度
为Log2(Max PicOrderCntLsb)个比特。delta_poc_msb_present_flag[listIdx][i]等于
1,表示delta_poc_msb_cycle_lt[listIdx][i]存在。delta_poc_msb_present_flag[listIdx][i]等于0,表示delta_poc_msb_cycle_lt[listIdx][i]不存在。当num_ltrp_entries[listIdx]大于0且在解码条带头的时候DPB中存在PicOrderCntVal对
MaxPicOrderCntLsb取模的值等于poc_lsb_lt[listIdx][i]的多个参考图像时,delta_poc_msb_present_flag[listIdx][i]等于1。如果不存在,则推断delta_poc_msb_cycle_lt[listIdx][i]的值等于0。delta_poc_msb_cycle_lt[listIdx][i]用于确定语法结构ref_pic_list_struct(listIdx,ltrpFlag)中的第i个表项的图像顺序编号值的最高有效位的值。如果不存在,则推断delta_poc_msb_cycle_lt[listIdx][i]等于0。对用于图像顺序编号的解码过程的更改如下:
[0272] 参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0273]
[0274] 或者,可以将delta_poc_msb_cycle_lt[listIdx][i]的语义表示为增量的增量,使得参考图像列表构建可以更新如下:参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0275]
[0276]
[0277] 码流一致性的要求为使用以下约束条件:在每个i等于0或1的情况下,NumEntriesInList[i][RplsIdx[i]]不小于NumRefIdxActive[i]。由RefPicList[0]或RefPicList[1]中的每个激活表项参考的图像存在于DPB中,并且其TemporalId小于或等于当前图像的TemporalId。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的任何非激活表项的表项索引不用作解码当前图像的参考索引。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的非激活表项与RefPicList[0]或RefPicList[1]中的任何其它表项不参考同一个图像。图像中的条带的RefPicList[0]或RefPicList[1]中的STRP表项与同一个图像中的同一个条带或不同条带的RefPicList[0]或RefPicList[1]中的LTRP表项不参考同一个图像。当前图像不由RefPicList[0]或RefPicList[1]中的任何表项参考。当前图像的PicOrderCntVal与由LTRP表项参考的图像的PicOrderCntVal之间的差值大于或等于224,RefPicList[0]或RefPicList[1]中不存在这种表项。假设setOfRefPics为由RefPicList[0]中的所有表项和RefPicList[1]中的所有表项参考的独特图像集。setOfRefPics中的图像数量小于或等于sps_max_dec_pic_buffering_minus1,而且一个图像中的所有条带具有相同的setOfRefPics。
[0278] 每个STRP通过其PicOrderCntVal值识别。如果每个LTRP由delta_poc_msb_present_flag[listIdx][i]等于1的RefPicList[0]或RefPicList[1]中的表项参考,则通过其PicOrderCntVal值识别;否则,通过其PicOrderCntVal值的Log2(MaxPicOrderCntLsb)个LSB识别。
[0279] 长期参考图像表项的增量POC MSB指示的替代实施例1
[0280] 本实施例是前一部分中描述的实施例的替代实施例。与前一部分中的想法类似,指示POC MSB来区分长期参考图像,而不是使用额外比特来表示ref_pic_list_struct()中的长期参考图像的POC LSB。然而,在本替代实施例中,在指示时,POC MSB循环信息不在ref_pic_list_struct()中指示,而是在需要POC MSB循环信息时,在条带头中指示。语法结构ref_pic_list_struct()可以在SPS和条带头中指示。
[0281]
[0282]
[0283]
[0284]
[0285] delta_poc_msb_present_flag[i][j]等于1,表示delta_poc_msb_cycle_lt[i][j]存在。delta_poc_msb_present_flag[i][j]等于0,表示delta_poc_msb_cycle_lt[i][j]不存在。当NumLtrpEntries[i]大于0,而且对于语法结构ref_pic_list_struct(i,rplsIdx,1)中的第j个LTRP表项,在解码条带头的时候DPB中存在PicOrderCntVal对MaxPicOrderCntLsb取模的值等于poc_lsb_lt[i][rplsIdx][jj]的多个参考图像时,其中,jj为语法结构ref_pic_list_struct(i,rplsIdx,1)中的第j个LTRP表项的表项索引,delta_poc_msb_present_flag[i][j]等于1。如果不存在,则推断delta_poc_msb_cycle_lt[i][j]的值等于0。delta_poc_msb_cycle_lt[i][j]用于确定语法结构ref_pic_list_struct(i,rplsIdx,1)中的第j个LTRP表项的图像顺序编号值的最高有效位的值。如果不存在,则推断delta_poc_msb_cycle_lt[i][j]等于0。
[0286]
[0287]
[0288] delta_poc_msb_present_flag[i][j]等于1,表示delta_poc_msb_cycle_lt[i][j]存在。delta_poc_msb_present_flag[i][j]等于0,表示delta_poc_msb_cycle_lt[i][j]不存在。当NumLtrpEntries[i]大于0且在解码条带头的时候DPB中存在PicOrderCntVal对MaxPicOrderCntLsb取模的值等于poc_lsb_lt[i][rplsIdx][j]的多个参考图像时,delta_poc_msb_present_flag[i][j]等于1。如果不存在,则推断delta_poc_msb_cycle_lt[i][j]的值等于0。delta_poc_msb_cycle_lt[i][j]用于确定语法结构ref_pic_list_struct(i,rplsIdx,1)中的第j个表项的图像顺序编号值的最高有效位的值。如果不存在,则推断delta_poc_msb_cycle_lt[i][j]等于0。poc_lsb_lt[listIdx][rplsIdx][i]表示由语法结构ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的第i个表项参考的图像的图像顺序编号对 MaxPicOrderCntLsb取模的值。语法元素poc_lsb_lt[listIdx][rplsIdx][i]的长度为Log2( MaxPicOrderCntLsb)个比
特。
[0289] 对用于图像顺序编号的解码过程的更改如下:
[0290] 在条带头设计1中,参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0291]
[0292]
[0293] 或者,在条带头设计1中,可以将delta_poc_msb_cycle_lt[listIdx][i]的语义表示为增量的增量,使得参考图像列表构建可以更新如下:参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0294]
[0295] 在条带头设计2中,参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0296]
[0297]
[0298] 或者,在条带头设计2中,可以将delta_poc_msb_cycle_lt[listIdx][i]的语义表示为增量的增量,使得参考图像列表构建可以更新如下:参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0299]
[0300]
[0301] 码流一致性的要求为使用以下约束条件:在每个i等于0或1的情况下,NumEntriesInList[i][RplsIdx[i]]不小于NumRefIdxActive[i]。由RefPicList[0]或RefPicList[1]中的每个激活表项参考的图像存在于DPB中,并且其TemporalId小于或等于当前图像的TemporalId。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的任何非激活表项的表项索引不用作解码当前图像的参考索引。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的非激活表项与RefPicList[0]或RefPicList[1]中的任何其它表项不参考同一个图像。图像中的条带的RefPicList[0]或RefPicList[1]中的STRP表项与同一个图像中的同一个条带或不同条带的RefPicList[0]或RefPicList[1]中的LTRP表项不参考同一个图像。当前图像不由RefPicList[0]或RefPicList[1]中的任何表项参考。当前图像的PicOrderCntVal与由LTRP表项参考的图像的PicOrderCntVal之间的差值大于或等于224,RefPicList[0]或RefPicList[1]中不存在这种表项。假设setOfRefPics为由RefPicList[0]中的所有表项和RefPicList[1]中的所有表项参考的独特图像集。setOfRefPics中的图像数量小于或等于sps_max_dec_pic_buffering_minus1,而且一个图像中的所有条带具有相同的setOfRefPics。
[0302] 每个STRP通过其PicOrderCntVal值识别。如果每个LTRP由delta_poc_msb_present_flag[i][j]等于1的RefPicList[0]或RefPicList[1]中的表项参考,则通过其PicOrderCntVal值识别;否则,通过其PicOrderCntVal值的Log2(MaxPicOrderCntLsb)个LSB识别。
[0303] 长期参考图像表项的增量POC MSB指示的替代实施例2
[0304] 在本发明的一个替代实施例中,第一实施例或第二实施例中描述的公开内容可以与上述标题分别为“长期参考图像表项的增量POC MSB指示”和“长期参考图像表项的增量POC MSB指示的替代实施例1”相结合。待结合的公开内容的各方面包括additional_lt_poc_lsb指示(即根据第一实施例或第二实施例)和POC MSB循环信息指示(即根据上述标题为“长期参考图像表项的增量POC MSB指示”或“长期参考图像表项的增量POC MSB指示的替代实施例1”的实施例,)。如何将第一实施例和上述标题为“长期参考图像表项的增量POC MSB指示的替代实施例1”的实施例相结合的一个示例如下所述:
[0305]
[0306]
[0307] delta_poc_msb_present_flag[i][j]等于1,表示delta_poc_msb_cycle_lt[i][j]存在。delta_poc_msb_present_flag[i][i]等于0,表示delta_poc_msb_cycle_lt[i][j]不存在。当NumLtrpEntries[i]大于0,而且对于语法结构ref_pic_list_struct(i,rplsIdx,1)中的第j个LTRP表项,在解码条带头的时候DPB中存在PicOrderCntVal对MaxPicOrderLtCntLsb取模的值等于poc_lsb_lt[i][rplsIdx][jj]的多个参考图像时,其中,jj为语法结构ref_pic_list_struct(i,rplsIdx,1)中的第j个LTRP表项的表项索引,delta_poc_msb_present_flag[i][j]等于1。如果不存在,则推断delta_poc_msb_cycle_lt[i][j]的值等于0。delta_poc_msb_cycle_lt[i][j]用于确定语法结构ref_pic_list_struct(i,rplsIdx,1)中的第j个LTRP表项的图像顺序编号值的最高有效位的值。如果不存在,则推断delta_poc_msb_cycle_lt[i][j]等于0。
[0308] 对用于图像顺序编号的解码过程的更改如下:
[0309] 参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0310]
[0311]
[0312] 或者,可以将delta_poc_msb_cycle_lt[listIdx][i]的语义表示为增量的增量,使得参考图像列表构建可以更新如下:参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0313]
[0314]
[0315] 码流一致性的要求为使用以下约束条件:在每个i等于0或1的情况下,NumEntriesInList[i][RplsIdx[i]]不小于NumRefIdxActive[i]。由RefPicList[0]或RefPicList[1]中的每个激活表项参考的图像存在于DPB中,并且其TemporalId小于或等于当前图像的TemporalId。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的任何非激活表项的表项索引不用作解码当前图像的参考索引。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的非激活表项与RefPicList[0]或RefPicList[1]中的任何其它表项不参考同一个图像。图像中的条带的RefPicList[0]或RefPicList[1]中的STRP表项与同一个图像中的同一个条带或不同条带的RefPicList[0]或RefPicList[1]中的LTRP表项不参考同一个图像。当前图像不由RefPicList[0]或RefPicList[1]中的任何表项参考。当前图像的PicOrderCntVal与由LTRP表项参考的图像的PicOrderCntVal之间的差值大于或等于224,RefPicList[0]或RefPicList[1]中不存在这种表项。假设setOfRefPics为由RefPicList[0]中的所有表项和RefPicList[1]中的所有表项参考的独特图像集。setOfRefPics中的图像数量小于或等于sps_max_dec_pic_buffering_minus1,而且一个图像中的所有条带具有相同的setOfRefPics。
[0316] 每个STRP通过其PicOrderCntVal值识别。如果每个LTRP由delta_poc_msb_present_flag[i][j]等于1的RefPicList[0]或RefPicList[1]中的表项参考,则通过其PicOrderCntVal值识别;否则,通过其PicOrderCntVal值的Log2(MaxLtPicOrderCntLsb)个LSB识别。
[0317] 始终在条带头中指示参考图像列表,区分短期参考图像和长期参考图像。
[0318] 本部分描述本发明的另一个替代实施例。以下描述涉及最新VVC WD(即,只描述与JVET‑K1001‑v1中的最新VVC WD有关的增量,而下文提及的最新VVC WD中的文本仍然适用)。本替代实施例的概述如下:只在条带头中指示参考图像列表结构。短期参考图像和长期参考图像都通过它们的POC LSB识别,这些POC LSB可以由比特数表示,这些比特数与表示在条带头中指示的用于推导POC值的POC LSB所使用的比特数不同。此外,表示用于识别短期参考图像和长期参考图像的POC LSB所使用的比特数可以不同。
[0319] NAL单元头语法
[0320]
[0321]
[0322] 序列参数集RBSP语法
[0323]
[0324] 图像参数集RBSP语法
[0325]
[0326] 条带头语法
[0327]
[0328] 参考图像列表结构语法
[0329]
[0330]
[0331] NAL单元头语义
[0332] forbidden_zero_bit等于0。nal_unit_type表示NAL单元中包括的RBSP数据结构的类型。
[0333] 表7‑1:NAL单元类型代码和NAL单元类型类别
[0334]
[0335]
[0336] nuh_temporal_id_plus1减1表示NAL单元的时间标识符。nuh_temporal_id_plus1的值不等于0。变量TemporalId表示如下:TemporalId=nuh_temporal_id_plus1–1。
[0337] 当nal_unit_type为IRAP_NUT时,经译码条带属于IRAP图像,TemporalId等于0。接入单元中的所有VCL NAL单元具有相同的TemporalId值。经译码图像或接入单元的TemporalId值为该经译码图像或接入单元中的VCL NAL单元的TemporalId值。非VCL NAL单元的TemporalId值约束如下:如果nal_unit_type为SPS_NUT,则TemporalId等于0,且包括NAL单元的接入单元的TemporalId等于0。否则,如果nal_unit_type为EOS_NUT或EOB_NUT,则TemporalId等于0。否则,TemporalId大于或等于包括NAL单元的接入单元的TemporalId。当NAL单元为非VCL NAL单元时,TemporalId值等于包括该非VCL NAL单元应用于的所有接入单元的TemporalId值中的最小值。当nal_unit_type为PPS_NUT时,TemporalId可以大于或等于包括NAL单元的接入单元的TemporalId,因为所有图像参数集(picture parameter set,PPS)都可以包括在码流的起始处,其中,第一经译码图像的TemporalId等于0。当nal_unit_type为PREFIX_SEI_NUT或SUFFIX_SEI_NUT时,TemporalId可以大于或等于包括NAL单元的接入单元的TemporalId,因为补充增强信息(supplemental  enhancement 
information,SEI)NAL单元可以包括应用于包括接入单元的码流子集,其中,这些接入单元的TemporalId值大于包括SEI NAL单元的接入单元的TemporalId。nuh_reserved_zero_
7bits等于‘0000000’。nuh_reserved_zero_7bits的其它值可以由ITU‑T或ISO/IEC在未来进行规定。解码器忽略(即从码流中删除并丢弃)nuh_reserved_zero_7bits的值不等于‘0000000’的NAL单元。
[0338] 序列参数集RBSP语义
[0339] log2_max_pic_order_cnt_lsb_minus4表示在用于图像顺序编号的解码过程中使用的变量MaxPicOrderCntLsb的值,如下所示:
[0340] MaxPicOrderCntLsb=2(log2_max_pic_order_cnt_lsb_minus4+4)。
[0341] log2_max_pic_order_cnt_lsb_minus4的取值范围为0~12(包括端值)。sps_max_dec_pic_buffering_minus1加1表示CVS所需的解码图像缓冲器的最大大小,以图像存储缓冲器为单位。sps_max_dec_pic_buffering_minus1的取值范围为0~MaxDpbSize–1(包括端值),其中,MaxDpbSize如其它地方所示。additional_st_poc_lsb表示在用于参考图像列表的解码过程中使用的变量MaxStPicOrderCntLsb的值,如下所示:
[0342] MaxStPicOrderCntLsb=2(log2_max_pic_order_cnt_lsb_minus4+4+additional_st_poc_lsb)。
[0343] additional_st_poc_lsb的取值范围为0~32–log2_max_pic_order_cnt_lsb_minus4–4(包括端值)。long_term_ref_pics_flag为0,表示没有LTRP用于CVS中的任何经译码图像的帧间预测。long_term_ref_pics_flag为1,表示LTRP可以用于CVS中的一个或多个经译码图像的帧间预测。additional_lt_poc_lsb表示在用于参考图像列表的解码过程中使用的变量MaxLtPicOrderCntLsb的值,如下所示:
[0344] MaxLtPicOrderCntLsb=2(log2_max_pic_order_cnt_lsb_minus4+4+additional_st_poc_lsb+additional_lt_poc_lsb)。
[0345] additional_lt_poc_lsb的取值范围为0~32–log2_max_pic_order_cnt_lsb_minus4–4–additional_st_poc_lsb(包括端值)。如果不存在,则推断additional_lt_poc_lsb的值等于0。
[0346] 图像参数集RBSP语义
[0347] 当i等于0时,num_ref_idx_default_active_minus1[i]加1表示num_ref_idx_active_override_flag为0的P条带或B条带的变量NumRefIdxActive[0]的推断值;当i等于1时,num_ref_idx_default_active_minus1[i]加1表示num_ref_idx_active_override_flag为0的B条带的NumRefIdxActive[1]的推断值。num_ref_idx_default_active_minus1[i]的取值范围为0~14(包括端值)。
[0348] 条带头语义
[0349] 如果存在,条带头语法元素slice_pic_parameter_set_id和slice_pic_order_cnt_lsb中的每个的值在经译码图像的所有条带头中相同。slice_type表示条带的译码类型,如表7‑3所示。
[0350] 表7‑3:名称与slice_type的关联关系
[0351] slice_type slice_type的名称0 B(B条带)
1 P(P条带)
2 I(I条带)
[0352] 当nal_unit_type为IRAP_NUT时,即当图像为IRAP图像时,slice_type为2。
[0353] slice_pic_order_cnt_lsb表示当前图像的图像顺序编号对MaxPicOrderCntLsb取模的值。语法元素slice_pic_order_cnt_lsb的长度为(log2_max_pic_order_cnt_lsb_minus4+4)个比特。slice_pic_order_cnt_lsb的取值范围为0~MaxPicOrderCntLsb–1(包括端值)。如果不存在,则推断slice_pic_order_cnt_lsb等于0。num_ref_idx_active_override_flag为1,表示P条带和B条带存在语法元素num_ref_idx_active_minus1[0],而B条带存在语法元素num_ref_idx_active_minus1[1]。num_ref_idx_active_override_flag为0,表示语法元素num_ref_idx_active_minus1[0]和num_ref_idx_active_minus1[1]不存在。如果存在,num_ref_idx_active_minus1[i]表示变量NumRefIdxActive[i]的值,如下所示:
[0354] NumRefIdxActive[i]=num_ref_idx_active_minus1[i]+1。
[0355] num_ref_idx_active_minus1[i]的取值范围为0~14(包括端值)。NumRefIdxActive[i]–1的值表示参考图像列表i中的可以用于解码条带的最大参考索引。
当NumRefIdxActive[i]的值等于0时,参考图像列表i中没有参考索引可以用于解码条带。
在i等于0或1的情况下,如果当前条带为B条带且num_ref_idx_active_override_flag为0,则推断NumRefIdxActive[i]等于num_ref_idx_default_active_minus1[i]+1。如果当前条带为P条带且num_ref_idx_active_override_flag为0,则推断NumRefIdxActive[0]等于num_ref_idx_default_active_minus1[0]+1。如果当前条带为P条带,则推断
NumRefIdxActive[1]等于0。如果当前条带为I条带,则推断NumRefIdxActive[0]和NumRefIdxActive[1]都等于0。或者,在i等于0或1的情况下,假设将rplsIdx1设置为ref_pic_list_sps_flag[i]?ref_pic_list_idx[i]:num_ref_pic_lists_in_sps[i],并将numRpEntries[i]设置为num_strp_entries[i][rplsIdx1]+num_ltrp_entries[i]
[rplsIdx1]。当NumRefIdxActive[i]大于numRpEntries[i]时,将NumRefIdxActive[i]的值设置为numRpEntries[i]。
[0356] 参考图像列表结构语义
[0357] 语法结构ref_pic_list_struct(listIdx,ltrpFlag)可以存在于条带头中。如果存在于条带头中,则语法结构ref_pic_list_struct(listIdx,ltrpFlag)表示当前图像(包括条带的图像)的参考图像列表listIdx。num_strp_entries[listIdx]表示语法结构ref_pic_list_struct(listIdx,ltrpFlag)中的STRP表项的数量。num_ltrp_entries[listIdx]表示语法结构ref_pic_list_struct(listIdx,ltrpFlag)中的LTRP表项的数量。如果不存在,则推断num_ltrp_entries[listIdx]的值等于0。变量NumEntriesInList[listIdx]的推导方式如下:
[0358] NumEntriesInList[listIdx]=num_strp_entries[listIdx]+num_ltrp_entries[listIdx]。
[0359] NumEntriesInList[listIdx]的取值范围为0~sps_max_dec_pic_buffering_minus1(包括端值)。lt_ref_pic_flag[listIdx][i]等于1,表示语法结构ref_pic_list_struct(listIdx,ltrpFlag)中的第i个表项为LTRP表项。lt_ref_pic_flag[listIdx][i]等于0,表示语法结构ref_pic_list_struct(listIdx,ltrpFlag)中的第i个表项为STRP表项。如果不存在,则推断lt_ref_pic_flag[listIdx][i]的值等于0。码流一致性的要求为:lt_ref_pic_flag[listIdx][i](i的所有值在范围0~NumEntriesInList[listIdx]–1(包括端值)内)的总和等于num_ltrp_entries[listIdx][rplsIdx]。当lt_ref_pic_flag[listIdx][i]等于0时,poc_lsb_st[listIdx][i]表示由语法结构ref_pic_list_struct(listIdx,ltrpFlag)中的第i个表项参考的图像的图像顺序编号对MaxStPicOrderCntLsb取模的值。
语法元素poc_lsb_st[listIdx][i]的长度为Log2(MaxStPicOrderCntLsb)个比特。当lt_ref_pic_flag[listIdx][i]等于1时,poc_lsb_lt[listIdx][i]表示由语法结构ref_pic_list_struct(listIdx,ltrpFlag)中的第i个表项参考的图像的图像顺序编号对
MaxLtPicOrderCntLsb取模的值。语法元素poc_lsb_lt[listIdx][i]的长度为Log2(MaxLtPicOrderCntLsb)个比特。
[0360] 下面描述解码过程。
[0361] 通用解码过程
[0362] 当前图像CurrPic的解码过程操作如下。下面详述NAL单元的解码。以下过程使用条带头层和更高层的语法元素详述以下解码过程。推导与图像顺序编号相关的变量和函数。只对图像中的第一个条带调用。在非IRAP图像中的每个条带的解码过程开始时,调用用于参考图像列表构建的解码过程来推导参考图像列表0(RefPicList[0])和参考图像列表1(RefPicList[1)])。调用用于参考图像标识的解码过程,其中,可以将参考图像标识为“不用于参考”或“用于长期参考”。只对图像中的第一个条带调用。调用用于译码树单元、缩放、变换、环内滤波等的解码过程。在当前图像中的所有条带都完成解码之后,将当前解码图像标识为“用于短期参考”。
[0363] NAL单元解码过程
[0364] 本过程的输入为当前图像的NAL单元及其相关的非VCL NAL单元。本过程的输出为封装在NAL单元内的已解析的RBSP语法结构。用于每个NAL单元的解码过程从NAL单元中提取RBSP语法结构,然后解析该RBSP语法结构。
[0365] 条带解码过程
[0366] 用于图像顺序编号的解码过程
[0367] 本过程的输出为当前图像的图像顺序编号PicOrderCntVal。图像顺序编号用于识别图像、在融合(merge)模式下推导运动参数、运动向量预测和解码器一致性检查。每个经译码图像都与图像顺序编号变量(表示为PicOrderCntVal)相关。如果当前图像不是IRAP图像,则变量prevPicOrderCntLsb和prevPicOrderCntMsb的推导方式如下:假设prevTid0Pic为解码顺序中的TemporalId等于0的前一个图像。将变量prevPicOrderCntLsb设置为prevTid0Pic的slice_pic_order_cnt_lsb。将变量prevPicOrderCntMsb设置为prevTid0Pic的PicOrderCntMsb。当前图像的变量PicOrderCntMsb的推导方式如下:如果当前图像为IRAP图像,则将PicOrderCntMsb设置为0。否则,PicOrderCntMsb的推导方式如下:
[0368]
[0369] PicOrderCntVal的推导方式如下:
[0370] PicOrderCntVal=PicOrderCntMsb+slice_pic_order_cnt_lsb。
[0371] 由于推断IRAP图像的slice_pic_order_cnt_lsb为0,而且将prevPicOrderCntLsb和prevPicOrderCntMsb都设置为0,因此所有IRAP图像的PicOrderCntVal都等于0。31 31
PicOrderCntVal的取值范围为–2 ~2 –1(包括端值)。在一个CVS中,任意两个经译码图像的PicOrderCntVal值不相同。在解码过程中的任何时刻,DPB中的任意两个短期参考图像的PicOrderCntVal&(MaxStPicOrderCntLsb–1)的值不相同。在解码过程中的任何时刻,DPB中的任意两个参考图像的PicOrderCntVal&(MaxLtPicOrderCntLsb–1)的值不相同。
[0372] 函数PicOrderCnt(picX)表示如下:
[0373] PicOrderCnt(picX)=图像picX的PicOrderCntVal。
[0374] 函数DiffPicOrderCnt(picA,picB)表示如下:
[0375] DiffPicOrderCnt(picA,picB)=PicOrderCnt(picA)–PicOrderCnt(picB)。
[0376] 码流不包括使解码过程中使用的DiffPicOrderCnt(picA,picB)的值不在范围–21515
~2 –1(包括端值)内的数据。假设X为当前图像,Y和Z为同一个CVS中的另外两个图像,当DiffPicOrderCnt(X,Y)和DiffPicOrderCnt(X,Z)都为正或都为负时,认为Y和Z相对于X处于相同的输出顺序方向上。
[0377] 用于参考图像列表构建的解码过程
[0378] 在非IRAP图像中的每个条带的解码过程开始时,调用本过程。参考图像通过参考索引进行寻址。参考索引是在参考图像列表中的索引。在解码I条带时,不使用参考图像列表来解码条带数据。在解码P条带时,只使用参考图像列表0(即RefPicList[0])来解码条带数据。在解码B条带时,同时使用参考图像列表0和参考图像列表1(即RefPicList[1])来解码条带数据。在非IRAP图像中的每个条带的解码过程开始时,推导参考图像列表RefPicList[0]和RefPicList[1]。使用这两个参考图像列表来标识参考图像或解码条带数据。如果非IRAP图像中的I条带不是该图像中的第一个条带,则为了检查码流一致性,可以推导RefPicList[0]和RefPicList[1],但解码当前图像或解码顺序在当前图像之后的图像不一定需要推导RefPicList[0]和RefPicList[1]。如果P条带不是图像中的第一个条带,则为了检查码流一致性,可以推导RefPicList[1],但解码当前图像或解码顺序在当前图像之后的图像不一定需要推导RefPicList[1]。
[0379] 参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0380]
[0381] 在每个i等于0或1的情况下,RefPicList[i]中的前NumRefIdxActive[i]个表项称为RefPicList[i]中的激活表项,RefPicList[i]中的其它表项称为RefPicList[i]中的非激活表项。如果lt_ref_pic_flag[i][j]等于0,则RefPicList[i][j](j在范围0~NumEntriesInList[i]–1(包括端值)内)中的每个表项称为STRP表项,否则称为LTRP表项。特定图像有可能由RefPicList[0]中的表项和RefPicList[1]中的表项共同参考。特定图像还有可能由RefPicList[0]中的多个表项或RefPicList[1]中的多个表项参考。RefPicList[0]中的激活表项和RefPicList[1]中的激活表项共同参考所有可以用于当前图像和解码顺序在当前图像之后的一个或多个图像的帧间预测的参考图像。RefPicList[0]中的非激活表项和RefPicList[1]中的非激活表项共同参考所有不用于当前图像的帧间预测、但可以用于解码顺序在当前图像之后的一个或多个图像的帧间预测的参考图像。RefPicList[0]或RefPicList[1]中可以存在一个或多个等于“无参考图像”的表项,因为DPB中不存在对应的图像。忽略RefPicList[0]或RefPicList[0]中等于“无参考图像”的每个非激活表项。为RefPicList[0]或RefPicList[1]中等于“无参考图像”的每个激活表项推断无意图像丢失。
[0382] 码流一致性的要求为使用以下约束条件:在每个i等于0或1的情况下,NumEntriesInList[i]不小于NumRefIdxActive[i]。由RefPicList[0]或RefPicList[1]中的每个激活表项参考的图像存在于DPB中,并且其TemporalId小于或等于当前图像的TemporalId。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的任何非激活表项的表项索引不用作解码当前图像的参考索引。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的非激活表项与RefPicList[0]或RefPicList[1]中的任何其它表项不参考同一个图像。图像中的条带的RefPicList[0]或RefPicList[1]中的STRP表项与同一个图像中的同一个条带或不同条带的RefPicList[0]或RefPicList[1]中的LTRP表项不参考同一个图像。当前图像不由RefPicList[0]或RefPicList[1]中的任何表项参考。当前图像的PicOrderCntVal与由LTRP表项参考的图像的PicOrderCntVal之间的差值大于或等于224,RefPicList[0]或RefPicList[1]中不存在这种表项。假设setOfRefPics为由RefPicList[0]中的所有表项和RefPicList[1]中的所有表项参考的独特图像集。
setOfRefPics中的图像数量小于或等于sps_max_dec_pic_buffering_minus1,而且一个图像中的所有条带具有相同的setOfRefPics。
[0383] 用于参考图像标识的解码过程
[0384] 在解码条带头和用于条带的参考图像列表重建的解码过程之后,但在解码条带数据之前,每个图像调用一次本过程。本过程可能使得将DPB中的一个或多个参考图像标识为“不用于参考”或“用于长期参考”。可以将DPB中的解码图像标识为“不用于参考”、“用于短期参考”或“用于长期参考”,但在解码过程中的任何给定时刻,这三种标识状态只能存在一种。将其中一个标识状态指定给图像会隐式地删除其它标识状态(如果适用)。当图像称为被标识为“用于参考”时,这统一是指将图像标识为“用于短期参考”或“用于长期参考”(但不是同时)。如果当前图像为IRAP图像,则将DPB中当前包括的所有参考图像(如果有)都标识为“不用于参考”。STRP通过它们的PicOrderCntVal值的Log2(MaxStPicOrderCntLsb)个LSB识别。LTRP通过它们的PicOrderCntVal值的Log2(MaxLtPicOrderCntLsb)个LSB识别。
[0385] 对于RefPicList[0]或RefPicList[1]中的每个LTRP表项,当被参考的图像为STRP时,将该图像标识为“用于长期参考”。将DPB中的未由RefPicList[0]或RefPicList[1]中的任何表项参考的每个参考图像都标识为“不用于参考”。
[0386] 始终在条带头中指示参考图像列表,不区分短期参考图像和长期参考图像。
[0387] 本部分描述本发明的另一个替代实施例。以下描述涉及最新VVC WD(即,只描述与JVET‑K1001‑v1中的最新VVC WD有关的增量,而下文提及的最新VVC WD中的文本仍然适用)。本替代实施例的概述如下:只在条带头中指示参考图像列表结构。对短期参考图像和长期参考图像不做区分。所有的参考图像都只是称为参考图像。参考图像通过它们的POC LSB识别,这些POC LSB由比特数表示,该比特数与表示在条带头中指示的用于推导POC值的POC LSB所使用的比特数不同。
[0388] 缩略语。使用VVC WD中的第4章的文本。
[0389] NAL单元头语法
[0390]
[0391]
[0392] 序列参数集RBSP语法
[0393]
[0394] 图像参数集RBSP语法
[0395]
[0396]
[0397] 条带头语法
[0398]
[0399] 参考图像列表结构语法
[0400]
[0401] NAL单元头语义
[0402] forbidden_zero_bit等于0。nal_unit_type表示NAL单元中包括的RBSP数据结构的类型。
[0403] 表7‑1:NAL单元类型代码和NAL单元类型类别
[0404]
[0405] nuh_temporal_id_plus1减1表示NAL单元的时间标识符。nuh_temporal_id_plus1的值不等于0。变量TemporalId表示如下:
[0406] TemporalId=nuh_temporal_id_plus1–1。
[0407] 当nal_unit_type为IRAP_NUT时,经译码条带属于IRAP图像,TemporalId等于0。接入单元中的所有VCL NAL单元具有相同的TemporalId值。经译码图像或接入单元的TemporalId值为该经译码图像或接入单元中的VCL NAL单元的TemporalId值。非VCL NAL单元的TemporalId值约束如下:
[0408] 如果nal_unit_type为SPS_NUT,则TemporalId等于0,且包括NAL单元的接入单元的TemporalId等于0。否则,如果nal_unit_type为EOS_NUT或EOB_NUT,则TemporalId等于0。否则,TemporalId大于或等于包括NAL单元的接入单元的TemporalId。当NAL单元为非VCL NAL单元时,TemporalId值等于包括该非VCL NAL单元应用于的所有接入单元的TemporalId值中的最小值。当nal_unit_type为PPS_NUT时,TemporalId可以大于或等于包括NAL单元的接入单元的TemporalId,因为所有图像参数集(picture parameter set,PPS)都可以包括在码流的起始处,其中,第一经译码图像的TemporalId等于0。当nal_unit_type为PREFIX_SEI_NUT或SUFFIX_SEI_NUT时,TemporalId可以大于或等于包括NAL单元的接入单元的TemporalId,因为SEI NAL单元可以包括应用于包括接入单元的码流子集的信息,其中,这些接入单元的TemporalId值大于包括SEI NAL单元的接入单元的TemporalId。nuh_reserved_zero_7bits等于‘0000000’。nuh_reserved_zero_7bits的其它值可以由ITU‑T或ISO/IEC在未来进行规定。解码器忽略(即从码流中删除并丢弃)nuh_reserved_zero_7bits的值不等于‘0000000’的NAL单元。
[0409] 序列参数集RBSP语义
[0410] log2_max_pic_order_cnt_lsb_minus4表示在用于图像顺序编号的解码过程中使用的变量MaxPicOrderCntLsb的值,如下所示:
[0411] MaxPicOrderCntLsb=2(log2_max_pic_order_cnt_lsb_minus4+4)。
[0412] log2_max_pic_order_cnt_lsb_minus4的取值范围为0~12(包括端值)。sps_max_dec_pic_buffering_minus1加1表示CVS所需的解码图像缓冲器的最大大小,以图像存储缓冲器为单位。sps_max_dec_pic_buffering_minus1的取值范围为0~MaxDpbSize–1(包括端值),其中,MaxDpbSize如其它地方所示。additional_ref_poc_lsb表示在用于参考图像列表的解码过程中使用的变量MaxRefPicOrderCntLsb的值,如下所示:
[0413] MaxRefPicOrderCntLsb=2(log2_max_pic_order_cnt_lsb_minus4+4+additional_ref_poc_lsb)。
[0414] additional_ref_poc_lsb的取值范围为0~32–log2_max_pic_order_cnt_lsb_minus4–4(包括端值)。
[0415] 图像参数集RBSP语义
[0416] 当i等于0时,num_ref_idx_default_active_minus1[i]加1表示num_ref_idx_active_override_flag为0的P条带或B条带的变量NumRefIdxActive[0]的推断值;当i等于1时,num_ref_idx_default_active_minus1[i]加1表示num_ref_idx_active_override_flag为0的B条带的NumRefIdxActive[1]的推断值。num_ref_idx_default_active_minus1[i]的取值范围为0~14(包括端值)。
[0417] 条带头语义
[0418] 如果存在,条带头语法元素slice_pic_parameter_set_id和slice_pic_order_cnt_lsb中的每个的值在经译码图像的所有条带头中相同。slice_type表示条带的译码类型,如表7‑3所示。
[0419] 表7‑3:名称与slice_type的关联关系
[0420]slice_type slice_type的名称
0 B(B条带)
1 P(P条带)
2 I(I条带)
[0421] 当nal_unit_type为IRAP_NUT时,即当图像为IRAP图像时,slice_type为2。slice_pic_order_cnt_lsb表示当前图像的图像顺序编号对MaxPicOrderCntLsb取模的值。语法元素slice_pic_order_cnt_lsb的长度为(log2_max_pic_order_cnt_lsb_minus4+4)个比特。slice_pic_order_cnt_lsb的取值范围为0~MaxPicOrderCntLsb–1(包括端值)。如果不存在,则推断slice_pic_order_cnt_lsb等于0。num_ref_idx_active_override_flag为1,表示P条带和B条带存在语法元素num_ref_idx_active_minus1[0],而B条带存在语法元素num_ref_idx_active_minus1[1]。num_ref_idx_active_override_flag为0,表示语法元素num_ref_idx_active_minus1[0]和num_ref_idx_active_minus1[1]不存在。如果存在,num_ref_idx_active_minus1[i]表示变量NumRefIdxActive[i]的值,如下所示:
[0422] NumRefIdxActive[i]=num_ref_idx_active_minus1[i]+1。
[0423] num_ref_idx_active_minus1[i]的取值范围为0~14(包括端值)。NumRefIdxActive[i]–1的值表示参考图像列表i中的可以用于解码条带的最大参考索引。
当NumRefIdxActive[i]的值等于0时,参考图像列表i中没有参考索引可以用于解码条带。
在i等于0或1的情况下,如果当前条带为B条带且num_ref_idx_active_override_flag为0,则推断NumRefIdxActive[i]等于num_ref_idx_default_active_minus1[i]+1。如果当前条带为P条带且num_ref_idx_active_override_flag为0,则推断NumRefIdxActive[0]等于num_ref_idx_default_active_minus1[0]+1。如果当前条带为P条带,则推断
NumRefIdxActive[1]等于0。如果当前条带为I条带,则推断NumRefIdxActive[0]和NumRefIdxActive[1]都等于0。或者,在i等于0或1的情况下,假设将rplsIdx1设置为ref_pic_list_sps_flag[i]?ref_pic_list_idx[i]:num_ref_pic_lists_in_sps[i],并将numRpEntries[i]设置为num_strp_entries[i][rplsIdx1]+num_ltrp_entries[i]
[rplsIdx1]。当NumRefIdxActive[i]大于numRpEntries[i]时,将NumRefIdxActive[i]的值设置为numRpEntries[i]。
[0424] 参考图像列表结构语义
[0425] 语法结构ref_pic_list_struct(listIdx)可以存在于条带头中。如果存在于条带头中,语法结构ref_pic_list_struct(listIdx)表示当前图像(包括条带的图像)的参考图像列表listIdx。num_ref_entries[listIdx]表示语法结构ref_pic_list_struct(listIdx)语法结构中的表项数量。变量NumEntriesInList[listIdx]的推导方式如下:
[0426] NumRefPicEntriesInRpl[listIdx]=num_ref_entries[listIdx]。
[0427] NumRefPicEntries[listIdx]的取值范围为0~sps_max_dec_pic_buffering_minus1(包括端值)。poc_ref_lsb[listIdx][i]表示由语法结构ref_pic_list_struct(中的第i个表项参考的图像的图像顺序编号对MaxRefPicOrderCntLsb取模的值。语法元素poc_ref_lsb[listIdx][i]的长度为Log2(MaxRefPicOrderCntLsb)个比特。
[0428] 下面描述解码过程。
[0429] 通用解码过程
[0430] 当前图像CurrPic的解码过程操作如下。下面详述NAL单元的解码。以下过程使用条带头层和更高层的语法元素详述以下解码过程。推导与图像顺序编号相关的变量和函数。只对图像中的第一个条带调用。在非IRAP图像中的每个条带的解码过程开始时,调用用于参考图像列表构建的解码过程来推导参考图像列表0(RefPicList[0])和参考图像列表1(RefPicList[1)])。调用用于参考图像标识的解码过程,其中,可以将参考图像标识为“不用于参考”。只对图像中的第一个条带调用。调用用于译码树单元、缩放、变换、环内滤波等的解码过程。在当前图像中的所有条带都完成解码之后,将当前解码图像标识为“用于参考”。
[0431] NAL单元解码过程
[0432] 本过程的输入为当前图像的NAL单元及其相关的非VCL NAL单元。本过程的输出为封装在NAL单元内的已解析的RBSP语法结构。用于每个NAL单元的解码过程从NAL单元中提取RBSP语法结构,然后解析该RBSP语法结构。
[0433] 条带解码过程
[0434] 用于图像顺序编号的解码过程
[0435] 本过程的输出为当前图像的图像顺序编号PicOrderCntVal。图像顺序编号用于识别图像、在融合(merge)模式下推导运动参数、运动向量预测和解码器一致性检查。每个经译码图像都与图像顺序编号变量(表示为PicOrderCntVal)相关。如果当前图像不是IRAP图像,则变量prevPicOrderCntLsb和prevPicOrderCntMsb的推导方式如下:假设prevTid0Pic为解码顺序中的TemporalId等于0的前一个图像。将变量prevPicOrderCntLsb设置为prevTid0Pic的slice_pic_order_cnt_lsb。将变量prevPicOrderCntMsb设置为prevTid0Pic的PicOrderCntMsb。当前图像的变量PicOrderCntMsb的推导方式如下:如果当前图像为IRAP图像,则将PicOrderCntMsb设置为0。否则,PicOrderCntMsb的推导方式如下:
[0436]
[0437] PicOrderCntVal的推导方式如下:
[0438] PicOrderCntVal=PicOrderCntMsb+slice_pic_order_cnt_lsb。
[0439] 由于推断IRAP图像的slice_pic_order_cnt_lsb为0,而且将prevPicOrderCntLsb和prevPicOrderCntMsb都设置为0,因此所有IRAP图像的PicOrderCntVal都等于0。31 31
PicOrderCntVal的取值范围为–2 ~2 –1(包括端值)。在一个CVS中,任意两个经译码图像的PicOrderCntVal值不相同。在解码过程中的任何时刻,DPB中的任意两个参考图像的PicOrderCntVal&(MaxRefPicOrderCntLsb–1)的值不相同。
[0440] 函数PicOrderCnt(picX)表示如下:
[0441] PicOrderCnt(picX)=图像picX的PicOrderCntVal。
[0442] 函数DiffPicOrderCnt(picA,picB)表示如下:
[0443] DiffPicOrderCnt(picA,picB)=PicOrderCnt(picA)–PicOrderCnt(picB)。
[0444] 码流不包括使解码过程中使用的DiffPicOrderCnt(picA,picB)的值不在范围–21515
~2 –1(包括端值)内的数据。假设X为当前图像,Y和Z为同一个CVS中的另外两个图像,当DiffPicOrderCnt(X,Y)和DiffPicOrderCnt(X,Z)都为正或都为负时,认为Y和Z相对于X处于相同的输出顺序方向上。
[0445] 用于参考图像列表构建的解码过程
[0446] 在非IRAP图像中的每个条带的解码过程开始时,调用本过程。参考图像通过参考索引进行寻址。参考索引是在参考图像列表中的索引。在解码I条带时,不使用参考图像列表来解码条带数据。在解码P条带时,只使用参考图像列表0(即RefPicList[0])来解码条带数据。在解码B条带时,同时使用参考图像列表0和参考图像列表1(即RefPicList[1])来解码条带数据。在非IRAP图像中的每个条带的解码过程开始时,推导参考图像列表RefPicList[0]和RefPicList[1]。使用这两个参考图像列表来标识参考图像或解码条带数据。如果非IRAP图像中的I条带不是该图像中的第一个条带,则为了检查码流一致性,可以推导RefPicList[0]和RefPicList[1],但解码当前图像或解码顺序在当前图像之后的图像不一定需要推导RefPicList[0]和RefPicList[1]。如果P条带不是图像中的第一个条带,则为了检查码流一致性,可以推导RefPicList[1],但解码当前图像或解码顺序在当前图像之后的图像不一定需要推导RefPicList[1]。参考图像列表RefPicList[0]和RefPicList[1]的构建方式如下:
[0447]
[0448] 在每i等于0或1的情况下,RefPicList[i]中的前NumRefIdxActive[i]个表项称为RefPicList[i]中的激活表项,RefPicList[i]中的其它表项称为RefPicList[i]中的非激活表项。特定图像有可能由RefPicList[0]中的表项和RefPicList[1]中的表项共同参考。特定图像还有可能由RefPicList[0]中的多个表项或RefPicList[1]中的多个表项参考。
RefPicList[0]中的激活表项和RefPicList[1]中的激活表项共同参考所有可以用于当前图像和解码顺序在当前图像之后的一个或多个图像的帧间预测的参考图像。RefPicList[0]中的非激活表项和RefPicList[1]中的非激活表项共同参考所有不用于当前图像的帧间预测、但可以用于解码顺序在当前图像之后的一个或多个图像的帧间预测的参考图像。
RefPicList[0]或RefPicList[1]中可以存在一个或多个等于“无参考图像”的表项,因为DPB中不存在对应的图像。忽略RefPicList[0]或RefPicList[0]中等于“无参考图像”的每个非激活表项。为RefPicList[0]或RefPicList[1]中等于“无参考图像”的每个激活表项推断无意图像丢失。
[0449] 码流一致性的要求为使用以下约束条件:在每个i等于0或1的情况下,NumEntriesInList[i]不小于NumRefIdxActive[i]。由RefPicList[0]或RefPicList[1]中的每个激活表项参考的图像存在于DPB中,并且其TemporalId小于或等于当前图像的TemporalId。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的任何非激活表项的表项索引不用作解码当前图像的参考索引。可选地,还可以指定以下约束条件:RefPicList[0]或RefPicList[1]中的非激活表项与RefPicList[0]或RefPicList[1]中的任何其它表项不参考同一个图像。当前图像不由RefPicList[0]或RefPicList[1]中的任何表项参考。当前图像的PicOrderCntVal与由表项参考的图像的PicOrderCntVal之间的差值大于或等于224,RefPicList[0]或RefPicList[1]中不存在这种表项。假设setOfRefPics为由RefPicList[0]中的所有表项和RefPicList[1]中的所有表项参考的独特图像集。
setOfRefPics中的图像数量小于或等于sps_max_dec_pic_buffering_minus1,而且一个图像中的所有条带具有相同的setOfRefPics。
[0450] 用于参考图像标识的解码过程
[0451] 在解码条带头和用于条带的参考图像列表重建的解码过程之后,但在解码条带数据之前,每个图像调用一次本过程。本过程可能使得将DPB中的一个或多个参考图像标识为“不用于参考”。可以将DPB中的解码图像标识为“不用于参考”或“用于参考”,但在解码过程中的任何给定时刻,这两种标识状态只能存在一种。将其中一个标识状态指定给图像会隐式地删除其它标识状态(如果适用)。如果当前图像为IRAP图像,则将DPB中当前包括的所有参考图像(如果有)都标识为“不用于参考”。DPB中的参考图像通过它们的PicOrderCntVal值的Log2(MaxRefPicOrderCntLsb)个LSB识别。将DPB中的未由RefPicList[0]或RefPicList[1]中的任何表项参考的每个参考图像都标识为“不用于参考”。
[0452] 又一个替代实施例
[0453] 本部分是上文详述的标题为“始终在条带头中指示参考图像列表,同时区分短期参考图像和长期参考图像”的方法的替代实施例。在本替代实施例中,在条带头中,可以为每个LTRP表项指示POC MSB循环,与HEVC或上述方法中类似,并且删除以下约束条件:在解码过程中的任何时刻,DPB中的任意两个参考图像的PicOrderCntVal&(MaxLtPicOrderCntLsb–1)的值不相同。
[0454] 图6为本发明一个实施例提供的视频译码设备600(例如视频编码器20或视频解码器30)的示意图。视频译码设备600适合于实现本文所述的公开示实施例。视频译码设备600包括:入端口610和接收单元(Rx)620,用于接收数据;处理器、逻辑单元或中央处理器(central processing unit,CPU)630,用于处理所述数据;发送单元(Tx)640和出端口650,用于发送所述数据;存储器660,用于存储所述数据。视频译码设备600还可以包括与入端口610、接收单元620、发送单元640和出端口650耦合的光电(optical‑to‑electrical,OE)组件和电光(electrical‑to‑optical,EO)组件,用于光信号或电信号的出口或入口。
[0455] 处理器630通过硬件和软件实现。处理器630可以实现为一个或多个CPU芯片、核(例如多核处理器)、现场可编程门阵列(field‑programmable gate array,FPGA)、专用集成电路(application specific integrated circuit,ASIC)和数字信号处理器(digital signal processor,DSP)。处理器630与入端口610、接收单元620、发送单元640、出端口650和存储器660通信。处理器630包括译码模块670。译码模块670实现上述公开的实施例。例如,译码模块670执行、处理、准备或提供各种网络连接功能。因此,将译码模块670包括在内为视频译码设备600的功能提供了实质性的改进,并且影响了视频译码设备600到不同状态的转换。或者,以存储在存储器660中并由处理器630执行的指令来实现译码模块670。
[0456] 视频译码设备600还可以包括与用户进行数据通信的输入和/或输出(input/output,I/O)设备680。I/O设备680可以包括用于显示视频数据的显示器、用于输出音频数据的扬声器等输出设备。I/O设备680还可以包括键盘、鼠标、轨迹球等输入设备以及用于与此类输出设备交互的对应接口。
[0457] 存储器660包括一个或多个磁盘、磁带机或固态硬盘,并且可以用作溢出数据存储设备,以在选择程序来执行时存储此类程序,或者存储在执行程序过程中读取的指令和数据。存储器660可以是易失性的和/或非易失性的,可以是只读存储器(read‑only memory,ROM)、随机存取存储器(random access memory,RAM)、三态内容寻址存储器(ternary content‑addressable memory,TCAM)或静态随机存取存储器(static random‑access memory,SRAM)。
[0458] 图7为译码模块700的一个实施例的示意图。在本实施例中,译码模块700在视频译码设备702(例如视频编码器20或视频解码器30)中实现。视频译码设备702包括接收模块701。接收模块701用于接收图像进行编码或者接收码流进行解码。视频译码设备702包括与接收模块701耦合的发送模块707。发送模块707用于向解码器发送所述码流或者向显示模块(例如多个I/O设备680中的一个I/O设备)发送解码图像。
[0459] 视频译码设备702包括存储模块703。存储模块703与接收模块701或发送模块707中的至少一个耦合。存储模块703用于存储指令。视频译码设备702还包括处理模块705。处理模块705与存储模块703耦合。处理模块705用于执行存储在存储模块703中的指令,以执行本文公开的方法。
[0460] 虽然本发明提供了几个实施例,但应理解,在不脱离本发明的精神或范围的情况下,所公开的系统和方法可能通过其它多种具体形式体现。本发明的示例应被视为说明性而非限制性的,且本发明并不限于本文中所给出的细节。例如,各种元件或组件可以组合或集成在另一系统中,或者某些特征可以省略或不实施。
[0461] 另外,在不脱离本发明范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、模块、技术或方法组合或集成。展示或描述为彼此耦合或直接耦合或者通信的其它项也可以采用电方式、机械方式或其它方式经由某一接口、设备或中间组件间接地耦合或通信。其它变更、替换、更改示例可以由本领域技术人员在不脱离本文所公开的精神和范围的情况下确定。