x264学习笔记

上传人:豆浆 文档编号:8121161 上传时间:2017-09-26 格式:DOCX 页数:16 大小:42.97KB
返回 下载 相关 举报
x264学习笔记_第1页
第1页 / 共16页
x264学习笔记_第2页
第2页 / 共16页
x264学习笔记_第3页
第3页 / 共16页
x264学习笔记_第4页
第4页 / 共16页
x264学习笔记_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《x264学习笔记》由会员分享,可在线阅读,更多相关《x264学习笔记(16页珍藏版)》请在金锄头文库上搜索。

1、H264 学习指南 2008-11-30 17:31:09| 分类: X264 学习笔记 | 标签: |字号大中小 订阅 1、第一个阶段:首先看H.264_MPEG-4 Part 10 White Paper ,看完之后再看Video coding using the H.264 MPEG-4 AVC compression standard和Halsted.Press.H.264.And.MPEG-4.Video.Compression.Video.Coding.For.Next.Generation.Multimedia.eBook-LiB ,然后可以抽空看Overview of the

2、H.264_AVC Video Coding Standard.pdf 。这几篇文章看完后,你应该对 H.264 的整体框架有个比较深入的了解了。前三篇文章可能需要花费你两三周的时间。2、第二阶段:看代码。这个时候你最常用的工具就是标准文档和测试模型。看代码也要先从整体框架入手。先搞懂 H.264 的整体框架在代码里是怎么分布的,一个功能模块的前伸模块和后继模块是什么。也就是搞清楚整个代码流程。这个阶段对标准文档的使用可能很少。3、第三阶段:然后你找到一个自己感兴趣的切入点,开始以此为中心研究这个问题。你研究问题的时候应该是联系测试模型来研究,这个时候你就需要仔细看代码中对这个问题的实现了。这

3、个阶段我绝对支持你一行行代码跟踪,一个参数一个参数地跟踪。而代码中不懂的地方可能需要查标准。这时你再来看标准文档就有了针对性。也因为能将标准文档和代码对应起来,从而看标准文档也不觉得有太大困难,也能明白标准文档说的是什么问题,在测试模型中是如何通过代码实现的。在这个阶段中,会牵连到很多 H.264 的相关知识,这样通过以点带线,以线带面。会对 H.264 的内容认识越来越多。而你也就找到了自己的方向。=【注意事项】=1、切忌将代码和标准文档独立开看,否则,你的困难会很大。2、对于刚开始接触 H.264 的人,切忌直接看代码和标准,哪怕是将标准和代码结合起来看,你也会不太顺利。换句话说:在没有了

4、解 H.264 整体框架之前,你最好什么都不要做。在 VC6 下编译 X264 2008-12-05 09:01:14| 分类: X264 学习笔记 | 标签: |字号大中小 订阅 1、下载 x264x264 的主页:http:/videolan.org/x264 是用版权控制工具 CVS 进行更新的,其主页上不提供源码压缩包,所以我们要用专用的工具下载。工具名:TortoiseSVN。下载地址: svn:/svn.videolan.org/x264/trunk/ 2、准备编译环境所需文件 1) 下载 Service Pack 5 for Visual Studio 6 ,地址为: http:

5、/ 2) 下载 Visual C+ 6.0 Processor Pack ,支持处理器多媒体汇编指令的补丁 http:/ 3) NASM - the famous Netwide Assembler - http:/ DirectX 9.0 SDK - http:/ 安装 Service Pack 5,自解压后,运行 setupsp5.exe2) 安装 Visual C+ Processor Pack3) Installing and Configuring NASM,文件名一定要改成 nasm.exe ,拷贝到 Microsoft Visual Studio6vc98bin 下即可4) In

6、stalling and Configuring the DirectX SDK 。X264 总结(1) 2009-01-30 11:46:27| 分类: X264 学习笔记 | 标签: |字号大中小 订阅 (在实验室师妹的总结基础上整理出来,觉得有参考价值,所以贴了出来。)X264 是由法国巴黎中心学校的中心研究所于 2004 年 6 月发起,并由许多视频编码爱好者共同完成的项目。其目标是实现实用的 264 编码器,所以它引入 MMX、SSE 等汇编指令来提高编码速度,同时摒弃了一些耗时但对编码性能提高微小的模块,如多参考帧等。注 1:MMX: 是 MultiMedia eXtensions

7、(多媒体扩展) 的缩写,是第六代 CPU 芯片的重要特点。MMX 技术是在 CPU 中加入了特地为 视频信号(Video Signal),音频信号(Audio Signal)以及图像处理(Graphical Manipulation)而设计的 57 条指令,因此,MMX CPU 极大地提高了电脑的多媒体(如立体声、视频、三维动画等)处理功能。 注 2: SSE(Streaming SIMD Extensions)是英特尔在 AMD 的 3D Now!发布一年之后,在其计算机芯片 Pentium III 中引入的指令集,是 MMX 的超集。它包括 70 条指令,其中包含单指令多数据浮点计算、以及

