h264编码概述八(哥伦布编码ue(v))
创始人
2024-05-30 21:39:55
0

一、概述

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

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]由码元取值确定。

标题无符号指数哥伦布编码: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博客

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...