x264中比特流的存储结构
来源:互联网 发布:内存限制linux 编辑:程序博客网 时间:2024/05/16 17:57
// http://qiudw1020.blog.163.com/blog/static/12091345620098110342609/
在未包含熵编码时,这涉及到3个结构体
//NAL单元的数据结构:typedef struct{ int i_ref_idc; //指该NAL单元的优先级 int i_type; //指该NAL单元的类型 int i_payload; //该nal单元包含的字节数 uint8_t *p_payload;//该NAL单元存储数据的开始地址} x264_nal_t;//比特流的数据结构:typedef struct bs_s{ uint8_t *p_start; //比特流的起始位置指针 uint8_t *p; //比特流当前位置指针 uint8_t *p_end; //比特流结尾位置指针 intptr_t cur_bits; // 当前的数据,长度为系统规定的int类型的比特长度 int i_left; //在cur_bits中尚未写入数据的剩余比特数 int i_bits_encoded; /* RD only */}//x264结构体中对于输出数据的结构定义: struct { int i_nal; x264_nal_t nal[X264_NAL_MAX]; int i_bitstream; //预先设定的比特流的大小,应该大于最大数据时的长度 uint8_t *p_bitstream; //比特流数据地址 bs_t bs; int i_frame_size;//当前编码的图像帧码流大小,用于码率控制 } out;
上面,x264.out中可以包含若干个nal单元,每个nal单元记录其本身的数据长度和数据存储的地址,x264.out中还包含一个bs单元,该单元用来比特流的写入操作,因为编码之后的数据常常以比特的形式出现,需要将之变换成字节、字型的数据进行存储。
数据在比特流中的存储通过三个函数来完成
bs_init:设置bs->p=bs->start=out->p_bitstream
x264_nal_start:初始化nal单元的数据结构,指定nal->p_payload等于p_bitstream的当前起始位置
x264_xxx_write:写入数据到bs-.>p,同时bs->p相应的增长
x264_nal_end:使用bs->p – bs->p_start得到写完该NAL的在p_bitstream中的位置,用该位置-nal->p_payload得到数据的长度。
上面3个结构体的逻辑关系可以见下图:
- x264中比特流的存储结构
- x264中比特流的存储结构
- x264中比特流的存储结构
- x264中比特流的存储结构
- x264中几个重要结构体的说明
- x264中两个重要的结构体x264_param_t和cli_opt_t
- x264 - FENC_SRIDE、FDEC_STRIDE相关以及fenc、fdec的buf存储结构
- x264中重要结构体说明
- x264中重要结构体说明
- x264中重要结构体说明
- x264中scenecut的意义
- X264中PSNR的计算
- .net对象和比特流的转换(一)
- .net对象和比特流的转换(一)
- 有关报文、分组、帧、比特流的问题
- 有关分组、帧、报文、比特流的问题
- VC++中结构体的存储
- C中结构体的存储分配
- FatMouse' Trade hdu 1009
- HDU3966(树链剖分)
- glib g_log && Keep env(export) for sudo
- Unity将来会成为AR重要的一部分
- for循环 内部捕获异常
- x264中比特流的存储结构
- jquery实现隔行变色,点击换色,鼠标悬浮当前行变色效果,div+css 细表格样式
- C++析构函数为什么要为虚函数
- 第一篇博客
- [27期] 项目感悟---创建商城
- [27期] 第一个项目总结
- 3699小组项目展示 —— 收获与感受
- [27期] 一剑出鞘,亮出本色 ~~~ 新起点
- Alpha、Beta、RC、GA版本的区别