H264H265视频编解码算法文章汇总
1.序列参数集(Picture Parameter Set)
-
图像参数集Picture Parameter Set:
- 类似于序列参数集SPS,图像参数集在H.264的码流中提供了解码所需要的重要参数;
-
PPS信息的保存位置:
-
封装格式:与SPS一起保存于视频头(如AVCDecoderConfigurationRecord);
-
裸流格式:NAL Type为8的NAL Unit中。
-
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.pngimage.png
image.png
网友评论