本文主要是介绍参照ffmpeg重新写makefile文件提取prores编解码库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我们知道,ffmpeg源码是在linux底下开发出来的,而如果我们要在windows底下进行ffmpeg相关代码的修改和优化的话,则是需要借助mingw,mingw中提供了msys编译环境,这样的话,你修改和优化后的ffmpeg代码如果要在windows下应用的话,则可以通过编译生成相关的dll和lib库进行引用,达到最大化利用ffmpeg性能的目的。
接下来,以自己近期做的prores编解码器代码修改优化部分过程为例,来说明下如何在windows平台上通过重写makefile文件,重新编译生成新的prores编解码库。有的人可能会问,为什么不直接在vs2013平台上进行修改并编译好库,这样不也可以编译得到相应的dll和lib库吗?当然是可以的,不过由于visual studio平台在编译ffmpeg部分代码过程中并不支持部分编译选项,比如AT&T汇编优化,因此在visual studio平台上编译出的库也就不支持AT&T汇编优化,从而影响了ffmpeg进行相关流媒体处理的性能。那可能又有一部分人会问,那你直接在linux上进行开发不就行了么?当然也是可以的,只是笔者习惯了在windows下进行开发,虽说笔者电脑上也装了一个linux的虚拟机,不过老是切来切去的也不方便,所以干脆就直接在mingw上倒腾了,反正功能和linux基本一样。
好了,接下来开始上干货了。。。
1、 先上ffmpeg官网下载ffmpeg源码,分别在library.mak和common.mak的图1和图2位置处增加这两条语句:echo-e "$(YASM) $(YASMFLAGS) -I $(<D)/ -o $@$<\n">>asmout.log和echo -e "$($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C)$($(1)_O) $<\n">>output.log,然后分别采用mingw 32位和64位,按32位和64位编译得到dll和lib库,其中32位的configure选项为:./configure–enable-shared, 64位的configure选项为:./configure –arch=x86-64 –enable-shared,编译完成后,可以在libavutil,libavcodec等文件夹中看到各个.c文档被编译得到了.o和.d文件,其中.d文件就是代表把这个.c文档编译成.o文档需要的依赖文件。比如,我这里修改优化后需要编译的有proresdec2.c文档,那么我们可以查看proresdec2.d文件中的依赖文档有哪些,如下图3
图1
图2
图3
接下来保存好ffmpeg一级目录下的config.h以及config.asm两个文件,将32位和64位下分别编译得到的这两个config文件分别保存到config_x86和config_x64中。
2、 在vs2013中,新建两个工程,这里我自己命名为BaseLib和 ProResCodec,将步骤一后得到的ffmpeg重新make clean一下,然后将ffmpeg中的libavutil和libavcodec两个源码文件夹复制到自己的vs工程目录下,并在两个工程属性中,将libavutil和libavcodec中头文件全部包含进去。接下来重新利用vs编译器和msys一起编译ffmpeg,此时32位的configure选项为:./configure –enable-shared –toolchain=msvc, 64位的configure选项为:./configure–arch=x86-64 –enable-shared –toolchain=msvc,重新编译后,可得到新的config.h和config.asm,将32位和64位下分别编译得到的这两个config文件分别保存到config_x86和config_x64中,将这两个文件夹也复制到vs工程目录下,并根据不同的vs平台包含进项目BaseLib和ProResCodec中去。将proresdec2.c文档加入到ProResCodec工程,编译链接,发现有些函数没有定义或者链接不了,肯定还需要其他.c文件加入进来,根据函数名在libavutil和libavcodec文件夹中查找,逐个将相应的.c文件加入,直至最后两个工程项目都可以完全编译链接通过。
这一步主要是为了下一步进行makefile编写时需要哪些文件加入mingw编译提供参考。
3、 参考网络资料《跟我一起学makefile》(http://blog.csdn.net/haoel/article/details/2886/)资料,熟悉makefile书写规则和一般技巧。重新建立新的文件夹,将第一步中得到的config_x86和config_x64文件夹复制到新的文件夹目录下,且将ffmpeg中的源码文件夹libavutil和libavcodec复制到新的文件夹目录下,分别在两个文件夹中新建makefile文档,根据步骤二中的两个项目BaseLib和ProResCodec下分别包含的.c文件分别书写libavutil和libavcodec中的两个makefile文件,其中我自己32位的两个makefile文件参考如下:
Libavutil中makefile:
vpath %.c ../compat/msvc
这篇关于参照ffmpeg重新写makefile文件提取prores编解码库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!