android ffmpeg compile error fix notes

1. following error arising in compiling ffmpeg 1.1.2

    undefined reference to `ff_fft_fixed_calc_neon'

    it is caused by CONFIG_FFT = 0 in config.h

2. fix way

   prior to configure enable option, configure disable option.

   This will fix the issue CONFIG_FFT = 0 in config.h.

    Instead, the CONFIG_FFT is set to 1. Therefore the issue

    is fixed.

3. following is the right compile script

FFMPEG_DIR=ffmpeg


DEST=`pwd`/$FFMPEG_DIR/libs && rm -rf $DEST


SOURCE=`pwd`/$FFMPEG_DIR


if [ -d $FFMPEG_DIR ];
then
  cd $FFMPEG_DIR
else
  git clone git://source.ffmpeg.org/ffmpeg.git $FFMPEG_DIR
  cd $FFMPEG_DIR
fi


git log | head -n 1 | awk '{print $2}' > ffmpeg-version


TOOLCHAIN=/opt/android/bintools
SYSROOT=$TOOLCHAIN/sysroot/
$ANDROID_NDK_ROOT/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-14 --toolchain=arm-linux-androideabi-4.4.3 --install-dir=$TOOLCHAIN


export PATH=$TOOLCHAIN/bin:$PATH
#note: if ccache not installed, following line will be export CC="arm-linux-androideabi-gcc"


export CC="ccache arm-linux-androideabi-gcc"
export LD=arm-linux-androideabi-ld
export AR=arm-linux-androideabi-ar


# note: tab rather than space is in front of -finline-limit etc \


# \ is the last character, ie., no space is behind it.


 
# -D__ARM_ARCH_5__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5T__ \
# -D__ARM_ARCH_5TE__ \


ANDROID_INC="/opt/android-ndk-r8d/platforms/android-14/arch-arm/usr/include"
X264_INC="/usr/local/android/x264/include"
FAAC_INC="/usr/local/android/faac-1.28/include"


EXTRA_INC="-I$X264_INC -I$FAAC_INC"


ANDROID_LIB="/opt/android-ndk-r8d/platforms/android-14/arch-arm/usr/lib"
X264_LIB="/usr/local/android/x264/lib"
FAAC_LIB="/usr/local/android/faac-1.28/lib"


EXTRA_LD="-L$X264_LIB -lx264 -L$FAAC_LIB -lfaac"


CFLAGS="-O3 -Wall -mthumb -pipe -fpic -fasm \
 -finline-limit=300 -ffast-math \
 -fstrict-aliasing -Werror=strict-aliasing \
 -fmodulo-sched -fmodulo-sched-allow-regmoves \
 -Wno-psabi -Wa,--noexecstack \
 -DANDROID -D__ANDROID__ -DHAVE_NEON=1 -DFFMPEG"




FFMPEG_PREFIX=/usr/local/android/ffmpeg-1.1.2


FFMPEG_FLAGS="--prefix=$FFMPEG_PREFIX
 --disable-static \
 --disable-symver \
 --disable-doc \
 --disable-postproc  \
 --disable-ffplay \
 --disable-ffmpeg \
 --disable-ffprobe \
 --disable-ffserver \
 --disable-avdevice \
 --disable-avfilter \
 --disable-protocols \
 --disable-parsers \
 --disable-muxers \
 --disable-demuxers \
 --disable-encoders \
 --disable-decoders \
 --disable-bsfs \
 --disable-filters \
 --disable-devices \
 --disable-network \
 --disable-everything \
 --arch=armv7 \
 --cpu=cortex-a8 \
 --target-os=linux \
 --enable-cross-compile \
 --cross-prefix=arm-linux-androideabi- \
 --enable-version3 \
 --enable-nonfree \
 --enable-gpl \
 --enable-asm \
 --enable-neon \
 --enable-shared \
 --enable-memalign-hack \
 --enable-libfaac \
 --enable-libx264 \
 --enable-encoder=libx264 \
 --enable-encoder=libfaac \
 --enable-encoder=rawvideo \
 --enable-decoder=mp3 \
 --enable-decoder=h264 \
 --enable-decoder=aac \
 --enable-muxer=mpegts \
 --enable-muxer=h264 \
 --enable-muxer=pcm_s16le \
 --enable-demuxer=mpegts \
 --enable-demuxer=h264 \
 --enable-demuxer=aac \
 --enable-demuxer=pcm_s16le \
 --enable-parser=h264 \
 --enable-swscale  \
 --enable-pthreads \
 --disable-doc \
 --disable-debug \
 --disable-stripping \
 --disable-armv5te \
 --disable-armv6 \
 --disable-armv6t2 "


#for version in neon armv7 vfp armv6; do
for version in neon; do
#for version in armv7; do
  cd $SOURCE
  rm -f config.mak
  rm -f config.h


  case $version in
  neon)
    EXTRA_CFLAGS="-march=armv7-a -mfpu=neon -mfloat-abi=softfp -mvectorize-with-neon-quad -mtune=cortex-a8 -DHAVE_NENO=1"
    EXTRA_LDFLAGS="-Wl,--fix-cortex-a8"
    ;;
  armv7)
    EXTRA_CFLAGS="-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp"
    EXTRA_LDFLAGS="-Wl,--fix-cortex-a8"
    ;;
  vfp)
    EXTRA_CFLAGS="-march=armv6 -mfpu=vfp -mfloat-abi=softfp"
    EXTRA_LDFLAGS=""
    ;;
  armv6)
    EXTRA_CFLAGS="-march=armv6"
    EXTRA_LDFLAGS=""
    ;;
  *)
    EXTRA_CFLAGS=""
    EXTRA_LDFLAGS=""
    ;;
  esac


  ./configure $FFMPEG_FLAGS --extra-cflags="$CFLAGS $EXTRA_CFLAGS $EXTRA_INC" --extra-ldflags="$EXTRA_LDFLAGS $EXTRA_LD -nostdlib"


make clean
make -j4 || exit 1
make install || exit 1


[ ! -f libavcodec/inverse.o ] || rm libavcodec/inverse.o
[ ! -f libavcodec/log2_tab.o ] || rm libavcodec/log2_tab.o
[ ! -f libavformat/log2_tab.o ] || rm libavformat/log2_tab.o
[ ! -f libswresample/log2_tab.o ] || rm libswresample/log2_tab.o


$CC -lm -lz -shared --sysroot=$SYSROOT -Wl,--no-undefined -Wl,-z,noexecstack $EXTRA_LDFLAGS libavutil/*.o libavutil/arm/*.o libavcodec/*.o libavcodec/arm/*.o libavformat/*.o libswresample/*.o libswresample/arm/*.o libswscale/*.o -L/usr/local/android/x264/lib -lx264 -L/usr/local/android/faac-1.28/lib -lfaac -L$ANDROID_LIB -llog -o $FFMPEG_PREFIX/lib/libffmpeg.so


cp $FFMPEG_PREFIX/lib/libffmpeg.so $FFMPEG_PREFIX/lib/libffmpeg-debug.so
arm-linux-androideabi-strip --strip-unneeded $FFMPEG_PREFIX/lib/libffmpeg.so


done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值