2011-11-18 133 views
2

我使用ffmpeg解码Android上的h.264视频文件。表现非常低。我想在ffmpeg中启用霓虹灯优化来提高性能。尽管在配置文件中添加了与霓虹灯相关的命令,但我看不到性能增益。有人可以告诉我,我是否在哪里出错?我的配置文件如下。FFMPEG与霓虹灯优化

function build_one_r6 
{ 
make clean 
./configure \ 
    --prefix=$PREFIX \ 
    --disable-shared \ 
    --enable-static \ 
    --enable-version3 \ 
    --disable-doc \ 
    --disable-ffmpeg \ 
    --disable-ffplay \ 
    --disable-ffprobe \ 
    --disable-ffserver \ 
    --disable-avdevice \ 
    --disable-avfilter \ 
    --disable-postproc \ 
    --enable-small \ 
    --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ 
    --enable-cross-compile \ 
    --target-os=linux \ 
    --extra-cflags="-I$PLATFORM/usr/include -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing $OPTIMIZE_CFLAGS" \ 
    --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \ 
    --arch=arm \ 
    --disable-symver \ 
    --disable-debug \ 
    --disable-indevs \ 
    --disable-encoders \ 
    --disable-bsfs \ 
    --disable-filters \ 
$ADDITIONAL_CONFIGURE_FLAG || exit 1; 
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 -j4 install || exit 1; 
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o || exit 1; 
$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/lib/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 || exit 1; 

} 


#armv5te 
CPU=armv5te 
OPTIMIZE_CFLAGS="-marm -march=$CPU " 
PREFIX=../../build/android/armeabi 
ADDITIONAL_CONFIGURE_FLAG= 
build_one_r6 


#arm v7n 
CPU=armv7-a 
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8" 
PREFIX=../../build/android/armeabi-v7a 
ADDITIONAL_CONFIGURE_FLAG="--enable-neon --disable-armv5te --disable-armv6 --disable-armv6t2" 
build_one_r6enter code here 

回答

0

我编的ffmpeg-0.10的Android使用的脚本位于这里:工具/ build_libstagefright.sh。如果你不需要libStagefright(至于它我还没有工作),最好删除开始的Android库和头文件下载和Android选项。它有适当的NEON工作选项。我的汇总选项:

configuration: 
--target-os=linux \ 
--cross-prefix=arm-linux-androideabi- \ 
--arch=arm --cpu=armv7-a \ 
--sysroot=/home/grid/Android/Android_NDK_r6b/platforms/android-9/arch-arm \ 
--disable-avdevice \ 
--enable-decoder=h264 \ 
--prefix=build/stagefright/armeabi-v7a \ 
--extra-cflags=' -march=armv7-a -mfloat-abi=softfp -mfpu=neon' \ 
--extra-ldflags='-Wl, --fix-cortex-a8' \ 
--extra-cxxflags='-Wno-multichar -fno-exceptions -fno-rtti'