具体实施方式
尽管这里描述的实施例可以适应使用编码/解码的任何视频编码器/解码器(编解码器),关于H.264/AVC编码器和H.264/AVC解码器来描述示例实施例,仅仅为了说明的目的。许多视频编码技术基于基于块的混合视频编码方法,其中,源编码技术是预测残留的图片间,也称为帧间预测、图片内,也称为帧内预测和变换编码的混合。帧间预测可以利用时间冗余,预测残留的帧内和变换编码可以利用空间冗余。
图1是图示说明用于电子设备102的示例编码器104的框图。应该注意:被图示为电子设备102内包括的一个或多个元件可以被实现为硬件和/或软件。例如,电子设备102包括编码器104,其可以实现为硬件和/或软件。
电子设备102可以包括供应器134。供应器134可以向编码器104提供作为源106的图像或图片数据(例如视频)。供应器134的非限制示例包括图像传感器、存储器、通信接口、网络接口、无线接收机、端口、视频帧内容、先前编码的视频内容、非编码视频内容等等。
源106可以被提供给帧内预测模块和重构缓冲器140。源106还可以提供给运动估计和运动补偿模块166并且提供给减法模块146。
帧内预测模块和重构缓冲器140可以基于源106和重构数据180生成帧内模式信息148和帧内信号142。运动估计和运动补偿模块166可以基于源106和参考图片缓冲器196信号198生成帧间模式信息168和帧间信号144。
参考图片缓冲器196信号198可以包括来自在参考图片缓冲器196中存储的一个或多个参考图片的数据。参考图片缓冲器196还可以包括RPS索引初始化器模块108。初始化器模块108可以处理对应于RPS的缓冲器和列表构造的参考图片。
编码器104可以根据模式在帧内信号142和帧间信号144之间选择。在帧内编码模式中,帧内信号142可以用来利用图片内的空间特性。在帧间编码模式中,帧间信号144可以用来利用图片之间的时间特性。在帧内编码模式中,帧内信号142可以被提供给减法模块146且帧内模式信息158可以被提供给熵编码模块160。在帧间编码模式中,帧间信号144可以被提供给减法模块146并且帧间模式信息168可以被提供给熵编码模块160。
在减法模块146从源106减去帧内信号142或帧间信号144(取决于模式)以便产生预测残留148。预测残留148被提供至变换模块150。变换模块150可以压缩预测残留148以产生变换信号152,变换信号152被提供给量化模块154。量化模块154量化变换信号152以产生变换且量化系数(TQC)156。
TQC 156被提供给熵编码模块160和逆量化模块170。逆量化模块170对TQC 156执行逆量化以产生逆量化信号172,逆量化信号172被提供给逆变换模块174。逆变换模块174解压缩逆量化信号172以产生解压缩信号176,解压缩信号176被提供给重构模块178。
重构模块178可以基于解压缩信号176产生重构数据180。例如,重构模块178可以重构(修改)图片。重构数据180可以被提供给去块滤波器182以及帧内预测模块和重构缓冲器140。去块滤波器182可以基于重构数据180产生滤波信号184。
滤波信号184可以被提供给采样适应偏移(SAO)模块186。SAO模块186可以产生被提供到熵编码模块160的SAO信息188和被提供到适应循环滤波器(ALF)192的SAO信号190。ALF 192产生提供给参考图片缓冲器196的ALF信号194。ALF信号194可以包括来自可用作参考图片的一个或多个图片的数据。
熵编码模块160可以编码TQC 156以产生比特流114。而且,熵编码模块160可以使用上下文适应可变长度编码(CAVLC)或上下文适应二进制算术编码(CABAC)来编码TQC 156。特别地,熵编码模块160可以基于帧内模式信息158、帧间模式信息168和SAO信息188中的一个或多个来编码TQC 156。比特流114可以包括编码的图片数据。编码器通常编码帧作为块的序列,通常称为宏块。
涉及诸如HEVC的视频压缩中的量化是有损压缩技术,通过将值的范围压缩到单个值而获得。量化参数(QP)是预先定义的缩放参数,用于基于重构视频的质量和压缩比来执行量化。块类型在HEVC中定义为基于块大小及其颜色信息表示给定块的特性。QP、分辨率信息和块类型可以在熵编码前被确定。例如,电子设备102(例如编码器104)可以确定QP、分辨率信息和块类型,其可以被提供给熵编码模块160。
熵编码模块160可以基于TQC 156的块来确定块大小。例如,块大小可以是沿着TQC的块的一个维度上的TQC 156的数量。换句话说,TQC的块中的TQC 156的数量可以等于块大小的平方。例如,块大小可以被确定为TQC的块中的TQC 156的数量的平方根。分辨率可以被定义为像素宽度乘以像素高度。分辨率信息可以包括图片宽度、图片高度或二者的像素的数量。块大小可以被定义为沿着TQC的2D块的一个维度上的TQC的数量。
在一些配置中,比特流114可以被传送至另一电子设备。例如,比特流114可以被提供给通信接口、网络接口、无线发射机、端口等等。例如,比特流114可以经由LAN、因特网、蜂窝电话基站等等被传送至另一电子设备。比特流114可以另外或可替换地存储在电子设备102或其他电子设备上的存储器中。
图2是图示说明电子设备202上的示例解码器212的框图。解码器212可以被包括用于电子设备202。例如,解码器212可以是HEVC解码器。解码器212和/或图示为包括在解码器212中的一个或多个元件可以实现为硬件和/或软件。解码器212可以接收比特流214(例如,包括在比特流214中的一个或多个编码图片)用于解码。在一些配置中,接收到的比特流214可以包括接收到的开销信息,诸如接收到的切片报头、接收到的PPS、接收到的缓冲器描述信息等等。包括在比特流214中的编码的图片可以包括一个或多个编码的参考图片和/或一个或多个其他编码图片。
接收到的符号(在包括在比特流214中的一个或多个编码图片中)可以由熵解码模块268来熵解码,由此产生运动信息信号270以及量化的、缩放的和/或变换的系数272。
在运动补偿模块274处,运动信息信号270可以与来自帧存储器278的参考帧信号298的一部分相组合,运动补偿模块274可以产生帧间预测信号282。量化的、去缩放和/或变换的系数272可以被逆模块262逆量化、缩放和逆变换,由此产生解码残留信号284。解码残留信号284可以添加到预测信号292以产生组合信号286。预测信号292可以是从帧间预测信号282或由帧内预测模块288产生的帧内预测信号290选择的信号。在一些配置中,该信号选择可以基于比特流214(例如由比特流214控制)。
可以从来自组合信号292(例如,在当前帧中)的先前解码的信息预测帧内预测信号290。组合信号292还可以由去块滤波器294来滤波。生成的滤波信号296可以写入帧存储器278。生成的滤波信号296可以包括解码的图片。
帧存储器278可以包括DPB,如这里所述。DPB可以包括一个或多个解码的图片,其可以被保持作为短期或长期的参考帧。帧存储器278还可以包括对应于解码图片的开销信息。例如,帧存储器278可以包括切片报头、PPS信息、循环参数、缓冲器描述信息等等。这些条信息中的一个或多个可以从编码器(例如编码器104)被信号发送。帧存储器278可以提供解码图片718。
包括多个宏块的输入图片可以被分割成一个或若干切片。假设在编码器和解码器处使用的参考图片是相同的且去块滤波不使用跨切片边界的信息,则切片表示的图片区域中的采样的值可以正确被解码,而不使用来自其他切片的数据。因此,用于切片的熵编码和宏块重构不取决于其他切片。特别地,熵编码状态可以在每个切片的开始处被重置。当定义熵解码和重构两者的相邻可用性时,其他切片中的数据可以被标记为不可用。切片可以被并行地熵编码和重构。优选地,不允许帧内预测和运动矢量预测跨切片的边界。与之对照,去块滤波可以跨切片边界使用信息。
图3示出在水平方向上包括十一个宏块在垂直方向上包括九个宏块的示例视频图片90(九个示例宏块标为91-99)。图3示出三个示例切片:第一切片标为“切片#0”89、第二切片标为“切片#1”88和第三切片标为“切片#2”87。H.264/AVC解码器可以并行解码并重构三个切片87、88、89。每个切片可以按扫描行次序以顺序的方式传送。在每个切片的解码/重构过程的开始处,熵解码268被初始化或重置,其他切片中的宏块被标记为对于熵解码和宏块重构不可用。因此,对于“切片#1”中的宏块,例如,标为93的宏块,“切片#0”中的宏块(例如,标为91和92的宏块)可以不用于熵解码或重构。而对于“切片#1”中的宏块,例如标为95的宏块,“切片#1”中的其他宏块(例如标为93和94的宏块)可以用于熵解码或重构。因此,熵解码和宏块重构在切片内连续进行。除非切片使用灵活宏块次序(FMO)来定义,切片内的宏块按照逐行扫描(raster scan)的次序处理。
灵活宏块次序定义切片组,来修改如何将图片分割为切片。切片组中的宏块通过宏块到切片组映射来定义,宏块到切片组映射通过图片参数集的内容和切片报头中的附加信息来信号发送。宏块到切片组映射由用于图片中每个宏块的切片组标识数量组成。切片组标识数量规定相关联的宏块属于哪个切片组。每个切片组可以被分割为一个或多个切片,其中,切片是在特定切片组的宏块的集合内以逐行扫描次序处理的相同切片组内的宏块的序列。熵解码和宏块重构在切片组内连续地进行。
图4描绘示例宏块分配到三个切片组:标为“切片组#0”86的第一切片组、标为“切片组#1”85的第二切片组和标为“切片组#2”84的第三切片组。这些切片组84、85、86可以与图片90中两个前景区域和一个背景区域分别相关联。
图片可以被分割成一个或多个切片,其中,在假设所使用的参考图片在编码器和解码器处相同,则切片表示的图片区域中的采样值可以被正确重构而不使用来自其他切片的数据的方面,切片可以自包含。切片内所有重构的宏块可以在用于重构的相邻定义中可用。
切片可以被分割为多于一个熵切片,其中,在熵切片表示的图片区域可以被正确熵解码而不使用来自其他熵切片的数据的方面,熵切片可以自包含。熵解码268可以在每个熵切片的解码开始处被重置。当对熵解码定义相邻可用性时,其他熵切片中的数据可以被标记为不可用。
配置用于解码图片的设备获得或否则接收包括一系列图片的比特流,该一系列图片包括当前图片。设备进一步获得参考图片集(RPS)参数,其可以被用于标识可用于解码当前图片或以在比特流中信号发送图片的次序在当前图片之后的图片的其他帧。
RPS提供与当前帧相关联的参考图片的集合的标识。RPS可以标识以可用于当前图片的帧间预测的解码次序在当前图片之前的参考图片和/或标识以可用于当前图片的帧间预测的解码次序在当前图片之后的参考图片。例如,如果系统接收帧1、3、5,并且5使用3用于参考,以及,编码器使用帧1用于帧7的预测。则,针对5的RPS可以信号发送以在帧存储器278中保持帧3和1,即使帧1不用于帧5的参考。在一个实施例中,针对5的RPS可以是[-2-4]。此外,帧存储器278可以被指代为显示图片缓冲器,或同样地DPB。
RPS描述一个或多个参考图片,其应该至少在有限持续时间内被保持在解码图片缓冲器(DPB)中以便后续使用。RPS的这个标识可以与图片一起和/或与图片组一起被包括在每个图片的切片报头中。此外,RPS的列表可以在图片参数集(PPS)中发送。然后,切片报头可以涉及在PPS中发送的RPS之一以信号发送其在该切片中的使用。例如,一组图片的RPS可以被在图片参数集(PPS)中以信号发送。不是用于当前帧的RPS一部分的DPB中的任何图片可以被标记为“不用于参考”。
DPB可以用来在解码器处存储重构的(例如解码的)图片。这些存储的图片可以随后用于例如帧间预测技术。而且,DPB中的图片可以与图片次序计数(POC)相关联。POC可以是与每个编码的图片相关联且具有随着以输出次序增加图片位置而增加的值的变量。换句话说,POC可以由解码器使用来以正确次序递送图片以显示。POC也可以用于在参考图片列表的重构期间标识参考图片以及标识解码的参考图片。而且,POC可以用于标识在从编码器到解码器传输期间丢失的图片。
参考图5,示出从编码器提供到解码器的一组帧300的一个示例。每个帧可以具有相关联的POC 310。如所图示,POC可以从负数递增到较大正数。在一些实施例中,POC可以仅从0递增到大的正数。POC通常每帧递增1,但是在一些情况下,一个或多个POC可以被跳过或否则被忽略。例如,用于编码器中的一组帧的POC可以是0、1、2、3、4、5等等。例如,用于编码器中的相同或另一组帧的POC可以是0、1、2、4、5等等,POC 3被跳过或否则被忽略。
随着POC变得足够大,有效位数将是必要的以使用POC标识每帧。编码器可以通过使用POC的用于标识每帧的所选择的最低有效位(LSB)的数量,诸如4,以降低用于标识特定POC的位数。由于用于解码当前帧的参考帧通常临时位于接近当前帧,该标识技术是适当的且导致了系统的计算复杂度的降低以及视频比特率的整体降低。用于标识图片的LSB的数量可以在比特流中用信号发送到解码器。
如所示,LSB为4比特,当所选择的POC的LSB的数量为4时,LSB索引每16个值(2^4)重复。因此,帧0的LSB的值为0,帧1的LSB的值为1,……,帧14的LSB的值为14,帧15的LSB的值为15。但是,帧16的LSB的值为0,帧17的LSB的值再次为1,并且帧20的LSB的值为4。LSB标识符(通常也被称为POC的LSB,或同样地,POC LSB)可以具有LSB=POC%16的特性,其中%是除以16(2^最低有效位的数量,本情况中是4)之后的余数。类似地,如果所选择的用于标识POC的LSB的数量是N比特,LSB标识符可以具有LSB=POC%(2^N)的特性,其中2^N表示2的N次幂。而不是在比特流中包括POC以标识帧,编码器优选在比特流中为解码器提供LSB索引(通常也称为POC的LSB,或同样地,POC LSB)。
用于当前帧或者当前帧之后的帧的帧间预测的参考帧,可以使用相对(例如delta)参考(例如,使用dletaPOC和currentPOC)或绝对参考(例如,使用POC)利用RPS来标识。例如,由POC 5310标识且在比特流中作为LSB 5320被信号发送到解码器的帧可以具有相关联的[-5,-2,-1]的RPS 330。RPS值的含义稍后描述。
参考图6,示出图5的一部分,[-5,-2,-1]的RPS指的是包括第五先前帧320、第二先前帧321和第一先前帧322的帧。这又指的是0、3、4的POC值,分别如图6中所图示。典型地,RPS指的是当前帧的POC值和先前帧的POC值之间的差。例如,对于具有POC值5的当前帧的[-5,-2,-1]的RPS,指的是具有POC值为5减5=0;5减2=3;以及5减1=4的帧。请注意:虽然这里的示例中没有示出,RPS也可以包括未来帧。这些将通过RPS中的正delta POC值来表示。
在POC值不连续的情况下,诸如在一个或多个POC值在部分比特流中被跳过或否则被忽略的情况下,当前帧的POC值与先前帧的POC值之间的差可以不同于先前帧和当前帧之间输出的帧的数量,诸如在图7中所图示。RPS可以在比特流中以任何合适方式用信号发送,诸如与帧一起提供或者与一组帧一起提供。
参考图8,用于信号发送参考帧的另一技术是在与帧相关联的RPS中使用绝对参考,通常称为长期图片。取决于参考帧是使用绝对参考还是使用相对参考来信号发送,诸如运动矢量预测技术的解码处理可能会不同。绝对参考(为了便利,称为LT)指的是与参考帧、诸如之前或之后的帧相关联的特定LSB计数值。例如,LT=3的绝对参考(LT3)将指的是具有POC LSB值3的参考帧。因此,[LT3,-5]的RPS将指的是具有POC LSB值3的参考帧以及具有POC等于当前帧的POC减5的参考帧。在图8中,这对应于具有POC等于3的参考帧444和POC等于0的参考帧320。典型地,LT3指的是具有POC LSB值3的相对于当前帧的第一先前帧。在一个实施例中,LT3指的是具有POC LSB值3的以输出次序相对于当前帧的第一先前帧。在第二实施例中,LT3指的是具有POC LSB值3的以传输次序相对于当前帧的第一先前帧。尽管这样的系统适合于许多比特流,其对于选择与LSB计数值为3的紧接先前帧不同的、LSB计数值为3的帧不足够强健。
参考图9,例如,如果编码器编码帧31(POC=31)且系统信号发送使用具有POC LSB=0(LT0)的长期图片,则这将指的是帧16(POC=16),因为其是LSB=0的第一先前帧。但是,编码器可能希望信号发送长期图片帧0,其同样具有LSB计数值0,但是这不可能以这样的第一先前参考方案来完成。为了克服这个限制,一种技术是增加用于信号发送长期帧LSB或POC LSB的最低有效位的数量。尽管最低有效位的数量上的这样的增加是有可能的,但其导致为比特流添加了大量附加比特。
导致更少附加比特添加到比特流中的更优选的技术是信号发送具有相对应POC LSB值的与第一紧接先前帧不同的长期图片。例如,系统可以指示具有绝对参考为[LT0|2]的当前帧的RPS,其中0指的是POCLSB计数值,2指的是要使用POC LSB计数值等于0的哪个先前帧,在本情况下将是第二先前POC LSB值0(例如图9中的帧0)。如果不包括第二参考,则系统可以缺省到POC LSB=0[LT0]的紧接先前帧(例如,图9中的帧16)。
在许多情况下,希望使用绝对参考来信号发送不是具有相应POCLSB值的第一紧接先前帧的帧的出现频率将相对不频繁。为了进一步降低指示使用哪个帧的整体比特率,同时允许使用绝对参考来信号发送与具有相应POC LSB值的第一紧接先前帧不同的帧的能力,系统可以使用复制技术。例如,RPS的结构可以如下:[LT0,LT0|3]。相同RPS内的LT0的复制信号发送到解码器以使用具有POC LSB值0的不同帧,其在本情况中将是POC LSB值0的第三先前出现。通常,除了特定POC LSB值将不包括在POC LSB值的特定循环中的可能性以外,所期望的POC LSB值将对应于所指示的先前出现的帧。
参考图10,复制技术可以被如下指示。RPS包括具有POC LSB值400的长期图片的信号(例如[LT3])。相同RPS包括具有相同POCLSB值410的长期图片的另一信号(例如[LT3,LT3])。相同RPS包括具有相同LSB计数值410的第二长期图片的另一信号[LT3,LT3|2],指示所期望的帧420的位置。
所期望的帧的位置的信令可以以任何合适方式来执行。参考图11,例如,位置可以是所期望的帧相对于当前帧的POC LSB值的先前循环的数量,诸如第三先前循环。参考图12,例如,位置可以基于从当前帧偏移的帧的绝对数量。参考图13,例如,位置可以基于相对于具有所期望的POC LSB值的第一紧接先前帧的POC LSB值的先前循环的数量。参考图14,例如,位置可以基于相对于具有所期望的POC LSB值的第一紧接先前帧偏移的帧的绝对数量。
这样的技术的一个示例实现方式可以使用如下语法。
first_slice_segment_in_pic_flag等于1规定切片段是以解码次序的图片的第一切片段。first_slice_segment_in_pic_flag等于0规定切片段不是以解码次序的图片的第一切片段。
no_output_of_prior_pics_flag规定在对IDR或BLA图片的解码之后怎样处理解码图片缓冲器中先前解码的图片。当当前图片是CRA图片,或者当前图片是作为比特流中第一图片的IDR或BLA图片时,no_output_of_prior_pics_flag的值对解码处理没有影响。当当前图片是IDR或BLA图片,其不是比特流中的第一图片且从活动序列参数集得到的pic_width_in_luma_samples或pic_height_in_luma_samples或sps_max_dec_pic_buffering[HighestTid]的值不同于从对于先前图片活动的序列参数集得到的pic_width_in_luma_samples或pic_height_in_luma_samples或sps_max_dec_pic_buffering[HighestTid]的值,no_output_of_prior_pics_flag等于1可以(但应该不)由解码器推断,不管no_output_of_prior_pics_flag的实际值如何。其中HighestTid指的是最高临时Id值。
slice_pic_parameter_set_id规定使用中的图片参数集的pps_pic_parameter_set的值。slice_pic_parameter_set_id的值应该在0到63(包含)的范围中。
dependent_slice_segment_flag等于1规定不存在的每个切片段报头语法元素的值被推断等于切片报头中相应切片段报头语法元素的值。当不存在时,dependent_slice_segment_flag的值被推断为等于0。
变量SliceAddrRS如下得出。如果dependent_slice_segment_flag等于0,则SliceAddrRS被设定为等于slice_segment_address。否则,SliceAddrRS被设定为等于包含编码树块地址为ctbAddrTStoRS[ctbAddrRStoTS[slice_segment_address]-1]的编码树块的先前切片段的SliceAddrRS。
slice_segment_address规定图片的编码树块逐行扫描中,切片段中第一编码树块的地址。slice_segment_address语法元素的长度是Ceil(Log2(PicSizeInCtbsY))比特。slice_segment_address的值应该在1到PicSizeInCtbsY–1(包含)的范围中,slice_segment_address的值应该不等于相同编码图片的任何其他编码切片段NAL单元的slice_segment_address的值。当slice_segment_address不存在时,其被推断为等于0。
规定图片的编码树块逐行扫描中的编码树块地址的变量CtbAddrInRS被设定为等于slice_segment_address。规定瓦片扫描中的编码树块地址的变量CtbAddrInTS被设定为等于CtbAddrRStoTS[CtbAddrInRS]。规定包含cu_qp_delta_abs的编码单位的luma量化参数和其预测之间的差的变量CuQpDelta被设定为等于0。
slice_reserved_undetermined_flag[i]具有由ITU-T|ISO/IEC为未来规范保留的语义和值。解码器应忽略slice_reserved_undetermined_flag[i]的存在和值。
根据下面的表格,slice_type规定切片的编码类型。
表格–对slice_type的名称关联
slice_type |
slice_type的名称 |
0 |
B(B切片) |
1 |
P(P切片) |
2 |
I(I切片) |
当nal_unit_type具有范围16到23(包含)的范围中的值时(RAP图片),slice_type应等于2。
当sps_max_dec_pic_buffering[TemporalId]等于0时,slice_type应等于2。
pic_output_flag影响解码图片输出和删除过程。当pic_output_flag不存在时,其被推断为等于1。
当separate_colour_plane_flag等于1时,colour_plane_id规定与当前切片RBSP相关联的颜色平面。colour_plane_id的值应在0到2(包含)的范围中。colour_plane_id等于0,1,2分别对应于Y,Cb,Cr平面。
pic_order_cnt_lsb规定对于当前图片的图片次序计数取MaxPicOrderCntLsb的模。pic_order_cnt_lsb语法元素的长度是log2_max_pic_order_cnt_lsb_minus4+4比特。pic_order_cnt_lsb的值应在0到MaxPicOrderCntLsb–1(包含)的范围中。当pic_order_cnt_lsb不存在时,在多数情况下pic_order_cnt_lsb被推断为等于0。
short_term_ref_pic_set_sps_flag等于1规定当前图片的短期参数图片集是使用活动序列参数集中的语法元素创建的。short_term_ref_pic_set_sps_flag等于0规定当前图片的短期参考图片集是在切片报头中使用short_term_ref_pic_set()语法结构中的语法元素来创建的。
short_term_ref_pic_set_idx规定到用于创建当前图片的参考图片集的活动序列参数集中规定的短期参考图片集的列表的索引。语法元素short_term_ref_pic_set_idx由Ceil(Log2(num_short_term_ref_pic_sets))比特表示。当不存在时,short_term_ref_pic_set_idx的值被推断为等于0。short_term_ref_pic_set_idx的值应在0到num_short_term_ref_pic_sets–1(包含)的范围中。
变量StRpsIdx如下得出:如果short_term_ref_pic_set_sps_flag等于1,则StRpsIdx被设定为等于short_term_ref_pic_set_idx。否则,StRpsIdx被设定为等于num_short_term_ref_pic_sets。
num_long_term_sps规定包括在当前图片的长期参考图片集中的活动序列参数集中规定的候选长期参考图片的数量。num_long_term_sps的值应在0到Min(num_long_term_ref_pics_sps,sps_max_dec_pic_buffering[sps_max_sub_layers_minus1]-NumNegativePics[StRpsIdx]-NumPositivePics[StRpsIdx])(包含)的范围中。当不存在时,num_long_term_sps的值被推断为等于0。
num_long_term_pics规定在切片报头中规定的长期参考图片的数量,其包括在当前图片的长期参考图片集中。num_long_term_pics的值应在0到sps_max_dec_pic_buffering[sps_max_sub_layers_minus1]-NumNegativePics[StRpsIdx]-NumPositivePics[StRpsIdx]-num_long_term_sps(包含)的范围中。当不存在时,num_long_term_pics的值被推断为等于0。
lt_idx_sps[i]规定用于标识包括在当前图片的长期参考图片集中的图片的活动序列参数集中规定的候选长期参考图片的列表中的索引。用于表示lt_idx_sps[i]的比特数等于Ceil(Log2(num_long_term_ref_pics_sps))。当不存在时,lt_idx_sps[i]的值被推断为等于0。lt_idx_sps[i]的值应在0到num_long_term_ref_pics_sps–1(包含)的范围中。
poc_lsb_lt[i]规定图片次序计数的值取包括在当前图片的长期参考图片集中的第i个长期参考图片的MaxPicOrderCntLsb的模。poc_lsb_lt[i]语法元素的长度是log2_max_pic_order_cnt_lsb_minus4+4比特。
used_by_curr_pic_lt_flag[i]等于0规定包括在当前图片的长期参考图片集中的第i个长期参考图片不用于通过当前图片的参考。
变量PocLsbLt[i]和UsedByCurrPicLt[i]如下得出。如果i小于num_long_term_sps,则PocLsbLt[i]被设定为等于lt_ref_pic_poc_lsb_sps[lt_idx_sps[i]]且UsedByCurrPicLt[i]被设定为等于used_by_curr_pic_lt_sps_flag[lt_idx_sps[i]]。否则,PocLsbLt[i]被设定为等于poc_lsb_lt[i]且UsedByCurrPicLt[i]被设定为等于used_by_curr_pic_lt_flag[i]。
delta_poc_msb_present_flag[i]等于1规定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0规定delta_poc_msb_cycle_lt[i]不存在。当在解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,delta_poc_msb_present_flag[i]应等于1。
delta_poc_msb_cycle_lt[i]用于确定包括在当前图片的长期参考图片集中的第i个长期参考图片的图片次序计数值的最高有效位的值。当delta_poc_msb_cycle_lt[i]不存在时,其被推断为等于0。
变量DeltaPocMSBCycleLt[i]如下得出:
对于长期参考图片集,解码处理可以如下完成:
在切片报头的解码之后但在任何编码单元的解码之前并且在用于切片的参考图片列表构造的解码处理之前,每个图片调用该过程一次。该处理可以导致DPB中的一个或多个参考图片被标记为“不用于参考”或“用于长期参考”。
注意,参考图片集是用于当前和未来编码图片的解码处理中使用的参考图片的绝对描述。在包括在参考图片集中的所有参考图片被显性列出的意义方面,参考图片集信令是显性的。
图片可以被标记为“不用于参考”、“用于短期参考”或“用于长期参考”,但这三个中只有一个。当可应用时,向图片指派这些标记之一隐性去除了这些标记中的其他标记。当图片被称为标记为“用于参考”时,其共同指的是被标记为“用于短期参考”或“用于长期参考”(但并非二者)的图片。
当当前图片是比特流中的第一图片时,DPB被初始化为空的图片集合。
当当前图片是IDR图片或BLA图片时,当前在DPB中的所有参考图片(如果有的话)被标记为“不用于参考”。
短期参考图片通过其PicOrderCntVal值来标识。长期参考图片通过其PicOrderCntVal值或其pic_order_cnt_lsb值来标识。
图片次序计数值的五个列表被构造为得出参考图片集:PocStCurrBefore,PocStCurrAfter,PocStFoll,PocLtCurr和PocLtFoll,分别具有NumPocStCurrBefore,NumPocStCurrAfter,NumPocStFoll,NumPocLtCurr和NumPocLtFoll的元素数量。
如果当前图片是IDR图片,则PocStCurrBefore,PocStCurrAfter,PocStFoll,PocLtCurr和PocLtFoll都被设定为空,且NumPocStCurrBefore,NumPocStCurrAfter,NumPocStFoll,NumPocLtCurr和NumPocLtFoll都被设定为0。
否则,下列可应用于图片次序计数值和条目数的五个列表的得出。
在替换实施例中,可为delta_poc_msb_present_flag[i]定义下面的语义。
delta_poc_msb_present_flag[i]等于1规定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0规定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,delta_poc_msb_present_flag[i]应等于1。一旦基于上面条件,对于当前图片,delta_poc_msb_present_flag[i]被设定为等于1,则对于以解码次序的所有后续图片,delta_poc_msb_present_flag[i]应被设定为1,直到并且包括以解码次序的下述第一图片:该第一图片具有为0的TemporalId值且具有下述之一的NAL单元类型:TRAIL_R,TSA_R,STSA_R。
在进一步可替换实施例中,下面的语义可以被定义用于delta_poc_msb_present_flag[i]。
delta_poc_msb_present_flag[i]等于1规定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0规定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,delta_poc_msb_present_flag[i]应等于1。一旦基于上面的条件,对于当前图片,delta_poc_msb_present_flag[i]被设定为等于1,则对于以解码次序的所有后续图片,delta_poc_msb_present_flag[i]应被设定为1,直到并且包括以解码次序的下述第一图片:该第一图片具有为0的TemporalId值且具有下述之一的NAL单元类型:TRAIL_R。
在进一步的替换实施例中,可以为delta_poc_msb_present_flag[i]定义下面的语义。
delta_poc_msb_present_flag[i]等于1规定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0规定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,delta_poc_msb_present_flag[i]应等于1。一旦基于上面的条件,对于当前图片,delta_poc_msb_present_flag[i]被设定为等于1,则对于以解码次序的所有后续图片,delta_poc_msb_present_flag[i]应被设定为1,直到并且包括以解码次序的下述第一图片:该第一图片具有为0的TemporalId值且具有下述之一的NAL单位类型:TRAIL_R,TSA_R,STSA_R,RADL_R,RASL_R。
在进一步的替换实施例中,可以为delta_poc_msb_present_flag[i]定义下面的语义。
delta_poc_msb_present_flag[i]等于1规定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0规定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,delta_poc_msb_present_flag[i]应等于1。一旦基于上面条件,对于当前图片,delta_poc_msb_present_flag[i]被设定为等于1,则对于以解码次序的所有后续图片,delta_poc_msb_present_flag[i]应被设定为1,直到并且包括以解码次序的下述第一图像:该第一图片具有为0的TemporalId值。
在进一步的替换实施例中,可以为delta_poc_msb_present_flag[i]定义下面的语义。
delta_poc_msb_present_flag[i]等于1规定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0规定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,delta_poc_msb_present_flag[i]应等于1。一旦基于上面条件,对于当前图片,delta_poc_msb_present_flag[i]被设定为等于1,则对于以解码次序的所有下述后续图片,delta_poc_msb_present_flag[i]应被设定为1,该后续图片具有TemporalId值>0或具有下述之一的NAL单元类型:TRAIL_N,TSA_N,STSA_N,RADL_N,RASL_N,RSV_VCL_N10,RSV_VCL_N12或RSV_VCL_N14。
在进一步的替换实施例中,可以为delta_poc_msb_present_flag[i]定义下面的语义。
delta_poc_msb_present_flag[i]等于1规定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0规定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,delta_poc_msb_present_flag[i]应等于1。一旦基于上面条件,对于当前图片,delta_poc_msb_present_flag[i]被设定为等于1,则对于以解码次序的所有后续图片,delta_poc_msb_present_flag[i]应被设定为等于1,直到并且包括以以解码次序的下述第一图片:该第一图片具有的临时Id值等于0且其用作参考图片或不单独地可丢弃。
在进一步的替换实施例中,可以为delta_poc_msb_present_flag[i]定义下面的语义。
delta_poc_msb_present_flag[i]等于1规定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0规定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,对于当前图片并且对于在当前图片之后以解码次序的所有后续图片,delta_poc_msb_present_flag[i]应等于1,直到并且包括在当前图片之后以解码次序的下述第一图片:该第一图片具有为0的TemporalId值且具有下述之一的NAL单元类型:TRAIL_R。
在进一步的替换实施例中,可以为delta_poc_msb_present_flag[i]定义下面的语义。
delta_poc_msb_present_flag[i]等于1指定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0指定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,对于当前图片以及对于在当前图片之后以解码次序的所有后续图片,delta_poc_msb_present_flag[i]应等于1,直到并且包括在当前图片之后以解码次序的下述第一图片,该第一图片具有为0的TemporalId值且具有下述之一的NAL单元类型:TRAIL_R,TSA_R,STSA_R。
在进一步的替换实施例,可以为delta_poc_msb_present_flag[i]定义下面的语义。
delta_poc_msb_present_flag[i]等于1指定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0指定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,对于当前图片以及对于在当前图片之后以解码次序的所有后续图片,delta_poc_msb_present_flag[i]应等于1,直到并且包括在当前图片之后以解码次序的下述第一图片:该第一图片具有为0的TemporalId值且具有下述之一的NAL单元类型:TRAIL_R,TSA_R,STSA_R,RADL_R,RASL_R。
在进一步的替换实施例,可以为delta_poc_msb_present_flag[i]定义下面的语义。
delta_poc_msb_present_flag[i]等于1指定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0指定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,对于当前图片以及对于在当前图片之后以解码次序的所有下述后续图片,delta_poc_msb_present_flag[i]应等于1:该后续图片具有TemporalId值>0或具有下述之一的NAL单元类型:TRAIL_N,TSA_N,STSA_N,RADL_N,RASL_N,RSV_VCL_N10,RSV_VCL_N12或RSV_VCL_N14。
在进一步的替换实施例,可以为delta_poc_msb_present_flag[i]定义下面的语义。
delta_poc_msb_present_flag[i]等于1指定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0指定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,对于当前图片以及对于在当前图片之后以解码次序的所有后续图片,delta_poc_msb_present_flag[i]应等于1,直到并且包括在当前图片之后以解码次序的下述第一图片:该第一图片具有为0的TemporalId值。
在进一步的替换实施例,可以为delta_poc_msb_present_flag[i]定义下面的语义。
delta_poc_msb_present_flag[i]等于1指定delta_poc_msb_cycle_lt[i]存在。delta_poc_msb_present_flag[i]等于0指定delta_poc_msb_cycle_lt[i]不存在。当解码图片缓冲器中存在多于一个参考图片,且图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]时,对于当前图片以及对于在当前图片之后以解码次序的所有后续图片,delta_poc_msb_present_flag[i]应等于1,直到并且包括在当前图片之后以解码次序的下述第一图片:该第一图片具有为0的TemporalId值且其用作参考图片或不单独地可丢弃。
其中nal_unit_type是通过下面语义定义的。
nal_unit_type规定NAL单元中包含的RBSP数据结构的类型,如下面表格y中规定的。
表格y–NAL单元类型编码以及NAL单元类型分类
其中,可应用下面的定义。
访问单元:根据指定分类规则互相关联,在以解码次序连续并且精确地包含一个编码图片的一组NAL单元。
除了包含编码图片的编码切片段NAL单元之外,访问单元还可以包含其他NAL单元,其不包含编码图片的切片段。访问单元的解码总是导致解码图片。
关联的非VCL NAL单元:特定VCL NAL单元是非VCL NAL单元的关联的VCL NAL单元的非VCL NAL单元。
关联的RAP图片:以解码次序的先前的RAP图片(如果存在)。
关联的VCL NAL单元:对于具有等于EOS_NUT,EOB_NUT,FD_NUT或SUFFIX_SEI_NUT的nal_unit_type,或在RSV_NVCL45..RSV_NVCL47的范围中,或在UNSPEC48..UNSPEC63的范围中的非VCL NAL单元,以解码次序的先前VCL NAL单元;对于具有等于其他值的nal_unit_type的非VCL NAL单元,以解码次序的下一VCL NAL单元。
断链访问(BLA)访问单元:编码图片是BLA图片的访问单元。
断链访问(BLA)图片:每个切片段具有等于BLA_W_LP,BLA_W_RADL或BLA_N_LP的nal_unit_type的RAP图片。
BLA图片仅包含I切片,并且可以是以解码次序的比特流中的第一图片,或者可以在比特流中稍晚出现。每个BLA图片开始新编码视频序列,并且具有与IDR图片相同的对解码处理的影响。但是,BLA图片包含语法元素,其规定非空参考图片集。当BLA图片具有等于BLA_W_LP的nal_unit_type时,其可以具有相关联的RASL图片,该相关联的RASL图片不由解码器输出且可以不是可解码的,因为它们可能包含对不存在于比特流中的图片的参考。当BLA图片具有等于BLA_W_LP的nal_unit_type时,其也可以具有相关联的RADL图片,该相关联的RADL图片被规定为要被解码。当BLA图片具有等于BLA_W_RADL的nal_unit_type时,其不具有相关联的RASL图片,但可以具有相关联的RADL图片,该相关联的RADL图片被规定为要被解码。当BLA图片具有等于BLA_N_LP的nal_unit_type时,其不具有任何关联的先前图片。
清除随机访问(CRA)访问单元:编码图片是CRA图片的访问单元。
清除随机访问(CRA)图片:每个切片段具有等于CRA_NUT的nal_unit_type的RAP图片。
CRA图片只包含I切片,并可以是以解码次序的比特流中的第一图片,或者可以稍晚在比特流中出现。CRA图片可具有相关联的RADL或RASL图片。当CRA图片是以解码次序的比特流中的第一图片时,CRA图片是以解码次序的编码视频序列的第一图片,且任何相关联的RASL图片不由解码器输出且可能不是可解码的,因为它们可以包含对比特流中不存在的图片的参考。
填充数据NAL单元:具有等于FD_NUT的nal_unit_type的NAL单元。
瞬时解码刷新(IDR)访问单元:编码图片是IDR图片的访问单元。
瞬时解码刷新(IDR)图片:每个切片段具有等于IDR_W_RADL或IDR_N_LP的nal_unit_type的RAP图片。
IDR图片仅包含I切片,并可以是以解码次序的比特流中的第一图片,或者可以稍晚在比特流中出现。每个IDR图片是以解码次序的编码视频序列的第一图片。当IDR图片具有等于IDR_W_RADL的nal_unit_type时,其可以具有相关联的RADL图片。当IDR图片具有等于IDR_N_LP的nal_unit_type时,其不具有任何相关联的先前图片。IDR图片不具有相关联的RASL图片。
长期参考图片:被标记为“用于长期参考”的图片。
长期参考图片集:可能包含长期参考图片的两个参考图片集列表。
网络抽象层(NAL)单元:包含跟随的数据的类型的指示的语法结构以及包含形式为必要点缀有仿真预防字节的RBSP的数据的字节。
网络抽象层(NAL)单元流:NAL单元的序列。
非参考图片:标记为“不用于参考”的图片。
非参考图片包含不能用于在以解码次序的后续图片的解码处理中的帧间预测的采样。
图片参数集(PPS):包含应用于由在每个切片段报头中发现的语法元素所确定的零个或更多完整编码图片的语法元素的语法结构。
前缀SEI NAL单元:具有等于PREFIX_SEI_NUT的nal_unit_type的SEI NAL单元。
随机访问可解码先前(RADL)访问单元:编码图片是RADL图片的访问单元。
随机访问可解码先前(RADL)图片:每个切片段具有等于RADL_NUT的nal_unit_type的编码图片。
所有RADL图片都是先前图片。RADL图片不用作用于相同相关联RAP图片的拖曳图片的解码处理的参考图片。当存在时,所有RADL图片在以解码次序在相同相关联RAP图片的所有拖曳图片的先前。
随机访问点(RAP)访问单元:编码图片是RAP图片的访问单元。
随机访问点(RAP)图片:每个切片段具有在7到12(包含)的范围中的nal_unit_type的编码图片。
RAP图片仅包含I切片,且可以是BLA图片、CRA图片或IDR图片。比特流中的第一图片必须是RAP图片。假设必要参数组在它们需要被激活时可用,RAP图片和以解码次序的所有后续非RASL图片可以被正确解码,而不用执行在以解码次序在RAP图片先前的任何图片的解码处理。比特流中可以存在仅包含为非RAP图片的图片的I切片。
随机访问跳过先前(RASL)访问单元:编码图片是RASL图片的访问单元。
随机访问跳过先前(RASL)图片:每个切片段具有等于RASL_NUT的nal_unit_type的编码图片。
所有RASL图片都是相关联BLA或CRA图片的先前图片。当相关联的RAP图片是BLA图片或是比特流中的第一编码图片时,RASL图片不被输出并且可以不被正确可解码,因为RASL图片可以包含对不存在于比特流中的图片的参考。RASL图片不用作用于非RASL图片的解码处理的参考图片。当存在时,所有RASL图片在以解码次序在相同相关联的RAP图片的所有拖曳图片的先前。
原始字节序列载荷(RBSP):包含整数个字节的以NAL单元封装的语法结构。RBSP为空或者具有包含跟随有RBSP停止比特并跟随有零个或多个后续比特等于0的语法元素的数据比特串的形式。
原始字节序列载荷(RBSP)停止比特:存在于原始字节序列载荷(RBSP)内在数据比特串之后的等于1的比特。RBSP内的数据比特串的结束比特置可以通过从RBSP的结尾搜索作为RBSP中最后非零比特的RBSP停止比特来标识。
参考图片:为短期参考图片或长期参考图片的图片。
参考图片包含可用于以解码次序的后续图片的解码处理中的帧间预测的采样。
序列参数集(SPS):包含应用于由每个切片段报头中发现的语法元素所指的图片参数集中发现的语法元素的内容所确定的零个或多个完整编码视频序列的语法元素的语法结构。
短期参考图片:被标记为“用于短期参考”的图片。
步进式临时子层访问(STSA)访问单元:编码图片是STSA图片的访问单元。
步进式临时子层访问(STSA)图片:每个切片段具有等于STSA_R或STSA_N的nal_unit_type的编码图片。
STSA图片不使用具有用于帧间预测参考的与STSA图片相同的TemporalId的图片。以解码次序在STSA图片之后的具有与STSA图片相同的TemporalId的图片不使用以解码次序在STSA图片先前的具有帧间预测参考的与用于STSA图片相同的TemporalId的图片。STSA图片支持在STSA图片处从最近低子层到包含STSA图片的子层的上交换。STSA图片必须具有大于0的TemporalId。
后缀SEI NAL单元:具有nal_unit_type等于SUFFIX_SEI_NUT的SEI NAL单元。
补充增强信息(SEI)NAL单元:具有等于PREFIX_SEI_NUT或SUFFIX_SEI_NUT的nal_unit_type的NAL单元。
临时子层访问(TSA)访问单元:编码图片是TSA图片的访问单元。
临时子层访问(TSA)图片:每个切片段具有等于TSA_R或TSA_N的nal_unit_type的编码图片。
TSA图片和解码中TSA图片之后的图片不使用具有用于帧间预测参考的大于或等于TSA图片的TemporalId的图片。TSA图片支持在TSA图片处从最近低子层到包含TSA图片的子层或任何更高子层的上交换。TSA图片必须具有大于0的TemporalId。
拖曳图片:输出次序中的关联的RAP图片之后的图片。
视频编码层(VCL)NAL单元:编码切片段NAL单元以及具有被分类为VCL NAL单元的nal_unit_type的保留值的NAL单元的子集的共同术语。
视频参数组(VPS):包含应用于由每个切片段报头中发现的语法元素所指的图片参数集中发现的语法元素所指的序列参数集中发现的语法元素的内容所确定的零个或多个完整编码视频序列的语法元素的语法结构。
其中临时Id值被定义如下。
nuh_temporal_id_plus1minus 1规定用于NAL单元的临时标识符。nuh_temporal_id_plus1的值应不等于0。
变量TemporalId被规定为:
TemporalId=nuh_temporal_id_plus1-1
如果nal_unit_type处于16到23(包含)(RAP图片的编码切片段)的范围中,TemporalId应等于0;否则,当nal_unit_type等于TSA_R,TSA_N,STSA_R或STSA_N时,TemporalId不应等于0。
TemporalId的值应该对于访问单元的所有VCL NAL单元都相同。访问单元的TemporalId的值是访问单元的VCL NAL单元的TemporalId的值。
参考图15,例如,对于图片B,解码图片缓冲器中存在多于一个参考图片,图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i],因此,delta_poc_msb_present_flag[i]应等于1。然后,如在此描述的实施例,对于图片C和D,delta_poc_msb_present_flag[i]也被设定为1。由于图片D属于TemporalId=0,以解码次序在D之后的图片不需要设定delta_poc_msb_present_flag[i]为1,除非在解码图片缓冲器中存在多于一个参考图片,对于这些后续图片,图片次序计数取MaxPicOrderCntLsb的模等于PocLsbLt[i]。
前面的说明书中已使用的术语和表述在此用作描述的术语但并非限制,在使用这样的术语和表述时,没有排除所示和所述特征或其部分的特征的等价物的意图,认识到,发明的范围仅仅由所附的权利要求定义和限制。