2012-08-17 37 views
1

我有一些使用NEON指令(Tegra3)爲Android構建ffmpeg的問題。 我能夠創建libffmpeg.so沒有optmization:-mfpu = neon在Android上構建ffmpeg。使用NEON(Tegra3)和Cygwin

我在Windows上使用最新的ffmpeg 0.11.1與Cygwin。

請找我使用build.sh文件(在網絡上找到和調整)

#!/bin/bash 
export TMPDIR=C:/Arnaud/Private/Android/temp 
NDK=C:/Arnaud/Private/Android/android-ndk-r8b 
###Path for Android 8 
PLATFORM=$NDK/platforms/android-8/arch-arm/ 
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows 

function build_one 
{ 
./configure --target-os=linux \ 
    --prefix=$PREFIX \ 
    --enable-cross-compile \ 
    --extra-libs="-lgcc" \ 
    --enable-asm \ 
    --enable-neon \ 
    --arch=armv7 \ 
    --cpu=cortex-a8 \ 
    --enable-memalign-hack \ 
    --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \ 
    --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ 
    --nm=$PREBUILT/bin/arm-linux-androideabi-nm \ 
    --sysroot=$PLATFORM \ 
    --extra-cflags="$OPTIMIZE_CFLAGS" \ 
    --disable-shared \ 
    --enable-memalign-hack \ 
    --enable-static \ 
    --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \ 
    --disable-everything \ 
    --enable-demuxer=mov \ 
    --enable-demuxer=h264 \ 
    --disable-ffplay \ 
    --enable-protocols \ 
    --enable-avformat \ 
    --enable-avcodec \ 
    --enable-decoder=rawvideo \ 
    --enable-decoder=mjpeg \ 
    --enable-decoder=h263 \ 
    --enable-decoder=mpeg4 \ 
    --enable-decoder=h264 \ 
    --enable-parser=h264 \ 
    --disable-network \ 
    --enable-zlib \ 
    --disable-avfilter \ 
    --disable-avdevice \ 
$ADDITIONAL_CONFIGURE_FLAG 

sed -i 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h 
sed -i 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h 
sed -i 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h 
sed -i 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h 
sed -i 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h 
sed -i 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h 

make clean 
make -j4 install 

#Old Prebuilt (R8) 
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o 
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a 
} 

#arm v7n 
CPU=armv7-a 
OPTIMIZE_CFLAGS='-I$PLATFORM/usr/include -mfpu=neon -mfloat-abi=softfp -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300' 
PREFIX=./android/$CPU 
build_one 

使用該選項下面,就optimize_cflags,-mfpu =霓虹燈,構建失敗,這些錯誤:

CP ffprobe STRIP ffprobe install安裝-progs的 - 是 INSTALL ffprobe 的libavcodec/libavcodec.a(fft_fixed_init_arm.o):在功能ff_fft_fixed_init_arm': C:\Arnaud\Private\Android\DVBStream\jni\ffmpeg-0.11.1/libavcodec/arm/fft_fixed_init_arm.c:36: undefined reference to ff_fft_fixed_calc_neon」 libavcodec/libavcodec.a(fft_init_arm.o):函數ff_fft_init_arm': C:\Arnaud\Private\Android\DVBStream\jni\ffmpeg-0.11.1/libavcodec/arm/fft_init_arm.c:47: undefined reference to ff_fft_permute_neon' C:\ Arnaud \ Private \ Android \ DVBStream \ jni \ ffmpeg-0.11.1/libavcodec/arm/fft_init_arm.c:47:undefined reference to `ff_fft_calc_neon'

似乎有些依賴關係丟失/未設置。你有什麼線索發生了什麼/如何用霓虹燈建造?

回答

0

也許libavcodec沒有啓用霓虹支持編譯?這可能是告訴autoconf使預處理器包含NEON支持的問題。