指示图像顺序编号增量的符号值和绝对值
文献发布时间:2024-04-18 20:02:18
本申请是分案申请,原申请的申请号是201980059831.7,原申请日是2019年09月12日,原申请的全部内容通过引用结合在本申请中。
技术领域
本发明大体上描述了用于指示视频译码中的参考图像管理效率提升的技术。更具体地,本发明描述了用于以改进方式指示构建参考图像列表和直接根据参考图像列表构建参考图像标识的技术。
背景技术
即使在视频较短的情况下也需要对大量的视频数据进行描述,当数据要在带宽容量受限的通信网络中发送或以其它方式传输时,这样可能会造成困难。因此,视频数据通常要先压缩,然后在现代电信网络中发送。由于内存资源可能有限,当在存储设备上存储视频时,视频的大小也可能成为问题。视频压缩设备通常在信源侧使用软件和/或硬件,以在发送或存储之前对视频数据进行译码,从而减少用来表示数字视频图像所需的数据量。然后,在目的地侧,视频解压缩设备接收压缩后的数据。在有限的网络资源以及对更高视频质量的需求不断增长的情况下,需要改进压缩和解压缩技术,这些改进的技术在几乎不影响图像质量的情况下能够提高压缩比。
发明内容
第一方面涉及一种由视频解码器实现的对经译码的视频码流进行解码的方法,所述经译码的视频码流包括多个参考图像列表结构,每个参考图像列表结构包含多个参考图像表项。所述方法包括:从所述经译码的视频码流中解析指定图像顺序编号增量(pictureorder count,POC)的绝对值的符号值的标志,所述图像顺序编号增量与所述多个参考图像表项中的短期参考图像表项关联;从所述经译码的视频码流中解析与所述短期参考图像表项关联的所述POC增量的绝对值;根据所述POC增量的所述绝对值的符号值和所述POC增量的所述绝对值,生成参考图像列表;根据所述参考图像列表执行帧间预测,以生成重建块。
该方法提供了简化和提高译码过程效率的技术。通过分别指示符号值和绝对值,视频译码中的编码器/解码器(又称“编解码器”)相对于当前编解码器,得到改进(例如,使用的比特更少、带宽要求更低、更高效等)。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
根据所述第一方面,在所述方法的第一种实现方式中,所述标志指示所述多个参考图像列表结构中对应的一个参考图像列表结构中的所有POC增量值的符号值相同。
根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第二种实现方式中,所述标志指示所述多个参考图像列表结构中对应的一个参考图像列表结构中的所有POC增量值的符号值为正。
根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第三种实现方式中,所述标志指示所述多个参考图像列表结构中对应的一个参考图像列表结构中的所有POC增量值的符号值为负。
根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第四种实现方式中,所述标志指定为all_rpl_entries_same_sign_flag。
根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第五种实现方式中,在序列参数集(sequence parameter set,SPS)中指示所述标志。
根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第六种实现方式中,在同一参数集中指示所述标志和所述参考图像列表结构。
根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第七种实现方式中,当所述标志等于1时,在所述参考图像列表结构中指示对应参考图像列表结构中所有表项的符号值。
根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第八种实现方式中,当所述标志等于0时,在参考图像列表结构中指示与所述短期参考图像表项关联的每个表项的符号值。
根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第九种实现方式中,所述POC增量的所述绝对值是根据无符号整数0阶指数哥伦布(Exp-Golomb)编码进行解码的。
根据所述第一方面或所述第一方面的任一上述实现方式,在所述方法的第十种实现方式中,分别对所述标志和所述绝对值进行解析。
第二方面涉及一种由视频编码器实现的对视频码流进行编码的方法。所述方法包括:将多个参考图像列表结构编码到所述视频码流中,每个参考图像列表结构包含多个参考图像表项;将指定图像顺序编号增量(picture order count,POC)的绝对值的符号值的标志编码到所述视频码流中,所述图像顺序编号增量与所述多个参考图像表项中的短期参考图像表项关联;将与所述短期参考图像表项关联的所述POC增量的绝对值编码到所述视频码流中;向视频解码器发送所述视频码流。
该方法提供了简化和提高译码过程效率的技术。通过分别指示符号值和绝对值,视频译码中的编码器/解码器(又称“编解码器”)相对于当前编解码器,得到改进(例如,使用的比特更少、带宽要求更低、更高效等)。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
根据所述第二方面,在所述方法的第一种实现方式中,所述标志指示所述多个参考图像列表结构中对应的一个参考图像列表结构中的所有POC增量值的符号值相同。
根据所述第二方面或所述第二方面的任一上述实现方式,在所述方法的第二种实现方式中,所述标志指示所述多个参考图像列表结构中对应的一个参考图像列表结构中的所有POC增量值的符号值为正。
根据所述第二方面或所述第二方面的任一上述实现方式,在所述方法的第三种实现方式中,所述标志指示所述多个参考图像列表结构中对应的一个参考图像列表结构中的所有POC增量值的符号值为负。
根据所述第二方面或所述第二方面的任一上述实现方式,在所述方法的第四种实现方式中,所述标志指定为all_rpl_entries_same_sign_flag。
根据所述第二方面或所述第二方面的任一上述实现方式,在所述方法的第五种实现方式中,在所述视频码流的序列参数集(sequence parameter set,SPS)中编码所述标志。
根据所述第二方面或所述第二方面的任一上述实现方式,在所述方法的第六种实现方式中,在同一参数集中编码所述标志和所述参考图像列表结构。
根据所述第二方面或所述第二方面的任一上述实现方式,在所述方法的第七种实现方式中,当所述标志等于1时,在所述参考图像列表结构中指示参考图像列表结构中所有表项的符号值。
根据所述第二方面或所述第二方面的任一上述实现方式,在所述方法的第八种实现方式中,当所述标志等于0时,在参考图像列表结构中对与所述短期参考图像表项关联的每个表项的符号值进行编码。
根据所述第二方面或所述第二方面的任一上述实现方式,在所述方法的第九种实现方式中,所述POC增量的所述绝对值是根据无符号整数0阶指数哥伦布(Exp-Golomb)编码进行编码的。
根据所述第二方面或所述第二方面的任一上述实现方式,在所述方法的第十种实现方式中,分别对所述标志和所述绝对值进行编码。
第三方面涉及一种由视频解码器实现的对经译码的视频码流进行解码的方法。所述方法包括:解析所述经译码的视频码流中表示的参考图像列表结构,所述参考图像列表结构包括语法元素集,所述语法元素集描述参考图像并包括图像顺序编号的增量值和符号标志,所述图像顺序编号的所述增量值用于获取所述参考图像的图像顺序编号,所述符号标志指定所述图像顺序编号的所述增量值的符号值;根据所述参考图像列表结构,推导当前条带的参考图像列表,所述参考图像列表包括所述参考图像;根据所述参考图像列表,获取所述当前条带的至少一个重建块。
该方法提供了简化和提高译码过程效率的技术。通过分别指示符号值和绝对值,视频译码中的编码器/解码器(又称“编解码器”)相对于当前编解码器,得到改进(例如,使用的比特更少、带宽要求更低、更高效等)。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
根据第三方面,在所述方法的第一种实现方式中,分别对所述图像顺序编号的所述增量值和所述符号标志进行解码。
根据所述第三方面或所述第三方面的任一上述实现方式,在所述方法的第二种实现方式中,所述图像顺序编号的所述增量值是绝对值。
第四方面涉及一种解码设备,包括:接收器,用于接收经译码的视频码流,所述经译码的视频码流包括多个参考图像列表结构,每个参考图像列表结构包含多个参考图像表项;存储器,耦合到所述接收器,所述存储器存储指令;处理器,耦合到所述存储器,所述处理器用于执行所述存储器中存储的指令,使所述处理器进行以下操作:解析指定图像顺序编号增量(picture order count,POC)的绝对值的符号值的标志,所述图像顺序编号增量与所述多个参考图像表项中的短期参考图像表项关联;解析与所述短期参考图像表项关联的所述POC增量的绝对值;根据所述POC增量的所述绝对值的符号值和所述POC增量的所述绝对值,生成参考图像列表;根据所述参考图像列表执行帧间预测,以生成重建块。
所述解码设备提供了简化和提高译码过程效率的技术。通过分别指示符号值和绝对值,视频译码中的编码器/解码器(又称“编解码器”)相对于当前编解码器,得到改进(例如,使用的比特更少、带宽要求更低、更高效等)。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
根据第四方面,在所述解码设备的第一种实现方式中,所述解码设备包括显示器,用于显示使用所述重建块生成的图像。
第五方面涉及一种编码设备,包括:处理器,用于:将多个参考图像列表结构编码到所述视频码流中,每个参考图像列表结构包含多个参考图像表项;将指定图像顺序编号增量(picture order count,POC)的绝对值的符号值的标志编码到所述视频码流中,所述图像顺序编号增量与所述多个参考图像表项中的短期参考图像表项关联;将与所述短期参考图像表项关联的所述POC增量的绝对值编码到所述视频码流中;发送器,耦合到所述处理器,所述发送器用于向解码器发送所述视频码流。
所述编码设备提供了简化和提高译码过程效率的技术。通过分别指示符号值和绝对值,视频译码中的编码器/解码器(又称“编解码器”)相对于当前编解码器,得到改进(例如,使用的比特更少、带宽要求更低、更高效等)。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
根据所述第五方面,在所述编码设备的第一种实现方式中,所述标志指示所述多个参考图像列表结构中的一个参考图像列表结构中的所有POC增量值的符号值相同。
根据所述第五方面,在所述编码设备的第二种实现方式中,所述标志指定为all_rpl_entries_same_sign_flag。
第六方面涉及一种译码装置,包括:接收器,用于接收码流进行解码;发送器,耦合到所述接收器,所述发送器用于向显示器发送解码图像;存储器,耦合到所述接收器或所述发送器中的至少一个,所述存储器用于存储指令;处理器,耦合到所述存储器,所述处理器用于执行所述存储器中存储的指令,以执行本文中所公开实施例中任一项所述的方法。
所述译码装置提供了简化和提高译码过程效率的技术。通过分别指示符号值和绝对值,视频译码中的编码器/解码器(又称“编解码器”)相对于当前编解码器,得到改进(例如,使用的比特更少、带宽要求更低、更高效等)。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
第七方面涉及一种系统,包括:编码器;解码器,与所述编码器通信,其中,所述编码器或所述解码器包括本文中所公开实施例中任一项所述的解码设备、编码设备或译码装置。
所述系统提供了简化和提高译码过程效率的技术。通过分别指示符号值和绝对值,视频译码中的编码器/解码器(又称“编解码器”)相对于当前编解码器,得到改进(例如,使用的比特更少、带宽要求更低、更高效等)。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
第八方面涉及一种译码模块,包括:接收模块,用于接收码流进行解码;发送模块,耦合到所述接收模块,所述发送模块用于向显示器模块发送解码图像;存储模块,耦合到所述接收模块或所述发送模块中的至少一个,所述存储模块用于存储指令;处理模块,耦合到所述存储模块,所述处理模块用于执行所述存储模块中存储的指令,以执行本文中所公开实施例中任一项所述的方法。
所述译码模块提供了简化和提高译码过程效率的技术。通过分别指示符号值和绝对值,视频译码中的编码器/解码器(又称“编解码器”)相对于当前编解码器,得到改进(例如,使用的比特更少、带宽要求更低、更高效等)。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
附图说明
为了更透彻地理解本发明,现参阅结合附图和具体实施方式而描述的以下简要说明,其中的相同附图标记表示相同部分。
图1为可利用双向预测技术的示例性译码系统的框图。
图2为可实现双向预测技术的示例性视频编码器的框图。
图3为可实现双向预测技术的示例性视频解码器的框图。
图4为具有当前图像的参考图像集(reference picture set,RPS)的示意图,所述当前图像具有RPS的所有子集中的表项。
图5为视频码流的实施例的示意图。
图6为对经译码的视频码流进行解码的方法的实施例。
图7为对视频码流的进行编码的方法的实施例。
图8为对经译码的视频码流进行解码的方法的实施例。
图9为视频译码设备的示意图。
图10为译码模块的实施例的示意图。
具体实施方式
以下是本文中使用的各种缩略语:解码图像缓冲器(Decoded Picture Buffer,DPB)、解码及时刷新(Instantaneous Decoding Refresh,IDR)、帧内随机接入点(IntraRandom Access Point,IRAP)、最低有效位(Least Significant Bit,LSB)、最高有效位(Most Significant Bit,MSB)、网络抽象层(Network Abstraction Layer,NAL)、图像顺序编号(Picture Order Count,POC)、原始字节序列载荷(Raw Byte Sequence Payload,RBSP)、序列参数集(Sequence Parameter Set,SPS)、工作草案(Working Draft,WD)。
图1为可利用本文中所描述的视频译码技术的示例性译码系统10的框图。如图1所示,译码系统10包括源设备12,其中,所述源设备12提供稍后由目的设备14解码的经编码的视频数据。具体地,源设备12可以通过计算机可读介质16向目的设备14提供视频数据。源设备12和目的设备14可以包括以下多种设备中的任一种,包括台式计算机、笔记本(例如,膝上型)计算机、平板计算机、机顶盒、“智能”手机、“智能”平板等电话手持机、电视、摄像机、显示设备、数字媒体播放器、视频游戏机、视频流设备等。在一些情况下,源设备12和目的设备14可配备用于无线通信的组件。
目的设备14可以通过计算机可读介质16接收待解码的经编码的视频数据。计算机可读介质16可以包括能够将经编码的视频数据从源设备12移动到目的设备14的任何类型的介质或设备。在一个示例中,计算机可读介质16可以包括通信介质,以使源设备12能够将经编码的视频数据直接实时地发送到目的设备14。经编码的视频数据可以根据无线通信协议等通信标准进行调制,并发送到目的设备14。通信介质可包括任何无线或有线通信介质,例如射频(radio frequency,RF)频谱或一条或多条物理传输线。所述通讯介质可构成分组网络(如局域网、广域网、或因特网等全球网络)的一部分。所述通信介质可以包括路由器、交换机、基站或任何其它可用于从源设备12到目的设备14进行通信的设备。
在一些示例中,可以将经编码的数据从输出接口22输出到存储设备。类似地,可以通过输入接口从存储设备访问经编码的数据。所述存储设备可以包括各种分布式或本地访问数据存储介质中的任一种,如硬盘驱动器、蓝光光盘、数字视频磁盘(digital videodisk,DVD)、只读光盘存储器(Compact Disc Read-Only Memory,CD-ROM)、闪存、易失性或非易失性存储器,或用于存储经编码的视频数据的任何其它合适的数字存储介质。在另一示例中,存储设备可以对应于文件服务器或可以存储由源设备12生成的经编码的视频的另一中间存储设备。目的设备14可以通过流式传输或下载从存储设备中访问所存储的视频数据。所述文件服务器可以是能够存储经编码的视频数据并将该经编码的视频数据发送到目的设备14的任何类型的服务器。示例性文件服务器包括万维网服务器(例如,用于网站)、文件传输协议(file transfer protocol,FTP)服务器、网络附属存储(network attachedstorage,NAS)设备或本地磁盘驱动器。目的设备14可以通过任何标准数据连接(包括因特网连接)访问经编码的视频数据。所述标准数据连接可以包括无线信道(例如,Wi-Fi连接)、有线连接(例如,数字用户线(digital subscriber line,DSL)、电缆调制解调器等)或两者适于访问存储在文件服务器上的经编码的视频数据的组合。来自存储设备的经编码的视频数据的发送可以是流式传输、下载传输或其组合。
本发明的技术不一定限于无线应用或设置。这些技术可以应用于视频译码以支持各种多媒体应用中的任一种,如空中电视广播、有线电视传输、卫星电视传输、互联网流视频传输(如HTTP动态自适应流媒体(dynamic adaptive streaming over HTTP,DASH)、在数据存储介质上编码的数字视频、对存储在数据存储介质上的数字视频进行解码)或其它应用。在一些示例中,译码系统10可用于支持单向或双向视频传输,以支持视频流式传输、视频播放、视频广播和/或视频电话等应用。
在图1的示例中,源设备12包括视频源18、视频编码器20和输出接口22。目的设备14包括输入接口28、视频解码器30和显示设备32。根据本发明,源设备12的视频编码器20和/或目的设备14的视频解码器30可用于应用所述技术进行视频译码。在其它示例中,源设备和目的设备可以包括其它组件或装置。例如,源设备12可以从外部视频源(如外部摄像机)接收视频数据。同样地,目的设备14可以与外部显示设备连接,而不是包括集成显示设备。
图1所示的译码系统10仅是一个示例。视频译码技术可以由任何数字视频编码和/或解码设备执行。尽管本发明的技术通常由视频译码设备执行,但这些技术也可以由视频编码器/解码器(通常称为“编解码器”)执行。此外,本发明的技术还可以由视频预处理器执行。视频编码器和/或解码器可以是图形处理器(graphics processing unit,GPU)或类似设备。
源设备12和目的设备14仅是此类译码设备的示例,其中,源设备12生成经编码的视频数据以发送到目的设备14。在一些示例中,源设备12和目的设备14可以基本上对称地操作,使得源设备12和目的设备14都包括视频编码和解码组件。因此,编码系统10可以支持视频设备12、14之间的单向或双向视频传输,例如用于视频流式传输、视频播放、视频广播或视频电话。
源设备12的视频源18可以包括视频捕获设备(如视频摄像机)、包括之前捕获视频的视频存档,和/或从视频内容提供方接收视频的视频馈送接口。在另一替代方案中,视频源18可以生成基于计算机图形的数据作为源视频,或直播视频、存档视频和计算机生成视频的组合。
在一些情况下,当视频源18是视频摄像机时,源设备12和目的设备14可以形成摄像机手机或视频手机。然而,如上所述,本发明中描述的技术通常可用于视频译码,也可用于无线和/或有线应用。在每种情况下,可以由视频编码器20对所捕获、预捕获或计算机生成的视频进行编码。然后,可以通过输出接口22将经编码的视频信息输出到计算机可读介质16上。
计算机可读介质16可以包括瞬态介质,如无线广播或有线网络传输,或计算机可读介质16可包括非瞬时性存储介质,如硬盘、闪存驱动器、光盘、数字视频光盘、蓝光光盘,或其它计算机可读介质。在一些示例中,网络服务器(未示出)可以从源设备12接收经编码的视频数据,并且例如通过网络传输向目的设备14提供经编码的视频数据。类似地,介质生产设施(如光盘冲压设施)的计算设备可以从源设备12接收经编码的视频数据,并产生包括经编码的视频数据的光盘。因此,在各种示例中,计算机可读介质16可理解为包括一个或多个各种形式的计算机可读介质。
目的设备14的输入接口28从计算机可读介质16接收信息。计算机可读介质16的信息可以包括由视频编码器20定义的语法信息,其中,所述语法信息也由视频解码器30使用,所述语法信息包括描述块和其它译码单元(例如,图像组(group of picture,GOP))的特征和/或处理的语法元素。显示设备32向用户显示经解码的视频数据,并且可以包括各种显示设备中的任一种,如阴极射线管(cathode ray tube,CRT)、液晶显示器(liquid crystaldisplay,LCD)、等离子体显示器、有机发光二极管(organic light emitting diode,OLED)显示器或其它类型的显示设备。
视频编码器20和视频解码器30可以根据视频译码标准,如目前正在开发的高效视频译码(High Efficiency Video Coding,HEVC)标准进行操作,并且可符合HEVC测试模型(HEVC Test Model,HM)。或者,视频编码器20和视频解码器30可以根据其它专有或行业标准进行操作,如国际电信联盟电信标准化部门(International TelecommunicationsUnion Telecommunication Standardization Sector,ITU-T)H.264标准,或者称为运动图像专家组(Motion Picture Expert Group,MPEG)-4,第10部分、高级视频译码(AdvancedVideo Coding,AVC)、H.265/HEVC或这些标准的扩展。然而,本发明的技术不限于任何特定的译码标准。视频译码标准的其它示例包括MPEG-2和ITU-T H.263。尽管在图1中未示出,但是在一些方面中,视频编码器20和视频解码器30可以各自与音频编码器和音频解码器集成,并且可以包括合适的复用器-解复用器(multiplexer-demultiplexer,MUX-DEMUX)单元或其它硬件和软件,以对通用数据流或单独数据流中的音频和视频都进行编码处理。如果适用,MUX-DEMUX单元可以符合ITU H.223复用器协议,或用户数据报协议(user datagramprotocol,UDP)等其它协议。
视频编码器20和视频解码器30可以各自实现为各种合适的编码器电路中的任一种,如一个或多个微处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(fieldprogrammable gate array,FPGA)、离散逻辑、软件、硬件、固件或其任何组合。当所述技术部分地以软件形式实现时,设备可将软件的指令存储在合适的非瞬时性计算机可读介质中,并且使用一个或多个处理器以硬件形式执行所述指令,以执行本发明的技术。视频编码器20和视频解码器30各自可包括在一个或多个编码器或解码器中,其中任一者可作为组合式编码器/解码器(编解码器)的一部分集成在相应设备中。包括视频编码器20和/或视频解码器30的设备可以包括集成电路、微处理器和/或蜂窝电话等无线通信设备。
图2为可实现视频译码技术的示例性视频编码器20的框图。视频编码器20可以执行视频条带内的视频块的帧内和帧间译码。帧内译码依赖于空间预测来减少或去除给定视频帧或图像内视频中的空间冗余。帧间译码依赖于时间预测来减少或去除视频序列的相邻帧或图像内视频中的时间冗余。帧内模式(I模式)可以指几种基于空间的译码模式中的任意一种。帧间模式,如单向预测(P模式)或双向预测(B模式)可以指几种基于时间的译码模式中的任意一种。
如图2所示,视频编码器20接收待编码的视频帧内的当前视频块。在图2的示例中,视频编码器20包括模式选择单元40、参考帧存储器64、求和器50、变换处理单元52、量化单元54以及熵译码单元56。模式选择单元40又包括运动补偿单元44、运动估计单元42、帧内预测单元46和分割单元48。为了重建视频块,视频编码器20还包括反量化单元58、逆变换单元60和求和器62。也可以包括去块滤波器(图2中未示出),以对块边界进行滤波,从而从重建视频中去除块假影。如果需要,去块滤波器通常将对求和器62的输出进行滤波。除去块滤波器外,还可以使用其它滤波器(在环路或后环路中)。为了描述的简洁性,未示出这种滤波器,但是如果需要,可以对求和器50的输出进行滤波(作为环内滤波器)。
在编码过程中,视频编码器20接收待译码的视频帧或条带。帧或条带可以划分为多个视频块。运动估计单元42和运动补偿单元44相对于一个或多个参考帧中的一个或多个块对所接收的视频块执行帧间预测译码以提供时间预测。帧内预测单元46还可以相对于与待译码块位于同一帧或条带内的一个或多个相邻块对所接收的视频块进行帧内预测译码以提供空间预测。视频编码器20可以执行多个译码通道,例如,为每个视频数据块选择合适的译码模式。
此外,分割单元48可以根据在之前译码通道中对之前分割方案的评估将视频数据块分割成子块。例如,分割单元48可初始地将帧或条带分割成最大译码单元(largestcoding unit,LCU),并且根据速率失真分析(例如,速率失真优化)将每个LCU分割成子译码单元(子CU)。模式选择单元40还可以产生指示将LCU分割成子CU的四叉树数据结构。四叉树的叶节点CU可以包括一个或多个预测单元(prediction unit,PU)和一个或多个变换单元(transform unit,TU)。
本发明使用术语“块”来指代在HEVC上下文中CU、PU或TU中的任一个,或其它标准上下文中的类似数据结构(例如,H.264/AVC中的宏块及其子块)。CU包括译码节点、译码节点关联的PU和TU。CU的大小与译码节点的大小相对应,呈正方形。CU的大小范围可以为8×8个像素到最大值为64×64个像素或更大的树块大小。每个CU可以包括一个或多个PU和一个或多个TU。例如,与CU关联的语法数据可以描述将CU分割为一个或多个PU。是对CU执行跳过模式编码还是直接模式编码、帧内预测模式编码或帧间预测模式编码,分割模式可能有所不同。可以将PU分割成非正方形。例如,与CU关联的语法数据可以描述根据四叉树将CU分割为一个或多个PU。TU可以是正方形或非正方形(例如,矩形)。
模式选择单元40可以根据错误结果等选择帧内或帧间译码模式中的一种,将所得到的帧内或帧间译码块提供给求和器50以生成残差块数据,并提供给求和器62来重建编码块以用作参考帧。模式选择单元40还将语法元素,如运动矢量、帧内模式指示符、分割信息和其它此类语法信息提供给熵译码单元56。
运动估计单元42和运动补偿单元44可以高度集成,但出于概念目的,单独说明。由运动估计单元42执行的运动估计是生成运动矢量的过程,其中,所述运动矢量用于估计视频块的运动。例如,运动向量可以指示当前视频帧或图像中的视频块的PU相对于参考帧(或其它译码单元)内的预测块的位移,所述参考帧(或其它译码单元)中的预测块是相对于在当前帧(或其它译码单元)中译码的当前块而言的。预测块是在像素差方面与待译码块高度匹配的块,其中,所述像素差可以通过绝对差和(sum of absolute difference,SAD)、平方差和(sum of square difference,SSD)或其它差值度量进行确定。在一些示例中,视频编码器20可以计算存储在参考帧存储器64中的参考图像的子整数像素位置的值。例如,视频编码器20可以对参考图像的四分之一像素位置、八分之一像素位置或其它分数像素位置的值进行插值。因此,运动估计单元42可以执行相对于整像素位置和分数像素位置的运动搜索,并输出具有分数像素精度的运动矢量。
运动估计单元42通过比较PU的位置与参考图像的预测块的位置来计算帧间译码条带中视频块的PU的运动矢量。可从第一参考图像列表(列表0)或第二参考图像列表(列表1)中选择参考每个列表标识存储在参考帧存储器64中的一个或多个参考图像。运动估计单元42将计算后的运动矢量发送给熵译码单元56和运动补偿单元44。
由运动补偿单元44执行的运动补偿可以涉及根据运动估计单元42确定的运动矢量获取或生成预测块。另外,在一些示例中,运动估计单元42和运动补偿单元44可以在功能上集成。一旦接收到当前视频块的PU的运动矢量,运动补偿单元44可以定位在其中一个参考图像列表中运动矢量指向的预测块。求和器50通过从所译码的当前视频块的像素值中减去预测块的像素值,得到像素差值来形成残差视频块,如下文所述。通常,运动估计单元42相对于亮度分量执行运动估计,运动补偿单元44将根据亮度分量计算的运动矢量用于色度分量和亮度分量。模式选择单元40还可以生成与视频块和视频条带相关的语法元素,以供视频解码器30用于对视频条带的视频块进行解码。
帧内预测单元46可以对当前块进行帧内预测,作为由运动估计单元42和运动补偿单元44执行的帧间预测的替代方案,如上文所述。具体地,帧内预测单元46可以确定帧内预测模式,用于对当前块进行编码。在一些示例中,帧内预测单元46可以在单独的编码通道中等使用各种帧内预测模式对当前块进行编码,而帧内预测单元46(或者在一些示例中,模式选择单元40)可以从测试模式中选择合适的帧内预测模式进行使用。
例如,帧内预测单元46可以使用速率失真分析对各种测试的帧内预测模式计算速率失真值,并在测试的模式中选择具有最佳速率失真特性的帧内预测模式。速率失真分析通常确定编码块与经编码以产生编码块的原始未编码块之间的失真(或误差)量,以及用于产生编码块的码率(即,比特数)。帧内预测单元46可以根据各种编码块的失真和速率计算比率,以确定哪种帧内预测模式体现出最佳的块速率失真值。
此外,帧内预测单元46可以用于使用深度建模模式(depth modeling mode,DMM)对深度图的深度块进行译码。模式选择单元40可以确定可用的DMM模式产生的译码结果是否比帧内预测模式和其它DMM模式(例如,使用速率失真优化(rate-distortionoptimization,RDO))产生的译码结果更好。与深度图对应的纹理图像的数据可以存储在参考帧存储器64中。运动估计单元42和运动补偿单元44还可以用于对深度图的深度块进行帧间预测。
在为块选择帧内预测模式之后(例如,传统的帧内预测模式或DMM模式之一),帧内预测单元46可以将指示为块选择的帧内预测模式的信息提供给熵译码单元56。熵译码单元56可以对指示所选择的帧内预测模式的信息进行编码。视频编码器20可以在所发送的码流中包括配置数据,其中,所述配置数据包括多个帧内预测模式索引表和多个经修改的帧内预测模式索引表(也称为码字映射表)、各种块的编码上下文的定义,以及最可能的帧内预测模式、帧内预测模式索引表和经修改的帧内预测模式索引表的指示以用于每个上下文。
视频编码器20通过从所译码的原始视频块中减去模式选择单元40中的预测数据来形成残差视频块。求和器50表示执行该减法运算的一个或多个组件。
变换处理单元52对残差块应用变换,如离散余弦变换(discrete cosinetransform,DCT)或概念上类似的变换,从而产生包括残差变换系数值的视频块。变换处理单元52可以执行概念上类似于DCT的其它变换。还可以使用小波变换、整数变换、子带变换或其它类型的变换。
变换处理单元52对残差块应用变换,从而产生具有残差变换系数的块。变换可将残差信息从像素值域变换到变换域,例如频域。变换处理单元52可以将所得到的变换系数发送到量化单元54。量化单元54对变换系数进行量化以进一步降低码率。量化过程可以减少与部分或全部系数关联的位深度。可以通过调整量化参数来修改量化程度。在一些示例中,量化单元54随后可以对包括量化变换系数的矩阵进行扫描。或者,熵译码单元56可以执行扫描。
在量化后,熵译码单元56对经量化的变换系数进行熵译码。例如,熵译码单元56可以执行上下文自适应可变长度译码(context adaptive variable length coding,CAVLC)、上下文自适应二进制算术译码(context adaptive binary arithmetic coding,CABAC)、基于语法的上下文自适应二进制算术译码(syntax-based context-adaptivebinary arithmetic coding,SBAC)、概率区间分割熵(probability intervalpartitioning entropy,PIPE)译码或其它熵译码技术。在基于上下文的熵译码情况中,上下文可以基于相邻块。在熵译码单元56进行熵译码之后,可以将经编码的码流发送到另一设备(例如,视频解码器30)或存档以用于稍后发送或检索。
反量化单元58和逆变换单元60分别应用反量化和逆变换,以重建像素域中的残差块,例如,以供稍后用作参考块。运动补偿单元44可以通过将残差块添加到参考帧存储器64中的一个帧的预测块中来计算参考块。运动补偿单元44还可以将一个或多个插值滤波器应用于重建的残差块以计算子整数像素值,以用于运动估计。求和器62将重建的残差块与由运动补偿单元44产生的运动补偿预测块相加,以产生重建的视频块,存储在参考帧存储器64中。运动估计单元42和运动补偿单元44可以将重建的视频块用作参考块,以对后续视频帧中的块进行帧内译码。
图3为可实现视频译码技术的示例性视频解码器30的框图。在图3的示例中,视频解码器30包括熵解码单元70、运动补偿单元72、帧内预测单元74、反量化单元76、逆变换单元78、参考帧存储器82和求和器80。在一些示例中,视频解码器30可执行通常与视频编码器20(图2)描述的编码通道相反的解码通道。运动补偿单元72可以根据从熵解码单元70接收的运动矢量生成预测数据,而帧内预测单元74可以根据从熵解码单元70接收的帧内预测模式指示符生成预测数据。
在解码过程中,视频解码器30从视频编码器20接收表示经编码的视频条带的视频块的经编码的视频码流以及相关联的语法元素。视频解码器30的熵解码单元70对码流进行熵解码以生成量化系数、运动矢量或帧内预测模式指示符以及其它语法元素。熵解码单元70将运动矢量和其它语法元素转发给运动补偿单元72。视频解码器30可以接收视频条带级和/或视频块级的语法元素。
当视频条带被译码为经帧内译码(I)的条带时,帧内预测单元74可以根据当前帧或图像的之前解码块的指示(signal)的帧内预测模式和数据来生成当前视频条带的视频块的预测数据。当视频帧被译码为经帧间译码(例如B、P或GPB)的条带时,运动补偿单元72根据从熵解码单元70接收的运动矢量和其它语法元素针对当前视频条带的视频块生成预测块。可以从其中一个参考图像列表内的其中一个参考图像产生这些预测块。视频解码器30可以根据存储在参考帧存储器82中的参考图像,使用默认构建技术来构建参考帧列表:列表0和列表1。
运动补偿单元72通过解析运动矢量和其它语法元素来确定当前视频条带中的视频块的预测信息并使用所述预测信息针对所解码的当前视频块生成预测块。例如,运动补偿单元72使用接收到的一些语法元素确定用于对视频条带的视频块进行译码的预测模式(例如帧内预测或帧间预测)、帧间预测条带类型(例如B条带、P条带或GPB条带)、用于条带的一个或多个参考图像列表的构建信息、用于条带的每个帧间编码的视频块的运动矢量、用于条带的每个帧间译码的视频块的帧间预测状态、其它信息,以对当前视频条带内的视频块进行解码。
运动补偿单元72还可以根据插值滤波器进行插值。运动补偿单元72可以使用视频编码器20在视频块编码期间使用的插值滤波器来计算参考块的子整数像素的插值后的值。在这种情况下,运动补偿单元72可以从接收到的语法元素中确定视频编码器20使用的插值滤波器,并使用插值滤波器来产生预测块。
与深度图对应的纹理图像的数据可以存储在参考帧存储器82中。运动补偿单元72还可以用于对深度图的深度块进行帧间预测。
图像和视频压缩发展迅速,译码标准多样化。这些视频编码标准包括国际电信联盟电信标准化部门(International Telecommunication Union TelecommunicationStandardization Sector,ITU-T)H.261,ISO/IEC运动图像专家组(Motion PictureExperts 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-TH.264或ISO/IEC MPEG-4第10部分),以及高效视频译码(High Efficiency Video Coding,HEVC)(也称为ITU-T H.265或MPEG-H第2部分)。AVC包括可分级视频译码(Scalable VideoCoding,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)等扩展。
通用视频译码(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高级语法的更新。
本发明描述了旨在解决VVC标准未开发的技术。然而,这些技术也可以应用于其它视频/媒体编解码规范。
视频压缩技术执行空间(帧内)预测和/或时间(帧间)预测以减少或去除视频序列固有的冗余。对于基于块的视频译码,可以将视频条带(例如,视频图像或视频图像的一部分)分割成视频块,视频块也可以称为树块、译码树块(coding tree block,CTB)、译码树单元(coding tree unit,CTU)、译码单元(coding unit,CU)和/或译码节点。图像的帧内译码(I)条带中的视频块针对同一图像中的相邻块中的参考像素点使用空间预测进行编码。图像的帧间译码(P或B)条带中的视频块可以针对同一图像中的相邻块中的参考像素点使用空间预测,或者针对其它参考图像中的参考像素点使用时间预测。图像可以称为帧,参考图像可以称为参考帧。
空间或时间预测产生预测块用于待译码块。残差数据表示待译码的原始块和预测块之间的像素差。根据指向构成预测块的参考像素点的块的运动矢量和指示经译码块与预测块之间的差的残差数据,对帧间译码的块进行编码。根据帧内译码模式和残差数据对帧内译码的块进行编码。为了进一步压缩,残差数据可以从像素域变换到变换域,从而产生残差变换系数,然后可以量化残差变换系数。可以扫描最初以二维阵列排列的量化变换系数产生一维变换系数向量,并且可以应用熵译码来实现更大的压缩。
在视频编解码器规范中,标识图像具有多种用途,包括用作帧间预测中的参考图像、用于从解码图像缓冲器(decoded picture buffer,DPB)输出图像、用于运动矢量的缩放、用于加权预测等。在AVC和HEVC中,图像可以通过图像顺序编号(picture order count,POC)标识。在AVC和HEVC中,DPB中的图像可以标记为“短期参考”、“长期参考”或“未用于参考”。一旦图像被标记为“未用于参考”,它就不能再用于预测,当它不再用于输出时,可以从DPB中删除。
在AVC中,参考图像有两种类型,短期图像和长期图像。当参考图像不再用于预测参考时,可标记为“未用于参考”。这三种状态(短期参考、长期参考、未用于参考)之间的转换由解码后参考图像标识过程控制。有两种可选的解码后参考图像标识机制:隐式滑动窗口过程和显式内存管理控制操作(memory management control operation,MMCO)过程。当参考帧个数等于给定的最大个数(SPS中的max_num_ref_frames)时,滑动窗口过程将短期参考图像标识为“未用于参考”。以先入先出的方式存储短期参考图像,使得最近解码的短期图像保存在DPB中。
显式MMCO过程可以包括多个MMCO命令。MMCO命令可以将一个或多个短期或长期参考图像标识为“不用于参考”,将所有图像标记为“不用于参考”,或者将当前参考图像或现有短期参考图像标识为“长期”,并给长期参考图像分配长期图像索引。
在AVC中,参考图像标识操作以及从DPB中输出和删除图像的过程是在对图像进行解码后执行的。
HEVC引入了一种不同的参考图像管理方法,称为参考图像集(reference pictureset,RPS)。与AVC的MMCO/滑动窗口相比,与RPS概念的最根本区别在于,对于每个特定条带,提供了由当前图像或任何后续图像使用的完整参考图像集。因此,指示了必须保留在DPB中供当前或未来图像使用的所有图像的完整集合。这与AVC方案不同,AVC方案只指示与DPB的相对变化。在RPS概念中,不需要从解码顺序中的早期图像中获得信息来维持DPB中参考图像的正确状态。
为了充分发挥RPS的优点,提高抗误码能力,对HEVC中的图像解码和DPB操作顺序进行了修改。在AVC图像标记和缓冲操作中,从DPB中输出和删除解码图像通常都应用在对当前图像进行解码之后。在HEVC中,RPS首先从当前图像的条带头中解码,然后通常在对当前图像进行解码之前执行图像标记和缓冲操作。
HEVC中的每个条带头必须包括用于指示包含条带的图像的RPS的参数。唯一的例外是没有为IDR条带指示RPS,而是推断RPS为空。对于不属于IDR图像的I条带,即使它们属于I图像,也可以提供RPS,因为可能存在解码顺序在I图像之后的图像,这些图像使用解码顺序在I图像之前的图像的帧间预测。RPS中的图像数不能超过SPS中sps_max_dec_pic_buffering语法元素规定的DPB大小限制。
每个图像都与代表输出顺序的POC值关联。条带头包含一个固定长度的码字pic_order_cnt_lsb,表示完整的POC值的最低有效位,也称为POC LSB。在SPS中指示码字的长度,可以介于4到16个比特之间。RPS概念使用POC来标识参考图像。除了其自身的POC值外,每个条带头直接包含或从SPS继承RPS中每个图像的POC值(或LSB)的经译码表示。
每个图像的RPS包括五个不同的参考图像列表,也称为五个RPS子集。RefPicSetStCurrBefore包括按照解码顺序和输出顺序在当前图像之前的所有可用于当前图像的帧间预测的短期参考图像。RefPicSetStCurrAfter包括按照解码顺序在当前图像之前、按照输出顺序在当前图像之后的所有可用于当前图像的帧间预测的短期参考图像。RefPicSetStFoll包括可用于按照解码顺序在当前图像之后的一个或多个图像的帧间预测,且不用于当前图像的帧间预测的所有短期参考图像。RefPicSetLtCurr包括所有可用于当前图像的帧间预测的长期参考图像。RefPicSetLtFoll包括可用于按照解码顺序在当前图像之后的一个或多个图像的帧间预测,且不用于当前图像的帧间预测的所有长期参考图像。
使用最多三个环路指示RPS,所述三个环路包括三种不同的参考图像:POC值比当前图像更小的短期参考图像;POC值比当前图像更大的短期参考图像;以及长期参考图像。另外,针对每个参考图像发送一个标志(used_by_curr_pic_X_flag),指示该参考图像是否被当前图像用作参考,其中,是的情况下,包括在列表RefPicSetStCurrBefore、RefPicSetStCurrAfter或RefPicSetLtCurr中的一个中;否的情况下,包括在列表RefPicSetStFoll或RefPicSetLtFoll中的一个中。
图4为具有当前图像B14的RPS 400的示意图,所述当前图像B14包括RPS 400的所有子集402中的表项(例如,图像)。在图4的示例中,当前图像B14正好包括五个子集402(又称RPS子集)中的每个子集中的一个图像。P8是子集402中的图像,称为RefPicSetStCurrBefore,因为该图像按输出顺序在B14之前,并且由B14使用。P12是子集402中的图像,称为RefPicSetStCurrAfter,因为该图像按输出顺序在B14之后,并且由B14使用。P13是子集402中的图像,称为RefPicSetStFoll,因为该图像是B14不使用的短期参考图像(但是由于B15会使用,所以必须保留在DPB中)。P4是子集402中的图像,称为RefPicSetStCurrBefore,因为该图像为B14使用的长期参考图像。I0是子集402中的图像,称为RefPicSetLtFoll,因为该图像是当前图像不使用的长期参考图像(但是由于B15会使用,所以必须保留在DPB中)。
RPS 400的短期部分可以直接包括在条带头中。或者,条带头可以仅包含表示索引的语法元素,参考在激活SPS中发送的预定义的RPS列表。可以使用两种不同方案中的任一种指示RPS 402的短期部分:如下文所述的帧间RPS,或如本文所述帧内RPS。当使用帧内RPS时,指示num_negative_pics和num_positive_pics表示两个不同参考图像列表的长度。这些列表分别包含与当前图像相比具有负POC差和正POC差的参考图像。这些列表中的每个元素都使用可变长度码进行编码,该码表示列表中每个元素与前一个元素的POC值的差值减一。对于每个列表中的第一个图像,相对于当前图像的POC值减一进行指示。
当对序列参数集中的循环RPS进行编码时,可以参照序列参数集中已经编码的另一个RPS对一个RPS(例如,RPS 400)的元素进行编码。这称为帧间RPS。由于序列参数集的所有RPS都位于同一个网络抽象层(network abstraction layer,NAL)单元中,因此该方法不会产生误差不稳定情况。帧间RPS语法基于以下事实:可以根据之前解码的图像的RPS预测当前图像的RPS。这是因为当前图像的所有参考图像是前一个图像的参考图像,或是之前解码的图像本身。只需要指出这些图像中的哪些图像应该作为参考图像并用于当前图像的预测。因此,语法包括:指向RPS并用作预测值的索引;待与预测值的delta_POC相加得到当前RPS的POC增量的delta_POC;指示符集,指示哪些图像是参考图像以及这些图像是否仅用于预测未来图像。在一个实施例中,POC增量是指当前参考图像与另一(例如,前一)参考图像之间的POC值的差值。
希望使用长期参考图像的编码器必须将SPS语法元素long_term_ref_pics_present_flag设置为1。然后,可以通过固定长度码字poc_lsb_lt在条带头中指示长期参考图像,所述固定长度码字poc_lsb_lt表示每个长期图像的完整POC值的最低有效位。每个poc_lsb_lt都是为特定长期图像指示的pic_order_cnt_lsb码字的副本。也可以在SPS中指示长期图像集,作为POC LSB值的列表。然后,可以在条带头中指示长期图像的POC LSB作为此列表的索引。
还可以另外指示delta_poc_msb_cycle_lt_minus1语法元素,从而能够计算长期参考图像相对于当前图像的完整POC距离。要求为每个长期参考图像指示码字delta_poc_msb_cycle_lt_minus1,所述每个长期参考图像的POC LSB值与RPS中的任何其它参考图像的LSB值相同。
对于HEVC中的参考图像标识,在图像解码之前,DPB中通常存在许多图像。其中一些图像可以用于预测,因此标记为“用于参考”。其它图像不可用于预测,并且等待输出,因此标记为“不用于参考”。当对条带头进行解析之后,先执行图像标记过程,然后再对条带数据进行解码。DPB中存在且标记为“用于参考”但未包括在RPS中的图像标记为“不用于参考“。如果used_by_curr_pic_X_flag=0,则忽略DPB中不存在但包括在参考图像集中的图像。但是,如果used_by_curr_pic_X_flag等于1,则此参考图像预期在当前图像中用作预测,但该参考图像缺失。然后,推断出一个图像无意中丢失,解码器应该采取合适的措施。
对当前图像进行解码之后,标记为“用于短期参考”。
以下说明HEVC中的参考图像列表构建。在HEVC中,术语帧间预测用于表示从除当前解码图像之外的参考图像的数据元素(例如,像素点值或运动矢量)推导的预测。像在AVC中一样,图像可以根据多个参考图像来预测。用于帧间预测的参考图像排列在一个或多个参考图像列表中。参考索引标识列表中的哪些参考图像用于创建预测信号。
单个参考图像列表(列表0)用于P条带,两个参考图像列表(列表0和列表1)用于B条带。与AVC类似,HEVC中的参考图像列表构建包括参考图像列表初始化和参考图像列表修改。
在AVC中,对于P条带(使用解码顺序)和B条带(使用输出顺序)而言,列表0的初始化过程是不同的。在HEVC中,两种情况下都使用输出顺序。
参考图像列表初始化根据以下三个RPS子集创建默认列表0和列表1(如果条带是B条带):RefPicSetStCurrBefore、RefPicSetStCurrAfter和RefPicSetLtCurr。首先将输出顺序较先(较后)的短期图像按照它们到当前图像的POC距离,从小到大插入列表0(列表1)中,然后将输出顺序较后(较先)的短期图像按照它们到当前图像的POC距离,从小到大插入到列表0(列表1)中,最后将长期图像插入到末尾。在RPS方面,对于列表0,RefPicSetStCurrBefore中的表项被插入到初始列表中,然后插入RefPicSetStCurrAfter中的表项。之后,如果RefPicSetLtCurr中的表项可用,则添加这些表项。
在HEVC中,当列表中的表项数小于激活参考图像的目标数量(在图像参数集或条带头中指示)时,重复上述过程(已添加到参考图像列表中的参考图像将被再次添加)。当表项数大于目标数时,列表将被截断。
在已初始化参考图像列表之后,可以修改参考图像列表,使得根据参考图像列表修改命令,当前图像的参考图像可以以任何顺序排列,包括一个特定参考图像可能出现在列表中的多个位置的情况。当指示存在列表修改的标志设置为1时,指示固定数目(等于参考图像列表中的目标表项数)的命令,并且每个命令为参考图像列表插入一个表项。命令中通过从RPS指示推导的当前图像的参考图像列表的索引来标识参考图像。这与H.264/AVC中的参考图像列表修改不同,在H.264/AVC中,图像通过图像号(由frame_num语法元素推导)或长期参考图像索引来标识,并且可能需要较少的命令,例如用于交换初始列表的前两个表项或将一个表项插入初始列表的开头并移动其它表项。
参考图像列表中不允许包括TemporalId大于当前图像的任何参考图像。HEVC码流可能由若干个时间子层组成。每个NAL单元属于一个特定的子层,由TemporalId表示(等于temporal_id_plus1-1)。
参考图像管理直接基于参考图像列表。JCT-VC文档JCTVC-G643包括直接使用三个参考图像列表(参考图像列表0、参考图像列表1以及闲置参考图像列表)来管理DPB中的参考图像的方法,从而避免了AVC中的(1)滑动窗口和MMCO过程以及参考图像列表初始化和修改过程,或者(2)HEVC中的参考图像集以及参考图像列表初始化和修改过程的指示和解码过程。
但是,基于参考图像列表(Reference Picture List,RPL)的参考图像管理有缺点。例如,一些基于RPL的参考图像管理方案没有对在码流中指示语法元素进行优化。这样,这种基于RPL的方法比基于RPS的方法等其它显式参考图像管理方法需要更多指示比特。基于RPL的方法的指示效率低下的原因有几个方面。
例如,RPL结构中的一些语法元素使用效率较低的熵译码进行译码。例如,表示短期参考图像(short-term reference picture,STRP)的POC增量值的语法元素的译码使用有符号的整数0阶指数哥伦布译码的语法元素,其中左位优先(例如,se(v)),因为POC增量值可以具有正值或负值。指数哥伦布码(或简称指数哥伦布(Exp-Golomb)码)是一种通用码。要使用指数哥伦布码对任何非负整数x进行编码,第一步是写下二进制数x+1。接下来,对写入的比特进行计数,减一,然后写入前一个位串之前的起始零位。前几个码值是:
当RPL索引(例如,对于参考图像列表0和参考图像列表1的索引)参考参数集(例如,SPS)中的预定义RPL结构时,RPL索引的指示不高效,因为这种方案总是指示两个索引。在许多情况下,可以配置用于RPL0和RPL 1的预定义RPL结构,使得当图像的RPL参考参数集中的预定义RPL结构时,用于RPL 0的索引和用于RPL 1的索引是相同的。
此外,没有进行帧间RPL译码将参考图像列表结构写入经译码的视频码流中。例如,可以在不参考码流中之前指示的(多个)RPL结构的情况下对RPL结构进行译码。
本文描述的几个方面可以单独地和/或组合地应用,可以解决本文描述的问题或缺点。下文将详细介绍这几个方面中的每一个方面。
在一个方面中,当针对STRP对POC增量值进行译码时,在视频码流中分别对符号值和绝对值进行译码。为了指示每个RPL结构中的POC增量值是否具有相同的符号值(例如,同一RPL结构中的所有POC增量值是正的POC增量值,或者是负的POC增量值),在与预定RPL结构相同的参数集(例如,SPS、PPS)中指示标志。该标志可以称为“all_rpl_entries_same_sign_flag”。
当all_rpl_entries_same_sign_flag等于1时,在RPL结构中指示一个标志,表示该RPL结构中的所有表项的符号值(例如,STRP的POC增量值的符号值。当all_rpl_entries_same_sign_flag等于0时,在RPL结构中指示一个标志,表示每个RPL结构中与STRP关联的每个表项的符号值。在一个实施例中,使用无符号整数0阶指数哥伦布译码(例如,ue(v))对RPL结构中STRP表项的POC增量值的绝对值进行译码。
或者,可以指示两个标志,而不是all_rpl_entries_same_sign_flag中的一个标志,每个RPL结构列表一个标志(例如,RPL结构列表为RPL0,RPL结构列表为RPL1)。
对于编码而言,当为参数集中的RPL 0和RPL 1列表创建预定义的RPL结构时,可以配置RPL 0和RPL 1列表中的RPL结构,使得列表0的RPL结构和列表1的RPL结构配对。因此,当图像参考参数集中的预定义RPL结构时,该图像的RPL0和RPL0的索引是相同的。
与上述点相关,标志可以指示引用预定义RPL结构的RPL 1的语法元素是否存在于条带头中。该标志可以称为“rpl1_idx_present_flag”。根据标志的预期范围或持久性,可以在SPS或PPS中指示该标志。在一个实施例中,优选在PPS中指示标志。
根据rpl1_idx_present_flag的值,以下情况适用。当rpl1_idx_present_flag等于1时,与包含该标志的参数集关联的条带头的RPL1是否参考预定义的RPL结构,不在条带头中指示RPL 1的索引,而是从同一条带中RPL 0的对应语法元素中推断的。也就是说,不指示ref_pic_list_sps_flag[1]和ref_pic_list_idx[1],而是分别从ref_pic_list_sps_flag[0]和ref_pic_list_idx[0]的值中推断的(例如,复制)。否则,当rpl1_idx_present_flag等于0时,ref_pic_list_sps_flag[1]和ref_pic_list_idx[1存在于包含该标志的参数集关联的条带头中。
或者,根据rpl1_idx_present_flag的值,以下情况适用。当rpl1_idx_present_flag等于1时,当包含该标志的参数集关联的条带头的RPL 1参考预定义的RPL结构时,则不在条带头中指示RPL 1的索引。相反,RPL1的索引是从相同条带中RPL 0的对应语法元素中推断的。也就是说,不指示ref_pic_list_idx[1],而是分别从ref_pic_list_idx[0]的值中推断(例如,复制)。否则,当rpl1_idx_present_flag等于0时,ref_pic_list_idx[1]存在于包含该标志的参数集关联的条带头中。
标志可以用于指示RPL 1的列表中的RPL结构是否具有与RPL 0的列表中的RPL结构相同的内容。该标志可以称为“rpl1_copy_from_rpl0_flag”。在包含预定义的RPL结构的同一参数集中指示标志,并且应在预定义RPL结构指示之前进行。
根据rpl1_copy_from_rpl0_flag的值,以下情况适用。当rpl1_copy_from_rpl0_flag等于1时,不指示列表1的RPL结构的数量,而是推断与列表0的RPL结构的数量相同。不指示列表1中的RPL结构。相反,在解码器中解析和解码列表0的预定义RPL结构之后,对于列表0的每个RPL结构,创建完全相同的RPL结构副本,并将RPL结构副本分配给具有相同索引的列表1的RPL结构。否则,当rpl1_copy_from_rpl0_flag等于0时,将指示列表1的RPL结构的数量和列表1的RPL结构的数量。
RPL结构的内容可以从另一个RPL结构中预测出来。当参数集中的预定义RPL结构划分为两个列表(例如,列表0的RPL结构列表和列表1的RPL结构列表)时,只有列表0的列表中的RPL结构可以用作对帧间RPL的参考。列表0的列表中的RPL结构只能指同一列表中索引小于该RPL结构索引的另一个RPL结构,而列表1的列表中的RPL结构可以指列表0的列表中的任何RPL结构。在条带头中显式指示的RPL结构可以参考列表0的列表中的任何预定义RPL结构。或者,列表0或列表1的列表中的RPL结构只能参考列表0的列表中索引小于该RPL结构索引的另一个RPL结构。在条带头中显式指示的RPL结构可以参考列表0的列表中的任何预定义RPL结构。
在一个替代方案中,当参数集中的预定义RPL结构划分为两个列表(例如,列表0的列表中的RPL结构列表和列表1的列表中的RPL结构列表)时,列表0的列表中的RPL结构只能参考列表0的列表中索引小于该RPL结构索引的另一个RPL结构。同样,列表1的列表中的RPL结构只能参考列表1的列表中索引小于该RPL结构索引的另一个RPL结构。RPL0的条带头中显式指示的RPL结构可以参考列表0的列表中的任何预定义RPL结构,而RPL1的条带头中显式指示的RPL结构可以参考列表1的列表中的任何预定义RPL结构。
在另一个替代方案中,当参数集中的预定义RPL结构划分为两个列表(例如,在一个列表中指示列表0的列表中的RPL结构列表和列表1的列表中的RPL结构列表)时,RPL结构可以参考列表中索引小于该RPL结构索引的另一个RPL结构。在条带头中显式指示的RPL结构可以参考任何预定义RPL结构。
对于帧间RPL,参考RPL结构索引可以译码为当前RPL结构索引和参考RPL结构索引减1的增量,并使用ue(v)译码进行译码。在一个替代方案中,直接使用u(v)译码对参考RPL索引进行译码。用于表示索引的比特数设置为可参考的列表中RPL结构数的log 2。例如,当只有列表0的列表中的RPL结构可以用作参考时,表示参考RPL索引的比特数为列表0的列表中的RPL结构数的log 2。在另一个替代方案中,参考RPL结构的索引可以根据帧间RPL模式使用ue(v)或u(v)进行译码。
为了支持帧间RPL,每个RPL结构使用下面描述的模式之一进行译码。注意,下文的模式的顺序不一定表示模式的值的顺序。模式指示的译码方式如下。在一个实施例中,模式的指示可以仅使用ue(v)进行译码。在一个实施例中,可以使用u(v)对模式的指示进行译码,其中表示该模式的比特数是所定义模式的总数的log 2。
第一RPL译码模式为帧内译码模式。该模式与其它机制一样,用于指示RPL结构的内容。例如,参见2018年8月17日提交的发明名称为“视频译码中的参考图像管理(Reference Picture Management in Video Coding)”的第62/719,360号中美国临时申请案描述的方法。或者,可以为每个RPL结构指示大于0的整数值,称为granular_val。granularity_val用于对RPL结构中表示STRP的POC增量值进行缩放或除法运算。
第二RPL译码模式是利用参考RPL结构和当前RPL结构中具有相同或一致差异的STRP的POC增量值的码间译码模式。要使用这种模式对RPL进行译码,在码流中指示以下信息。
首先,在码流中指示译码模式和参考索引。参考索引是参考RPL结构的索引。参考索引可以如上所述进行译码。然而,机制也可以将参考索引译码为当前RPL结构索引与参考RPL结构索引减1之间的增量,并译码为ue(v)。也在码流中指示偏移。该偏移为参考RPL结构中STRP的POC增量值与当前RPL结构中STRP的POC增量值之差。偏移的值可以限制为仅正值(例如,如果参考RPL结构中STRP的POC增量值小于当前RPL结构中STRP的POC增量值,则此模式不能用于对当前RPL结构进行译码),仅负值,或者可以是正值或负值。如果将偏移译码为ue(v),则可以用term_minus1来表示。参考RPL结构中每个表项的标志用于指示是否也在码流中指示用作当前RPL结构中的表项。当一个表项是参考RPL结构中的STRP表项,并用作当前RPL结构中的表项时,该表项也是当前RPL结构中的STRP表项,值为参考RPL结构中的表项值减去偏移(如果_minus1术语用于对偏移进行译码,则加1)。当表项为参考RPL结构中的长期参考图像(LTRP)表项,并用作当前RPL结构中的表项时,该表项也是当前RPL结构中的LTRP表项,仅为参考RPL结构中的表项复制该表项的值。
根据当前RPL结构中的表项(例如,STRP和LTRP)是参考RPL结构中的表项的超集,第三RPL编码模式为帧间译码模式。也就是说,参考RPL结构中的所有表项与具有附加的零个或多个表项的第一个X相同(X替换为参考RPL结构中的表项数量)。要使用这种模式对RPL进行译码,在码流中指示以下信息。
首先,在码流中指示译码模式和参考索引。参考索引是参考RPL结构的索引。参考索引可以如上所述进行译码。也在码流中指示附加表项数。附加表项数为当前RPL结构中的表项数与参考RPL结构中的表项数之差。当表项为参考RPL结构中的STRP表项时,该表项也是当前RPL结构中的STRP表项,仅为参考RPL结构中的表项复制该表项的值。当表项为参考RPL结构中的LTRP表项时,该表项也是当前RPL结构中的LTRP表项,仅为参考RPL结构中的表项复制该表项的值。将参考RPL结构中的所有表项复制到当前RPL结构中后,对于每个附加表项,指示以下信息:如果码流中使用了长期参考图像(即,可以通过同一参数集中的标志来指示),则指示附加表项是LTRP表项还是STRP表项。如果该表项是LTRP表项,则指示LTRP表项的POC LSB。否则,指示STRP表项的POC增量。可以指示POC增量的值为前一个STRP表项的增量,或者仅表示当前图像的POC的增量。
根据当前RPL结构中的表项(例如,STRP和LTRP)与参考RPL结构中的表项完全相同或与反转的符号值完全相同,第四RPL编码模式为帧间译码模式。要使用这种模式对RPL进行译码,在码流中指示以下信息。
首先,指示译码模式和参考索引。参考索引是参考RPL结构的索引。参考索引可以如上所述进行译码。可选地,码流中还指示表示符号值是否反转的标志。
当使用前向帧间预测(例如,参考POC值小于当前图像的POC值的图像进行帧间预测)和后向帧间预测(例如,参考POC值大于当前图像的POC值的图像进行帧间预测)对码流进行译码时,以下约束条件适用于RPL中的参考图像。对于图像的每个RPL,该RPL中的所有参考图像都具有相同的帧间预测方向,例如,所有参考图像为前向帧间预测的参考图像,或者所有参考图像为后向帧间预测的参考图像。对于一个图像的一对RPL,RPL0和RPL1中都应该没有参考图像,除非以下条件成立。条件是RPL0和RPL1都包含相同顺序的参考图像。在这种情况下,从RPL1中删除RPL1中的第一个图像(即,最低索引的一个图像)之外的所有参考图像。或者,从RPL0中删除RPL0中的第一个图像(即,最低索引的一个图像)之外的所有参考图像。
本文公开的是使用标志来指定图像顺序编号增量(picture order count,POC)的绝对值的符号值的视频译码技术。根据POC增量的绝对值分别指示符号值。通过分别指示符号值和绝对值,视频译码中的编码器/解码器(又称“编解码器”)相对于当前编解码器,得到改进(例如,使用的比特更少、带宽要求更低、更高效等)。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
图5为视频码流500的实施例的示意图。如本文所使用,视频码流500也可以称为经译码的视频码流、码流或其变体。如图5所示,码流500包括序列参数集(sequenceparameter set,SPS)510、图像参数集(picture parameter set,PPS)512、条带头514和图像数据520。
SPS 510包含对图像序列(sequence of picture,SOP)中的所有图像共同的数据。相反,PPS 512包含的数据是整个图像共同的。条带头514包含当前条带的信息,例如条带类型、将使用哪些参考图像等。SPS 510和PPS 512可以统称为参数集。SPS 510、PPS 512和条带头514是网络抽象层(Network Abstraction Layer,NAL)单元的类型。图像数据包括与正在编码或解码的图像或视频关联的数据。图像数据520可以简单地称为码流500中携带的有效载荷或数据。
在一个实施例中,码流500中的SPS 510、PPS 512、条带头514或其它部分携带多个参考图像列表结构,每个参考图像列表结构包含多个参考图像表项。本领域技术人员将理解,码流500在实际应用中可以包含其它参数和信息。
图6为由视频解码器(例如,视频解码器30)实现的对经译码的视频码流(例如,码流500)进行解码的方法600的实施例。方法600可以在已从视频编码器(例如,视频编码器20)直接或间接接收到经解码码流之后执行。由于分别指示POC增量的绝对值的符号值和POC增量的绝对值,方法600改进了解码过程(例如,使得该解码过程比传统解码过程更高效、更快速等)。这与HEVC和AVC处理POC增量的方式相反。因此,作为实际问题,编解码器的性能得到提高,用户体验更好。
在方框602中,从视频码流(例如,视频码流500)中解析标志。在一个实施例中,标志指定POC增量的绝对值的符号值,所述POC增量与多个参考图像表项中的短期参考图像表项关联。符号值可以是正(+)或负(–)。在一个实施例中,标志的值为一(1)或零(0)。在一个实施例中,正符号值和负符号值指示相对于当前参考图像之前或之后的参考图像。
在一个实施例中,标志指示多个参考图像列表结构中的一个参考图像列表结构中的所有POC增量值的符号值相同。在一个实施例中,标志指示多个参考图像列表结构中的一个参考图像列表结构中的所有POC增量值的符号值为正。在一个实施例中,标志指示多个参考图像列表结构中的一个参考图像列表结构中的所有POC增量值的符号值为负。在一个实施例中,标志被指定为all_rpl_entries_same_sign_flag。
在一个实施例中,在视频码流(例如,码流500)的SPS(例如,SPS 510)中指示标志。在一个实施例中,在同一参数集中指示标志和参考图像列表结构。
在一个实施例中,当标志等于1时,在参考图像列表结构中指示参考图像列表结构中所有表项的符号值。在一个实施例中,当标志等于0时,在参考图像列表结构中指示与所述短期参考图像表项关联的每个表项的符号值。
在方框604中,解析与短期参考图像表项关联的POC增量的绝对值。在一个实施例中,POC增量的绝对值是根据无符号整数0阶指数哥伦布(Exp-Golomb)编码进行解码的。在一个实施例中,分别对标记和绝对值进行解析。即先解析标志,再解析绝对值,反之亦然。
在方框606中,根据POC增量的绝对值的符号值和POC增量的绝对值,生成参考图像列表。参考图像列表可以标识一个或多个图像,例如结合图4所示和描述的图像。
在方框608中,根据参考图像列表执行帧间预测,以生成重建块。在一个实施例中,重建块可用于生成或产生用于在电子设备(例如,智能手机、平板电脑、膝上型计算机、个人计算机等)的显示器或屏幕上向用户显示的图像。
图7为由视频编码器(例如,视频编码器20)实现的对视频码流(例如,码流500)进行编码的方法700的实施例。当图像(例如,来自视频)要编码到视频码流中并且接着发送到视频解码器(例如,视频解码器30)时,可以执行方法700。由于分别指示POC增量的绝对值的符号值和POC增量的绝对值,方法700改进了编码过程(例如,使得该编码过程比传统编码过程更高效、更快速等)。这与HEVC和AVC处理POC增量的方式相反。因此,作为实际问题,编解码器的性能得到提高,用户体验更好。
在方框702中,将多个参考图像列表结构编码到视频码流中,每个参考图像列表结构包含多个参考图像表项。例如,可以在SPS(例如,SPS 510)中指示一个或多个参考图像列表结构,并且这些参考图像列表结构中的每一个可以通过条带头(例如,条带头514)的索引来参考。在一个实施例中,可以在条带头(例如,条带头514)中指示一个或多个参考图像列表结构。
在方框704中,将指定图像顺序编号增量(picture order count,POC)的绝对值的符号值的标志编码到视频码流中,所述图像顺序编号增量与多个参考图像表项中的短期参考图像表项关联。在一个实施例中,标志指示多个参考图像列表结构中的一个参考图像列表结构中的所有POC增量值的符号值相同。在一个实施例中,标志指示多个参考图像列表结构中的一个参考图像列表结构中的所有POC增量值的符号值为正。在一个实施例中,标志指示多个参考图像列表结构中的一个参考图像列表结构中的所有POC增量值的符号值为负。在一个实施例中,标志被指定为all_rpl_entries_same_sign_flag。在一个实施例中,在视频码流的SPS中对标志进行编码。在一个实施例中,在同一参数集中对标志和参考图像列表结构进行编码。
在一个实施例中,当标志等于1时,在参考图像列表结构中对参考图像列表结构中所有表项的符号值进行编码。在一个实施例中,当标志等于0时,在参考图像列表结构中对与短期参考图像表项关联的每个表项的符号值进行编码。
在方框706中,将与短期参考图像表项关联的POC增量的绝对值编码到视频码流中。在一个实施例中,POC增量的绝对值是根据无符号整数0阶指数哥伦布(Exp-Golomb)编码进行编码的。在一个实施例中,分别对标记和绝对值进行编码。即先解析标志,再解析绝对值,反之亦然。
在方框708中,向视频解码器发送视频码流(又称经译码的或经编码的视频码流)。视频解码器接收到码流之后,可以对经编码的视频码流进行解码(例如,如上文所述),以生成或产生用于在电子设备(例如,智能手机、平板电脑、膝上型计算机、个人计算机等)的显示器或屏幕上向用户显示的图像。
图8为由视频解码器(例如,视频解码器30)实现的对经译码的视频码流(例如,码流500)进行解码的方法800的实施例。方法800可以在已从视频编码器(例如,视频编码器20)直接或间接接收到经解码码流之后执行。由于分别指示POC增量的绝对值的符号值和POC增量的绝对值,方法800改进了解码过程(例如,使得该解码过程比传统解码过程更高效、更快速等)。这与HEVC和AVC处理POC增量的方式相反。因此,作为实际问题,编解码器的性能得到提高,用户体验更好。
在方框802中,解析经译码的视频码流中表示的参考图像列表结构。在一个实施例中,参考图像列表结构包括语法元素集。语法元素集描述参考图像,包括图像顺序编号的增量值和符号标志。在一个实施例中,POC的增量值用于获取参考图像的POC。在一个实施例中,符号标志指定POC的增量值的符号值。
在一个实施例中,分别对图像顺序编号的增量值和符号标志进行解码。在一个实施例中,图像顺序编号的增量值是绝对值。
在方框804中,根据参考图像列表结构推导当前条带的参考图像列表。在一个实施例中,参考图像列表包括参考图像。
在框806中,根据参考图像列表获取当前条带的至少一个重建块。在一个实施例中,重建块可用于生成或产生用于在电子设备(例如,智能手机、平板电脑、膝上型计算机、个人计算机等)的显示器或屏幕上向用户显示的图像。
本文公开的技术的描述是相对于最新的VVC WD提供的。此外,还提供了适合于实现本文所公开的技术的定义、语法和语义。
首先,提供了几个定义。帧内随机接入点(intra random access point,IRAP)图像是指每个视频译码层(video coding layer,VCL)NAL单元的nal_unit_type等于IRAP_NUT的经译码图像。长期参考图像(long-term reference picture,LTRP)是标记为“用于长期参考”的图像。非IRAP图像是指每个VCL NAL单元的nal_unit_type等于NON_IRAP_NUT的经译码图像。参考图像列表是用于对P条带或B条带进行帧间预测的参考图像列表。对于非IRAP图像,每个条带生成两个参考图像列表,参考图像列表0和参考图像列表1。图像关联的两个参考图像列表中的所有表项所引用的唯一图像集包括可以用于对关联图像或按解码顺序在关联图像之后的任意图像进行帧间预测的所有参考图像。关于对P条带的条带数据进行解码,仅使用参考图像列表0进行帧间预测。关于对B条带的条带数据进行解码,两个参考图像列表都用于帧间预测。关于对I条带的条带数据进行解码,不采用参考图像列表进行帧间预测。短期参考图像(short-term reference picture,STRP)是标记为“用于短期参考”的图像。
接下来,提供一些缩略语。如本文中所使用,LTRP表示长期参考图像,STRP表示短期参考图像。
本公开的以下部分提供了适合于实现本文所公开的技术的语法和语义。
NAL单元头语法
序列参数集RBSP语法
/>
图像参数集RBSP语法
条带头语法
参考图像列表结构语法
/>
/>
NAL单元头语义
forbidden_zero_bit应等于0。nal_unit_type指定NAL单元包含的RBSP数据结构类型。
表4-1-NAL单元类型码和NAL单元类型分类
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可以大于或等于包含的访问单元的TemporalId,因为所有的图像参数集(pictureparameter set,PPS)都可以包括在码流的开头,其中,第一经译码图像的TemporalId等于0。当nal_unit_type等于PREFIX_SEI_NUT或SUFFIX_SEI_NUT时,TemporalId可以大于或等于所包含接入单元的TemporalId,因为SEI NAL单元可以包含应用于包括接入单元的TemporalId的码流子集的信息,其中所述接入单元的TemporalId值大于包含SEI NAL单元的接入单元的TemporalId值。nuh_reserved_zero_7bits应等于‘0000000’。其它nuh_reserved_zero_7bits值将来可以由ITU-T|ISO/IEC指定。解码器应忽略(即,从码流中删除并丢弃)nuh_reserved_zero_7bits值不等于‘0000000’的NAL单元。
序列参数集RBSP语义
log2_max_pic_order_cnt_lsb_minus4指定解码过程中用于图像顺序编号的变量MaxPicOrderCntLsb的值:MaxPicOrderCntLsb=2(log2_max_pic_order_cnt_lsb_minus4+4)。log2_max_pic_order_cnt_lsb_minus4的取值范围为0到12,包括1和12。sps_max_dec_pic_buffering_minus1+1指定对于图像存储缓冲器的单元中经译码视频序列(codedvideo sequence,CVS),解码图像缓冲器大小的最大值。sps_max_dec_pic_buffering_minus1的取值范围在在0到MaxDpbSize-1,包括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的值,具体如下:MaxLtPicOrderCntLsb=2(log2_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,包括0和32-log2_max_pic_order_cnt_lsb_minus4-4。如果不存在,则推断additional_lt_poc_lsb的值等于0。
all_rpl_entries_same_sign_flag=1指定每个ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中所有STRP表项的符号值相同,其中,符号表示正值或负值。all_rpl_entries_same_sign_flag=0指定每个ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的STRP表项可以具有相同的符号值,也可以不具有相同的符号值。rpl1_copy_from_rpl0_flag=1表示num_ref_pic_lists_in_sps[1]和ref_pic_list_struct(1,rplsIdx,ltrpFlag)不存在,以下情况适用:num_ref_pic_lists_in_sps[1]的值等于num_ref_pic_lists_in_sps[0]的值。推断语法结构ref_pic_list_struct(1,rplsIdx,ltrpFlag)与ref_pic_list_struct(0,rplsIdx,ltrpFlag)的值相同。因此,推断ref_pic_list_struct(1,rplsIdx,ltrpFlag)中的语法元素分别等于ref_pic_list_struct(0,rplsIdx,ltrpFlag)中的语法元素。
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,包括1和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)语法结构。
图像参数集RBSP语义
num_ref_idx_default_active_minus1[i]加1,当i等于0时,指定num_ref_idx_active_override_flag=0的P或B条带的变量NumRefIdxActive[0]的推断值,当i=1时,指定num_ref_idx_active_override_flag=0的B条带的NumRefIdxActive[1]的推断值。num_ref_idx_default_active_minus1[i]的取值范围为0到14,包括0和14。Rpl1_idx_present_flag=0指定ref_pic_list_sps_flag[1]和ref_pic_list_idx[1]不在条带头中。rpl1_idx_present_flag等于1指定ref_pic_list_sps_flag[1]和ref_pic_list_idx[1]可以存在于条带头中。
条带头语义
当存在时,每个条带头语法元素slice_pic_parameter_set_id和slice_pic_order_cnt_lsb的值在经译码图像的所有条带头中应相同。...slice_type根据表7-3指定条带的译码类型。
表7-3–slice_type的名称关联
当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,包括1和MaxPicOrderCntLsb-1。当slice_pic_order_cnt_lsb不存在时,推断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。当rpl1_idx_present_flag=0且存在ref_pic_list_sps_flag[0]时,推断ref_pic_list_sps_flag[1]的值与ref_pic_list_sps_flag[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,包括0和num_ref_pic_lists_in_sps[i]-1。当rpl1_idx_present_flag=0且存在ref_pic_list_sps_flag[0]时,推断ref_pic_list_idx[1]的值与ref_pic_list_idx[0]的值相等。num_ref_idx_active_override_flag=1指定语法元素num_ref_idx_active_minus1[0]用于P和B条带且语法元素num_ref_idx_active_minus1[1]用于B条带。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,包括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]。
参考图像列表结构语义
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]包含到ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)语法结构的列表中,所述ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)语法结构包括于SPS中,及2)SPS为激活SPS的CVS。rpl_mode[listIdx][rplsIdx]指定ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)语法结构中语法元素的译码模式。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,包括0和sps_max_dec_pic_buffering_minus1。strp_entries_sign_flag[listIdx][rplsIdx]等于1指定ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的所有STRP表项的值大于或等于0。strp_entries_sign_flag[listIdx][rplsIdx]等于0指定ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的所有STRP表项的值小于0。
lt_ref_pic_flag[listIdx][rplsIdx][i]=1指定ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)语法结构体为LTRP表项。lt_ref_pic_flag[listIdx][rplsIdx][i]=0表示ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)语法结构为STRP表项。如果不存在,则推断lt_ref_pic_flag[listIdx][rplsIdx][i]的值等于0。码流一致性要求:对于0到NumEntriesInList[listIdx][rplsIdx]-1(包括0和NumEntriesInList[listIdx][rplsIdx]-1)的所有i值应等于num_ltrp_entries[listIdx][rplsIdx]。Strp_entry_sign_flag[listIdx][rplsIdx][i]=1指定ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中第i个表项的值大于或等于0。strp_entries_sign_flag[listIdx][rplsIdx]=0指定ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的第i个表项的值小于0。如果不存在,则推断strp_entries_sign_flag[listIdx][rplsIdx][i]的值等于strp_entries_sign_flag[listIdx][rplsIdx]的值。
当第i个表项是ref_pic_list_struct(rplsIdx,ltrpFlag)语法结构中的第一个STRP表项时,delta_poc_st[listIdx][rplsIdx][i]指定当前图像与第i个表项所参考的图像之间的图像顺序编号值之间的差值,或当第i个表项是STRP表项但不是ref_pic_list_struct(rplsIdx,ltrpFlag)语法结构中的第一个STRP表项时,delta_poc_st[listIdx][rplsIdx][i]指定ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)语法结构中第i个表项所参考的图像和前一个STRP表项所参考的图像的图像顺序编号值之间的插值。delta_poc_st[listIdx][rplsIdx][i]的取值范围为-215到215-1,包括-215和215-1。poc_lsb_lt[listIdx][rplsIdx][i]指定ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)语法结构中第i个表项参考的图像的图像顺序编号取模MaxLtPicOrderCntLsb的值。poc_lsb_lt[listIdx][rplsIdx][i]语法元素长度为Log2(MaxLtPicOrderCntLsb)个比特。数组DeltaPocSt[listIdx][rplsIdx]的推导方式如下:
mode1_ref_rpl_idx_delta_minus1[listIdx][rplsIdx]+1表示rplsIdx的值与参考ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)的索引的差值。当rpl_mode[listIdx][rplsIdx]=1时,变量RefRplIdx的推导方式如下:
RefRplIdx=rplsIdx-(mode1_ref_rpl_idx_delta_minus1[listIdx][rplsIdx]+1)
strp_offset_val_minus1[listIdx][rplsIdx]+1指定从参考ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的每个STRP表项中减去的值,从而计算当前ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)的delta_poc_st[listIdx][rplsIdx][i]的值。ref_entry_used_flag[listIdx][rplsIdx][i]=1指定ref_pic_list_struct(0,RefRplIdx,ltrpFlag)用作ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)。ref_entry_used_flag[listIdx][rplsIdx]=0指定ref_pic_list_struct(0,RefRplIdx,ltrpFlag)中的第i个表项不用作ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)中的表项。
当rpl_mode[listIdx][rplsIdx]=1时,以下内容适用于推断语法元素lt_ref_pic_flag[listIdx][rplsIdx][i]的值。当lt_ref_pic_flag[listIdx][rplsIdx][i]=1时,适用于推断poc_lsb_lt[listIdx][rplsIdx][i]的值,并且适用于推导变量DeltaPocSt[listIdx][rplsIdx][i](当lt_ref_pic_flag[listIdx][rplsIdx][i]=0时)和变量NumEntriesInList[listIdx][rplsIdx]:
mode2_ref_rpl_idx[listIdx][rplsIdx]指定参考ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)的索引。语法元素mode2_ref_rpl_idx[listIdx][rplsIdx]由Ceil(Log2(num_ref_pic_lists_in_sps[0]))个比特表示。当rpl_mode[listIdx][rplsIdx]=2时,变量RefRplIdx的推导方式如下:
RefRplIdx=mode2_ref_rpl_idx[listIdx][rplsIdx]
num_additional_entries[listIdx][rplsIdx]指定NumEntriesInList[listIdx][rplsIdx]和NumEntriesInList[0][RefRplIdx]之间的增量。add_lt_ref_pic_flag[listIdx][rplsIdx][i]用于推断lt_ref_pic_flag[listIdx][rplsIdx][NumEntriesInList[0][RefRplIdx]+i]的值。如果不存在,则推断add_lt_ref_pic_flag[listIdx][rplsIdx][i]的值等于0。add_strp_entry_sign_flag[listIdx][rplsIdx][i]用于推断strp_entry_sign_flag[listIdx][rplsIdx][NumEntriesInList[0][RefRplIdx]+i]的值。如果不存在,则推断add_strp_entries_sign_flag[listIdx][rplsIdx][i]的值等于strp_entries_sign_flag[listIdx][rplsIdx]的值。
Add_delta_poc_st[listIdx][rplsIdx][i]用于推断delta_poc_st[listIdx][rplsIdx][NumEntriesInList[0][RefRplIdx]+i]的值。add_delta_poc_st[listIdx][rplsIdx][i]的取值范围为-215到215-1,包括-215和215-1。add_poc_lsb_lt[listIdx][rplsIdx][i]用于推断poc_lsb_lt[listIdx][rplsIdx][NumEntriesInList[0][RefRplIdx]+i]的值。add_poc_lsb_lt[listIdx][rplsIdx][i]语法元素长度为Log2(MaxLtPicOrderCntLsb)个比特。
当rpl_mode[listIdx][rplsIdx]=2时,以下内容适用于推断语法元素strp_entries_sign_flag[listIdx][rplsIdx]、lt_ref_pic_flag[listIdx][rplsIdx][i]的值。当lt_ref_pic_flag[listIdx][rplsIdx][i]=1时,适用于推断poc_lsb_lt[listIdx][rplsIdx][i]的值,并且适用于推导变量DeltaPocSt[listIdx][rplsIdx][i](当lt_ref_pic_flag[listIdx][rplsIdx][i]=0时)和变量NumEntriesInList[listIdx][rplsIdx]:
mode3_ref_rpl_idx[listIdx][rplsIdx]指定参考ref_pic_list_struct(listIdx,rplsIdx,ltrpFlag)的索引。语法元素mode3_ref_rpl_idx[listIdx][rplsIdx]由Ceil(Log2(num_ref_pic_lists_in_sps[0]))个比特表示。当rpl_mode[listIdx][rplsIdx]=3时,变量RefRplIdx的推导方式如下:
RefRplIdx=mode3_ref_rpl_idx[listIdx][rplsIdx]
当rpl_mode[listIdx][rplsIdx]=1时,以下内容适用于推断语法元素lt_ref_pic_flag[listIdx][rplsIdx][i]的值。当lt_ref_pic_flag[listIdx][rplsIdx][i]=1时,适用于推断poc_lsb_lt[listIdx][rplsIdx][i]的值,并且适用于推导变量DeltaPocSt[listIdx][rplsIdx][i](当lt_ref_pic_flag[listIdx][rplsIdx][i]=0时)和变量NumEntriesInList[listIdx][rplsIdx]:
提供通用的解码过程。
对于当前图像CurrPic,解码过程如下:下面对NAL单元的解码进行说明。以下过程使用条带头层及更高层的语法元素指定以下解码过程:推导与图像顺序编号相关的变量和函数。仅对图像的第一个条带调用此函数。在非IRAP图像的每个条带的解码过程开始时,调用参考图像列表构建的解码过程来推导参考图像列表0(RefPicList[0])和参考图像列表1(RefPicList[1])。调用用于参考图像标识的解码过程,其中参考图像可以标记为“不用于参考”或“用于长期参考”。仅对图像的第一个条带调用此函数。调用译码树单元、缩放、变换、环内滤波等解码过程。当当前图像的所有条带都已解码后,当前解码图像标记为“用于短期参考”。
提供NAL单元解码过程。
这个过程的输入是当前图像的NAL单元及其相关的非VCL NAL单元。该过程的输出是封装在NAL单元内的已解析的RBSP语法结构。每个NAL单元的解码过程从NAL单元中提取RBSP语法结构,然后解析RBSP语法结构。
提供条带解码过程。
图像顺序编号的解码过程如下:
该过程的输出为PicOrderCntVal(当前图像的图像顺序编号)。图像顺序编号用于标识图像、在合并模式下推导运动参数和运动矢量预测,以及用于解码器一致性检查。每个经译码的图像都与一个图像顺序编号变量关联,表示为PicOrderCntVal。当当前图像不是IRAP图像时,变量prevPicOrderCntLsb和prevPicOrderCntMsb推导如下:设置prevTid0Pic为按解码顺序为前一个TemporalId=0的图像。设置变量prevPicOrderCntLsb等于slice_pic_order_cnt_lsb of prevTid0Pic。设置变量prevPicOrderCntMsb等于prevTid0Pic的PicOrderCntMsb。
当前图像的变量PicOrderCntMsb推导如下:如果当前图像为IRAP图像,则PicOrderCntMsb设置为0。否则,PicOrderCntMsb推导如下:
/>
PicOrderCntVal推导如下:PicOrderCntVal=PicOrderCntMsb+slice_pic_order_cnt_lsb。
由于推断出IRAP图像的slice_pic_order_cnt_lsb等于0,并且prevPicOrderCntLsb和prevPicOrderCntCntLsb都设置为0,因此所有IRAP图像的PicOrderCntVal等于0。PicOrderCntVal的取值范围为-231到231-1,包括-231和231-1。在一个CVS中,任意两个经译码的图像的PicOrderCntVal值不相同。
在解码过程中的任何时刻,DPB中任意两个参考图像的PicOrderCntVal&(MaxLtPicOrderCntLsb–1)的值不应相同。PicOrderCnt(picX)函数定义如下:PicOrderCnt(picX)=图像picX的PicOrderCntVal。函数DiffPicOrderCnt(picA,picB)指定如下:DiffPicOrderCnt(picA,picB)=PicOrderCnt(picA)-PicOrderCnt(picB)。码流不应包含导致解码过程中使用的DiffPicOrderCnt(picA,picB)值不在-215到215-1(包括-215到215-1)范围内的数据。设X为当前图像,Y和Z为同一CVS中的另外两个图像,当DiffPicOrderCnt(X,Y)和DiffPicOrderCnt(X,Z)都为正值或都为负值时,Y和Z为相对X的同一输出顺序方向。
提出了一种用于参考图像列表构建的解码过程。
在非IRAP图像的每个条带的解码过程开始时调用此过程。参考图像通过参考索引寻址。参考索引是参考图像列表的索引。解码I条带时,不使用参考图像列表对条带数据进行解码。解码P条带时,仅使用参考图像列表0(即RefPicList[0])对条带数据进行解码。解码B条带时,参考图像列表0和参考图像列表1(即RefPicList[1])都用于对条带数据进行解码。在非IRAP图像的每个条带的解码过程开始时,推导参考图像列表RefPicList[0]和RefPicList[1]。参考图像列表用于标记参考图像或对条带数据进行解码。对于非IRAP图像的I条带,但不是该图像的第一个条带,可以出于码流一致性检查目推导RefPicList[0]和RefPicList[1],但是对于对当前图像或按照解码顺序在当前图像之后的图像进行解码是不必要的。对于不是图像的第一个条带的P条带,可以出于码流一致性检查的目的推导RefPicList[1],但是对于对当前图像或按照解码顺序在当前图像之后的图像进行解码是不必要的。参考图像列表RefPicList[0]和RefPicList[1]构建如下:
对于每个i等于0或1,以下内容适用:RefPicList[i]中的前NumRefIdxActive[i]个表项称为RefPicList[i]中的活动表项,RefPicList[i]中的其它表项称为RefPicList[i]中的非活动表项。RefPicList[i][j]中j的每个表项,范围为0到NumEntriesInList[i][RplsIdx[i]]–1(包括0和NumEntriesInList[i][RplsIdx[i]]–1),如果lt_ref_pic_flag[i][RplsIdx[i]][j]等于0,则称为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]中等于“无参考图像”的每个活动表项,应推断出无意的图像丢失。
以下约束条件是码流一致性的一个要求:对于等于0或1的每个i,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]中的任何表项都不能参考当前图像本身。RefPicList[0]或RefPicList[1]中不存在LTRP表项,其中当前图像的PicOrderCntVal与该表项所参考的图像的PicOrderCntVal差值大于等于224。设置setOfRefPics为RefPicList[0]中的所有表项和RefPicList[1]中的所有表项所参考的唯一图像集。setOfRefPics中的图像个数应小于等于sps_max_dec_pic_buffering_minus1,且同一个图像的所有条带的setOfRefPics应相同。
提出了一种用于参考图像标识的解码过程。
在对条带头进行解码和条带的参考图像列表构建的解码过程之后,但在对条带数据进行解码之前,上述参考图像标识的解码过程每个图像调用一次。该过程可能导致DPB中的一个或多个参考图像被标记为“不用于参考”或“用于长期参考”。DPB中的解码图像可以标记为“不用于参考”、“用于短期参考”或“用于长期参考”,但在解码过程操作的任何给定时刻,这三种图像中只能有一个。将其中一个标记分配给图像会隐式地删除另一个标记(如果适用)。当图像被称作“用于参考”时,统称为标记为“用于短期参考”或“用于长期参考”(但不是两者同时)的图像。当当前图像为IRAP图像时,DPB中当前所有参考图像(如果有)都标记为“未用于参考”。STRP通过PicOrderCntVal值来标识。LTRP通过PicOrderCntVal值的Log2(MaxLtPicOrderCntLsb)LSB来标识。下文适用:对于RefPicList[0]或RefPicList[1]中的每个LTRP表项,当所参考的图像为STRP时,图像标记为“用于长期参考”。DPB中每个没有被RefPicList[0]或RefPicList[1]中任何表项参考的参考图像标识为“未用于参考”。
图9为本发明实施例提供的视频译码设备900(例如,视频编码器20或视频编码器30)的示意图。视频译码设备900适用于实现本文所述的所公开实施例。视频译码设备900包括用于接收数据的入端口910和接收器单元(receiver unit,Rx)920;用于处理数据的处理器、逻辑单元或中央处理单元(central processing unit,CPU)930;用于发送数据的发送器单元(transmitter unit,Tx)940和出端口950;以及用于存储数据的存储器960。视频译码设备900还可以包括耦合到入端口910、接收器单元920、发送器单元940和出端口950的光电(optical-to-electrical,OE)组件和电光(electrical-to-optical,EO)组件,用于光或电信号的出或入。
处理器930通过硬件和软件实现。处理器930可以实现为一个或多个CPU芯片、核心(例如,作为多核处理器)、现场可编程门阵列(field-programmable gate array,FPGA)、专用集成电路(application specific integrated circuit,ASIC)和数字信号处理器(digital signal processor,DSP)。处理器930与入端口910、接收器单元920、发送器单元940、出端口950和存储器960通信。处理器930包括译码模块970。译码模块970实现上文所公开的实施例。例如,译码模块970执行、处理、准备或提供各种联网操作。因此,包括译码模块970为视频译码设备900的功能提供了实质性改进,并且实现了视频译码设备900到不同状态的转换。或者,以存储在存储器960中并由处理器930执行的指令来实现译码模块970。
视频译码设备900还可以包括用于向用户和从用户发送数据的输入和/或输出(input/output,I/O)设备980。I/O设备980可以包括输出设备,例如用于显示视频数据的显示器、用于输出音频数据的扬声器。I/O设备980还可以包括键盘、鼠标、轨迹球等输入设备,和/或用于与此类输出设备交互的对应接口。
存储器960包括一个或多个磁盘、磁带驱动器和固态驱动器,可用作溢出数据存储设备,以在选择执行程序时存储这些程序,以及存储程序执行期间读取的指令和数据。存储器960可以是易失性和/或非易失性的,并且可以是只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、三态内容寻址存储器(ternary content-addressable memory,TCAM)和/或静态随机存取存储器(static random-access memory,SRAM)。
图10为译码模块1000的实施例的示意图。在实施例中,译码模块1000在视频译码设备1002(例如,视频编码器20或视频解码器30)中实现。视频译码设备1002包括接收模块1001。接收模块1001用于接收图像进行编码或接收码流进行解码。视频译码设备1002包括耦合到接收模块1001的发送模块1007。发送模块1007用于将码流发送到解码器或将解码图像发送到显示模块(例如,I/O设备980之一)。
视频译码设备1002包括存储模块1003。存储模块1003耦合到接收模块1001或发送模块1007中的至少一个。存储模块1003用于存储指令。视频译码设备1002包括处理模块1005。处理模块1005耦合到存储模块1003。处理模块1005用于执行存储在存储模块1003中的指令以执行本文公开的方法。
还应当理解,本文中阐述的示例性方法的步骤不一定需要按照所描述的顺序执行,并且这些方法的步骤的顺序应当理解为仅仅是示例性的。同样地,在与本发明各种实施例相一致的方法中,这些方法可以包括其它步骤,并且某些步骤可以省略或合并。
虽然本发明中已提供若干实施例,但应理解,在不脱离本发明的精神或范围的情况下,本发明所公开的系统和方法可以以许多其它特定形式来体现。本发明的示例应被视为说明性而非限制性的,且本发明并不限于本文本所给出的细节。例如,各种元件或组件可以在另一系统中组合或集成,或者某些特征可以省略或不实现。
此外,在不脱离本发明的范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、模块、技术或方法进行组合或合并。展示或论述为彼此耦合或直接耦合或互相通信的其它项可以采用电方式、机械方式或其它方式经由某一接口、设备或中间组件间接地耦合或通信。其它变化、替代和改变的示例可以由本领域的技术人员在不脱离本文精神和所公开的范围的情况下确定。
- 指示图像顺序编号增量的符号值和绝对值
- 在CABAC中使用分离的绝对值和符号(SAVS)对DQP进行二元化