编译并运行Android下的x264

linux下编译x264如下:
>./configure --enable-pic --enable-strip --enable-static --disable-opencl --prefix=./build
>make
>make install

因为项目关系,自己实践了两种编译环境。


一、linux下编译android x264的配置:

./configure --enable-pic --enable-strip --enable-static --cross-prefix=/opt/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi- --sysroot=/opt/android-ndk-r10/platforms/android-14/arch-arm --host=arm-linux --prefix=./build-android --extra-cflags='-march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp -mfpu=neon -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__'

配置关键点1:指定使用的交叉编译的编译器、链接的头文件及类库所在
配置关键点2:-march=armv7-a -mtune=cortex-a9 -mfloat-abi=softfp -mfpu=neon -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ ,此处,针对armv7-a的CPU打开了NEON的优化运行指令。
配置关键点3:去掉--disable-asm选项。该选项的意思就是禁止neon的指令。
配置关键点4:添加--enable-static选项,生成静态链接的库供程序开发使用。
 

二、mac OS下编译android x264的配置:
.sh脚本如下:
export NDK_ROOT=/Users/kevin/Desktop/android-ndk-r9c
export ARM_PREFIX=$NDK_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86/bin/arm-linux-androideabi-
export ARM_ROOT=$NDK_ROOT/platforms/android-18/arch-arm

./configure --enable-pic --enable-strip --enable-static --cross-prefix=$ARM_PREFIX --sysroot=ARM_ROOT --host=arm-linux --prefix=./build --extra-cflags='-march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp -mfpu=neon -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__' --prefix=./build

完整命令为:
./configure --enable-pic --enable-strip --enable-shared --cross-prefix=/Users/kevin/Desktop/android-ndk-r9c/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86/bin/arm-linux-androideabi- --sysroot=/Users/kevin/Desktop/android-ndk-r9c/platforms/android-18/arch-arm --host=arm-linux --extra-cflags='-march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp -mfpu=neon -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__' --prefix=./build-android


三、Android下运行x264命令行错误解决:

1、 提示:cannot locate symbol 'log2f'
经查找,就如下几个c文件用到该语句:
     encoder/encoder.c 、 encoder/ratecontrol.c 、encoder/analyse.c 、encoder/set.c

解决:在各自文件开头处添加如下语句后再编译即可:

//#include

#undef log2f(x)
#undef log2f
#define log2f(x) (logf(x)*1.4426950408889634f)

log2f是参考osdep.h中:
#if !HAVE_LOG2F
#define log2f(x) (logf(x)/0.693147180559945f)
#define log2(x) (log(x)/0.693147180559945)
#endif



你可能感兴趣的:(音视频)