天天看点

H.264 PPS成员值含义学习笔记

1. pic_parameter_set_id pic_parameter_set_id 指明了在切片头中对应的某个 psp.pic_parameter_set_id 的值应该在 0 到 255, 包括 0 和 255 2. seq_parameter_set_id set_parameter_set_id 表示激活的 sps.seq_parameter_set_id 应该取值在 0 到 31 之间 , 包括边界值 . 3. entropy_coding_mode_flag entropy_coding_mode_flag 决定了在解码方法上使用的方法 . 如果 entropy_coding_mode_flag 为 0 的话 , 就使用 Exp-Golomb 编码方法 如果entropy_coding_mode_flag为1的话,就使用CABAC方法. 4. pic_order_present_flag pic_order_present_flag 等于 1 表示在切片头中图像顺序值存在 ,pic_order_present_flag 为 0 表示切片头中的图像顺序值不存在 5. num_slice_groups_minus1 num_slice_groups_minus1 加上 1 表示一个图像中的切片组数目 . 当 num_slice_groups_minus1 为 0 时 , 图象所有的切片属于同一组 . 6. slice_group_map_type slice_group_map_type 表示从切片组单到切片组的映射方法 .slice_group_map_type 的值可以取 0 到 6. slice_group_map_type=0 表示插值切片组 . slice_group_map_type=1 表示分散切片组映射 slice_group_map_type=2 表示一个或多个 " 前景 " 切片组和一个 " 剩余 " 切片组 . slice_group_map_type=3,4,5 时 , 表示变换切片组 . 当 num_slice_groups_minus1 不不 1 时 ,slice_group_map_type 应该不为 3,4,5. slice_group_map_type=6 时 , 表示从外部对对于每个切片组单元进行外部的切片赋值 . 如果 frame_mbs_only_flag 为 0 而且 mb_adaptive_frame_field_flag 为 1 且编码图像是一帧的话 , 切片组映射单元是宏块对 如果 frame_mbs_only_flag 为 1 而且 mb_adaptive_frame_field_flag 为 1 且编码图像是一场的话 , 切片组映射单元是宏块 其他的情况下 , 切片组单元是两个宏块 , 它们在一帧宏块对中是垂直连续的 7.run_length_minus1[i] 被用来赋给在光栅扫描中第 i 个切片组指明连续切片组单元的数量 .run_length_minus1[i] 的取值应为 0 到 PicSizeInMapUnits-1. top_left[ i ] and bottom_right[ i ] specify the top-left and bottom-right corners of a rectangle, respectively. top_left[ i ] and bottom_right[ i ] are slice group map unit positions in a raster scan of the picture for the slice group map units. For each rectangle i, all of the following constraints shall be obeyed by the values of the syntax elements top_left[ i ] and bottom_right[ i ] 8.top_left[i] and bottom_right[i] top_left[i] and bottom_right[i] 指出了矩形区左上角和右下角 .top_left[i] and bottom_right[i] 是对于一个切片组的图像的光栅扫描位置 . 对于每个矩形 i,top_left[i] and bottom_right[i] 应该满足所有的以下的约束 :   a) top_left[i] 应该比 bottom_right[i] 小或等于 ,bottom_right[i] 应该比 PicSizeInMapUnits 的值小 . b) (top_left[i]%PicWidthInMbs) 应该比 (bottom_right[i]%PicWidthInMbs) 的值小或等于 . 9. slice_group_change_direction_flag 在 slice_group_map_type 为 3,4,5 时跟 slice_group_map_type 一块儿来提取生成映射类型 , 10.slice_group_change_rate_minus1 slice_group_change_rate_minus1 用来指明 SliceGroupChangeRate 变量的值 .SliceGroupChangeRate 指出当切片组的大小对于每个图像来说都不同的时候 , 对切片组数目的运算的乘数 .slice_group_change_rate_minus1 取值范围为 0 到 PicSizeInMapUnits-1: SliceGroupChangeRate = slice_group_change_rate_minus1+1; 11. pic_size_in_map_units_minus1 pic_size_in_map_units_minus1 用来指明在一个图象中使用的切片组映射单元的数目 .pic_size_in_map_units_minus1 应该等于 PicSizeInMapUnits-1. 12. slice_group_id[i] slice_group_id[i] 说明了切片组单元中由光栅扫描顺序指定的第 i 个切片组 .slice_group_id[i] 应该取 0 到 num_slice_groups_minus1. 13. num_ref_idx_l0_active_minus1 指明了参考图像列表 0 中的最大参考索引值 , 它被用来解码图像的每一个切片 , 列表 0 在 num_ref_idx_active_override_flag 值为 0 的时候被使用 . 当 MbaffFrameFlag 值为 1 时 ,num_ref_idx_l0_active_minus1 是解码帧宏块的最大索引值 , 而 2 * num_ref_idx_10_active_minus1 + 1 是解码场宏块的最大索引值 .num_ref_idx_l0_active_minus1 的取值为 0 到 31. 14. num_ref_idx_l1_active_minus1与num_ref_idx_l0_active_minus1 有相同的语义 , 只不过它是针对列表 1 来说的 . 15.weighted_pred_flag weighted_pred_flag=0 表示加权预测在 P 和 SP 切片中没有被使用 weighted_pred_flag=1 表示加权预测在 P 和 SP 切片中有使用 . 16. weighted_bipred_idc weighted_bipred_idc=0 表示默认的加权预测被应用到 B 切片中 . weighted_bipred_idc=1 表示外部的加权预测被应用到 B 切片中 . weighted_bipred_idc=2 表示内部的加权预测被应用到 B 切片中 . weighted_bipred_idc 的取值为 0,1,2. 17.pic_init_qp_minus26 指出了对于每个切片来说的SliceQPY的初始值减26.初始值在切片层中当非0的slice_qp_delta被解码后时改变,在非0的mb_qp_delta值被在宏块层解码时再次被改变.pic_init_qp_minus26应该取-26到+25. 18. pic_init_qs_minus26 pic_init_qs_minus26 指出了对于 SP 或 SI 切片中的 SliceQSY 的被始值减 26. 这个初始值在切片层中当一个非 0 的 slice_qs_delta 被解码的时候被修改 .pic_init_qs_minus26 的取值为 -26 到 25. 19.chroma_qp_index_offset chroma_qp_index_offset表示在查QPC表时,对于QPY和QSY应该加上的偏移量.chroma_qp_index_offset取值为-12到12 20. deblocking_filter_control_present_flag deblocking_filter_control_present_flag=1 表示在切片头处用来控制解块滤波的特征值是存在的 . deblocking_filter_control_present_flag=0表示在切片头处用来控制解块滤波的特征值是不存在的. 21. constrained_intra_pred_flag constrained_intra_pred_flag=0 表示在帧内预测的时候允许剩余数据和邻近宏块解码采样 . constrained_intra_pred_flag=1 表示在受限的帧内预测 , 对宏块预测中使用帧内宏块预测模式只使用剩余数据和从 I 和 SI 宏块类型中的解码采样值 . 22. redundant_pic_cnt_present_flag redundant_pic_cnt_present_flag=0 表示 redundant_pic_cnt 在切片头中 , 数据分区 B 和数据分区 C 中不存在 . redundant_pic_cnt_present_flag=1 表示 redundant_pic_cnt 在所有切片头中 , 数据分区 B 和数据分区 C 中存在 .   Picture parameter set RBSP syntax  

