ffmpeg编译系统介绍及平头哥项目配置_第1页
ffmpeg编译系统介绍及平头哥项目配置_第2页
ffmpeg编译系统介绍及平头哥项目配置_第3页
ffmpeg编译系统介绍及平头哥项目配置_第4页
ffmpeg编译系统介绍及平头哥项目配置_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ffmpeg 编译系统介绍及平头哥项目配置一、目的分析 ffmpeg 的编译系统,为项目加入平头哥的实现打下基础。另外,让参与项目人员能够熟悉了解如何进行 ffmpeg 编译,如何将自己写的汇编文件加入到项目中。二、Ffmpeg 的编译系统简单介绍2.1 configure暂时空缺2.2 Makefile、ffbuild/common.mak、ffbuild/config.mak、config.h、ffbuild/arch.mak2.2.1 Makefile 介绍在整个 ffmpeg 项目中,有很多的 Makefile。基本上可以分成 3 类。A、ffmpeg 根目录下的 Makefile。B

2、、各个模块根目录下的 Makefile。例如:libavcodec/MakefileC、各个模块目录下的子目录下的 Makefile。例如:libavcodec/arm/Makefile2.2.2 ffmpeg 根目录下的 Makefile整个 Makefile 定义了整个工程的编译模块、编译规则、clean 处理,install 的处理等。通过引入 ffbuild/common.mak 定义了工具链的编译命令行和规则。例如 c、c+、asm、S 文件分别怎么编译。通过包含 ffbuild/config.mak 来定义系统编译的 ARCH 等属性,从而定义了编译的文件。2.2.3 各个模块目录

3、下的 Makefile这个 makefile 定义了模块的名称,编译模块需要哪些 h 头文件,目标文件是哪些。注意这里的 OBJS 和 OBJS-$(XXX)的区别。OBJS 定义的目标是 ffmpeg 所必须的,而OBJS-$(XXX)定义的目标是只有在 XXX 被定义的情况下才会编译。这个定义在 config.h 和ffbuild/config.mak 中。分别为 #define XXX 1 和了OBJS-yes 。所以整个系统只会编译XXX=yes。实际上在 Makefile 中就变成OBJS 和OBJS-yes 的目标。 而在ffbuild/common.mak中会把OBJS-yes合

4、并到OBJS中。2.2.4 各个模块子目录下的 Makefile这里的 makefile 定义各个模块子目录的编译目标。各个子目录实际上就是根据ARCH 来的,每种 ARCH 有一个子目录。例如:libavcodec/arm/Makefile 如下:这里各种 OBJS-$(XXX) 如果在 config.mak 中被定义,则会变成 OBJS-yes这里定义了 ARMV6-OBJS-yes这里定义了 NEON-OBJS-yes 目标。2.2.5 ffbuild/arch.mak这个 makefile 定义了各种与 ARCH 机构相关的编译目标。例如:在 ARM 架构下,HAVE_ARMV6, H

5、AVE_ARMV5TE,HAVE_NEON 默认会被配置在 config.h 和 config.mak 中,因此上面说的 libavcodec/av/arm/Makefile 中定义的NEON-OBJS-yes 和 ARMV6-OBJS-yes 最终会合并到 OBJS-yes 中。而 OBJS-yes 最终合并到 OBJS 中。2.2.6 config.h 和 ffbuild/config.mak 介绍Config.h 和 ffbuild/config.mak 中定义了各种的项目配置的相关宏。Config.h:Ffbuild/config.mak2.3 各个模块如何编译的根目录下的 Makef

6、ile 是总的编译控制中心,会包含所有子目录下的 Makefile,得到一个 OBJS 和 OBJS-yes 的总集。然后根据 OBJS-yes 里面的文件路径是否含有与 ARCH 一致的子目录来判断是否要编译各个子目录。模块根目录下的文件总是被编译的。三、平头哥项目的汇编文件如何加入编译系统用 libavcodec 来举例(在已经成功使用平头哥工具链编译 ffmpeg 的配置脚本基础上):1、建立平头哥的 ARCH 目录在 libavcodec 目录下执行: mkdir csky2、在 libavcodec/csky 目录下,建立 Makefile 和汇编源码文件和 C 源码文件我们用 ff

7、_ac3_max_msb_abs_int16_neon 这个函数举例。这个函数是 ARM 下实现的一个函数,我们需要在 csky 下实现一个同样功能的函数 ff_ac3_max_msb_abs_int16_csky。这里只是简单的实现。/*ac3dsp_csky.S 的源码*/参考./arm/ac3dsp_init_arm.c/*ac3dsp_init_csky.c 的源码如下*/将新增的两个文件加入到 Makefile 中。/*makefile 的内容如下*/这里为了测试,也可以直接使用 OBJS-yes+=csky/ac3dsp_csky.o 。 因为宏CONFIG_AC3DSP 肯定被配

8、置了,可以查询 config.h 得到。另外这样做也跟 arm/Makefile文件保持一致。后期的 Makefile 应该跟 arm 目录下的保持基本一致:3、修改汇编函数被调用的 C 源文件在 libavcodec 目录下用下面的命令可以查询哪些地方调用了原来的 ARM 的函数。grep ff_ac3dsp_init_arm ./ -nr3.1 在libavcodec/ac3dsp.h 中加入函数定义3.2 在libavcodec/ac3dsp.c 中加入调用4、执行 make 重新编译。这时候不需要重新 configure 了。make 可以进行增量编译,不用编译整个系统。四、如何进行单

9、元测试五、项目配置库1、代码仓库的地址 4:8080/svn/ffmpeg4:8080/svn/ffmpeg-UT文档地址: 4:8080/svn/ffmpeg-doc 2、Ubuntu 的安装sudo apt install subversion3、checkoutsvn checkout 4:8080/svn/ffmpeg . -username lang_jianzhong -password 1备注:username:自己名字的拼音4、svn 基本命令Svn update svn add .svn commit -m Svn diffSvn stat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论