android ndk ffmpeg development series - 01

excerpt from : https://github.com/yixia/FFmpeg-Android/blob/master/FFmpeg-Android.sh

 

#!/bin/bash
#
# FFmpeg-Android, a bash script to build FFmpeg for Android.## Copyright (c) 2012 Cedric Fung <[email protected]>
#
# FFmpeg-Android will build FFmpeg for Android automatically,
# with patches from VPlayer's Android version <https://vplayer.net/>.
#
# FFmpeg-Android is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 3 of the License, or (at your option) any later version.
# FFmpeg-Android is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
# You should have received a copy of the GNU Lesser General Public
# License along with FFmpeg-Android; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
#
# Instruction:
#
# 0. Install git and Android ndk
# 1. $ export ANDROID_NDK=/path/to/your/android-ndk
# 2. $ ./FFmpeg-Android.sh
# 3. libffmpeg.so will be built to build/ffmpeg/{neon,armv7,vfp,armv6}/
# 4. one option for installing ccache, one software packet speeding up recompiling.
#

DEST=`pwd`/build/ffmpeg && rm -rf $DEST

SOURCE=`pwd`/ffmpeg

if [ -d ffmpeg ];
then 
  cd ffmpeg
else 
  git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
#  cd ffmpeg && patch -p1 <../FFmpeg-VPlayer.patch
  cd ffmpeg
fi

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

TOOLCHAIN=/opt/uwplayer
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.

 

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 \
 -D__ARM_ARCH_5__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5T__ \
 -D__ARM_ARCH_5TE__ \
 -DANDROID -DNDEBUG"

FFMPEG_FLAGS="--target-os=linux --arch=arm\
 --cross-prefix=arm-linux-androideabi- \
 --enable-cross-compile \
 --enable-cross-compile \
 --enable-shared \
 --disable-symver \
 --disable-doc \
 --disable-ffplay \
 --disable-ffmpeg \
 --disable-ffprobe \
 --disable-ffserver \
 --disable-avdevice \
 --disable-avfilter \
 --disable-encoders  \
 --disable-encoders \
 --disable-muxers \
 --disable-bsfs \
 --disable-filters \
 --disable-devices \
 --disable-everything \
 --enable-protocols  \
 --enable-parsers \
 --enable-demuxers \
 --disable-demuxer=sbg \
 --enable-decoders \
 --enable-network \
 --enable-swscale  \
 --enable-asm \
 --enable-version3"

for version in neon armv7 vfp armv6; do

  cd $SOURCE 

  case $version in
  neon)     
    EXTRA_CFLAGS="-march=armv7-a -mfpu=neon -mfloat-abi=softfp -mvectorize-with-neon-quad"     
    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 
 
  PREFIX="$DEST/$version" && mkdir -p $PREFIX
  FFMPEG_FLAGS="$FFMPEG_FLAGS --prefix=$PREFIX"

  ./configure $FFMPEG_FLAGS --extra-cflags="$CFLAGS $EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" | tee $PREFIX/configuration.txt
  cp config.* $PREFIX 
  [ $PIPESTATUS == 0 ] || exit 1 

  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 -o $PREFIX/libffmpeg.so 
 
  cp $PREFIX/libffmpeg.so $PREFIX/libffmpeg-debug.so 
  arm-linux-androideabi-strip --strip-unneeded $PREFIX/libffmpeg.so

done

你可能感兴趣的:(android ndk ffmpeg development series - 01)