pic_parameter_set_rbsp( ) { C Descriptor
     pic_parameter_set_id 1 ue(v)
     seq_parameter_set_id 1 ue(v)
     entropy_coding_mode_flag 1 u(1)
     pic_order_present_flag 1 u(1)
     num_slice_groups_minus1 1 ue(v)
     if( num_slice_groups_minus1 > 0 ) {
          slice_group_map_type 1 ue(v)
          if( slice_group_map_type = = 0 )
              for( iGroup = 0; iGroup <= num_slice_groups_minus1; iGroup++ )
                   run_length_minus1[ iGroup ] 1 ue(v)
          else if( slice_group_map_type = = 2 )
              for( iGroup = 0; iGroup < num_slice_groups_minus1; iGroup++ ) {
                   top_left[ iGroup ] 1 ue(v)
                   bottom_right[ iGroup ] 1 ue(v)
              }

          else if( slice_group_map_type = = 3 | | 

                        slice_group_map_type = = 4 | | 

                        slice_group_map_type = = 5 ) {

              slice_group_change_direction_flag 1 u(1)
              slice_group_change_rate_minus1 1 ue(v)
          } else if( slice_group_map_type = = 6 ) {
              pic_size_in_map_units_minus1 1 ue(v)
              for( i = 0; i <= pic_size_in_map_units_minus1; i++ )
                   slice_group_id[ i ] 1 u(v)
          }
     }
     num_ref_idx_l0_active_minus1 1 ue(v)
     num_ref_idx_l1_active_minus1 1 ue(v)
     weighted_pred_flag 1 u(1)
     weighted_bipred_idc 1 u(2)
     pic_init_qp_minus26 /* relative to 26 */ 1 se(v)
     pic_init_qs_minus26  1 se(v)
     chroma_qp_index_offset 1 se(v)
     deblocking_filter_control_present_flag 1 u(1)
     constrained_intra_pred_flag 1 u(1)
     redundant_pic_cnt_present_flag 1 u(1)
     if( more_rbsp_data( ) ) {
          transform_8x8_mode_flag 1 u(1)
          pic_scaling_matrix_present_flag 1 u(1)
          if( pic_scaling_matrix_present_flag )
              for( i = 0; i < 6 + 2* transform_8x8_mode_flag; i++ ) {
                   pic_scaling_list_present_flag[ i ] 1 u(1)
                   if( pic_scaling_list_present_flag[ i ] )
                        if( i < 6 )
                             scaling_list( ScalingList4x4[ i ], 16,                               UseDefaultScalingMatrix4x4Flag[ i ] ) 1
                        else

                             scaling_list( ScalingList8x8[ i – 6 ], 64,

                             UseDefaultScalingMatrix8x8Flag[ i – 6 ] )

1
              }
          second_chroma_qp_index_offset 1 se(v)
     }
     rbsp_trailing_bits( ) 1
}