美文网首页
六、图像参数集(Picture Parameter Set)

六、图像参数集(Picture Parameter Set)

作者: 一亩三分甜 | 来源:发表于2024-02-19 09:19 被阅读0次

    H264H265视频编解码算法文章汇总
    1.序列参数集(Picture Parameter Set)

    • 图像参数集Picture Parameter Set:

      • 类似于序列参数集SPS,图像参数集在H.264的码流中提供了解码所需要的重要参数;
    • PPS信息的保存位置:

      • 封装格式:与SPS一起保存于视频头(如AVCDecoderConfigurationRecord);

      • 裸流格式:NAL Type为8的NAL Unit中。

    image.png

    pic_parameter_set_id:图像参数集标识符,表示自己的序号

    seq_parameter_set_id:spsid,通过此参数可以找到pps引用和参考的sps结构

    entropy_coding_mode_flag:标识位,表示熵编码使用的方法

    image.png

    比如mb_field_decoding_flag有两种编码方式u(1)|ae(v)表示在不同的选择下可以使用不同的熵编码方式,entropy_coding_mode_flag标志位就可指定使用哪种编码方式,当flag为0选择的是左边的u(1)算法长度为1的无符号数,当flag为1选择的是右边的ae(v)算法,上下文自适应的二进制算术编码

    bottom_field_pic_order_in_frame_present_flag:为1表明语法元素delta_pic_order_cnt_bottom(pic_order_cnt_type=0时存在)或delta_pic_order_cnt 1 在Slice Headers中存在,为1则两者均不存在于Slice Headers中,解析Slice Headers会详细介绍两个语法元素的意义。使用次数不会很多,因为主要考虑的是真编码。

    num_slice_groups_minus1:表示slice group的数量减去1,当为0时,这一帧所有的slice都属于一个slice group,当大于0时,表示这一帧被分割成了多个slice group,slice group表示在一帧中宏块的组合方式,一个宏块的子集或图片的宏块对,图像的slice group是图像的一种分割方式,这种分割方式是宏块to slice group的映射关系来表示的。主要用在FMO灵活编码方式才用到。可设置为0表示所有的宏块同属于一个slice group

    num_ref_idx_l0_default_active_minus1:

    num_ref_idx_l1_default_active_minus1:

    image.png

    表示slice header中的num_ref_idx_active_override_flag若为0,上面两个语法元素没有明确写在码流中,两个语法元素的默认值就会采用pps中指定的默认值

    weighted_pred_flag:表示是否开启加权预测

    weighted_bipred_idc:表示加权预测模式的索引,为0表示默认的加权预测被应用到B Slices中,为1表示显示的加权预测被应用到B Slices中,为2表示隐式的加权预测被应用到B Slices中,取值范围0-2

    pic_init_qp_minus26 /* relative to 26 */:表示SliceQPY减去一个26的值,非0的Slice_qp_delta和slice layer一起计算得到一个初始值,也能在宏块层中的mb_qp_delta解码时改变值,取值范围在(-(26+QpBdOffsetY),25)之间

    pic_init_qs_minus26 /* relative to 26 */:和pic_init_qp_minus26作用类似,应用于所有的SP或SI Slices宏块,也就是此语法元素支队SP或SI Slices中的宏块起作用

    chroma_qp_index_offset:用来计算色度分量的量化参数的值,取值范围为(-12,12),值会被加到Qpy和Qsy用来定位QPc值的表格

    deblocking_filter_control_present_flag:标志位,用于表示slice header中是否存在用于去块滤波器相关的控制信息,为1表示slice header中存在相应的去块滤波器信息,为0表示slice header中没有相应信息

    constrained_intra_pred_flag:表示帧内预测宏块参考数据的来源,为1表示某一个I宏块在进行帧内预测的时候只能采用来自I宏块或SI的信息,否则为0表示I宏块可以采用来自Intra宏块的相关信息

    redundant_pic_cnt_present_flag:标志位,表示在slice header中相应语法元素是否存在的标志,为1表示Slice Header中存在redundant_pic_cnt的标志位,为0表示在Slice Header中不存在redundant_pic_cnt的信息

    下面部分不常用

    image.png

    很明显pps中有几个元素是有符号的指数哥伦布编码se(v)

    无符号ue(v)和有符号se(v)之间的关系如下

    image.png

    当ue(v)为奇数时,转换为指数哥伦布编码为正数

    当ue(v)为偶数时,转换为指数哥伦布编码为负数

    通过代码解析pps的值,随着解析复杂的码流,可能会在pps中增加新的成员变量,比如中间暂时忽略的部分

    num_slice_groups_minus1 > 0的情况和存在more_rbsp_data( )的情况

    image.png

    image.png

    image.png

    相关文章

      网友评论

          本文标题:六、图像参数集(Picture Parameter Set)

          本文链接:https://www.haomeiwen.com/subject/qdzpadtx.html