视频译码中的图像头指示
1.相关申请交叉引用
2.本专利申请要求fnu hendry等人于2019年9月24日提交的申请号为62/905,150、发明名称为“视频译码中的图像头指示(signalling of picture header in video coding)”的美国临时专利申请的权益,其内容通过引用结合在本技术中。
技术领域
3.本发明大体上描述了在视频译码中确定码流中的图像的起始点。更具体地,本发明确保在视频译码中可以正确确定多层码流中的图像的起始点。
背景技术:4.即使视频相对较短,也需要大量的视频数据来描述,当数据要在带宽容量有限的通信网络中流式传输或以其它方式传输时,这样可能会造成困难。因此,视频数据通常要先压缩,然后通过现代电信网络进行传输。由于内存资源可能有限,当在存储设备上存储视频时,该视频的大小也可能是一个问题。视频压缩设备通常在信源侧使用软件和/或硬件对视频数据进行编码,然后传输或存储视频数据,从而减少表示数字视频图像所需的数据量。然后,对视频数据进行解码的视频解压缩设备在目的地侧接收压缩数据。在网络资源有限以及对更高视频质量的需求不断增长的情况下,需要改进压缩和解压缩技术,这些改进的技术能够在几乎不影响图像质量的情况下提高压缩比。
技术实现要素:5.第一方面涉及一种由视频解码器实现的解码方法。所述方法包括:所述视频解码器接收包括图像单元(picture unit,pu)的视频码流,其中,所述pu包括具有图像头(picture header,ph)网络抽象层(network abstraction layer,nal)单元类型(ph_nut)的ph nal单元和关联视频编码层(video coding layer,vcl)nal单元,所述ph_nut表示所述ph nal单元的层标识符(identifier,id)等于所述关联vclnal单元的层id以及所述ph nal单元的时间id等于所述pu的时间id;所述视频解码器对所述pu中的经编码图像进行解码,以获取经解码图像。
6.所述方法提供的技术确保了图像单元(picture unit,pu)包括唯一的图像头(picture header,ph)和唯一的图像,这使得具有ph网络抽象层(network abstraction layer,nal)单元类型(ph_nut)的ph nal单元的层标识符(identifier,id)等于关联vcl nal单元的层id以及所述ph nal单元的时间id等于包括所述ph nal单元的所述pu的时间id。使用所述层id和所述时间id,可以确定所述图像在多层码流中的起点,而不会产生译码错误。因此实际上提高了编解码器的性能,用户体验更好。
7.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述pu包括唯一的图像头(picture header,ph),所述经编码图像是所述pu中的唯一图像。
8.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述方法还包括:
根据所述ph nal单元的层id标识所述经编码图像所在的层;根据所述ph nal单元的时间id标识所述经编码图像在所述视频码流中的时间位置。
9.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述关联vcl nal单元包括所述经编码图像中的一个条带。
10.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述ph nal单元是非vcl nal单元。
11.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述ph nal单元包括所述唯一的ph。
12.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述ph nal单元的层id表示为nuh_layer_id。
13.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述vcl nal单元的层id标识包括所述关联vcl nal单元的层。
14.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述方法还包括:在电子设备的显示器上显示所述经解码图像。
15.第二方面涉及一种由视频编码器实现的编码方法。所述方法包括:所述视频编码器生成图像单元(picture unit,pu),其中,所述pu包括具有图像头(picture header,ph)网络抽象层(network abstraction layer,nal)单元类型(ph_nut)的ph nal单元和关联视频编码层(video coding layer,vcl)nal单元,所述ph_nut表示所述ph nal单元的层标识符(identifier,id)等于所述关联vcl nal单元的层id以及所述ph nal单元的时间id等于所述pu的时间id;所述视频编码器将所述pu编码到视频码流中;所述视频编码器存储所述视频码流,以将所述视频码流发送给视频解码器。
16.所述方法提供的技术确保了图像单元(picture unit,pu)包括唯一的图像头(picture header,ph)和唯一的图像,这使得具有ph网络抽象层(network abstraction layer,nal)单元类型(ph_nut)的ph nal单元的层标识符(identifier,id)等于关联vcl nal单元的层id以及所述ph nal单元的时间id等于包括所述ph nal单元的所述pu的时间id。使用所述层id和所述时间id,可以确定所述图像在多层码流中的起点,而不会产生译码错误。因此实际上提高了编解码器的性能,用户体验更好。
17.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述pu包括经编码图像和唯一的图像头(picture header,ph),所述经编码图像是所述pu中的唯一图像。
18.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述ph nal单元的层id标识所述经编码图像在所述视频码流中所在的层,所述ph nal单元的时间id标识所述经编码图像在多层码流中的时间位置。
19.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述关联vcl nal单元包括所述经编码图像中的一个条带,所述ph nal单元是非vcl nal单元。
20.第三方面涉及一种解码设备。所述解码设备包括:接收器,用于接收包括图像单元(picture unit,pu)的视频码流,其中,所述pu包括具有图像头(picture header,ph)网络抽象层(network abstraction layer,nal)单元类型(ph_nut)的ph nal单元和关联视频编码层(video coding layer,vcl)nal单元,所述ph_nut表示所述ph nal单元的层标识符(identifier,id)等于所述关联vcl nal单元的层id以及所述ph nal单元的时间id等于所
述pu的时间id;与所述接收器耦合的存储器,其中,所述存储器存储指令;与所述存储器耦合的处理器,其中,所述处理器用于执行所述指令,以使得所述解码设备执行以下操作:对所述pu中的经编码图像进行解码,以获取经解码图像。
21.所述解码设备提供的技术确保了图像单元(picture unit,pu)包括唯一的图像头(picture header,ph)和唯一的图像,这使得具有ph网络抽象层(network abstraction layer,nal)单元类型(ph_nut)的ph nal单元的层标识符(identifier,id)等于关联vcl nal单元的层id以及所述ph nal单元的时间id等于包括所述ph nal单元的所述pu的时间id。使用所述层id和所述时间id,可以确定所述图像在多层码流中的起点,而不会产生译码错误。因此实际上提高了编解码器的性能,用户体验更好。
22.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述pu包括唯一的图像头(picture header,ph),所述经编码图像是所述pu中的唯一图像。
23.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述处理器用于执行所述指令以使得所述解码设备执行以下操作:根据所述ph nal单元的层id标识所述经编码图像在所述视频码流中所在的层;根据所述ph nal单元的时间id标识所述经编码图像在所述视频码流中的时间位置。
24.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述关联vcl nal单元包括所述经编码图像中的一个条带。
25.第四方面涉及一种编码设备。所述编码设备包括:包括指令的存储器;与所述存储器耦合的处理器,其中,所述处理器用于实现所述指令,以使得所述编码设备执行以下操作:生成图像单元(picture unit,pu),其中,所述pu包括具有图像头(picture header,ph)网络抽象层(network abstraction layer,nal)单元类型(ph_nut)的ph nal单元和关联视频编码层(video coding layer,vcl)nal单元,所述ph_nut表示所述ph nal单元的层标识符(identifier,id)等于所述关联vcl nal单元的层id以及所述ph nal单元的时间id等于所述pu的时间id;将所述pu编码到视频码流中;与所述处理器耦合的发送器,其中,所述发送器用于将所述视频码流发送给视频解码器。
26.所述编码设备提供的技术确保了图像单元(picture unit,pu)包括唯一的图像头(picture header,ph)和唯一的图像,这使得具有ph网络抽象层(network abstraction layer,nal)单元类型(ph_nut)的ph nal单元的层标识符(identifier,id)等于关联vcl nal单元的层id以及所述ph nal单元的时间id等于包括所述ph nal单元的所述pu的时间id。使用所述层id和所述时间id,可以确定所述图像在多层码流中的起点,而不会产生译码错误。因此实际上提高了编解码器的性能,用户体验更好。
27.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述pu包括经编码图像和唯一的图像头(picture header,ph),所述经编码图像是所述pu中的唯一图像。
28.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述ph nal单元的层id标识所述经编码图像在所述视频码流中所在的层,所述ph nal单元的时间id标识所述经编码图像在所述视频码流中的时间位置。
29.第五方面涉及一种译码装置。所述译码装置包括:接收器,用于接收图像进行编码或接收码流进行解码;与所述接收器耦合的发送器,其中,所述发送器用于将所述码流发送给解码器或将经解码图像发送给显示器;与所述接收器或所述发送器中的至少一个耦合的
存储器,其中,所述存储器用于存储指令;与所述存储器耦合的处理器,其中,所述处理器用于执行存储在所述存储器中的所述指令,以执行本文公开的任一方法。
30.所述译码装置提供的技术确保了图像单元(picture unit,pu)包括唯一的图像头(picture header,ph)和唯一的图像,这使得具有ph网络抽象层(network abstraction layer,nal)单元类型(ph_nut)的ph nal单元的层标识符(identifier,id)等于关联vcl nal单元的层id以及所述ph nal单元的时间id等于包括所述ph nal单元的所述pu的时间id。使用所述层id和所述时间id,可以确定所述图像在多层码流中的起点,而不会产生译码错误。因此实际上提高了编解码器的性能,用户体验更好。
31.可选地,根据任一上述方面,在所述方面的另一种实现方式中,所述译码装置还包括用于显示经解码图像的显示器。
32.第六方面涉及一种系统。所述系统包括:编码器;与所述编码器通信的解码器,其中,所述编码器或所述解码器包括根据本文公开的解码设备、编码设备或译码装置。
33.所述系统提供的技术确保了图像单元(picture unit,pu)包括唯一的图像头(picture header,ph)和唯一的图像,这使得具有ph网络抽象层(network abstraction layer,nal)单元类型(ph_nut)的ph nal单元的层标识符(identifier,id)等于关联vcl nal单元的层id以及所述ph nal单元的时间id等于包括所述ph nal单元的所述pu的时间id。使用所述层id和所述时间id,可以确定所述图像在多层码流中的起点,而不会产生译码错误。因此实际上提高了编解码器的性能,用户体验更好。
34.第七方面涉及一种译码模块。所述译码模块包括:接收模块,用于接收图像进行编码或接收码流进行解码;与所述接收模块耦合的发送模块,其中,所述发送模块用于将所述码流发送给解码模块或将经解码图像发送给显示模块;与所述接收模块或所述发送模块中的至少一个耦合的存储模块,其中,所述存储模块用于存储指令;与所述存储模块耦合的处理模块,其中,所述处理模块用于执行存储在所述存储模块中的所述指令,以执行本文公开的任一方法。
35.所述译码模块提供的技术确保了图像单元(picture unit,pu)包括唯一的图像头(picture header,ph)和唯一的图像,这使得具有ph网络抽象层(network abstraction layer,nal)单元类型(ph_nut)的ph nal单元的层标识符(identifier,id)等于关联vcl nal单元的层id以及所述ph nal单元的时间id等于包括所述ph nal单元的所述pu的时间id。使用所述层id和所述时间id,可以确定所述图像在多层码流中的起点,而不会产生译码错误。因此实际上提高了编解码器的性能,用户体验更好。
36.为了清楚起见,任一上述实施例可以与上述其它任何一个或多个实施例组合以创建在本发明范围内的新实施例。
37.根据以下结合附图和权利要求书的详细描述,将会更清楚地理解这些和其它特征。
附图说明
38.为了更全面地理解本发明,现在参考以下结合附图和具体实施方式进行的简要描述,其中,相似的附图标记表示相似的部件。
39.图1为对视频信号进行译码的示例性方法的流程图。
40.图2为用于视频译码的示例性编码和解码(编解码)系统的示意图。
41.图3为示例性视频编码器的示意图。
42.图4为示例性视频解码器的示意图。
43.图5示出了用于空间可适性的多层译码的一个示例。
44.图6示出了用于实现逐步解码刷新(gradual decoding refresh,gdr)技术的视频码流。
45.图7为使用编码器限制条件来支持gdr时的不期望运动搜索的示意图。
46.图8示出了视频码流的一个实施例。
47.图9为对经编码视频码流进行解码的方法的一个实施例。
48.图10为对经编码视频码流进行编码的方法的一个实施例。
49.图11为视频译码设备的示意图。
50.图12为译码模块的一个实施例的示意图。
具体实施方式
51.首先应当理解,尽管下文提供一个或多个实施例的说明性实现方式,但所公开的系统和/或方法可以使用任意数量的技术来实施,无论这些技术是当前已知的还是现有的。本发明决不应限于下文所说明的说明性实现方式、附图和技术,包括本文所说明并描述的示例性设计和实现方式,而是可以在所附权利要求书的范围以及其等效物的完整范围内修改。
52.以下术语的定义如下所述,除非在本文相反的上下文中使用。具体地,以下定义旨在更加清晰地描述本发明。但是,术语在不同的上下文中可能会有不同的描述。因此,以下定义应当视为补充信息,而不应当视为对此处为这些术语提供的描述的任何其它定义进行限制。
53.码流是包括视频数据的一系列比特,这些视频数据会进行压缩以在编码器和解码器之间传输。编码器是一种用于通过编码过程将视频数据压缩为码流的设备。解码器是一种用于通过解码过程从码流中重建视频数据以进行显示的设备。图像是创建帧或其场的亮度样本和/或色度样本组成的阵列。为了清楚论述,正在编码或解码的图像可以称为当前图像。参考图像是包括参考样本的图像,这些样本可以在根据帧间预测和/或层间预测通过参考对其它图像进行译码时使用。参考图像列表是用于帧间预测和/或层间预测的一列参考图像。一些视频译码系统使用两个参考图像列表,这两个参考图像列表可以表示为参考图像列表1和参考图像列表0。参考图像列表结构是包括多个参考图像列表的可寻址语法结构。帧间预测是一种通过参考与当前图像不同的参考图像中的指示样本对当前图像中的样本进行译码的机制,其中,参考图像和当前图像位于同一层。参考图像列表结构条目是参考图像列表结构中表示与参考图像列表关联的参考图像的可寻址位置。条带头(slice header)是经编码条带的一部分,包括与在条带中表示的一个分块内的所有视频数据相关的数据元素。图像参数集(picture parameter set,pps)是包括与整个图像相关的数据的参数集。更具体地,pps是一种包括适用于0个或0个以上完整的经编码图像的语法元素的语法结构,0个还是0个以上完整的经编码图像通过每个图像头中的语法元素确定。序列参数集(sequence parameter set,sps)是包括与图像序列相关的数据的参数集。接入单元
(access unit,au)是与同一显示时间(例如同一图像顺序编号)关联的一个或多个经编码图像的集合,这些图像从解码图像缓冲区(decoded picture buffer,dpb)输出(例如显示给用户)。接入单元分隔符(access unit delimiter,aud)是用于指示au起始或au之间边界的指示符或数据结构。经解码视频序列是一系列已经由解码器重建以准备显示给用户的图像。
54.本文中使用以下缩略语:编码树块(coding tree block,ctb)、编码树单元(coding tree unit,ctu)、编码单元(coding unit,cu)、编码视频序列(coded video sequence,cvs)、联合视频专家组(joint video experts team,jvet)、运动约束分块集(motion-constrained tile set,mcts)、最大传输单元(maximum transfer unit,mtu)、网络抽象层(network abstraction layer,nal)、图像顺序编号(picture order count,poc)、图像参数集(picture parameter set,pps)、原始字节序列载荷(raw byte sequence payload,rbsp)、序列参数集(sequence parameter set,sps)、通用视频编码(versatile video coding,vvc)和工作草案(working draft,wd)。
55.图1为对视频信号进行译码的示例性操作方法100的流程图。具体地,在编码器侧对视频信号进行编码。编码过程通过使用各种机制来压缩视频信号,以减小视频文件大小。文件较小使得压缩视频文件可以发送给用户,同时降低相关的带宽开销。然后,解码器对压缩视频文件进行解码,以重建原始视频信号向终端用户进行显示。解码过程通常是编码过程的逆过程,以使解码器重建的视频信号可以与编码器侧的视频信号保持一致。
56.在步骤101中,将视频信号输入到编码器中。例如,视频信号可以是存储在存储器中的未压缩视频文件。又如,视频文件可以由摄像机等视频捕获设备捕获,并且进行编码以支持视频的直播流传输。视频文件可以同时包括音频分量和视频分量。视频分量包括一系列图像帧。这些图像帧按顺序观看时,给人以运动的视觉效果。这些帧包括以光表示的像素,在本文中称为亮度分量(或亮度样本),还包括以颜色表示的像素,称为色度分量(或颜色样本)。在一些示例中,这些帧还可以包括深度值,以支持三维观看。
57.在步骤103中,将视频分割成块。分割包括将每帧中的像素细分成正方形块和/或矩形块进行压缩。例如,在高效视频编码(high efficiency video coding,hevc)(还称为h.265和mpeg-h第2部分)中,可以先将帧分成编码树单元(coding tree unit,ctu),即预定义大小(例如64个像素
×
64个像素)的块。这些ctu包括亮度样本和色度样本。编码树可以用于将ctu分成块,然后重复细分这些块,直到获得支持进一步编码的配置。例如,帧的亮度分量可以细分到各个块包括相对均匀的亮度值。此外,帧的色度分量可以细分到各个块包括相对均匀的色值因此,分割机制因视频帧的内容而异。
58.在步骤105中,使用各种压缩机制对在步骤103中分割得到的图像块进行压缩。例如,可以使用帧间预测和/或帧内预测。帧间预测的设计利用了公共场景中的对象往往出现在连续帧中这一事实。这样一来,描述参考帧中的对象的块不需要在相邻帧中重复描述。具体地,一个对象(例如一张桌子)可能在多个帧中保持在固定位置上。因此,该桌子被描述一次,而且相邻帧可以重新参考所述参考帧。模式匹配机制可以用于在多个帧上匹配对象。此外,由于对象移动或相机移动等原因,移动对象可以跨多个帧表示。在一个具体示例中,视频可以在多个帧上显示跨屏幕移动的汽车。运动矢量可以用来描述这种移动。运动矢量是一个二维矢量,提供对象在一个帧中的坐标到该对象在参考帧中的坐标的偏移。因此,帧间
预测可以将当前帧中的图像块编码为运动矢量集,这些运动矢量表示当前帧中的图像块与参考帧中的对应块的偏移。
59.帧内预测对公共帧中的块进行编码。帧内预测利用亮度分量和色度分量往往聚集在一个帧中这一事实。例如,一棵树某个部分的一片绿色往往与类似的几片绿色相邻。帧内预测使用多种方向性预测模式(例如,hevc中有33种)、平面模式和直流(direct current,dc)模式。这些方向性模式表示当前块中的样本与对应方向上的相邻块中的样本相似/相同。平面模式表示一行/列(例如平面)中的一系列块可以根据该行的边缘上的相邻块进行插值。平面模式实际上通过使用变化值的相对恒定的斜率表示光/颜色跨行/列的平稳过渡。dc模式用于边界平滑,并表示块与所有相邻块中的样本的平均值相似/相同,这些相邻块与方向性预测模式的角度方向关联。相应地,帧内预测块可以将图像块表示为各种关系预测模式值而不是表示为实际值。此外,帧间预测块可以将图像块表示为运动矢量值而不是表示为实际值。在任一种情况下,预测块在一些情况下可能都无法准确表示图像块。任何差值都存储在残差块中。变换可以应用于这些残差块以进一步压缩文件。
60.在步骤107中,可以使用各种滤波技术。在hevc中,滤波器是根据环内滤波方案使用的。上文描述的基于块的预测可能会在解码器侧产生块状图像。此外,基于块的预测方案可以对块进行编码,然后重建经编码块,以便后续用作参考块。环内滤波方案迭代地将噪声抑制滤波器、去块效应滤波器、自适应环路滤波器和样本自适应偏移(sample adaptive offset,sao)滤波器应用于块/帧。这些滤波器减少了块伪影,这样可以准确地重建经编码文件。此外,这些滤波器减少了重建参考块中的伪影,这样伪影不太可能在根据重建参考块编码的后续块中产生其它伪影。
61.一旦视频信号完成分割、压缩和滤波,则在步骤109中,将所得数据编码到码流中。码流包括上文描述的数据以及支持在解码器侧进行适当的视频信号重建所需要的任何指示数据。例如,这些数据可以包括分割数据、预测数据、残差块和提供译码指令给解码器的各种标志。码流可以存储在存储器中,以便根据请求向解码器发送。码流还可以广播和/或组播到多个解码器。码流的创建是一个迭代过程。相应地,步骤101、步骤103、步骤105、步骤107和步骤109可以在多个帧和块中连续和/或同时执行。图1所示的顺序是为了清楚和便于论述的目的,并非旨在将视频译码过程限制于特定顺序。
62.在步骤111中,解码器接收码流并开始解码过程。具体地,解码器使用熵解码方案将码流转换为对应的语法数据和视频数据。在步骤111中,解码器使用码流中的语法数据来确定帧的分割部分。分割应该与步骤103中的块分割的结果匹配。下面描述在步骤111中使用的熵编码/解码。编码器在压缩过程中做出许多选择,例如,根据一个或多个输入图像中的值的空间放置从若干个可能选择中选择块分割方案。指示确切的选择可能会使用大量的位元(bin)。本文所使用的“二元符号”是一个作为变量的二进制值(例如可以因内容而异的比特值)。熵编码使得编码器丢弃任何明显不适合特定情况的选项,从而留下一组可用选项。然后,为每个可用选项分配一个码字。码字的长度取决于可用选项的数量(例如,1个位元对应2个选项,2个位元对应3到4个选项,以此类推)。然后,编码器对所选选项的码字进行编码。这种方案减小了码字的大小,这是因为码字与预期的一样大,从而唯一地指示从可用选项的小子集中进行选择,而不是唯一地指示从所有可能选项的可能大集合中进行选择。然后,解码器通过以与编码器类似的方式确定这一组可用选项对这一选择进行解码。通过
确定这一组可用选项,解码器可以读取码字并确定编码器做出的选择。
63.在步骤113中,解码器执行块解码。具体地,解码器使用逆变换,以生成残差块。然后,解码器使用残差块和对应的预测块,以根据分割来重建图像块。预测块可以包括编码器在步骤105中生成的帧内预测块和帧间预测块。接着,根据在步骤111中确定的分割数据将重建图像块放置在重建视频信号的帧中。还可以通过上述熵编码在码流中指示用于步骤113的语法。
64.在步骤115中,以类似于编码器侧的步骤107的方式对重建视频信号的帧执行滤波。例如,噪声抑制滤波器、去块效应滤波器、自适应环路滤波器和sao滤波器可以应用于帧,以去除块伪影。一旦对帧进行了滤波,则在步骤117中,可以将视频信号输出到显示器,以供终端用户观看。
65.图2为用于视频译码的示例性编码和解码(编解码)系统200的示意图。具体地,编解码系统200提供功能来支持操作方法100的实现。编解码系统200广义地用于描述编码器和解码器中都使用的组件。编解码系统200接收视频信号并对视频信号进行分割,如参照操作方法100中的步骤101和步骤103所述,得到分割后的视频信号201。然后,编解码系统200在充当编码器时将分割后的视频信号201压缩到经编码码流中,如参照方法100中的步骤105、步骤107和步骤109所述。编解码系统200在充当解码器时从码流中生成输出视频信号,如参照操作方法100中的步骤111、步骤113、步骤115和步骤117所述。编解码系统200包括通用译码器控制组件211、变换缩放和量化组件213、帧内估计组件215、帧内预测组件217、运动补偿组件219、运动估计组件221、缩放和逆变换组件229、滤波器控制分析组件227、环内滤波器组件225、解码图像缓冲区组件223以及标头格式和上下文自适应二进制算术编码(context adaptive binary arithmetic coding,cabac)组件231。这些组件如图所示相耦合。在图2中,黑线表示待编码/解码数据的移动,而虚线表示控制其它组件操作的控制数据的移动。编解码系统200中的组件都可以存在于编码器中。解码器可以包括编解码系统200中的组件的子集。例如,解码器可以包括帧内预测组件217、运动补偿组件219、缩放和逆变换组件229、环内滤波器组件225和解码图像缓冲区组件223。下面对这些组件进行描述。
66.分割后的视频信号201是捕获到的已经通过编码树分割成像素块的视频序列。编码树使用各种划分模式将像素块细分成较小的像素块。然后,这些块可以进一步细分成较小的块。这些块可以称为编码树上的节点。较大的父节点划分成较小的子节点。节点进行细分的次数称为节点/编码树的深度。在一些情况下,划分得到的块可以包括在编码单元(coding unit,cu)中。例如,cu可以是ctu的子部分,包括亮度块、一个或多个红色差色度(cr)块和一个或多个蓝色差色度(cb)块以及cu对应的语法指令。划分模式可以包括二叉树(binary tree,bt)、三叉树(triple tree,tt)和四叉树(quad tree,qt),它们用于根据所使用的划分模式将节点分别分割成不同形状的2个、3个或4个子节点。将分割后的视频信号201转发给通用译码器控制组件211、变换缩放和量化组件213、帧内估计组件215、滤波器控制分析组件227和运动估计组件221进行压缩。
67.通用译码器控制组件211用于根据应用约束条件做出与将视频序列中的图像译码到码流中相关的决策。例如,通用译码器控制组件211管理码率/码流大小相对于重建质量的优化。这些决策可以根据存储空间/带宽可用性和图像分辨率请求做出。通用译码器控制组件211还根据传输速度来管理缓冲区利用率,以缓解缓存欠载和超载问题。为了解决这些
问题,通用译码器控制组件211管理由其它组件进行的分割、预测和滤波。例如,通用译码器控制组件211可以动态增加压缩复杂度以提高分辨率和带宽利用率,或者降低压缩复杂度以降低分辨率和带宽利用率。因此,通用译码器控制组件211控制编解码系统200中的其它组件来平衡视频信号重建质量与码率。通用译码器控制组件211生成控制数据,这些控制数据用于控制其它组件的操作。还将控制数据转发给标头格式和cabac组件231,以编码到码流中,从而指示解码器进行解码所使用的参数。
68.还将分割后的视频信号201发送给运动估计组件221和运动补偿组件219进行帧间预测。分割后的视频信号201的帧或条带可以被分成多个视频块。运动估计组件221和运动补偿组件219相对于一个或多个参考帧中的一个或多个块对所接收到的视频块执行帧间预测译码,以提供时间预测。编解码系统200可以执行多个译码过程,以便为每个视频数据块选择合适的译码模式,等等。
69.运动估计组件221和运动补偿组件219可以高度集成,但是出于概念目的,单独说明。由运动估计组件221执行的运动估计是生成运动矢量的过程,其中,这些运动矢量用于估计视频块的运动。例如,运动矢量可以表示经编码对象相对于预测块的位移。预测块是在像素差方面发现与待编码块高度匹配的块。预测块还可以称为参考块。这种像素差可以通过绝对差异和(sum of absolute difference,sad)、平方差异和(sum of square difference,ssd)或其它差异度量来确定。hevc使用几个经编码对象,包括ctu、编码树块(coding tree block,ctb)和cu。例如,ctu可以被分成ctb,ctb然后被分成cb,cb包含在cu中。cu可以被编码为包括预测数据的预测单元和/或包括cu的变换残差数据的变换单元(transform unit,tu)。运动估计组件221使用率失真分析作为率失真优化过程的一部分来生成运动矢量、pu和tu。例如,运动估计组件221可以确定当前块/帧的多个参考块、多个运动矢量等,并且可以选择具有最佳率失真特性的参考块、运动矢量等。最佳率失真特性平衡了视频重建的质量(例如,压缩造成的数据丢失量)和译码效率(例如,最终编码的大小)。
70.在一些示例中,编解码系统200可以计算存储在解码图像缓冲区组件223中的参考图像的子整数像素位置的值。例如,视频编解码系统200可以对参考图像的四分之一像素位置、八分之一像素位置或其它分数像素位置的值进行插值。因此,运动估计组件221可以相对于整像素位置和分数像素位置执行运动搜索,并输出具有分数像素精度的运动矢量。运动估计组件221通过将经帧间编码条带中的视频块的预测单元的位置与参考图像的预测块的位置进行比较,计算该预测单元的运动矢量。运动估计组件221将计算得到的运动矢量作为运动数据输出到标头格式和cabac组件231进行编码,并作为运动数据输出到运动补偿组件219。
71.运动补偿组件219执行的运动补偿可以涉及根据运动估计组件221所确定的运动矢量获取或生成预测块。在一些示例中,运动估计组件221和运动补偿组件219可以在功能上集成。在接收当前视频块的预测单元的运动矢量时,运动补偿组件219可以定位运动矢量指向的预测块。然后,从被译码的当前视频块的像素值中减去预测块的像素值,得到像素差,如此形成残差视频块。一般而言,运动估计组件221相对于亮度分量执行运动估计,运动补偿组件219将根据亮度分量计算到的运动矢量用于色度分量和亮度分量。将预测块和残差块转发到变换缩放和量化组件213。
72.还将分割后的视频信号201发送给帧内估计组件215和帧内预测组件217。与运动
估计组件221和运动补偿组件219一样,帧内估计组件215和帧内预测组件217可以高度集成,但是出于概念目的,单独说明。帧内估计组件215和帧内预测组件217相对于当前帧中的各块对当前块进行帧内预测,以替代如上所述的由运动估计组件221和运动补偿组件219在各帧之间执行的帧间预测。具体地,帧内估计组件215确定帧内预测模式以对当前块进行编码。在一些示例中,帧内估计组件215从多个测试的帧内预测模式中选择合适的帧内预测模式来对当前块进行编码。然后,将选定的帧内预测模式转发给标头格式和cabac组件231进行编码。
73.例如,帧内估计组件215对各种测试的帧内预测模式进行率失真分析来计算率失真值,并在测试的模式中选择具有最佳率失真特性的帧内预测模式。率失真分析通常确定经编码块与经编码以产生经编码块的原始未编码块之间的失真(或误差)量,以及确定用于产生经编码块的码率(例如比特数)。帧内估计组件215根据各种经编码块的失真和速率计算比率,以确定表现出块的最佳率失真值的帧内预测模式。另外,帧内估计组件215可以用于根据率失真优化(rate-distortion optimization,rdo),使用深度建模模式(depth modeling mode,dmm)对深度图像中的深度块进行译码。
74.帧内预测组件217在编码器上实现时可以根据由帧内估计组件215确定的选定帧内预测模式从预测块中生成残差块,或者在解码器上实现时可以从码流中读取残差块。残差块包括预测块与原始块之间的差值,表示为矩阵。然后,将残差块转发给变换缩放和量化组件213。帧内估计组件215和帧内预测组件217可以对亮度分量和色度分量都进行操作。
75.变换缩放和量化组件213用于进一步压缩残差块。变换缩放和量化组件213将离散余弦变换(discrete cosine transform,dct)、离散正弦变换(discrete sine transform,dst)等变换或者概念上类似的变换应用于残差块,从而产生包括残差变换系数值的视频块。还可以使用小波变换、整数变换、子带变换或其它类型的变换。变换可以将残差信息从像素值域转换到变换域,例如频域。变换缩放和量化组件213还用于根据频率等对变换残差信息进行比例缩放。这种比例缩放涉及将比例缩放因子应用于残差信息,使得在不同的粒度下量化不同的频率信息,这可能会影响重建视频的最终视觉质量。变换缩放和量化组件213还用于量化变换系数以进一步降低码率。量化过程可以减小与部分或全部系数相关的位深度。量化程度可以通过调整量化参数来修改。在一些示例中,变换缩放和量化组件213随后可以对包括量化变换系数的矩阵执行扫描。将量化变换系数转发给标头格式和cabac组件231,以将量化变换系数编码到码流中。
76.缩放和逆变换组件229应用与变换缩放和量化组件213相反的操作以支持运动估计。缩放和逆变换组件229应用逆缩放、逆变换和/或反量化以重建像素域中的残差块。例如,残差块后续用作参考块。该参考块可以成为另一当前块的预测块。运动估计组件221和/或运动补偿组件219可以通过将残差块添加回对应的预测块来计算参考块,以用于后续块/帧的运动估计中。将滤波器应用于重建参考块,以减少在缩放、量化和变换过程中产生的伪影。当预测后续块时,这些伪影可能会使预测不准确(并产生额外的伪影)。
77.滤波器控制分析组件227和环内滤波器组件225将滤波器应用于残差块和/或重建图像块。例如,可以将来自缩放和逆变换组件229的变换残差块与来自帧内预测组件217和/或运动补偿组件219的对应预测块组合以重建原始图像块。然后,可以将滤波器应用于重建图像块。在一些示例中,滤波器还可以应用于残差块。与图2中的其它组件一样,滤波器控制
分析组件227和环内滤波器组件225高度集成,可以一起实现,但出于概念目的分开示出。将应用于重建参考块的滤波器应用于特定空间区域,这些滤波器包括多个参数以调整使用这些滤波器的方式。滤波器控制分析组件227对重建参考块进行分析,以确定需要使用这些滤波器的位置并设置对应的参数。将这些数据作为滤波器控制数据转发给标头格式和cabac组件231进行编码。环内滤波器组件225根据滤波器控制数据使用这些滤波器。这些滤波器可以包括去块效应滤波器、噪声抑制滤波器、sao滤波器和自适应环路滤波器。这些滤波器可以根据示例应用于空域/像素域(例如重建像素块)或频域中。
78.当作为编码器操作时,解码图像缓冲区组件223存储经滤波的重建图像块、残差块和/或预测块,以供后续用于运动估计中,如上所述。当作为解码器操作时,解码图像缓冲区组件223存储经滤波的重建块并将其转发给显示器,这些重建块是输出视频信号的一部分。解码图像缓冲区组件223可以是任何能够存储预测块、残差块和/或重建图像块的存储设备。
79.标头格式和cabac组件231从编解码系统200中的各种组件接收数据,并将这些数据编码到经编码码流中,以发送给解码器。具体地,标头格式和cabac组件231生成各种标头以对控制数据(例如通用控制数据和滤波器控制数据)进行编码。此外,将预测数据(包括帧内预测数据和运动数据)以及以量化变换系数数据为形式的残差数据都编码到码流中。最终的码流包括解码器重建原始分割后的视频信号201所需要的所有信息。这些信息还可以包括帧内预测模式索引表(还称为码字映射表)、各种块的编码上下文的定义、最可能帧内预测模式的指示、分割信息的指示等。这些数据可以通过熵编码来编码。例如,这些信息可以通过上下文自适应可变长度编码(context adaptive variable length coding,cavlc)、cabac、基于语法的上下文自适应二进制算术编码(syntax-based context-adaptive binary arithmetic coding,sbac)、概率区间分割熵(probability interval partitioning entropy,pipe)编码或其它熵编码技术来编码。在熵编码之后,可以将经编码码流发送给另一设备(例如视频解码器)或存档以供后续发送或检索。
80.图3为示例性视频编码器300的框图。视频编码器300可以用于实现编解码系统200的编码功能和/或执行操作方法100中的步骤101、步骤103、步骤105、步骤107和/或步骤109。编码器300对输入视频信号进行分割,得到分割后的视频信号301,其基本上类似于分割后的视频信号201。然后,编码器300中的组件压缩分割后的视频信号301并将其编码到码流中。
81.具体地,将分割后的视频信号301转发给帧内预测组件317进行帧内预测。帧内预测组件317可以基本上类似于帧内估计组件215和帧内预测组件217。还将分割后的视频信号301转发给运动补偿组件321,以根据解码图像缓冲区组件323中的参考块进行帧间预测。运动补偿组件321可以基本上类似于运动估计组件221和运动补偿组件219。将来自帧内预测组件317和运动补偿组件321的预测块和残差块转发给变换和量化组件313进行残差块的变换和量化。变换和量化组件313可以基本上类似于变换缩放和量化组件213。将变换量化残差块和对应的预测块(与相关的控制数据一起)转发给熵编码组件331,以译码到码流中。熵编码组件331可以基本上类似于标头格式和cabac组件231。
82.还将变换量化残差块和/或对应的预测块从变换和量化组件313转发给逆变换和反量化组件329,以重建为参考块供运动补偿组件321使用。逆变换和反量化组件329可以基
本上类似于缩放和逆变换组件229。还将环内滤波器组件325中的环内滤波器应用于残差块和/或重建参考块,具体取决于示例。环内滤波器组件325可以基本上类似于滤波器控制分析组件227和环内滤波器组件225。环内滤波器组件325可以包括多个滤波器,如参照环内滤波器组件225所述。然后,将经滤波的块存储在解码图像缓冲区组件323中,以作为参考块供运动补偿组件321使用。解码图像缓冲区组件323可以基本上类似于解码图像缓冲区组件223。
83.图4为示例性视频解码器400的框图。视频解码器400可以用于实现编解码系统200的解码功能和/或执行操作方法100中的步骤111、步骤113、步骤115和/或步骤117。解码器400从编码器300等接收码流,并根据所述码流生成重建输出视频信号,以向终端用户显示。
84.码流由熵解码组件433接收。熵解码组件433用于执行熵解码方案,例如,cavlc、cabac、sbac、pipe编码或其它熵编码技术。例如,熵解码组件433可以使用标头信息来提供上下文以解析在码流中编码为码字的附加数据。经解码信息包括对视频信号进行解码所需的任何信息,例如,通用控制数据、滤波器控制数据、分割信息、运动数据、预测数据和残差块中的量化变换系数。将量化变换系数转发给逆变换和反量化组件429,以重建成残差块。逆变换和反量化组件429可以类似于逆变换和反量化组件329。
85.将重建残差块和/或预测块转发给帧内预测组件417,以根据帧内预测操作重建为图像块。帧内预测组件417可以类似于帧内估计组件215和帧内预测组件217。具体地,帧内预测组件417使用预测模式来定位帧中的参考块,并将残差块应用于上述结果以重建帧内预测图像块。将重建帧内预测图像块和/或残差块以及对应的帧间预测数据通过环内滤波器组件425转发给解码图像缓冲区组件423。解码图像缓冲区组件423和环内滤波器组件425可以基本上分别类似于解码图像缓冲区组件223和环内滤波器组件225。环内滤波器组件425对重建图像块、残差块和/或预测块进行滤波。这些信息存储在解码图像缓冲区组件423中。将来自解码图像缓冲区组件423的重建图像块转发给运动补偿组件421进行帧间预测。运动补偿组件421可以基本上类似于运动估计组件221和/或运动补偿组件219。具体地,运动补偿组件421使用参考块的运动矢量来生成预测块,并将残差块应用于上述结果以重建图像块。还可以将所得到的重建块转发通过环内滤波器组件425转发给解码图像缓冲区组件423。解码图像缓冲区组件423继续存储其它重建图像块。这些重建图像块可以通过分割信息重建为帧。这些帧还可以放置在一个序列中。该序列作为重建输出视频信号输出到显示器。
86.考虑到上述情况,视频压缩技术通过执行空间(帧内)预测和/或时间(帧间)预测来减少或去除视频序列中固有的冗余。对于基于块的视频译码,视频条带(即视频图像或视频图像的一部分)可以分割成视频块,这些视频块还可以称为树块、编码树块(coding tree block,ctb)、编码树单元(coding tree unit,ctu)、编码单元(coding unit,cu)和/或编码节点。图像中的经帧内编码(i)条带中的视频块是相对于同一图像中的相邻块中的参考样本使用空间预测进行编码的。图像中的经帧间编码(p或b)条带中的视频块可以使用相对于同一图像中的相邻块中的参考样本的空间预测,或者使用相对于其它参考图像中的参考样本的时间预测。图像可以称为帧,参考图像可以称为参考帧。
87.空间预测或时间预测为待编码块产生预测块。残差数据表示待编码原始块与预测块之间的像素差。经帧间编码块是根据运动矢量和残差数据进行编码的,其中,运动矢量指
向形成预测块的参考样本的块,残差数据表示经编码块与预测块之间的差值。经帧内编码块是根据帧内译码模式和残差数据进行编码的。为了进一步压缩,残差数据可以从像素域变换到变换域,从而产生可以接着进行量化的残差变换系数。量化变换系数最初以二维阵列排列,并且可以按顺序扫描,以产生变换系数的一维矢量。熵编码可以用于实现进一步压缩。
88.图像和视频压缩发展迅速,由此产生了各种编码标准。这些视频编码标准包括itu-t h.261、国际标准化组织/国际电工委员会(international organization for standardization/international electrotechnical commission,iso/iec)mpeg-1第2部分、itu-t h.262或iso/iec mpeg-2第2部分、itu-t h.263、iso/iec mpeg-4第2部分、高级视频编码(advanced video coding,avc)(还称为itu-t h.264或iso/iec mpeg-4第10部分)以及高效视频编码(high efficiency video coding,hevc)(还称为itu-t h.265或mpeg-h第2部分)。avc包括可适性视频编码(scalable video coding,svc)、多视图视频编码(multiview video coding,mvc)和多视图视频编码加深度(multiview video coding plus depth,mvc+d)、3d avc(3d-avc)等扩展版本。hevc包括可适性hevc(scalable hevc,shvc)、多视图hevc(multiview hevc,mv-hevc)、3d hevc(3d-hevc)等扩展版本。
89.还有一个新的视频编码标准,名为通用视频编码(versatile video coding,vvc),正在由itu-t和iso/iec的联合视频专家组(joint video experts team,jvet)开发。虽然vvc标准有几个工作草案,但本文特别参考了vvc的一个工作草案(wd),即b.bross、j.chen和s.liu在2019年3月27日的第13次jvet会议上发表的jvet-n1001-v3“通用视频编码(草案5)(versatile video coding(draft 5))”(vvc草案5)。
90.下面论述hevc中的图像分割方案。
91.hevc包括四种不同的图像分割方案,即常规条带、非独立条带、分块和波前并行处理(wavefront parallel processing,wpp)。这些方案可以应用于最大输出单元(maximum transfer unit,mtu)大小匹配、并行处理和降低端到端时延。
92.hevc中的常规条带与h.264/avc中的类似。每个常规条带都封装在自身的nal单元中,且禁用帧内预测(帧内样本预测、运动信息预测、编码模式预测)和跨条带边界的熵编码依赖关系。因此,常规条带可以不依赖于同一图像内的其它常规条带进行重建(但是由于存在循环滤波操作,所以仍然可能存在相互依赖关系)。
93.常规条带为并行化可以使用的唯一工具,它在h.264/avc中也以几乎相同的形式存在。基于常规条带的并行化不需要太多的处理器间或核间通信(一个例外情况是,在解码经预测编码图像时,共享处理器间或核间数据进行运动补偿,由于是帧内预测,这种情况通常比处理器间或核间数据共享需要更多资源)。但是,出于同样的原因,使用常规条带可能会由于条带头的比特成本以及缺乏跨条带边界的预测而产生大量编码开销。此外,由于常规条带具有帧内独立性以及每个常规条带都封装在自身的网络适配层(network adaptation layer,nal)单元中,所以常规条带(与下文提到的其它工具相比)还用作码流分割的关键机制,以匹配mtu大小要求。在许多情况下,实现并行化和mtu大小匹配这两个目标对图像内的条带布局提出了互相矛盾的要求。因此,实现这种情况需要开发下文提到的并行化工具。
94.非独立条带具有短的条带头,并且可以在树块边界处对码流进行分割,而不会中
断任何帧内预测。基本上,非独立条带将常规条带分成多个nal单元,这样可以先完成整个常规条带的编码,然后将该常规条带的一部分发送出去,从而降低端到端时延。
95.在wpp中,图像被分割成单行编码树块(coding tree block,ctb)。熵解码和预测机制可以使用来自其它分割部分中的ctb的数据。对ctb行进行并行解码,可以实现并行处理,其中,ctb行解码的开始延迟了2个ctb,以确保在当前ctb进行解码之前,与当前ctb上方和右侧的ctb相关的数据可用。使用这种交错式开始解码(用图形表示时看起来像波前(wavefront)),当处理器/核与图像内包括的ctb行一样多,就可以实现并行化。由于支持在图像中的相邻树块行之间进行帧内预测,所以可能需要大量处理器间/核间通信来实现帧内预测。与不应用wpp分割时相比,应用wpp分割不会产生额外的nal单元,因此wpp这个工具不能实现mtu大小匹配。但是,如果需要mtu大小匹配,则常规条带可以与wpp一起使用,产生一定的编码开销。
96.分块限定了将图像分割成分块列和分块行的水平和垂直边界。首先将ctb的扫描更改为在一个分块内进行(即按照一个分块的ctb光栅扫描顺序),然后按照图像的分块光栅扫描顺序解码下一个分块中的左上方ctb。与常规条带类似,分块使帧内预测依赖关系以及熵解码依赖关系中断。但是,分块不需要包括在各个nal单元中(在这方面与wpp相同),因此分块不能用于实现mtu大小匹配。每个分块可以由一个处理器/核进行处理,对相邻分块进行解码的处理单元之间的帧内预测所需的处理器间/核间通信仅限于发送共享的条带头(如果条带跨越多个分块)以及共享与环路滤波相关的重建样本和元数据。当条带中包括多个分块或wpp段时,除了条带中的第一个分块或wpp段之外,每个分块或wpp段的入口点(entry point)字节偏移都可以指示在条带头中。
97.为了简单起见,hevc中对四种不同的图像分割方案的应用作了限制。某个编码视频序列不能同时包括hevc中规定的大多数档次(profile)的分块和波前。对于每个条带和分块,必须满足以下条件中的任一个或两个:(1)条带中的所有经编码树块属于同一分块;(2)分块中的所有经编码树块属于同一条带。最后,波前段正好包括一个ctb行,当使用wpp时,如果一个条带在ctb行内开始,则该条带必须在同一ctb行内结束。
98.下面论述vvc中的图像分割方案。
99.hevc包括四种不同的图像分割方案,即条带、分块和砖块以及波前并行处理(wavefront parallel processing,wpp)。这些方案可以应用于最大输出单元(maximum transfer unit,mtu)大小匹配、并行处理和降低端到端时延。
100.vvc中的分块与hevc中的分块类似。分块限定了将图像分割成分块列和分块行的水平和垂直边界。在vvc中,通过对分块进行进一步的水平划分以形成砖块,从而进一步改进了分块的概念。未进一步划分的分块也可以视为砖块。首先将ctb的扫描更改为在一个砖块内进行(即按照一个砖块的ctb光栅扫描顺序),然后按照图像的砖块光栅扫描顺序解码下一个砖块中的左上方ctb。
101.vvc中的条带包括一个或多个砖块。每个条带都封装在自身的nal单元中,且禁用帧内预测(帧内样本预测、运动信息预测、编码模式预测)和跨条带边界的熵编码依赖关系。因此,常规条带可以不依赖于同一图像内的其它常规条带进行重建(但是由于存在循环滤波操作,所以仍然可能存在相互依赖关系)。vvc定义了两种条带,分别是:矩形条带和光栅扫描条带。矩形条带包括一个或多个占据图像中的矩形区域的砖块。光栅扫描条带包括一
个或多个在图像中按砖块光栅扫描顺序排列的砖块。
102.vvc中的wpp特征与hevc中的wpp特征类似,不同的是,hevc wpp有2个ctu时延,而vvc wpp只有1个ctu时延。对于hevc wpp,新的解码线程可以在前一ctu行中的前两个ctu被解码之后开始解码为其分配的ctu行中的第一个ctu。另一方面,对于vvc wpp,新的解码线程可以在前一ctu行中的第一个ctu被解码之后开始解码为其分配的ctu行中的第一个ctu。
103.下面论述在pps中指示分块、砖块和条带。
104.目前在pps中指示分块、砖块和条带(尤其是矩形条带)的情况如下所述:
105.106.[0107][0108]
条带与条带头关联,条带头包括描述解码条带所需的条带属性的语法元素。下面提供条带头语法的示例和条带头语义的介绍部分。
[0109]
通用条带头语法
[0110]
[0111][0112]
通用条带头语义
[0113]
当条带头语法元素slice_pic_parameter_set_id、non_reference_picture_flag、colour_plane_id、slice_pic_order_cnt_lsb、recovery_poc_cnt、no_output_of_prior_pics_flag、pic_output_flag和slice_temporal_mvp_enabled_flag存在时,它们中的每个的值在经编码图像的所有条带头中应是相同的。
[0114]
变量cuqpdeltaval表示包括cu_qp_delta_abs的编码单元(coding unit)的亮度量化参数与编码单元的预测参数之间的差值,该变量被设置为0。变量cuqpoffsetcb、cuqpoffsetcr和cuqpoffsetcbcr表示在确定包括cu_chroma_qp_offset_flag的编码单元的量化参数qp'cb、qp'cr和qp'cbcr的相应值时要使用的值,这些变量全部被设置为0。
[0115]
下面论述接入单元分隔符。
[0116]
在哥德堡举办的第15次jvet会议上,同意vvc码流中的每个图像都存在接入单元分隔符(access unit delimiter,aud)。aud必须存在于每个图像的第一个条带之前,这有助于解码器检测vvc码流中新图像的起始。
[0117]
aud rbsp的语法和语义如下所示。
[0118][0119]
接入单元分隔符用于表示接入单元的起始和接入单元中的经编码图像中存在的条带的类型,其中,接入单元包括接入单元分隔符nal单元。不存在与接入单元分隔符关联的规范性解码过程。
[0120]
pic_type表示包括接入单元分隔符nal单元的接入单元中的经编码图像中的所有条带的slice_type值是表7-3中针对给定pic_type值列出的集合中的值。在符合本规范这一版本的码流中,pic_type的值应等于0、1或2。保留pic_type的其它值,供itu t或iso/iec将来使用。符合本规范这一版本的解码器应忽略spic_type的保留值。
[0121]
表7-3:pic_type的解释
[0122]
pic_type经编码图像中可能存在的slice_type值0i1p和i
2b、p和i
[0123]
下面论述接入单元分隔符的问题。
[0124]
每个图像必须存在aud,导致如下几个问题。
[0125]
每个图像或接入单元只存在一个接入单元分隔符,而且这个接入单元分隔符应该包括在接入单元的第一个nal单元中。然而,如果接入单元包括多个图像,例如在多层码流的情况下,接入单元分隔符只能协助检测每个接入单元,而不是检测每个图像。
[0126]
在单层码流中,由于每个图像都存在一个aud,因此当前在条带头中指示但约束对于同一图像中的所有条带相同的一些语法元素应移动到aud中。这些语法元素可以称为图像级语法元素。然而,考虑到包括aud的nal单元应该是接入单元中的第一个nal单元,因此包括aud的nal单元可以在包括sps、pps等参数集的nal单元之前。aud和参数集的顺序限制了将图像级语法元素从条带头移动到aud中的灵活性,并且这些语法元素的解析可能依赖于在参数集中指示的信息。
[0127]
本文公开的技术是基于itu-t和iso/iec的联合视频专家组(joint video experts team,jvet)正在开发的视频编码标准通用视频编码(versatile video coding,vvc)描述的。然而,这些技术还适用于其它视频编解码规范。
[0128]
如上所述,当码流包括单层时,aud已经用于表示每个au的起始,因此表示图像的起点。然而,aud无法为多层码流提供相同的功能,因为多层码流包括同一au内不同分辨率的多个图像。因此,当接入单元包括多个图像时,例如在多层码流中,aud只能表示au的起点,而不能表示au中某个图像的起点。
[0129]
本文公开的技术确保了图像单元(picture unit,pu)包括唯一的图像头(picture header,ph)和唯一的图像,这使得当网络抽象层(network abstraction layer,nal)单元具有图像头nal单元类型(ph_nut)时,所述nal单元的层标识符(identifier,id)等于关联视频编码层(video coding layer,vcl)nal单元的层id以及所述nal单元的时间id等于包括所述nal单元的所述图像单元(picture unit,pu)的时间id。使用所述层id和所述时间id,可以确定所述图像在多层码流中的起点,而不会产生译码错误。因此,视频译码中的编码器/解码器(又称“编解码器”)相对于现有的编解码器有所改进。实际上,改进的视频译码过程在发送、接收和/或观看视频时提供了更好的用户体验。
[0130]
视频译码中的可适性通常由多层译码技术支持。多层码流包括基本层(base layer,bl)和一个或多个增强层(enhancement layer,el)。可适性的示例包括空间可适性、质量/信噪比(signal-to-noise,snr)可适性、多视图可适性等。当使用的是多层译码技术时,图像或其一部分可以在以下情况下进行译码:(1)不使用参考图像,即,使用帧内预测,(2)参考同一层中的参考图像,即,使用帧间预测,或(3)参考其它一个或多个层中的参考图像,即,使用层间预测。用于当前图像的层间预测的参考图像称为层间参考图像(inter-layer reference picture,ilrp)。
[0131]
图5为基于层的预测500的一个示例的示意图。例如,在块压缩步骤105、块解码步骤113、运动估计组件221、运动补偿组件219、运动补偿组件321和/或运动补偿组件421处执行这种预测以确定mv。基于层的预测500与单向帧间预测和/或双向帧间预测共存,但也在不同层中的图像之间执行。
[0132]
基于层的预测500应用于不同层中的图像511、512、513和514与图像515、516、517
和518之间。在所示的示例中,图像511、512、513和514是层n+1 532的一部分,而图像515、516、517和518是层n 531的一部分。层n 531和/或层n+1 532等是一组图像,这些图像都与类似的大小、质量、分辨率、信噪比、能力等类似的特征值关联。在所示的示例中,与层n 531相比,层n+1 532与更大的图像大小关联。因此,在本示例中,层n+1 532中的图像511、512、513和514比层n 531中的图像515、516、517和518大(例如,高度和宽度更大,因此样本更多)。但是,这些图像可以根据其它特征分布在层n+1 532和层n 531之间。虽然只示出了两层:层n+1 532和层n 531,但一组图像可以根据关联特征划分成任意数量的层。层n+1 532和层n 531也可以通过层id表示。层id是与图像关联的数据项,表示图像是指示层的一部分。因此,图像511至518中的每个图像可以与对应的层id关联,以表示层n+1 532或层n 531中的哪个层包括对应的图像。
[0133]
不同层531和532中的图像511至518被配置为交替显示。因此,当不同层531和532中的图像511至518包括在同一au中时,这些图像可以共用同一时间标识符(identifier,id)。本文所使用的“au”是与同一显示时间关联的从dpb输出的一个或多个经编码图像组成的集合。例如,如果需要较小的图像,则解码器可以解码图像515并在当前显示时间显示;如果需要较大的图像,则解码器可以解码图像511并在当前显示时间显示。因此,高层n+1 532中的图像511至514与低层n 531中的对应图像515至518包括基本上相同的图像数据(虽然图像大小不同)。具体地,图像511与图像515包括基本上相同的图像数据,图像512与图像516包括基本上相同的图像数据,以此类推。
[0134]
图像511至518可以通过参考同一层n 531或n+1 532中的其它图像511至518进行译码。参考同一层中的一个图像对另一个图像进行译码即为帧间预测523,这与单向帧间预测和/或双向帧间预测一致。帧间预测523由实线箭头表示。例如,图像513可以通过将层n+1 532中的图像511、512和/或514中的一个或两个图像作为参考的帧间预测523来译码,其中,单向帧间预测使用一个图像作为参考,和/或双向帧间预测使用两个图像作为参考。此外,图像517可以通过将层n 531中的图像515、516和/或518中的一个或两个图像作为参考的帧间预测523来译码,其中,单向帧间预测使用一个图像作为参考,和/或双向帧间预测使用两个图像作为参考。当在执行帧间预测523时将一个图像作为同一层中的另一个图像的参考时,该图像可以称为参考图像。例如,图像512可以是用于根据帧间预测523对图像513进行译码的参考图像。帧间预测523还可以称为多层上下文中的层内预测。因此,帧间预测523是通过参考与当前图像不同的参考图像中的指示样本对当前图像中的样本进行译码的机制,其中,参考图像和当前图像在同一层中。
[0135]
图像511至518也可以通过参考不同层中的其它图像511至518进行译码。这个过程称为层间预测521,由虚线箭头表示。层间预测521是通过参考一个参考图像中的指示样本对当前图像的样本进行译码的机制,其中,当前图像和参考图像在不同的层中,因此具有不同的层id。例如,低层n 531中的图像可以作为对高层n+1 532中的对应图像进行译码的参考图像。在一个具体的示例中,图像511可以根据层间预测521通过参考图像515进行译码。在这种情况下,图像515作为层间参考图像。层间参考图像是用于层间预测521的参考图像。在大多数情况下,对层间预测521进行约束,使得当前图像(例如图像511)只能使用同一au中包括的且在低层中的一个或多个层间参考图像,例如图像515。当多层(例如,两层以上)可用时,层间预测521可以根据层级比当前图像低的多个层间参考图像对当前图像进行编
码/解码。
[0136]
视频编码器可以使用基于层的预测500来通过帧间预测523和层间预测521的许多不同组合和/或排列对图像511至518进行编码。例如,图像515可以根据帧内预测进行译码。然后,通过将图像515用作参考图像,图像516至518可以根据帧间预测523进行译码。此外,通过将图像515用作层间参考图像,图像511可以根据层间预测521进行译码。然后,通过将图像511用作参考图像,图像512至514可以根据帧间预测523进行译码。因此,参考图像可以作为不同译码机制的单层参考图像和层间参考图像。通过根据低层n 531图像对高层n+1 532图像进行译码,高层n+1 532可以避免使用帧内预测,帧内预测的译码效率比帧间预测523和层间预测521的译码效率低得多。因此,译码效率低的帧内预测可以只限于最小/最低质量的图像,因此只限于对最少量的视频数据进行译码。作为参考图像和/或层间参考图像的图像可以在参考图像列表结构中包括的一个或多个参考图像列表的条目中指示。
[0137]
图5中的每个au 506可以包括几个图像。例如,一个au 506可以包括图像511和515。另一个au 506可以包括图像512和516。实际上,每个au 506是与同一显示时间(例如同一时间id)关联的一个或多个经编码图像的集合,这些图像从解码图像缓冲区(decoded picture buffer,dpb)输出(例如显示给用户)。每个aud 508是用于指示au(例如au 506)起始或au之间边界的指示符或数据结构。
[0138]
以前的h.26x视频编码系列支持根据针对单层译码的一个或多个档次(profile)实现一个或多个单独档次中的可适性。可适性视频编码(scalable video coding,svc)是avc/h.264的可适性扩展版本,支持空间可适性、时间可适性和质量可适性。对于svc,标志在el图像中的每个宏块(macroblock,mb)中指示,以表示el mb是否使用低层中的并置块进行预测。基于并置块的预测可以包括纹理、运动矢量和/或译码模式。svc的实现方式不能在其设计中直接重用未经修改的h.264/avc实现方式。svc el宏块语法和解码过程与h.264/avc语法和解码过程不同。
[0139]
可适性hevc(scalable hevc,shvc)是hevc/h.265标准的扩展版本,支持空间可适性和质量可适性;多视图hevc(multiview hevc,mv-hevc)是hevc/h.265的扩展版本,支持多视图可适性;3d hevc(3d-hevc)是hevc/h.264的扩展版本,支持比mv-hevc更先进、更高效的三维(three dimensional,3d)视频译码。需要说明的是,时间可适性是单层hevc编解码器的组成部分。hevc的多层扩展版本的设计采用了如下理念:用于层间预测的经解码图像仅来自同一接入单元(access unit,au),并作为长期参考图像(long-term reference picture,ltrp),而且分配有一个或多个参考图像列表中的参考索引和当前层中的其它时间参考图像。层间预测(inter-layer prediction,ilp)是通过将参考索引的值设置为参考一个或多个参考图像列表中的一个或多个层间参考图像而在预测单元级实现的。
[0140]
需要说明的是,参考图像重采样和空间可适性特征都需要对参考图像或其一部分进行重采样。参考图像重采样(reference picture resampling,rpr)可以在图像级或编码块级实现。然而,当rpr称为译码特征时,它是单层译码的特征。即便如此,从编解码器设计的角度来看,可以或甚至优选使用相同的重采样滤波器,以实现单层译码的rpr特征和多层译码的空间可适性特征。
[0141]
图6示出了用于实现逐步解码刷新(gradual decoding refresh,gdr)技术600的视频码流650。本文使用的视频码流650还可以称为经编码视频码流、码流或其变体。如图6
所示,码流650包括序列参数集(sequence parameter set,sps)652、图像参数集(picture parameter set,pps)654、条带头656和图像数据658。
[0142]
sps 652包括图像序列(sequence of picture,sop)中的所有图像共有的数据。相比之下,pps 654包括整个图像共有的数据。条带头656包括当前条带的信息,例如条带类型、要使用的参考图像等。sps 652和pps 654可以统称为参数集。sps 652、pps 654和条带头656是网络抽象层(network abstraction layer,nal)单元的类型。nal单元是一种包括要遵循的数据(例如经编码视频数据)类型的指示的语法结构。nal单元分为视频编码层(video coding layer,vcl)nal单元和非vcl nal单元。vcl nal单元包括表示视频图像中样本值的数据,而非vcl nal单元包括任何关联的附加信息,例如,参数集(可以应用于多个vcl nal单元的重要数据)和补充增强信息(定时信息和其它补充数据,其中,补充数据可以增强经解码视频信号的可用性,但不是解码视频图像中样本值所必需的)。本领域技术人员将理解,码流650在实际应用中可以包括其它参数和信息。
[0143]
图6中的图像数据658包括与正被编码或解码的图像或视频关联的数据。图像数据658可以简单地称为码流650中包括的载荷或数据。在一个实施例中,图像数据658包括cvs 608(或clvs),cvs 608包括gdr图像602、一个或多个后置图像604和恢复点图像606。在一个实施例中,gdr图像602称为cvs起始(cvs starting,cvss)图像。cvs 608是视频码流650中的每个编码层视频序列(coded layer video sequence,clvs)的编码视频序列。需要说明的是,当视频码流650包括单层时,cvs和clvs相同。只有在视频码流650包括多层时,cvs和clvs才不同。在一个实施例中,后置图像604可以看作是gdr图像的一种形式,因为这些后置图像在gdr周期中的恢复点图像606之前。
[0144]
在一个实施例中,gdr图像602、后置图像604和恢复点图像606可以限定cvs 608中的gdr周期。在一个实施例中,解码顺序从gdr图像602开始,接着是后置图像604,然后是恢复图像606。
[0145]
cvs 608是从gdr图像602开始的一系列图像(或其部分)并包括下一gdr图像之前或码流结束之前的所有图像(不包括下一gdr图像)。gdr周期是从gdr图像602开始的一系列图像并包括恢复点图像606之前的所有图像(包括恢复点图像606)。cvs 608的解码过程始终从gdr图像602开始。
[0146]
如图6所示,gdr技术600或原理应用于从gdr图像602开始并以恢复点图像606结束的一系列图像。gdr图像602包括刷新/干净区域610和未刷新/脏区域612。刷新/干净区域610包括全部使用帧内预测进行译码的块(即帧内预测块),未刷新/脏区域612包括全部使用帧间预测进行译码的块(即帧间预测块)。
[0147]
紧邻gdr图像602的后置图像604包括刷新/干净区域610,刷新/干净区域610包括使用帧内预测进行译码的第一部分610a和使用帧间预测进行译码的第二部分610b。第二部分610b通过参考cvs 608的gdr周期内的前一图像等中的刷新/干净区域610进行译码。如图所示,随着译码过程沿一致方向(例如从左到右)移动或前进,后置图像604中的刷新/干净区域610扩大,这样未刷新/脏区域612相应地缩小。最终,译码过程到达仅包括刷新/干净区域610的恢复点图像606。需要说明的是,如下文进一步所述,刷新/干净区域610中的译码为帧间预测块的第二部分610b可以仅参考参考图像中的刷新/干净区域610。
[0148]
如图6所示,cvs 608中的gdr图像602、后置图像604和恢复点图像606各自包括在
自己的vcl nal单元630中。cvs 608中的一组vcl nal单元630可以称为接入单元。
[0149]
在一个实施例中,cvs 608中的包括gdr图像602的vcl nal单元630具有gdr nal单元类型(gdr_nut)。也就是说,在一个实施例中,cvs 608中的包括gdr图像602的vcl nal单元630相对于后置图像604和恢复点图像606具有自己唯一的nal单元类型。在一个实施例中,gdr_nut支持码流650从gdr图像602开始,而不是码流650必须从帧内随机接入点(intra random access point,irap)图像开始。将包括gdr图像602的vcl nal单元630指定为gdr_nut可以向解码器等指示cvs 608中的初始vcl nal单元630包括gdr图像602。在一个实施例中,gdr图像602是cvs 608中的初始图像。在一个实施例中,gdr图像602是gdr周期中的初始图像。
[0150]
图7为使用编码器限制条件来支持gdr时的不期望运动搜索700的示意图。如图所示,运动搜索700示出了当前图像702和参考图像704。当前图像702和参考图像704分别包括使用帧内预测进行译码的刷新区域706、使用帧间预测进行译码的刷新区域708和未刷新区域710。刷新区域706、刷新区域708和未刷新区域710分别类似于图6中的刷新/干净区域610中的第一部分610a、刷新/干净区域610中的第二部分610b和未刷新/脏区域612。
[0151]
在运动搜索700的过程中,约束或防止编码器选择导致参考块714中的一些样本位于刷新区域706之外的任何运动矢量712。即使参考块714在预测当前图像702中的当前块716时提供最佳率失真成本标准,这种情况也会发生。因此,图7说明了当使用编码器限制条件来支持gdr时,运动搜索700不是最佳的原因。
[0152]
图8示出了视频码流800的一个实施例。本文使用的视频码流800还可以称为经编码视频码流、码流或其变体。如图8所示,码流800包括至少一个图像单元(picture unit,pu)801。虽然图8示出了其中3个pu 801,但在实际应用中,码流800可以包括不同数量的pu 801。每个pu 801是指一组nal单元,这些nal单元根据指定的分类规则相互关联、在解码顺序中是连续的且正好包括一个经编码图像(例如图像814)。在一个实施例中,每个pu 801具有时间id 819或与时间id 819关联。
[0153]
在一个实施例中,每个pu 801包括以下各项中的一个或多个:解码能力信息(decoding capability information,dci)802、视频参数集(video parameter set,vps)804、序列参数集(sequence parameter set,sps)806、图像参数集(picture parameter set,pps)808、图像头(picture header,ph)812和图像814。dci 802、vps 804、sps 806和pps 808一般都可以称为参数集。在一个实施例中,码流800还可以包括图8未示出的其它参数集,例如自适应参数集(adaption parameter set,aps)。aps是一种包括应用于0个或0个以上条带的语法元素的语法结构,0个还是0个以上条带通过条带头中的0个或0个以上语法元素确定。
[0154]
dci 802还可以称为解码参数集(decoding parameter set,dps)或解码器参数集,是一种包括应用于整个码流的语法元素的语法结构。dci 802包括的参数在视频码流(例如码流800)的生存期内保持不变,视频码流的生存期可以转换为一段视频序列码流的生存期。dci 802可以包括档次、级和子档次信息,以确定最大复杂度互操作点。即使会话中发生视频序列拼接,也会保证永远不会超过最大复杂度互操作点。dci 802还可选地包括约束标志,其中,约束标志表示按照这些标志值指示,约束视频码流使用某些特征。如此,码流可以被标记为不使用某些工具,这样可以在解码器实现方式中实现资源分配,等等。与所有
参数集类似,dci 802在首次被参考时存在,并由视频序列中的第一个图像参考,表示dci 802必须在码流中的第一nal单元之间发送。虽然码流可以包括多个dci 802,但这些dci中的语法元素值在被参考时必须一致。
[0155]
vps 804包括用于增强层的参考图像集构建的解码依赖关系或信息。vps 804提供可适性序列的整体信息,包括提供了哪些类型的操作点、操作点的档次、层和级以及码流的其它一些高级属性,其中,这些高级属性可以用作会话协商和内容选择等的基础。
[0156]
sps 806包括图像序列(sequence of picture,sop)中的所有图像共有的数据。sps 806是一种包括应用于0个或0个以上完整clvs的语法元素的语法结构,0个还是0个以上完整clvs通过pps中的语法元素的内容确定,而且pps由每个图像头中的语法元素参考。相比之下,pps 808包括整个图像共有的数据。pps 808是一种包括应用于0个或0个以上完整经编码图像的语法元素的语法结构,0个还是0个以上完整经编码图像通过每个图像头(例如ph 812)中的语法元素确定。
[0157]
dci 802、vps 804、sps 806和pps 808包括在不同类型的网络抽象层(network abstraction layer,nal)单元中。nal单元是一种包括要遵循的数据(例如经编码视频数据)类型的指示的语法结构。nal单元分为视频编码层(video coding layer,vcl)nal单元和非vcl nal单元。vcl nal单元包括表示视频图像中样本值的数据,而非vcl nal单元包括任何关联的附加信息,例如,参数集(可以应用于多个vcl nal单元的重要数据)和补充增强信息(定时信息和其它补充数据,其中,补充数据可以增强经解码视频信号的可用性,但不是解码视频图像中样本值所必需的)。
[0158]
在一个实施例中,dci 802包括在指定为dci nal单元或dps nal单元的非vcl nal单元中。也就是说,dci nal单元具有dci nal单元类型(nal unit type,nut),而dps nal单元具有dps nut。在一个实施例中,vps 804包括在指定为vps nal单元的非vcl nal单元中。因此,vps nal单元具有vps nut。在一个实施例中,sps 806是指定为sps nal单元的非vcl nal单元。因此,sps nal单元具有sps nut。在一个实施例中,pps 808包括在指定为pps nal单元的非vcl nal单元中。因此,pps nal单元具有pps nut。
[0159]
ph 812是一种包括应用于经编码图像(例如图像814)中的所有条带(例如条带818)的语法元素的语法结构。在一个实施例中,ph 812包括在指定为ph nal单元的新类型非vcl nal单元中。因此,ph nal单元具有ph nut(例如ph_nut)。在一个实施例中,有且只有一个ph 812包括在每个pu 801中。也就是说,pu 801包括单个或唯一ph 812。在一个实施例中,码流800中的每个图像801正好包括一个ph nal单元。
[0160]
在一个实施例中,与ph 812关联的ph nal单元具有时间id 817和层id 813。时间id 817表示ph nal单元在时间上相对于码流(例如码流801)中的其它ph nal单元的位置。层id 813表示包括ph nal单元的层(例如,层531或层532)。在一个实施例中,时间id 817类似于poc,但不同于poc。poc按顺序唯一地标识每个图像。在单层码流中,时间id 817和poc是相同的。在多层码流中(例如,参见图5),同一au中的图像具有不同的poc,但具有相同的时间id 817。
[0161]
在一个实施例中,ph nal单元在包括关联图像814中的第一条带818的vcl nal单元之前。这样建立了ph 812和与ph 812关联的图像814中的条带818之间的关联关系,而不需要在ph 812中指示图像头id,也不需要参考图像头id来得到条带头820。因此,可以推断,
两个ph 812之间的所有vcl nal单元属于同一图像814,而且图像814与两个ph812中的第一个ph 812关联。在一个实施例中,在ph 812之后的第一vcl nal单元包括与ph 812关联并包括在pu中的图像814中的第一条带818(例如位于该图像左上角的条带)。
[0162]
在一个实施例中,ph nal单元在图像级参数集(例如pps)或高级参数集(例如dci(又称dps)、vps、sps、pps等)之后,这些参数集的时间id和层id分别小于ph nal单元的时间id 817和层id 813。因此,这些参数集不会在图像或接入单元中重复。这种排序使得可以直接解析得到ph 812。也就是说,包括与整个图像相关的参数的参数集在码流中位于ph nal单元之前。任何包括一部分图像的参数的内容都位于ph nal单元之后。
[0163]
在一个替代方案中,ph nal单元在图像级参数集和前缀补充增强信息(supplemental enhancement information,sei)消息或高级参数集(例如dci(又称dps)、vps、sps、pps、aps、sei消息等)之后。
[0164]
在一个实施例中,ph 812可以包括表示与ph 812关联的图像814的图像类型的语法元素(例如标志等)。图像类型可以包括但不限于以下类型:即时解码器刷新(instantaneous decoder refresh,idr)图像、清理随机接入(clean random access,cra)图像、gdr图像、只包括帧内预测条带(i条带)的非gdr、非irap图像、只包括单向帧间预测条带(p条带)和i条带的非gdr、非irap图像以及只包括双向帧间预测条带(b条带)、p条带和i条带的非gdr、非irap图像。因此,ph 812中的单个标志能够表示图像(例如图像814)中的所有条带(例如条带818)是否是gdr图像(例如gdr图像602)中的条带等。这样还支持在ph 812中指示gdr图像的恢复点图像顺序编号(picture order count,poc)一次,而不是在每个条带头(例如条带头820)中指示。
[0165]
在一个实施例中,一个或多个语法元素在ph 812中指示,而不是在与ph 812关联的图像814的条带头820中指示。这些语法元素是由图像814参考的pps id、表示图像814是否为参考图像的标志、图像814的颜色平面、图像814的poc最低有效位(least significant bit,lsb)、图像814是gdr图像(例如gdr图像602)时的恢复点poc、表示是否输出图像814之前的图像的标志以及表示图像是否是输出图像的标志。pps id是标识图像814的特定pps的标识符。图像814的颜色平面包括图像814的亮度分量和色度分量(例如,y、cb和cr等)。poc lsb是标识poc的一个比特(或多个比特)。poc是与每个图像(例如图像814)关联的变量,该变量唯一地标识clvs中的所有图像中的关联图像。当从dpb输出关联图像时,poc表示关联图像在输出顺序中的位置相对于同一clvs中的要从dpb输出的其它图像在输出顺序中的位置的关系。恢复点poc是标识恢复点的poc,因此标识恢复点图像。
[0166]
将这些语法元素从条带头820移动到ph 812中可以对整个图像814指示一次语法元素,而不是在每个条带头820中重复这些语法元素。这样减少了冗余并提高了译码效率。
[0167]
图像814是黑白格式的亮度样本阵列或者是4:2:0、4:2:2和4:4:4颜色格式的亮度样本阵列和2个对应的色度样本阵列。在一个实施例中,有且只有一个图像814包括在每个pu 801中。因此,每个pu 801中只有一个ph 812且只有一个对应于该ph 812的图像814。也就是说,pu 801包括单个或唯一图像814。
[0168]
图像814可以是帧或场。然而,在一个cvs 816中,所有图像814都是帧,或者所有图像814都是场。cvs 816是视频码流800中的每个编码层视频序列(coded layer video sequence,clvs)的编码视频序列。需要说明的是,当视频码流800包括单层时,cvs 816和
clvs相同。只有当视频码流800包括多层(例如,如图5所示)时,cvs 816和clvs才不同。
[0169]
pu 801可以共同组成clvs。clvs是具有相同nuh_layer_id值的pu 801组成的序列,该序列包括解码顺序中的编码层视频序列起始(coded layer video sequence start,clvss)pu,后面接着包括0个或0个以上不是clvss pu的pu 801。不是clvss pu的pu 801包括下一clvss pu之前的所有后续pu 801(但不包括下一clvss pu)。clvss pu是经编码图像(例如图像814)是clvss图像的pu 801。clvss图像是经编码图像,即nooutputbeforerecoveryflag等于1的irap图像或nooutputbeforerecoveryflag等于1的gdr图像(例如gdr图像602)。
[0170]
每个图像814包括一个或多个条带818。条带818是图像(例如图像814)中的整数个完整的分块,或者是图像中的一个分块内的整数个连续完整的ctu行。每个条带818只包括在单个nal单元(例如vcl nal单元)中。在一个实施例中,单个nal单元与层id 815关联或具有层id 815。分块(未示出)是图像(例如图像814)中的某一分块列和某一分块行内的ctu组成的矩形区域。分块是通过水平边界和垂直边界分割图像产生的一个部分。分块可以是矩形和/或正方形。具体地,分块包括以直角连接的4条边。这4条边包括两对平行边。此外,一对平行边中的两条边的长度相等。因此,分块可以是任意矩形,其中,正方形是矩形的特例,即4条边的长度相等。图像(image/picture)可以包括一个或多个分块。ctu(未示出)是具有3个样本阵列的图像中的亮度样本组成的1个ctb和色度样本组成的2个对应ctb,或者是黑白图像中或使用3个单独颜色平面和语法结构进行译码的图像中的样本组成的1个ctb,其中,这些语法结构用于对上述样本进行译码。ctb(未示出)是一个n
×
n的样本块,其中,n可以设为某个值,使得一个分量分成多个ctb,这就是一种分割方式。块(未示出)是一个m
×
n(m列
×
n行)的样本(例如像素)阵列,或者是一个m
×
n的变换系数阵列。
[0171]
在一个实施例中,每个条带818包括条带头820。条带头820是经编码条带818的一部分,包括与所有分块相关或者与在条带818中表示的一个分块内的ctu行相关的数据元素。也就是说,条带头820包括条带818的信息,例如条带类型、要使用的参考图像等。
[0172]
图像814及其条带818包括与正被编码或解码的图像或视频关联的数据。因此,图像814及其条带818可以简单地称为码流800中包括的载荷或数据。
[0173]
本领域技术人员将理解,码流800在实际应用中可以包括其它参数和信息。
[0174]
图9为由视频解码器(例如解码器400)实现的解码方法900的一个实施例。方法900可以在从视频编码器(例如视频编码器300)直接或间接接收到码流之后执行。通过确保pu(例如pu 801)包括唯一的ph(例如ph 812)和唯一的图像(例如图像814),这使得具有ph_nut的ph nal单元的层id(例如层id 813)等于关联vcl nal单元的层id(例如层id 815)以及所述ph nal单元的时间id(例如时间id 817)等于包括所述ph nal单元的所述pu的时间id(例如时间id 819),方法900改进了解码过程。使用层id 813/815和时间id 817/819,可以确定所述图像在多层码流中的起点,而不会产生译码错误。因此实际上提高了编解码器的性能,用户体验更好。
[0175]
在步骤902中,所述视频解码器接收包括pu(例如pu 801)的视频码流(例如视频码流800)。所述pu包括具有ph_nut的nal单元。所述ph_nut表示所述ph nal单元的层id 813等于关联vcl nal单元的层id 815以及所述ph nal单元的时间id 817等于pu 801的时间id 819。在一个实施例中,所述ph nal单元是非vcl nal单元。在一个实施例中,所述ph nal单
元包括ph(例如ph 812)。
[0176]
在一个实施例中,所述vcl nal单元的层id 815标识所述关联vcl nal单元所在的层(例如,层531、层532等)。也就是说,所述层id标识包括所述关联vcl nal单元的层。在一个实施例中,所述层id标识所述图像在所述视频码流中(例如,在多层视频码流中)所在的层。在一个实施例中,所述ph nal单元和/或所述vcl nal单元的层id表示为nuh_layer_id。在一个实施例中,所述关联vcl nal单元包括所述图像中的多个条带(例如条带818)中的一个条带。
[0177]
在一个实施例中,所述层id标识经编码图像在所述视频码流中(例如,在多层视频码流中)的时间位置。也就是说,所述时间id标识所述经编码图像在时间上相对于cvs(例如cvs 816)中的其它图像在所述cvs中所处的位置。在一个实施例中,所述pu包括唯一的图像头(picture header,ph)和唯一的图像。使用层id 813/815和时间id 817/819,可以确定所述图像在多层码流中的起点。
[0178]
在步骤904中,所述视频解码器对所述pu中的所述经编码图像进行解码,以获取经解码图像。在一个实施例中,解码所述pu包括:根据dci 802、vps 804、sps 806、pps 808、ph 812和条带头820中的一个或多个中的信息或指令对图像814中的各种条带818进行解码。在解码之后,图像814可以用于生成或产生一个图像或视频序列,以在电子设备(例如,智能手机、平板电脑、笔记本电脑、个人计算机等)的显示器或屏幕上显示给用户。
[0179]
图10为由视频编码器(例如视频编码器300)实现的对视频码流进行编码的方法1000的一个实施例。方法1000可以在(例如视频中的)图像要编码到视频码流中并接着发送给视频解码器(例如视频解码器400)时执行。通过确保pu(例如pu 801)包括唯一的ph(例如ph 812)和唯一的图像(例如图像814),这使得具有ph nal单元类型(ph_nut)的ph nal单元的层id(例如层id 813)等于关联vcl nal单元的层id(例如层id 815)以及所述ph nal单元的时间id(例如时间id 817)等于包括所述ph nal单元的所述pu的时间id(例如时间id 819),方法1000改进了编码过程。使用层id 813/815和时间id 817/819,可以确定所述图像在多层码流中的起点,而不会产生译码错误。因此实际上提高了编解码器的性能,用户体验更好。
[0180]
在步骤1002中,所述视频编码器生成pu(例如pu 801)。所述pu包括具有ph_nut的nal单元。所述ph_nut表示所述nal单元的层id等于关联vcl nal单元的层id以及所述nal单元的时间id等于所述pu的时间id。在一个实施例中,所述nal单元是非vcl nal单元。在一个实施例中,所述nal单元包括ph(例如ph 812)。
[0181]
在一个实施例中,所述vcl nal单元的层id 815标识所述关联vcl nal单元所在的层(例如,层531、层532等)。也就是说,层id 815标识包括所述关联vcl nal单元的层。在一个实施例中,所述ph nal单元的层id 813标识所述图像在所述视频码流中(例如,在多层视频码流中)所在的层。在一个实施例中,所述层id表示为nuh_layer_id。在一个实施例中,所述关联vcl nal单元包括所述图像中的多个条带(例如条带818)中的一个条带。
[0182]
在一个实施例中,所述ph nal单元的层id标识经编码图像在所述视频码流中(例如,在多层视频码流中)的时间位置。也就是说,所述ph nal单元的时间id标识所述经编码图像在时间上相对于cvs(例如cvs 816)中的其它图像在所述cvs中所处的位置。在一个实施例中,所述pu包括唯一的图像头(picture header,ph)和唯一的图像。使用所述层id和所
述时间id,可以确定所述图像在多层码流中的起点。
[0183]
在步骤1004中,所述视频编码器将所述pu编码到视频码流(例如码流800)中。在步骤1006中,所述视频编码器存储所述视频码流,以将所述视频码流发送给视频解码器。所述视频码流可以存储在存储器中,直到所述视频码流被发送给所述视频解码器。在所述视频解码器接收到所述经编码视频码流之后,所述经编码视频码流可以解码(例如,如上所述)生成或产生一个图像或视频序列,以在电子设备(例如,智能手机、平板电脑、笔记本电脑、个人计算机等)的显示器或屏幕上显示给用户。
[0184]
以下语法和语义可以用于实现本文公开的实施例。以下描述是相对于基础文本展开的,该基础文本是指最新的vvc草案规范。换句话说,下文中只描述了新增部分,而基础文本中的文本则按原样适用,并未在下文中提及。相对于基础文本新增的文本则以粗体形式显示,删除的文本则以斜体形式显示。
[0185]
图像头rbsp语法
[0186][0187]
条带头rbsp语法
[0188][0189]
图像头rbsp语义
[0190]
图像头包括经编码图像中的所有条带共有的信息,解码顺序中的下一vcl nal单元是第一个经编码条带。
[0191]
pic_type表示表7-3中针对给定pic_type值列出的经编码图像的特征。在符合本规范这一版本的码流中,pic_type的取值范围应为0至5(包括端值)。保留pic_type的其它值,以供itu-t或iso/iec将来使用。符合本规范这一版本的解码器应忽略spic_type的保留值。
[0192]
表7-3:pic_type的解释
[0193]
pic_type经编码图像的特征0经编码图像是idr图像。1经编码图像是cra图像。2经编码图像是gdr图像。3经编码图像是非irap、非gdr图像且只包括i条带。4经编码图像是非irap、非gdr图像且只包括p条带和i条带。5经编码图像是非irap、非gdr图像且包括b条带、p条带和i条带。
[0194]
pic_parameter_set_id表示使用中的pps的pps_pic_parameter_set_id值。pic_parameter_set_id的取值范围应为0至63(包括端值)。
[0195]
non_reference_picture_flag等于1表示与图像头关联的图像从不用作参考图像。non_reference_picture_flag等于0表示该图像可以用作参考图像,也可以不用作参考图像。
[0196]
当separate_colour_plane_flag等于1时,colour_plane_id表示与图像头关联的图像相关的颜色平面。colour_plane_id的取值范围应为0至2(包括端值)。colour_plane_id值0、1和2分别对应于y平面、cb平面和cr平面。
[0197]
注:具有不同colour_plane_id值的图像的解码过程之间不存在依赖关系。
[0198]
pic_order_cnt_lsb表示与图像头关联的图像的图像顺序编号对maxpicordercntlsb取模。语法元素pic_order_cnt_lsb的长度为(log2_max_pic_order_cnt_lsb_minus4+4)个比特。pic_order_cnt_lsb的取值范围应为0至maxpicordercntlsb
–
1(包括端值)。
[0199]
recovery_poc_cnt表示输出顺序中的经解码图像的恢复点。如果cvs中存在解码顺序在当前gdr图像之后且picordercntval等于当前gdr图像的picordercntval加上recovery_poc_cnt值的图像pica,则图像pica称为恢复点图像。否则,输出顺序中的picordercntval大于当前图像的picordercntval加上recovery_poc_cnt值的第一个图像称为恢复点图像。恢复点图像在解码顺序中应不在当前gdr图像之前。recovery_poc_cnt的取值范围应为0至maxpicordercntlsb
–
1(包括端值)。
[0200]
变量rppicordercntval推导如下:
[0201]
rppicordercntval=picordercntval+recovery_poc_cnt
ꢀꢀ
(7-94)
[0202]
如附件c详述,在对不是码流中的第一个图像的clvss图像进行解码之后,no_output_of_prior_pics_flag会影响解码图像缓冲区中的先前经解码图像的输出。
[0203]
如附件c详述,pic_output_flag会影响经解码图像输出和移除过程。当pic_output_flag不存在时,pic_output_flag被推断为1。
[0204]
pic_temporal_mvp_enabled_flag表示时间运动矢量预测值是否可以用于帧间预测。如果pic_temporal_mvp_enabled_flag等于0,则应约束与图像头关联的图像的语法元素,使得在对图像进行解码时不使用时间运动矢量预测值。否则(pic_temporal_mvp_enabled_flag等于1),时间运动矢量预测值可以用于对该图像进行解码。
[0205]
当pic_temporal_mvp_enabled_flag不存在时,以下内容适用:
[0206]
–
如果sps_temporal_mvp_enabled_flag等于0,则pic_temporal_mvp_enabled_
flag值被推断为0。
[0207]
–
否则(sps_temporal_mvp_enabled_flag等于1),pic_temporal_mvp_enabled_flag值被推断为pps_temporal_mvp_enabled_idc
–
1。
[0208]
nal单元头语义
[0209]
nuh_layer_id表示vcl nal单元所在层的标识符或非vcl nal单元所在层的标识符。
[0210]
经编码图像的所有vcl nal单元应具有相同的nuh_layer_id值。经编码图像或层接入单元的nah_layer_id值是该经编码图像或层接入单元的vcl nal单元的nah_layer_id值。
[0211]
当nal_unit_type等于ph_nut时,nuh_layer_id值应等于包括图像头nal单元的层接入单元的vcl nal单元的nuh_layer_id值。
[0212]
表7-1:nal单元类型编码和nal单元类型类别
[0213]
[0214][0215]
nuh_temporal_id_plus1
–
1表示nal单元的时间标识符。
[0216]
nuh_temporal_id_plus1值应不等于0。
[0217]
变量temporalid推导如下:
[0218]
temporalid=nuh_temporal_id_plus1
–1ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(7-1)
[0219]
当nal_unit_type的范围为idr_w_radl至rsv_irap_vcl13(包括端值)时,temporalid应等于0。
[0220]
当nal_unit_type等于stsa_nut时,temporalid应不等于0。
[0221]
层接入单元的所有vcl nal单元应具有相同的temporalid值。经编码图像或层接入单元的temporalid值是该经编码图像或层接入单元的vcl nal单元的temporalid值。【编注(yk):检查是否应要求一个au中的所有层au具有相同的temporalid值。】子层表示的temporalid值是子层表示中的所有vcl nal单元的最大temporalid值。
[0222]
非vcl nal单元的temporalid值约束如下:
[0223]
–
如果nal_unit_type等于dps_nut、vps_nut或sps_nut,则temporalid等于0,并且包括nal单元的层接入单元的temporalid应等于0。
[0224]
–
如果nal_unit_type等于ph_nut,则temporalid应等于包括nal单元的层接入单元的temporalid。
[0225]
–
当nal_unit_type不等于eos_nut且不等于eob_nut时,temporalid应大于或等于包括nal单元的层接入单元的temporalid。
[0226]
注5:当nal单元是非vcl nal单元时,temporalid值等于该非vcl nal单元所在的所有层接入单元的最小temporalid值。当nal_unit_type等于pps_nut或aps_nut时,temporalid可以大于或等于包括nal单元的层接入单元的temporalid,因为所有pps和aps都可以包括在码流的起始处,其中,第一个经编码图像的temporalid等于0。当nal_unit_type等于prefix_sei_nut或suffix_sei_nut时,temporalid可以大于或等于包括nal单元的层接入单元的temporalid,因为sei nal单元可以包括应用于包括层接入单元的码流子集的信息,其中,这些层接入单元的temporalid值大于包括sei nal单元的层接入单元的temporalid。
[0227]
nal单元和经编码图像的顺序以及nal单元和经编码图像与层接入单元和接入单元的关联关系
[0228]
本节详述cvs中的nal单元和经编码图像的顺序以及nal单元和经编码图像与层接入单元和接入单元的关联关系。这些cvs符合附件a详述的一个或多个档次并使用第2节至第10节详述的解码过程进行解码。
[0229]
层接入单元包括一个图像头nal单元、一个经编码图像以及0个或0个以上vcl nal单元和0个或0个以上非vcl nal单元,其中,经编码图像包括一个或多个vcl nal单元。vcl nal单元与经编码图像的关联关系如第7.4.2.4.4节所述。
[0230]
接入单元包括接入单元分隔符nal单元和按照nuh_layer_id从小到大排列的一个或多个层接入单元。
[0231]
码流中的第一个接入单元从码流的第一个nal单元开始。
[0232]
假设firstpicheadernalunitinau是图像头nal单元,即推导出的picordercntval与前一经编码图像的picordercntval不同的第一个经编码图像的图像头。在firstpicheadernalunitinau之前且在firstpicheadernalunitinau之前的最后一个vcl nal单元之后的以下任一nal单元中的第一个nal单元(如果存在)表示新接入单元的起始:
[0233]
–
dps nal单元(如果存在),
[0234]
–
vps nal单元(如果存在),
[0235]
–
sps nal单元(如果存在),
[0236]
–
pps nal单元(如果存在),
[0237]
–
aps nal单元(如果存在),
[0238]
–
前缀sei nal单元(如果存在),
[0239]
–
nal_unit_type的范围为rsv_nvcl_25..rsv_nvcl_26的nal单元(如果存在),
[0240]
–
nal_unit_type的范围为unspec28..unspec29的nal单元(如果存在)。
[0241]
注:在firstpicheadernalunitinau之前且在firstpicheadernalunitinau之前的最后一个vcl nal单元之后的第一个nal单元(如果存在)只能是上述列出的其中一个nal单元。
[0242]
当不存在上述在firstpicheadernalunitinau之前且在
firstpicheadernalunitinau之前的最后一个vcl nal单元之后的nal单元(如果存在)时,firstpicheadernalunitinau开始新接入单元。
[0243]
经编码图像和层接入单元或接入单元内的非vcl nal单元的顺序应遵守以下约束条件:
[0244]
–
每个层接入单元应有且仅有一个图像头nal单元,该图像头nal单元应在该层接入单元的第一个vcl nal单元之前。
[0245]
–
当层接入单元中存在任意dps nal单元、vps nal单元、sps nal单元或pps nal单元时,这些nal单元应在该层接入单元的图像头nal单元之前。
[0246]
–
当层接入单元中存在任意aps nal单元、前缀sei nal单元、nal_unit_type的范围为rsv_nvcl_25..rsv_nvcl_26的nal单元或nal_unit_type的范围为unspec28..unspec29的nal单元时,这些nal单元应不在该层接入单元的最后一个vcl nal单元之后。
[0247]
–
层接入单元中的nal_unit_type等于suffix_sei_nut或rsv_nvcl_27的nal单元或nal_unit_type的范围为unspec30..unspec31的nal单元应不在该层接入单元的第一个vcl nal单元之前。
[0248]
–
当接入单元中存在序列结束nal单元时,该序列结束nal单元应是该接入单元内的所有nal单元中的最后一个nal单元,而不是码流结束nal单元(如果存在)。
[0249]
–
当接入单元中存在码流结束nal单元时,码流结束nal单元应是该接入单元中的最后一个nal单元。
[0250]
条带头rbsp语义
[0251]
当条带头语法元素slice_pic_parameter_set_id、non_reference_picture_flag、colour_plane_id、slice_pic_order_cnt_lsb、recovery_poc_cnt、no_output_of_prior_pics_flag、pic_output_flag和slice_temporal_mvp_enabled_flag存在时,它们中的每个的值在经编码图像的所有条带头中应是相同的。
[0252]
变量cuqpdeltaval表示包括cu_qp_delta_abs的编码单元(coding unit)的亮度量化参数与编码单元的预测参数之间的差值,该变量被设置为0。变量cuqpoffset
cb
、cuqpoffset
cr
和cuqpoffset
cbcr
表示在确定包括cu_chroma_qp_offset_flag的编码单元的量化参数qp'
cb
、qp'
cr
和qp'
cbcr
的相应值时要使用的值,这些变量全部被设置为0。
[0253]
slice_pic_parameter_set_id表示使用中的pps的pps_pic_parameter_set_id的值。slice_pic_parameter_set_id的取值范围应为0至63(包括端值)。
[0254]
码流一致性的要求为:当前图像的temporalid值应大于或等于pps_pic_parameter_set_id等于slice_pic_parameter_set_id的pps的temporalid值。
[0255]
slice_address表示条带的条带地址。当slice_address不存在时,slice_address的值被推断为0。
[0256]
如果rect_slice_flag等于0,则以下内容适用:
[0257]
–
条带地址是公式(7-59)所示的砖块id。
[0258]
–
slice_address的长度为ceil(log2(numbricksinpic)个比特。
[0259]
–
slice_address的取值范围应为0至numbricksinpic
–
1(包括端值)。
[0260]
否则(rect_slice_flag等于1),以下内容适用:
[0261]
–
条带地址为条带的条带id。
[0262]
–
slice_address的长度为(signalled_slice_id_length_minus1+1)个比特。
[0263]
如果signalled_slice_id_flag等于0,则slice_address的取值范围应为0至num_slices_in_pic_minus1(包括端值)。否则,slice_address的取值范围为0到2
(signalled_slice_id_length_minus1+1)
–
1(包括端值)。
[0264]
码流一致性的要求为以下约束条件适用:
[0265]
–
slice_address的值应不等于同一经编码图像中的任何其它经编码条带nal单元的slice_address值。
[0266]
–
当rect_slice_flag等于0时,图像中的条带应按照条带的slice_address值从小到大排列。
[0267]
–
图像中的条带的形状应使得每个砖块在解码时应使其整个左边界和整个上边界由图像边界组成或由先前一个或多个经解码砖块的边界组成。
[0268]
num_bricks_in_slice_minus1如果存在表示条带中砖块的数量减1。num_bricks_in_slice_minus1的取值范围应为0至pnumbricksinpic
–
1(包括端值)。当rect_slice_flag等于0且single_brick_per_slice_flag等于1时,num_bricks_in_slice_minus1的值被推断为0。当single_brick_per_slice_flag等于1时,num_bricks_in_slice_minus1的值被推断为0。
[0269]
变量numbricksincurrslice表示当前条带中砖块的数量,slicebrickidx[i]表示当前条带中第i个砖块的砖块索引,两者推导如下:
[0270][0271]
变量subpicidx、subpicleftboundarypos、subpictopboundarypos、subpicrightboundarypos和subpicbotboundarypos推导如下:
[0272]
[0273][0274]
non_reference_picture_flag等于1表示包括条带的图像从不用作参考图像。non_reference_picture_flag等于0表示包括条带的图像可以用作参考图像,也可以不用作参考图像。
[0275]
slice_type表示条带的编码类型,如表7-11所示。
[0276]
表7-11:名称与slice_type的关联关系
[0277]
slice_typeslice_type的名称0b(b条带)1p(p条带)2i(i条带)
[0278]
当nal_unit_type的取值范围为idr_w_radl至cra_nut(包括端值)且当前图像是接入单元中的第一个图像时,slice_type应等于2。当slice_type不存在时,slice_type的值被推断为2。
[0279]
当separate_colour_plane_flag等于1时,colour_plane_id表示与当前条带rbsp关联的颜色平面。colour_plane_id的取值范围应为0至2(包括端值)。colour_plane_id值0、1和2分别对应于y平面、cb平面和cr平面。
[0280]
注:具有不同colour_plane_id值的图像的解码过程之间不存在依赖关系。
[0281]
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(包括端值)。
[0282]
recovery_poc_cnt表示输出顺序中的经解码图像的恢复点。如果cvs中存在解码顺序在当前gdr图像之后且picordercntval等于当前gdr图像的picordercntval加上recovery_poc_cnt值的图像pica,则图像pica称为恢复点图像。否则,输出顺序中的picordercntval大于当前图像的picordercntval加上recovery_poc_cnt值的第一个图像称为恢复点图像。恢复点图像在解码顺序中应不在当前gdr图像之前。recovery_poc_cnt的取值范围应为0至maxpicordercntlsb
–
1(包括端值)。
[0283]
变量rppicordercntval推导如下:
[0284]
rppicordercntval=picordercntval+recovery_poc_cnt
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(7-94)
[0285]
如附件c详述,在对不是码流中的第一个图像的clvss图像进行解码之后,no_output_of_prior_pics_flag会影响解码图像缓冲区中的先前经解码图像的输出。
[0286]
如附件c详述,pic_output_flag会影响经解码图像输出和移除过程。当pic_output_flag不存在时,pic_output_flag被推断为1。
[0287]
slice_temporal_mvp_enabled_flag表示时间运动矢量预测值是否可以用于帧间预测。如果slice_temporal_mvp_enabled_flag等于0,则应约束当前图像的语法元素,使得在对当前图像进行解码时不使用时间运动矢量预测值。否则(slice_temporal_mvp_enabled_flag等于1),时间运动矢量预测值可以用于对该当前图像进行解码。
[0288]
当slice_temporal_mvp_enabled_flag不存在时,以下内容适用:
[0289]
如果sps_temporal_mvp_enabled_flag等于0,则slice_temporal_mvp_enabled_flag的值被推断为0。
[0290]
否则(sps_temporal_mvp_enabled_flag等于1),slice_temporal_mvp_enabled_flag的值被推断为pps_temporal_mvp_enabled_idc
–
1。
[0291]
mvd_l1_zero_flag等于1表示不解析语法结构mvd_coding(x0,y0,1)且mvdl1[x0][y0][compidx]和mvdl1[x0][y0][cpidx][compidx]被设置为0,其中,compidx=0..1,cpidx=0..2。mvd_l1_zero_flag等于0表示解析语法结构mvd_coding(x0,y0,1)。当mvd_l1_zero_flag不存在时,mvd_l1_zero_flag的值被推断为pps_mvd_l1_zero_idc
–
1。
[0292]
用于图像顺序编号的解码过程
[0293]
该过程的输出为picordercntval,即当前图像的图像顺序编号。
[0294]
每个经编码图像与图像顺序编号变量(表示为picordercntval)关联。
[0295]
如果当前图像不是clvss图像,则变量prevpicordercntlsb和prevpicordercntmsb推导如下:
[0296]
–
假设prevtid0pic是解码顺序中与当前图像具有相同nuh_layer_id的前一图像,其中,前一图像的temporalid等于0,而且前一图像不是rasl图像或radl图像。
[0297]
–
变量prevpicordercntlsb被设置为prevtid0pic的pic_order_cnt_lsb。
[0298]
–
变量prevpicordercntmsb被设置为prevtid0pic的picordercntmsb。
[0299]
当前图像的变量picordercntmsb推导如下:
[0300]
–
如果当前图像是clvss图像,则picordercntmsb被设置为0。
[0301]
–
否则,picordercntmsb推导如下:
[0302][0303]
picordercntval推导如下:
[0304]
picordercntval=picordercntmsb+pic_order_cnt_lsb
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-2)
[0305]
注1:由于clvss图像的picordercntmsb被设置为0,因此所有clvss图像的picordercntval都等于pic_order_cnt_lsb。
[0306]
picordercntval的取值范围应为
–231
至2
31
–
1(包括端值)。
[0307]
在一个cvs中,任意两个具有相同nuh_layer_id的经编码图像的picordercntval
值应不同。
[0308]
任一接入单元中的所有图像都应具有相同的picordercntval值。
[0309]
函数picordercnt(picx)如下所示:
[0310]
picordercnt(picx)=图像picx的picordercntval
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-3)
[0311]
函数diffpicordercnt(pica,picb)如下所示:
[0312]
diffpicordercnt(pica,picb)=picordercnt(pica)
–
picordercnt(picb)
ꢀꢀ
(8-4)
[0313]
码流应不包括使解码过程中使用的diffpicordercnt(pica,picb)的取值范围不是
–215
至2
15
–
1(包括端值)的数据。
[0314]
注2:假设x是当前图像,y和z是同一cvs中的另外两个图像,当diffpicordercnt(x,y)和diffpicordercnt(x,z)都为正或都为负时,认为y和z相对于x处于相同的输出顺序方向上。
[0315]
用于生成不可用参考图像的通用解码过程
[0316]
在当前图像是noincorrectpicoutputflag等于1的cra图像或者是noincorrectpicoutputflag等于1的gdr图像时,每个经编码图像调用一次该过程。
[0317]
当该过程被调用时,以下内容适用:
[0318]
–
对于等于“无参考图像”的每个refpiclist[i][j],其中,i的范围为0至1(包括端值),j的范围为0至num_ref_entries[i][rplsidx[i]]
–
1(包括端值),如第8.3.4.2小节详述生成一个图像,并且以下内容适用。
[0319]
–
生成得到的图像的nuh_layer_id值被设置为当前图像的nuh_layer_id。
[0320]
–
如果st_ref_pic_flag[i][rplsidx[i]][j]等于1,则生成得到的图像的picordercntval值被设置为refpicpoclist[i][j],并且生成得到的图像被标识为“用于短期参考”。
[0321]
–
否则(st_ref_pic_flag[i][rplsidx[i]][j]等于0),生成得到的图像的picordercntval值被设置为refpicltpoclist[i][j],生成得到的图像的pic_order_cnt_lsb值被推断为(refpicltpoclist[i][j]&(maxpicordercntlsb
–
1)),并且生成得到的图像被标识为“用于长期参考”。
[0322]
–
生成得到的参考图像的picoutputflag值被设置为0。
[0323]
–
refpiclist[i][j]被设置为生成得到的参考图像。
[0324]
用于时间亮度运动矢量预测的推导过程
[0325]
变量mvlxcol和availableflaglxcol推导如下:
[0326]
–
如果pic_temporal_mvp_enabled_flag等于0,或者(cbwidth*cbheight)小于或等于32,则mvlxcol的两个分量都被设置为0,并且availableflaglxcol被设置为0。
[0327]
–
否则(pic_temporal_mvp_enabled_flag等于1),以下按顺序执行的步骤适用。
[0328]
1.右下方并置运动矢量以及下方和左侧边界样本位置推导如下:
[0329]
xcolbr=xcb+cbwidth
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-421)
[0330]
ycolbr=ycb+cbheight
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-422)
[0331]
[0332]
subpicbotboundarypos:pic_height_in_luma_samples
–1ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-424)
[0333]
–
如果ycb》》ctblog2sizey等于ycolbr》》ctblog2sizey,ycolbr小于或等于botboundarypos,并且xcolbr小于或等于rightboundarypos,则以下内容适用:
[0334]
–
变量colcb表示亮度编码块,其中,亮度编码块覆盖由colpic表示的并置图像内的修改位置,这些修改位置由((xcolbr》》3)《《3,(ycolbr》》3)《《3)给出。
[0335]
–
亮度位置(xcolcb,ycolcb)被设置为由colcb表示的并置亮度编码块中的左上方样本相对于由colpic表示的并置图像中的左上方亮度样本的位置。
[0336]
–
第8.5.2.12节详述的用于并置运动矢量的推导过程被调用,其中,输入包括currcb、colcb、(xcolcb,ycolcb)、refidxlx和设置为0的sbflag,输出被赋值给mvlxcol和availableflaglxcol。
[0337]
–
否则,mvlxcol的两个分量都被设置为0,并且availableflaglxcol被设置为0。
[0338]
2.当availableflaglxcol等于0时,中心并置运动矢量推导如下:
[0339]
xcolctr=xcb+(cbwidth》》1)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-425)
[0340]
ycolctr=ycb+(cbheight》》1)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-426)
[0341]
–
变量colcb表示亮度编码块,其中,亮度编码块覆盖由colpic表示的并置图像内的修改位置,这些修改位置由((xcolctr》》3)《《3,(ycolctr》》3)《《3)给出。
[0342]
–
亮度位置(xcolcb,ycolcb)被设置为由colcb表示的并置亮度编码块中的左上方样本相对于由colpic表示的并置图像中的左上方亮度样本的位置。
[0343]
–
第8.5.2.12节详述的用于并置运动矢量的推导过程被调用,其中,输入包括currcb、colcb、(xcolcb,ycolcb)、refidxlx和设置为0的sbflag,输出被赋值给mvlxcol和availableflaglxcol。
[0344]
用于基于子块的时间融合候选的推导过程
[0345]
可用性标志availableflagsbcol推导如下:
[0346]
–
如果以下条件中的一个或多个为真,则availableflagsbcol被设置为0:
[0347]
–
pic_temporal_mvp_enabled_flag等于0,
[0348]
–
sps_sbtmvp_enabled_flag等于0,
[0349]
–
cbwidth小于8,
[0350]
–
cbheight小于8;
[0351]
–
否则,以下按顺序执行的步骤适用:
[0352]
1.包括当前编码块的亮度编码树块的左上方样本的位置(xctb,yctb)和当前亮度编码块的右下方中心样本的位置(xctr,yctr)推导如下:
[0353]
xctb=(xcb》》ctulog2size)《《ctulog2size
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-542)
[0354]
yctb=(ycb》》ctulog2size)《《ctulog2size
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-543)
[0355]
xctr=xcb+(cbwidth/2)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-544)
[0356]
yctr=ycb+(cbheight/2)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-545)
[0357]
2.亮度位置(xcolctrcb,ycolctrcb)被设置为覆盖colpic内的由(xctr,yctr)给出的位置的并置亮度编码块中的左上方样本相对于由colpic表示的并置图像中的左上亮度样本的位置。
[0358]
3.第8.5.5.4节详述的用于基于子块的时间融合基本运动数据的推导过程被调
用,其中,输入包括位置(xctb,yctb)、位置(xcolctrcb,ycolctrcb)、可用性标志availableflaga1以及预测列表使用标志predflaglxa1、参考索引refidxlxa1和运动矢量mvlxa1(其中,x等于0和1),输出包括运动矢量ctrmvlx和并置块的预测列表使用标志ctrpredflaglx(其中,x等于0和1)以及时间运动矢量tempmv。
[0359]
4.变量availableflagsbcol推导如下:
[0360]
–
如果ctrpredflagl0和ctrpredflagl1都等于0,则availableflagsbcol被设置为0。
[0361]
–
否则,availableflagsbcol被设置为1。
[0362]
用于构建仿射控制点运动矢量融合候选的推导过程
[0363]
第四(并置右下方)控制点运动矢量cpmvlxcorner[3]、参考索引refidxlxcorner[3]、预测列表使用标志predflaglxcorner[3]和可用性标志availableflagcorner[3](其中,x等于0和1)推导如下。
[0364]
–
时间融合候选的参考索引refidxlxcorner[3](其中,x等于0或1)被设置为0。
[0365]
–
变量mvlxcol和availableflaglxcol(其中,x等于0或1)推导如下。
[0366]
–
如果pic_temporal_mvp_enabled_flag等于0,则mvlxcol的两个分量都被设置为0,并且availableflaglxcol被设置为0。
[0367]
否则(pic_temporal_mvp_enabled_flag等于1),以下内容适用:
[0368]
xcolbr=xcb+cbwidth
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-601)
[0369]
ycolbr=ycb+cbheight
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-602)
[0370]
–
如果ycb》》ctblog2sizey等于ycolbr》》ctblog2sizey,ycolbr小于pic_height_in_luma_samples,并且xcolbr小于pic_width_in_luma_samples,则以下内容适用:
[0371]
–
变量colcb表示亮度编码块,其中,亮度编码块覆盖由colpic表示的并置图像内的修改位置,这些修改位置由((xcolbr》》3)《《3,(ycolbr》》3)《《3)给出。
[0372]
–
亮度位置(xcolcb,ycolcb)被设置为由colcb表示的并置亮度编码块中的左上方样本相对于由colpic表示的并置图像中的左上方亮度样本的位置。
[0373]
–
第8.5.2.12节详述的用于并置运动矢量的推导过程被调用,其中,输入包括currcb、colcb、(xcolcb,ycolcb)、refidxlxcorner[3]和设置为0的sbflag,输出被赋值给mvlxcol和availableflaglxcol。
[0374]
–
否则,mvlxcol的两个分量都被设置为0,并且availableflaglxcol被设置为0。
[0375]
–
变量availableflagcorner[3]、predflagl0corner[3]、cpmvl0corner[3]和predflagl1corner[3]推导如下:
[0376]
availableflagcorner[3]=availableflagl0col
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-603)
[0377]
predflagl0corner[3]=availableflagl0col
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-604)
[0378]
cpmvl0corner[3]=mvl0col
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-605)
[0379]
predflagl1corner[3]=0
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-606)
[0380]
当slice_type等于b时,变量availableflagcorner[3]、predflagl1corner[3]和cpmvl1corner[3]推导如下:
[0381]
availableflagcorner[3]=availableflagl0col||availableflagl1col
ꢀꢀ
(8-607)
[0382]
predflagl1corner[3]=availableflagl1col
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-608)
[0383]
cpmvl1corner[3]=mvl1col
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(8-609)
[0384]
图11为本发明一个实施例提供的视频译码设备1100(例如,视频编码器300或视频解码器400)的示意图。视频译码设备1100适用于实现本文描述的公开实施例。视频编码设备1100包括:用于接收数据的入端口1110和接收单元(rx)1120;用于处理所述数据的处理器、逻辑单元或中央处理单元(central processing unit,cpu)1130;用于发送所述数据的发送单元(tx)1140和出端口1150;用于存储所述数据的存储器1160。视频译码设备1100还可以包括与入端口1110、接收单元1120、发送单元1140和出端口1150耦合的光电(optical-to-electrical,oe)组件和电光(electrical-to-optical,eo)组件,用作光信号或电信号的出口或入口。
[0385]
处理器1130通过硬件和软件来实现。处理器1130可以实现为一个或多个cpu芯片、一个或多个核(例如多核处理器)、一个或多个现场可编程门阵列(field-programmable gate array,fpga)、一个或多个专用集成电路(application specific integrated circuit,asic)和一个或多个数字信号处理器(digital signal processor,dsp)。处理器1130与入端口1110、接收器单元1120、发送单元1140、出端口1150和存储器1160通信。处理器1130包括译码模块1170。译码模块1170实现上文描述的公开实施例。例如,译码模块1170执行、处理、准备或提供各种编解码功能。因此,将译码模块1170包含在内为视频译码设备1100的功能提供了实质性的改进,并且影响了视频译码设备1100到不同状态的转换。可选地,以存储在存储器1160中并由处理器1130执行的指令来实现译码模块1170。
[0386]
视频译码设备1100还可以包括用于与用户进行数据通信的输入和/或输出(input/output,i/o)设备1180。i/o设备1180可以包括输出设备,例如,用于显示视频数据的显示器、用于输出音频数据的扬声器等。i/o设备1180还可以包括键盘、鼠标、轨迹球等输入设备和/或用于与这些输出设备交互的对应接口。
[0387]
存储器1160包括一个或多个磁盘、一个或多个磁带机和一个或多个固态硬盘,并且可以用作溢出数据存储设备,以在选择程序来执行时存储此类程序以及存储在执行程序过程中读取的指令和数据。存储器1160可以是易失性和/或非易失性的,并且可以是只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、三态内容寻址存储器(ternary content-addressable memory,tcam)和/或静态随机存取存储器(static random-access memory,sram)。
[0388]
图12为译码模块1200的一个实施例的示意图。在一个实施例中,译码模块1200在视频译码设备1202(例如,视频编码器300或视频解码器400)中实现。视频译码设备1202包括接收模块1201。接收模块1201用于接收图像进行编码或接收码流进行解码。视频译码设备1202包括与接收模块1201耦合的发送模块1207。发送模块1207用于将码流发送给解码器或将经解码图像发送给显示模块(例如其中一个i/o设备1180)。
[0389]
视频译码设备1202包括存储模块1203。存储模块1203与接收模块1201或发送模块1207中的至少一个耦合。存储模块1203用于存储指令。视频译码设备1202还包括处理模块1205。处理模块1205与存储模块1203耦合。处理模块1205用于执行存储在存储模块1203中的指令,以执行本文公开的方法。
[0390]
还应当理解,本文中阐述的示例性方法的步骤不一定需要按照所描述的顺序执行,并且这些方法的步骤的顺序应当理解为仅仅是示例性的。同理,在与本发明各种实施例
相一致的方法中,这些方法可以包括其它步骤,并且某些步骤可以省略或组合。
[0391]
虽然本发明提供了若干个实施例,但应当理解,在不脱离本发明的精神或范围的情况下,所公开的系统和方法可以通过其它多种具体形式体现。本发明示例应被视为说明性而非限制性的,且本发明并不限于本文所给出的详细内容。例如,各种元件或组件可以组合或集成在另一系统中,或者某些特征可以省略或不实现。
[0392]
另外,在不脱离本发明的范围的情况下,各种实施例中描述和说明为离散或单独的技术、系统、子系统和方法可以与其它系统、模块、技术或方法组合或集成。展示或论述为彼此耦合或直接耦合或通信的其它项也可以采用电方式、机械方式或其它方式通过某一接口、设备或中间组件间接地耦合或通信。变化、替换、变更的其它示例可由本领域技术人员确定,并可以在不脱离本文公开的精神和范围的情况下举例。