h264编码概述八(哥伦布编码ue(v))

一、概述

熵编码是无损编码的一种方法。该编码方法的宗旨是找到一种编码,使得码字的平均码长达到熵极限。具体实施是,对出现概率较大的符号,取较短的码长,对出现概率较小的符号取较大的码长。

H.264中使用的熵编码有:指数哥伦布编码、CAVLC、CABAC。 

本次仅分析指数哥伦布编码方法。H.264中定义的指数哥伦布编码共四类:

类型说明
ue(v)无符号指数哥伦布编码
se(v)有符号指数哥伦布编码
te(v)截断指数哥伦布编码
me(v)映射指数哥伦布编码

其中ue(v)是其他变型算法的基础,其他算法的结果由ue(v)的结果进一步处理得到。

ue(v)的码字分为三个部分:[prefix] + 1+ [surfix]

[prefix]为连续n个0。

[surfix]为表示实际数值的信息位,其长度与[prefix]一样。

[prefix] 和 [surfix]由码元取值确定。

下图是哥伦布编码不同值,编码后占用的bit位长度:

标题无符号指数哥伦布编码:ue(v)编码方法

计算公式:(LeadingZeroBits:前面有多少个零)

二、实现

1、由此总结结,无符号指数哥伦布编码的实现,可以分为以下四步

 2、举例说明

code_num

tmp1:

code_num + 1

tmp2:转换二进制记录比特个数:M

tmp3:[prefix]需插入0个数(M-1)

码字

01101
12101010
23111011
34100200100
45101200101
56110200110
67111200111
78100030001000
89100130001001

X264编码实现流程整理: 

三、示例

以上面一段SPS的码流为例: 

00 00 00 01      67                         4D                                                  00     29                       

start code     nalutype=7 sps     profileidc=0x4D=77=main profile      level idc=0x29=41=4.1

8D  8D  40  3C 

seq_parameter_set_id:ue(v)  (解析8D为10001101)首个1bit是seq_parameter_set_id,根据上面的二.2表格,可知seq_parameter_set_id为0。

log2_max_frame_num_minus4:ue(v) (解析8D为0001101)如下显示,log2_max_frame_num_minus4应该是12

code_num

tmp1:

code_num + 1

tmp2:转换二进制记录比特个数:M

tmp3:[prefix]需插入0个数(M-1)

码字

1213110130001101

pic_order_cnt_type:ue(v)  (解析8D为10001101)首个1bit是pic_order_cnt_type=0

log2_max_pic_order_cnt_lsb_minus4:ue(v)解析8D为0001101)为12

num_ref_frames:ue(v)(解析40为01000000):为1

gaps_in_frame_num_value_allowed_flag:u(1):为0

pic_width_in_mbs_minus1:ue(v)(解析0x03C01:0000 0011 1100 0000 0001)

code_num

tmp1:

code_num + 1

tmp2:转换二进制记录比特个数:M

tmp3:[prefix]需插入0个数(M-1)

码字

119120111 100060000 0011 1100 0

01  13 

pic_height_in_map_units_minus1:ue(v) (解析0x0113: 000 0001 0001 0011  )为67

code_num

tmp1:

code_num + 1

tmp2:转换二进制记录比特个数:M

tmp3:[prefix]需插入0个数(M-1)

码字

6768100 010060000 0001 0001 00

frame_mbs_only_flag:u(1)  bit1为1

direct_8x8_inference_flag:u(1) bit1为1

F2C

frame_cropping_flag:u(1)(解析0xF2:1111 0010) bit1为1

frame_crop_left_offset:ue(v) (解析0xF2:1111 0010) bit1为0

frame_crop_right_offset:ue(v) (解析0xF2:1111 0010) bit1为0

frame_crop_top_offset:ue(v) (解析0xF2:1111 0010) bit1为0

frame_crop_bottom_offset:ue(v) (解析0x2C: 0010 1100)为4

vui_parameters_present_flag:u(1)(解析0x2C:0010 1100)为TRUE

下面需要解VUI信息

aspect_ratio_info_present_flag:u(1) (解析0x2C:0010  1100)为false

overscan_info_present_flag:u(1)(解析0x2C:0010  1100)为false

D  C0  40  40  5

video_signal_type_present_flag:u(1)(解析0XDC:1101 1100)为true。

video_format:u(3) (解析0xdc:1101 1100)为5
video_full_range_flag:u(1) (解析0xdc 1101 1100)为true
colour_description_present_flag:u(1) (解析0xdc 1101 1100)为true

colour_primaries:u(8) (解析0xc040: 1100 0000 0100 0000)为1
transfer_characteristics:u(8) (解析:0x4040:0100 0000 0100 0000)为1
matrix_coefficients:u(8) (解析0x4050:0100 0000 0101 0000)为1

chroma_loc_info_present_flag:u(1) (解析0x4050:0100 0000 0101 0000)为0

timing_info_present_flag:u(1)(解析0x4050:0100 0000 0101 0000)为true

0000 0BB8  0001 5F90   0400  0000 0 

num_units_in_tick:u(32) 0x0000 0BB8
time_scale:u(32) 0x0001 5F90
fixed_frame_rate_flag:u(1):(解析0x0400:0000 0100 0000 0000 )为false。

nal_hrd_parameters_present_flag:u(1) (解析0x0400:0000 0100 0000 0000 )为false。
vcl_hrd_parameters_present_flag:u(1) (解析0x0400:0000 0100 0000 0000 )为false。
pic_struct_present_flag:u(1) (解析0x0400:0000 0100 0000 0000 )为false。
bitstream_restriction_flag:u(1)(解析0x0400:0000 0100 0000 0000 )为false。

后面是trailing_bits()

rbsp_stop_one_bit:f(1)(解析0x0400:0000 0100 0000 0000 )为true。

后面是为了字节对齐补充的pad位。

四、参考

H264编码-哥伦布解析SPS信息 - 简书

h264编码分析-哥伦布编码_h264 哥伦布编码_fantasy_arch的博客-CSDN博客

H.264(三)熵编码和指数哥伦布编码_13257193的技术博客_51CTO博客

H.264(四)指数哥伦布编码(实现编码)_13257193的技术博客_51CTO博客

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值