H264 SPS 序列解析整理

本文详细介绍了指数哥伦布编码算法及其应用实例。通过具体的步骤和示例,讲解了如何利用该算法进行数据编码和解码的过程。同时,还列举了一系列与视频编解码相关的字段及其对应的编码方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普及准备

指数哥伦布编码算法

即:文中用到的ue.

使用例子
  1. 给出一些字段,按着固定的顺序规定好.例如2
  2. 字段:[a, b, c, d, e] 传输的数据为:bits=[0001 0011 0101 1100 0001 0101]
  3. a,b,c,d,e均需要ue取值
  4. 第一步计算 a
  5. 定义leadingNum = -1;
  6. 向数据中取出当前下标数据如bits[index=0]=0;
  7. leadingNum++;
  8. 判断是bits[index]的值如果是1停止遍历,否则{index++;并且跳转到步骤6;}
  9. 第一个跳出循环时,leadingNum = 3, index = 3;
  10. 计算code = (2^leadingNum ) - 1 + read_bits(leadingNum);
  11. 解析read_bits(3)的方法,就是当前index向后读3位流数据;eg:就是bits[3]的后三位:001再将这个二进制转成十进制即:1;
  12. 所以code = (2 ^ 3) - 1 + 1 = 8
  13. b,c,d,e同理可得b = (2 ^ 0) - 1 +0 = 0

字段顺序以及对应算法

说明:每个字段后跟的ue u1 se都是表示对位流处理使用的方法,
如:chroma_format_idc ue表示这个字段名的值,通过指数哥伦布编码对原始数据流的位处理解码得出相关的值.
u1(1是阿拉伯数字one)表示读取处理下标当前一位.

chroma_format_idc ue
if (chroma_format_idc == 3)
    residual_colour_transform_flag u1
bit_depth_luma_minus8 ue
bit_depth_chroma_minus8 ue
qpprime_y_zero_transform_bypass_flag u1
seq_scaling_matrix_present_flag u1
if (seq_scaling_matrix_present_flag)
{//FIXME-ME 缩放未完善.
    for (i=0;i<8;i++)
    {
        seq_scaling_list_present_flag[i] //u1
        if (seq_scaling_list_present_flag[i])
        {

        }
    }
}
log2_max_frame_num_minus4 ue
pic_order_cnt_type ue
if (pic_order_cnt_type == 0)
{
    log2_max_pic_order_cnt_lsb_minus4 ue
}
else if (pic_order_cnt_type == 1)
{
    delta_pic_order_always_zero_flag u1
    offset_for_non_ref_pic se
    offset_for_top_to_bottom_field se
    num_ref_frames_in_pic_order_cnt_cycle ue
    for (i=0;i<num_ref_frames_in_pic_order_cnt_cycle;i++)
    {
        offset_for_ref_frame[i] se
    }
}  
num_ref_frames ue
gaps_in_frame_num_value_allowed_flag u1
pic_width_in_mbs_minus1 ue
pic_height_in_map_units_minus1 ue
frame_mbs_only_flag u1
if (!frame_mbs_only_flag) 
{
    mb_adaptive_frame_field_flag u1
}
direct_8x8_inference_flag u1
frame_cropping_flag u1
if (frame_cropping_flag)
{
    frame_crop_left_offset ue
    frame_crop_right_offset ue
    frame_crop_top_offset ue
    frame_crop_bottom_offset ue
}
vui_parameters_present_flag u1
if (vui_parameters_present_flag)
{
    vui_parameters()
}
rbsp_trailing_bits()

以下未整理类型:
aspect_ratio_info_present_flag
overscan_info_present_flag
video_signal_type_present_flag
chroma_loc_info_present_flag
timing_info_present_flag
nal_hrd_parameters_present_flag
vcl_hrd_parameters_present_flag
pic_struct_present_flag
bitstream_restriction_flag
motion_vectors_over_pic_boundaries_flag
max_bytes_per_pic_denom
max_bits_per_mb_denom
max_mv_length_horizontal
log2_max_mv_length_vertical
num_reorder_frames
max_dec_frame_buffering
rbsp_stop_bit
rbsp_trailing_bits

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值