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