8、额外的 SIMD 整数和高速缓存控制指令。其优势包括:更高分辨率的图像浏览和处理、高质量音频、MPEG2 视频、同时 MPEG2 加解密;语音识别占用更少 CPU 资源;更高精度和更快响应速度。X264 代码主要的部分分为三个步骤,即数据的读入与存放, 视频编码层(VCL)的视频编码和网络提取层(Network Abstraction Layer,NAL)单元输出。 数据的读入与存放:X264 开辟了 unused、next、current 、refrence 等区域分别保存未处理原始图片序列、即将编码帧序列、当前编码帧和参考帧序列,同时还开辟了 fenc 和 fdec 区域用于存放已编码帧和

9、重构帧 。程序按以下顺序读入数据:首先,从 YUV 数据文件中读取数据存到临时变量 pic_in,同时为unused 开辟存储空间,并用 fenc 指针指向这个空间。接着,将 pic_in 中的图片数据拷贝到 fenc 所指向的区域,并在拷贝完成后对图片大小进行判断,如果长宽不为 16 的整数倍则进行像素扩展;将处理后的fenc 区域数据放入 next 区域。之后,如果存在 B 帧,则从 next 区域取出 B 帧以后的 P 帧放到 current 区域中,也就是说先编码 I、P 帧再编码之间的 B 帧;否则,直接从 next 区域取出一帧存入 current 区域。此时 current 区域

10、中存放的就是已经过预处理的即将要编码的帧数据了。最后,由于 fenc 区域是编码的直接对象,再将 current 区域中的内容拷贝到 fenc 中正式开始编码 。 视频编码层(VCL)的视频编码:输入文件 foreman.yuv 格式是 CIF,即352*288。在对一帧图像进行处理的过程中以宏块( 16*16)为单位,一帧图像处理步骤如下:定位当前处理的 16*16 宏块的位置;X264_macroblock_chche_load(h,i_mb_x,I,mb_y) ;X264_macroblock_analyse(h);X264_macroblock_encode(h) ;根据 h-mb.i

11、_type 的类型进行操作, 如果是 I 帧,则x264_macroblock_write_caclc(h,&h-out.bs); X264_macroblock_chche_save(h) ;计算 mb stats.X264 代码学习(一) 2008-12-07 08:30:21| 分类: X264 学习笔记 | 标签: |字号大中小 订阅 今天是我开始学习 X264 代码的第一天,程序代码用的是 x264-060412,以下为我的学习心得,以供交流,整理的过程用到了网络上的好多总结,文内不再一一指明。/*/main:/*int main( int argc, char *argv ) /其

12、中 argc 是参数个数,argv 表示入口参数地址x264_param_t param; /x264_param_t 为结构体的名字,见文件 X264.hcli_opt_t opt; /cli_opt_t 为结构体的名字,见文件 X264.c#ifdef _MSC_VER_setmode(_fileno(stdin), _O_BINARY);_setmode(_fileno(stdout), _O_BINARY);#endifx264_param_default( ¶m ); /对编码器的参数进行设定,此函数在 common.c 中定义,完成一个 x264_param_t 结构体的初

13、始化。 /* Parse command line */if( Parse( argc, argv, ¶m, &opt ) 二进制模式 就是 stdin 流(或其他文件流)从文本模式 二进制模式 。X264 代码学习(二) 2008-12-07 11:16:23| 分类: X264 学习笔记 | 标签: |字号大中小 订阅 本文主要分析函数 x264_param_default( ¶m ) -对编码器的参数进行设定和 Parse( int argc, char *argv, x264_param_t *param, cli_opt_t *opt )-为分析参数,读入运行参数。m

14、emset( opt, 0, sizeof(cli_opt_t) ),函数元型为 void *memset(void *s,int c,size_t n) 将已开辟内存空间 s 的首 n 个字节的值设为值 c。x264_param_default( ¶m ) -对编码器的参数进行设定, 包括 cpu 自动检测、视频序列参量初始化(均为默认值)、编码参量初始化。int c; c = getopt_long( argc, argv, hi:I:b:r:cxB:q:f:o:A:m:p:t:vw8, long_options, &long_options_index);getopt_long() 解析入口地址的向量,最后 c 得到的是 运行参数(“-o test.264 foreman.yuv 352x288”)中前面“-o”中“o”的 ASCII 值 即 c = 111 。可通过 VC Debug 查看。 getopt_long() 定义在getopt.c 中。其中用到 getopt_internal(nargc, nargv, options)也定义在 getopt.c 中,解析入口地址向量。atol(optarg) 把 string 转为 long 类型,atoi(optarg)类似,参见 MSD

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号