Openwrt之libffmpeg-custom配置编译过程
2017-01-22 13:38
302 查看
默认情况下,Openwrt是移植了Libffmpeg-full架构的,同时包含libffmpeg-custom、libffmpeg-mini、libffmpeg-audio-dec架构。但是openwrt中关于ffmpeg的makefile目前只能编译通过libffmpeg-full架构,其他三个还有待验证与修改。本文就针对libffmpeg-custom架构编译进行makefile配置修改。
1、makefile 与 config.in之间的关系
由于openwrt / ffmpeg的makefile中包含:
define Package/libffmpeg-custom/config
source "$(SOURCE)/Config.in"
endef
即,对于libffmpeg-custom模块在menuconfig中,包含配置子菜单。
对于子菜单内容,由config.in决定。
对于子菜单中内容选中是否生效,则需要同时在openwrt / ffmpeg的makefile中配置相应的宏。
如:
menuconfig中libffmpeg-custom的decoders模块:
需要有AAC选项,则config.in中需要对应的:
同时,要使在menuconfig中选择了AAC decoder就对应的AAC decoder生效的话,还需要 openwrt / ffmpeg的makefile中FFMPEG_CUSTOM_DECODERS宏中包含AAC decoder。
只有在编译产生的config.h中对应的宏都为1,同时该宏对应的.c文件都产生了.o文件,才能说明,该文件确实被编译了。
#define CONFIG_AAC_DECODER 1
#define CONFIG_AAC_FIXED_DECODER 1
#define CONFIG_AAC_LATM_DECODER 1
#define CONFIG_LIBFDK_AAC_DECODER 1
2、menuconfig中libffmpeg-custom添加新模块
在menuconfig中的libffmpeg-custom配置子菜单中添加新选项,filters,则需要在openwrt/ffmpeg makefile 中添加 filter
FFMPEG_CUSTOM_FILTERS:= \
aresample adrawgraph showvolume showwaves showspectrum aphasemeter amovie
同时,在宏PKG_CONFIG_DEPENDS中添加filter
PKG_CONFIG_DEPENDS:= \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_ENCODER_%,$(FFMPEG_CUSTOM_ENCODERS)) \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_DECODER_%,$(FFMPEG_CUSTOM_DECODERS)) \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_MUXER_%,$(FFMPEG_CUSTOM_DEMUXERS)) \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_DEMUXER_%,$(FFMPEG_CUSTOM_DEMUXERS)) \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_PARSER_%,$(FFMPEG_CUSTOM_PARSERS)) \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_PROTOCOL_%,$(FFMPEG_CUSTOM_PROTOCOLS))\
$(patsubst %,CONFIG_FFMPEG_CUSTOM_FILTER_%,$(FFMPEG_CUSTOM_FILTERS))
且在FFMPEG_CONFIGURE中添加filter。
同时,config.in中也需添加对应模块:
此时,就可以menuconfig中选择aresample filter了。但编译过后,发现aresample.c并没有产生对应的.o文件,查看config.h中发现对应的宏CONFIG_ARESAMPLE_FILTER也是为0。这说明,aresample虽然在menuconfig中可选,但选中仍未生效。查找ffmpeg资料,发现aresample filter还依赖于库libswresample,所以enable libavfilter的同时,还需要enable libswresample,才可以使aresample
filter真正生效。
3、写好config.in以及makefile中libffmpeg-custom相关的宏,只是为了配置好menuconfig中的菜单选项,至于如何能使libffmpeg-custom编译通过,还需对makefile进一步修改。
首先,DEPENDS需修改为@BUILD_PATENTED (具体什么原因,还不是很清楚)
同时,安装开发环境时,需把对应的库放入开发环境以用于编译调用(此时,只是把6个库放入了开发环境。):
最后,安装时(安装,就是把对应的库拷贝到相应的目录下)
这里安装时,只将6个动态库拷贝到了相应目录下。这说明libffmpeg-custom只融合了这6个库,基于这6个库的开发,可以使用libffmpeg-custom。如果有涉及到Libswscale库的API调用开发,单链接Libffmpeg-custom 是会出错的。同时,安装过程,拷贝到相应目录的动态库的总大小,会影响最后生成的.ipk以及.bin文件的大小。这对于系统大小裁剪也是一个可考虑因素。
1、makefile 与 config.in之间的关系
由于openwrt / ffmpeg的makefile中包含:
define Package/libffmpeg-custom/config
source "$(SOURCE)/Config.in"
endef
即,对于libffmpeg-custom模块在menuconfig中,包含配置子菜单。
对于子菜单内容,由config.in决定。
对于子菜单中内容选中是否生效,则需要同时在openwrt / ffmpeg的makefile中配置相应的宏。
如:
menuconfig中libffmpeg-custom的decoders模块:
需要有AAC选项,则config.in中需要对应的:
同时,要使在menuconfig中选择了AAC decoder就对应的AAC decoder生效的话,还需要 openwrt / ffmpeg的makefile中FFMPEG_CUSTOM_DECODERS宏中包含AAC decoder。
只有在编译产生的config.h中对应的宏都为1,同时该宏对应的.c文件都产生了.o文件,才能说明,该文件确实被编译了。
#define CONFIG_AAC_DECODER 1
#define CONFIG_AAC_FIXED_DECODER 1
#define CONFIG_AAC_LATM_DECODER 1
#define CONFIG_LIBFDK_AAC_DECODER 1
2、menuconfig中libffmpeg-custom添加新模块
在menuconfig中的libffmpeg-custom配置子菜单中添加新选项,filters,则需要在openwrt/ffmpeg makefile 中添加 filter
FFMPEG_CUSTOM_FILTERS:= \
aresample adrawgraph showvolume showwaves showspectrum aphasemeter amovie
同时,在宏PKG_CONFIG_DEPENDS中添加filter
PKG_CONFIG_DEPENDS:= \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_ENCODER_%,$(FFMPEG_CUSTOM_ENCODERS)) \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_DECODER_%,$(FFMPEG_CUSTOM_DECODERS)) \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_MUXER_%,$(FFMPEG_CUSTOM_DEMUXERS)) \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_DEMUXER_%,$(FFMPEG_CUSTOM_DEMUXERS)) \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_PARSER_%,$(FFMPEG_CUSTOM_PARSERS)) \
$(patsubst %,CONFIG_FFMPEG_CUSTOM_PROTOCOL_%,$(FFMPEG_CUSTOM_PROTOCOLS))\
$(patsubst %,CONFIG_FFMPEG_CUSTOM_FILTER_%,$(FFMPEG_CUSTOM_FILTERS))
且在FFMPEG_CONFIGURE中添加filter。
同时,config.in中也需添加对应模块:
此时,就可以menuconfig中选择aresample filter了。但编译过后,发现aresample.c并没有产生对应的.o文件,查看config.h中发现对应的宏CONFIG_ARESAMPLE_FILTER也是为0。这说明,aresample虽然在menuconfig中可选,但选中仍未生效。查找ffmpeg资料,发现aresample filter还依赖于库libswresample,所以enable libavfilter的同时,还需要enable libswresample,才可以使aresample
filter真正生效。
3、写好config.in以及makefile中libffmpeg-custom相关的宏,只是为了配置好menuconfig中的菜单选项,至于如何能使libffmpeg-custom编译通过,还需对makefile进一步修改。
首先,DEPENDS需修改为@BUILD_PATENTED (具体什么原因,还不是很清楚)
同时,安装开发环境时,需把对应的库放入开发环境以用于编译调用(此时,只是把6个库放入了开发环境。):
最后,安装时(安装,就是把对应的库拷贝到相应的目录下)
这里安装时,只将6个动态库拷贝到了相应目录下。这说明libffmpeg-custom只融合了这6个库,基于这6个库的开发,可以使用libffmpeg-custom。如果有涉及到Libswscale库的API调用开发,单链接Libffmpeg-custom 是会出错的。同时,安装过程,拷贝到相应目录的动态库的总大小,会影响最后生成的.ipk以及.bin文件的大小。这对于系统大小裁剪也是一个可考虑因素。
相关文章推荐
- Qt5.2.0 MinGW480 release静态版编译结果、过程及QtCreator配置分享(realfan的编译方法)(configure -h可以显示帮助)(静态编译mysql插件,需要做一些其它工作,机器上要有mysql)(不编译qtwebkit,就不用安装ActivePerl了)(用到 QMediaPlayer的编译办法)
- build.xml配置编译打包过程(转)
- Opencv2.0 lib和dll的编译获取过程 以及 vs2005,vs2008配置过程
- 整理在ubuntu重装之后配置过程(6G内存,修改网卡物理地址,修改hosts,codeblocks,eclipse,jdk,配置eclipse编译python)
- 在Linux环境下编译安装配置PostGIS/PostgreSQL全过程
- Linux内核配置及编译过程
- Linux内核配置及编译过程
- UBoot的配置编译过程
- Ubuntu 14.04 64位机上不带CUDA支持的Caffe配置编译操作过程+faster-rcnn
- Linux 下编译并安装配置 Qt 全过程
- windows下用ADT进行android NDK开发的详细教程(从环境搭建、配置到编译全过程)
- Linux rhel 6.4 apache编译安装以及简单配置过程(2)
- U-boot 编译学习---配置过程
- Linux系统下自行编译安装MySQL及基础配置全过程解析
- 【分享】分析内核的配置与编译过程
- u-boot-1.1.6的配置编译过程分析.doc
- partysip编译、安装和配置过程
- linux内核编译过程及配置说明解释(7)--Firmware Drivers,File systems,Kernel hacking
- Linux 下编译并安装配置 Qt 全过程
- Qt5.3.1 MinGW482 release静态版编译结果、过程及QtCreator配置(转)