欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

H265/HEVC:VPS参数集

程序员文章站 2022-07-07 14:06:35
...

转载自:https://blog.csdn.net/Dillon2015/article/details/104142144/

HEVC在H.264/AVC的基础上引入了视频参数集(Video Parameter Set,VPS)。这样HEVC共定义了3类参数集:视频参数集(Video Parameter Set,VPS)、序列参数集(SequenceParameter Set,SPS)、图像参数集(Picture Parameter Set,SPS)。

在一个HEVC码流中,前三个NALU分别是VPS NALU、SPS NALU、PPS NALU。这三类参数集的NALU可以独立解码而不需要参考码流中其他NALU。每一类参数集都包含扩展机制,允许在将来的HEVC版本中扩展这个参数集而不会破坏向后兼容性。

VPS用于传送应用于多层和子层视频编码所需的信息,提供了整个视频序列的全局性信息。一个给定的视频序列的每一层都参考同一个VPS,无论它们SPS是否相同。

VPS语法元素

HEVC中定义了VPS的各个语法元素及描述子,如下表所示。描述子即语法元素的熵解码算法,描述子定义如下:

ae(v):CABAC编码。

b(8):读进连续的8比特。

f(n):读进连续的n比特。

se(v):有符号指数哥伦布编码。

u(n):读进连续的n比特,且它们解码后为无符号整数。

ue(n):无符号指数哥伦布编码。

上面描述子括号中参数为n时,表示该语法元素是定长编码,参数为v时表示该语法元素是变长编码。

H265/HEVC:VPS参数集

 

上表定义了VPS的语法元素,前7条语法元素采用定长编码,共4个字节,方便解码器读取,这7条语法元素包括VPS识别符,相关可用层及可用时域子层的信息。

跟随前4个字节后的语法元素包括:比特流中解码器工作的可用操作点信息。一个操作点的特性由使用的Profile、tier和level刻画。它定义了解码比特流所需的编码工具,以及对比特流尺寸或缓存容量的限制。跟在整个比特流操作点指标后的是比特流时域子层的操作点指标。

vps_video_parameter_set_id:当前VPS标识符,供PPS引用。

vps_base_layer_internal_flagvps_base_layer_available_flag:

  • 如果vps_base_layer_internal_flag=1且vps_base_layer_available_flag=1,码流中存在base layer。

  • 否则,如果vps_base_layer_internal_flag=0且vps_base_layer_available_flag=1,base layer由本规范未规定的外部手段提供。

  • 否则,如果vps_base_layer_internal_flag=1且vps_base_layer_available_flag=0,不存在base layer,但是VPS中包含base layer的信息就像其存在于码流中一样。

  • 否则,如果vps_base_layer_internal_flag=0且vps_base_layer_available_flag=0,不存在base layer,但是VPS中包含base layer的信息就像其由本规范未规定的外部手段提供一样。

vps_max_layers_minus1:该值加1表示参考这个VPS的CVS(Coded Video Sequence)的最多允许的层数。为了保持码流的一致性,当vps_base_layer_internal_flag=0时vps_max_layers_minus1应该大于0。在本规范中vps_max_layers_minus1应该小于63。vps_max_layers_minus1=63留给将来扩展使用。

vps_max_sub_layers_minus1:该值加1表示参考这个VPS的CVS的最多允许的时域子层数。vps_max_sub_layers_minus1 值应该在0~6间,即最多支持7个时域子层。

vps_temporal_id_nesting_flag:当vps_max_sub_layers_minus1=0时,该参数为1;当vps_max_sub_layers_minus1大于0时,这个参数用于指定是否对帧间预测进行额外限定。该参数用于指定时域子层升档,即从低子层切换到高子层。

vps_reserved_0xffff_16bits:两字节保留位,其值等于0xFFFF。

vps_sub_layer_ordering_info_present_flag:vps_sub_layer_ordering_info_present_flag=1表示vps_max_dec_pic_buffering_minus1[ i ],vps_max_num_reorder_pics[ i ] 和vps_max_latency _increase_plus1[ i ]作用于vps_max_sub_layers_minus1 + 1 子层。

