HEVC 序列参数集 SPS说明
在H.265/HEVC中,一个CVS由一个随机接入点开始,第一幅图像可以是IDR图像,也可以是non-IDR图像。non-IDR图像可以是BLA (Broken Link Access)图像或 CRA (Clean Random Access)图像。对于一段视频码流,其可能包含一个或者多个编码视频序列CVS。序列参数集SPS的内容就是包含一个CVS中所有编码图像的共享编码参数,SPS通过被PPS引用而作用于编码图像,一个CVS中所有被使用的PPS必须引用同一个SPS。实际上,SPS为所有的SS提供了公共参数,如图像的格式、档次、级等。当一个SPS被引用时,该SPS处于激活状态,直到整个CVS结束。
下表给出了SPS中所含的语法元素,其内容大致分为以下几个部分。
1 图像格式的信息。包括采样格式、图像分辨率、量化深度、解码图像是否需要裁剪输出以及相关的裁剪参数。
2 编码参数信息。包括编码块、变换块的最小尺寸和最大尺寸,帧内、帧间预测编码时变换块的最大划分深度,对4:4:4采样格式的三个通道分量是否单独编码,是否需要帧内强滤波,帧间预测过程中的某些限制条件[如非对称模式(AMP)的使用、时域MV预测的使用]是否使用量化矩阵,是否需要样点自适应补偿(SAO),是否采用PCM模式及在该模式下的相关编码参数。
3 与参考图像相关的信息。包括短期参考图像的设置,长期参考图像的使用和数目,长期参考图像的POC和其能否作为当前图像的参考图像。
4 档次、层和级相关参数。
5 时域分级信息。包括时域子层的最大数目,控制传输POC进位的参数,时域子层顺序标识开关,与子层相关的参数(如解码图像缓冲区的最大需求)。
6 可视化可用性信息、(VideoUsabilityInformation,VUI),用于表征视频格式等额外信息。
7 其他信息。包括当前SPS引用的VPS编号、SPS标识号和SPS扩展信息。
sps_videoparametersetid:指定当前激活的VPS的ID号。
sps_max_sublayers_minus1:用于指定时域子层的最大数目。
sps_temporal_id_nesting_flag:当sps_max_sub_layers_minus1大于0时,其规定了是否额外地限制CVS的帧间预测,当vps_temporal_id_nesting_flag取值为1时,该语法元素取值为1。当sps_max_sub_layers_minusl为0时,该语法元素取值为1。
sps_seq_parameter_set_id:表示SPS的标识号,取值范围为[0,15]。
chroma_formati_dc:表示色度采样格式,取值范围为[0,3]。例如取值为1时,表示采用4:2:0格式。
separate_colour_plane_flag:该语法元素取值为1,则表示对4:4:4格式的三种通道分量采用单独编码;该语法元素取值为则表示彩色分量不进行独立编码。当该语法元素没有给出时,可推测出其值为0。
pic_width_in_luma_samples:表明解码图像中亮度样点的宽度。
pic_height_in_luma_samples:表明解码图像中亮度样点的高度。
conformance_window_flag:表示解码器是否要对解码后的图像裁剪输出。
conf_win_left_offset、conf_win_right_offset、confwin_top_offset和confwinbottomoffset:当conformance_window_flag值为1时,解码图片需要裁减输出,这四个参数用于指定左、右、上、下的裁剪宽度。
bit_depth_luma_minus8:表示亮度像素的比特深度。
bit_depth_chroma_minus8:表示色度像素的比特深度。
log2_maxpic_order_cnt_Isb_minus4:该语法元素的取值范围为[0,12],其用于计算变量MaxPicOrderCntLsb的值。MaxPicOrderCntLsb用于控制进位,比特流中只传一个低位的POC,不用传高位POC。利用前参考图像的高、低位POC和MaxPicOrderCntLsb得到当前图像的高位POC,再结合当前图像的低位POC,可以得到当前图像实际的POC。
sps_sub_layer_ordering_info_present_flag:时域子层顺序标识开关。该值等于1,表示sps_max_decpic_buffering_minus1[i]、sps_max_numreorder_pics[i]、sps_max_latency_increase_plus1[i]适用于sps_max_sublayersminus1+1子层;该值等于0,则表示这些参数适用于所有子层。sps_max_dec_pic_buffering_minus1[i]:当HighestTid取值为i时,该语法元素规定了解码图像缓冲区的最大需求。
sps_max_num_reorder_pics[i]:当HighestTid取值为i时,表示解码顺序在某一图像之后,而显示顺序在该图像之前的图像的最大数量。其取值范围为[0,sps_max_dec_pic_buffering_minus1[i]]。
sps_max_latency_increase_plus1[i]:该值不为0时,其用于计算SpsMaxLatencyPictures[i]的值。
log2_minluma_coding_blocksize_minus3:指定亮度编码块的最小尺寸。log2_diff_max_min_luma_coding_block_size:指定亮度编码块最大尺寸和最小尺寸的差值。
log2_min_transform_block_size_minus2:指定亮度变换块的最小尺寸。
log2_diff_max_min_transform_block_size:指定亮度变换块最大尺寸和最小尺寸的差值。
max_transform_hierarchy_depth_inter:表示帧间预测时变换块的最大划分深度。取值范围为[0,CtbLog2SizeY - Log2MinTrafoSize]。
max_transform_hierarchy_depth_intra:表示帧内预测时变换块的最大划分深度。取值范围为[0,CtbLog2SizeY - Log2MinTrafoSize]。
scaling_list_enabled_flag:表示对变换系数在量化过程中是否使用量化矩阵。sps_scaling_list_data_present_flag:表示是否存在量化矩阵数据。
amp_enabled_flag:表示是否使用非对称划分模式,非对称模式即PartMode等于PART_2NxnU,PART_2NxnD,PART_nLx2N或PART_nRx2N。
sample_adaptive_offset_enabled_flag:表示去方块滤波过程后重构图像是否使用样点自适应补偿(SAO)。
pcm_enabled_flag:表示是否使用PCM模式。
pcm_sample_bit_depth_luma_minus1:表示亮度分量中PCM样点的比特深度。pcm_sample_bit_depth_chroma_minusl:表示色度分量中PCM样点的比特深度。
log2_min_pcm_luma_coding_block_size_minus3:表示在PCM模式下,编码块的最小尺寸。
log2_diff_max_min_pcm_luma_coding_block_size:表示在PCM模式下,编码块尺寸最大值和最小值的差值。
pcm_loop_filter_disabled_flag:表示在PCM模式下,编码单元的重建像素是否使用环路滤波。
num_short_term_ref_pic_set:指明在SPS中short_term_ref_pic_set()的数目。其取值范围为[0,64]。
long_term_ref_pics_present_flag:表示帧间预测时是否使用长期参考图像。
num_long_term_refpics_sps:指定SPS中长期参考图像的数目,其取值范围是[0,32]。
lt_ref_pic_poc_Isb_sps[i]:表示POC与SPS中第i个长期参考图像的MaxPicOrderCntLsb取模之后的值。
used_by_curr_pic_It_sps_flag[i]:表示第i个长期参考图像能否作为当前图像的参考图像。
sps_temporal_mvp_enabled_flag:指定非IDR图像的片头中是否存在句法元素slice_temporal_mvp_enabled_flag(表示帧间预测过程中能否使用时域MV预测)。
strong_intra_smoothing_enabled_flag:表示滤波过程是否使用双向线性插值。
vui_parameters_present_flag:表示是否含有语法结构体vuiparame-ters()。
sps_extension_flag:其值为0,则表示语法元素sps_extension_data_flag不存在;其值为1,则语法元素sps_extension_data_flag被保留以供将来使用。
sps_extension_data_flag:可以为任意值,在现有版本中解码器忽略该语法元素。
摘自《新一代高效视频编码 H.265/HEVC:原理、标准与实现》 万帅 杨付正 编著