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