slice_header( ) {
// first_mb_in_slice 片中的第一个宏块的地址, 片通过这个句法元素来标定它自己的地址。 要注意的是在帧场自适应模式下,宏块都是成对出现,这时本句法元素表示的是第几个宏块对,对应的第一个宏块的真实地址应该是2 * first_mb_in_slice
first_mb_in_slice
/* slice_type 指明片的类型
slice_type Name of slice_type
0 P (P slice)
1 B (B slice)
2 I (I slice)
3 SP (SP slice)
4 SI (SI slice)
5 P (P slice)
6 B (B slice)
7 I (I slice)
8 SP (SP slice)
9 SI (SI slice) */
slice_type
// pic_parameter_set_id 图像参数集的索引号. 范围 0 到 255。
pic_parameter_set_id
// frame_num 每个参考帧都有一个依次连续的 frame_num 作为它们的标识,这指明了各图像的解码顺序。但事实上我们可以看到,frame_num 的出现没有 if 语句限定条件,这表明非参考帧的片头也会出现 frame_num。只是当该个图像是参考帧时,它所携带的这个句法元素在解码时才有意义。
H.264 对 frame_num的值作了如下规定:当参数集中的句法元素gaps_in_frame_num_value_allowed_flag 不为1 时,每个图像的 frame_num 值是它前一个参考帧的frame_num 值增加 1。这句话包含有两层意思:
1) 当 gaps_in_frame_num_value_allowed_flag 不为 1,即 frame_num 连续的情况下,每个图像的frame_num 由前一个参考帧图像对应的值加 1,着重点是“前一个参考帧”。
前面我们曾经提到,对于非参考帧来说,它的 frame_num 值在解码过程中是没有意义的,因为frame_num 值是参考帧特有的,它的主要作用是在该图像被其他图像引用作运动补偿的参考时提供一个标识。但 H.264 并没有在非参考帧图像中取消这一句法元素,原因是在 POC 的第二种和第三种解码
H.264句法和语法总结(五)片头句法
最新推荐文章于 2023-05-14 18:24:15 发布