vps_sub_layer_ordering_info _present_flag=0表示vps_max_dec_pic_buffering_minus1[ vps_max_sub_layers_minus1 ],vps_max_num_reorder_pics[ vps_max_sub_layers_minus1 ]和vps_max_latency_increase_plus1[ vps_max_sub_layers_minus1 ] 作用于所有子层。

当vps_base_layer_internal_flag=0时,vps_sub_layer_ordering_info _present_flag=0且解码器应该忽略该字段。

vps_max_dec_pic_buffering_minus1[ i ]:规定了HighestTid=i时,CVS的图像存储单元中解码图像所需的最大缓存。

vps_max_num_reorder_pics[ i ] :规定了HighestTid=i时,在CVS中解码顺序在某一幅图像之后,而显示顺序在该图像前的图像最大数量。

vps_max_latency_increase_plus1[ i ] :当HighestTid=i时,该语法元素用于计算VpsMaxLatency Pictures[i]的值。

当vps_max_latency_increase_plus1[ i ]不等于0时,VpsMaxLatencyPictures[ i ] =vps_max_num_reorder_pics[i]+vps_max_latency_increase_plus1[ i ]-1。

vps_max_layer_id:指定参考该VPS的所有CVS中的NALU的nuh_layer_id的最大值。

vps_num_layer_sets_minus1:指定VPS中层集(layer set)的数量,该值在0~1023间。

layer_id_included_flag[ i [ j] :该语法元素为1时,表示图层标识列表 LayerSetLayerIdList[ i ]中包含nuh_layer_id=j的情况;该语法元素为0时,表示图层标识列表 LayerSetLayerIdList[ i ]中不包含nuh_layer_id=j的情况;

NumLayersInIdList[ 0 ]=1且LayerSetLayerIdList[0][0]=0,NumLayersInIdList[i]和 LayerSetLayerIdList[ i ]由下面方式生成。

  1. n=0
  2. for(m=0;m<=vps_max_layer_id;m++)
  3.    if(layer_id_included_flag[i][m])
  4.        LayerSetLayerIdList[i][n++]=m
  5. NumLayersInIdList[i]=n

vps_timing_info_present_flag :该语法元素为1时,表示在VPS中语法元素vps_num_units_in_tick、vps_time_scale、vps_poc_proportional_to_timing_flag和vps_num_hrd_parameters存在;该语法元素为0时VPS中不存在这4个语法元素。

vps_num_units_in_tick:该语法元素规定当时钟频率为vps_time_scale Hz时所花的时间单位个数。以秒为单位时,一个时钟周期等于vps_num_units_in_tick除以vps_time_scale 。例如,当一个视频的帧率为25Hz时,vps_time_scale 等于27000000Hz,vps_num_units_in_tick就等于1080000,因此一个时钟周期就是0.04秒。

vps_time_scale:一秒内时间单位的个数。

vps_poc_proportional_to_timing_flag:该语法元素为1时,表示CVS在每幅图像(不包括第一幅图像)的POC与它的显示时间和第一幅图像的显示时间的比值成正比;否则,不成比例。

vps_num_ticks_poc_diff_one_minus1:表示POC之间差值为1时,时钟周期的数目。

vps_num_hrd_parameters:指定VPS RBSP中语法结构体hrd_parameters()的数目。

hrd_layer_set_idx[ i ]:指定第i个语法结构体hrd_parameters()使用的图层集的索引。

cprms_present_flag[ i ] :表示第i个hrd_parameters()中是否存在所有子层公用的HRD参数。

vps_extension_flag:该语法元素取0时,表示在VPS RBSP中没有语法元素vps_extension_data_flag。

vps_extension_data_flag:可以为任意值。在该版本中,解码器忽略该语法元素。

感兴趣的请关注微信公众号Video Coding

H265/HEVC:VPS参数集

 

相关标签: 视频编解码