1.Download ffmpeg-0.11.2.tar.bz2
2.Enterffmpeg-0.11.2/tools
3.Modify build_libstagefright
#!/bin/bash
NDK=/opt/android-ndk-r8d
if [ "$NDK" = "" ]; then
echo NDK variable not set, assuming ${HOME}/android-ndk
export NDK=${HOME}/android-ndk
fi
echo "Fetching Android system headers"
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_base.git /opt/android-source/frameworks/base
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_av.git /opt/android-source/frameworks/av
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_frameworks_native.git /opt/android-source/frameworks/native
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_hardware_libhardware.git /opt/android-source/hardware/libhardware
git clone --depth=1 --branch gingerbread-release git://github.com/CyanogenMod/android_system_core.git /opt/android-source/system/core
echo "Fetching Android libraries for linking"
Libraries from any froyo/gingerbread device/emulator should work
fine, since the symbols used should be available on most of them.
if [ ! -d "/opt/android-libs" ]; then
if [ ! -f "/opt/update-cm-7.0.3-N1-signed.zip" ]; then
wget http://download.cyanogenmod.com/get/update-cm-7.0.3-N1-signed.zip -P../
fi
unzip /opt/update-cm-7.0.3-N1-signed.zip system/lib/* -d../
mv /opt/system/lib /opt/android-libs
rmdir /opt/system
fi
SYSROOT=$NDK/platforms/android-9/arch-arm
# Expand the prebuilt/* path into the correct one
#TOOLCHAIN=`echo $NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/*-x86`
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86
export PATH=$TOOLCHAIN/bin:$PATH
ANDROID_SOURCE=/opt/android-source
ANDROID_LIBS=/opt/android-libs
ABI="armeabi-v7a"
CC=$TOOLCHAIN/bin/arm-linux-androideabi-gcc
NM=$TOOLCHAIN/bin/arm-linux-androideabi-nm
rm -rf ../build/stagefright
mkdir -p ../build/stagefright
DEST=../build/stagefright
DEST="$DEST/$ABI"
FLAGS="--target-os=linux --cross-prefix=arm-linux-androideabi- --arch=arm --cpu=armv7-a --cc=$CC --nm=$NM"
FLAGS="$FLAGS --sysroot=$SYSROOT"
FLAGS="$FLAGS --disable-avdevice --disable-encoders --disable-decoder=h264 --disable-decoder=h264_vdpau --enable-libstagefright-h264 --enable-asm --enable-neon"
#FLAGS="$FLAGS --disable-shared --enable-static --disable-avdevice --disable-parsers --enable-parser=h264 --disable-filters --disable-decoders --disable-demuxers --disable-network --disable-protocols --disable-swscale --disable-swresample --enable-avformat --enable-avcodec --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-devices --disable-postproc --disable-avfilter --disable-swscale-alpha --disable-bsfs --disable-encoders --disable-muxers --disable-indevs --disable-debug --disable-doc --enable-zlib --enable-pic --disable-optimizations --disable-decoder=h264 --disable-decoder=h264_vdpau --enable-libstagefright-h264 --enable-asm --enable-neon"
#EXTRA_CFLAGS="-I$ANDROID_SOURCE/frameworks/base/include -I$ANDROID_SOURCE/system/core/include"
#EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/base/media/libstagefright"
#EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/base/include/media/stagefright/openmax"
#EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK/sources/cxx-stl/gnu-libstdc++/4.6/include -I$NDK/sources/cxx-stl/gnu-libstdc++/4.6/libs/$ABI/include"
#EXTRA_CFLAGS="/ffmpeg-0.11.2/build/stagefright/armeabi-v7a/include"
EXTRA_CFLAGS="-I$DEST/include"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/base/include"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/base/include/media/stagefright/openmax"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/native/include"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/native/include/media/openmax"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/frameworks/av/include"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/system/core/include"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$ANDROID_SOURCE/hardware/libhardware/include"
EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK/sources/cxx-stl/stlport/stlport"
#EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK/sources/cxx-stl/gnu-libstdc++/4.6/include"
#EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK/sources/cxx-stl/gnu-libstdc++/4.6/libs/$ABI/include"
EXTRA_CFLAGS="$EXTRA_CFLAGS -mfloat-abi=softfp -mfpu=neon -marm -march=armv7-a -mtune=cortex-a8"
EXTRA_CFLAGS="$EXTRA_CFLAGS -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -D_STLP_USE_NEWALLOC"
EXTRA_CFLAGS="$EXTRA_CFLAGS -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
EXTRA_LDFLAGS=" -Wl,--fix-cortex-a8 -L$ANDROID_LIBS -Wl,-rpath-link,$ANDROID_LIBS -L$NDK/sources/cxx-stl/gnu-libstdc++/4.6/libs/$ABI"
EXTRA_CXXFLAGS="-Wno-multichar -fno-exceptions -fno-rtti"
FLAGS="$FLAGS --prefix=$DEST"
#mkdir -p $DEST
echo $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-cxxflags="$EXTRA_CXXFLAGS" > $DEST/info.txt
../configure $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-cxxflags="$EXTRA_CXXFLAGS" | tee $DEST/configuration.txt
#[ $PIPESTATUS == 0 ] || exit 1
make clean
make -j8 install
$TOOLCHAIN/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$TOOLCHAIN/bin/arm-linux-androideabi-ld -rpath-link=$TOOLCHAIN/usr/lib -L$TOOLCHAIN/usr/lib -L$ANDROID_LIBS -soname libffmpeg-neon.so -shared -z noexecstack -Bsymbolic --whole-archive --no-undefined -o $DEST/libffmpeg-neon.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a -lc -lm -lz -ldl -llog -lstdc++ -lmedia -lutils -lstagefright -lbinder --dynamic-linker=/system/bin/linker /opt/android-ndk-r8d/sources/cxx-stl/stlport/libs/armeabi-v7a/libstlport_static.a $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a
4.result
root@zhangjie:/home/ffmpeg_j3/jni/ffmpeg/build/stagefright/armeabi-v7a# pwd
/home/ffmpeg_j3/jni/ffmpeg/build/stagefright/armeabi-v7a
root@zhangjie:/home/ffmpeg_j3/jni/ffmpeg/build/stagefright/armeabi-v7a# ls
bin configuration.txt include info.txt lib libffmpeg-neon.so share
5.configure
install prefix ../build/stagefright/armeabi-v7a
source path /home/ffmpeg_j3/jni/ffmpeg
C compiler /opt/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc
ARCH arm (armv7-a)
big-endian no
runtime cpu detection no
ARMv5TE enabled yes
ARMv6 enabled yes
ARMv6T2 enabled yes
ARM VFP enabled yes
NEON enabled yes
debug symbols yes
strip symbols yes
optimize for size no
optimizations yes
static yes
shared no
postprocessing support no
new filter support yes
network support yes
threading support pthreads
safe bitstream reader yes
SDL support no
libdxva2 enabled no
libva enabled no
libvdpau enabled no
AVISynth enabled no
frei0r enabled no
gnutls enabled no
libaacplus enabled no
libass enabled no
libcdio support no
libcelt enabled no
libdc1394 support no
libfaac enabled no
libgsm enabled no
libmodplug enabled no
libmp3lame enabled no
libnut enabled no
libopencore-amrnb support no
libopencore-amrwb support no
libopencv support no
libopenjpeg enabled no
libpulse enabled no
librtmp enabled no
libschroedinger enabled no
libspeex enabled no
libstagefright-h264 enabled yes
libtheora enabled no
libutvideo enabled no
libv4l2 enabled no
libvo-aacenc support no
libvo-amrwbenc support no
libvorbis enabled no
libvpx enabled no
libx264 enabled no
libxavs enabled no
libxvid enabled no
openal enabled no
openssl enabled no
zlib enabled yes
bzlib enabled no
Enabled decoders:
aac cinepak lagarith
aac_latm cljr libstagefright_h264
aasc cook loco
ac3 cscd mace3
adpcm_4xm cyuv mace6
adpcm_adx dca mdec
adpcm_ct dfa microdvd
adpcm_ea dirac mimic
adpcm_ea_maxis_xa dnxhd mjpeg
adpcm_ea_r1 dpx mjpegb
adpcm_ea_r2 dsicinaudio mlp
adpcm_ea_r3 dsicinvideo mmvideo
adpcm_ea_xas dvbsub motionpixels
adpcm_g722 dvdsub mp1
adpcm_g726 dvvideo mp1float
adpcm_ima_amv dxa mp2
adpcm_ima_apc dxtory mp2float
adpcm_ima_dk3 eac3 mp3
adpcm_ima_dk4 eacmv mp3adu
adpcm_ima_ea_eacs eamad mp3adufloat
adpcm_ima_ea_sead eatgq mp3float
adpcm_ima_iss eatgv mp3on4
adpcm_ima_qt eatqi mp3on4float
adpcm_ima_smjpeg eightbps mpc7
adpcm_ima_wav eightsvx_exp mpc8
adpcm_ima_ws eightsvx_fib mpeg1video
adpcm_ms escape124 mpeg2video
adpcm_sbpro_2 escape130 mpeg4
adpcm_sbpro_3 exr mpegvideo
adpcm_sbpro_4 ffv1 msmpeg4v1
adpcm_swf ffvhuff msmpeg4v2
adpcm_thp ffwavesynth msmpeg4v3
adpcm_xa flac msrle
adpcm_yamaha flashsv msvideo1
alac flashsv2 mszh
als flic mxpeg
amrnb flv nellymoser
amrwb fourxm nuv
amv fraps pam
anm frwu pbm
ansi g723_1 pcm_alaw
ape g729 pcm_bluray
ass gif pcm_dvd
asv1 gsm pcm_f32be
asv2 gsm_ms pcm_f32le
atrac1 h261 pcm_f64be
atrac3 h263 pcm_f64le
aura h263i pcm_lxf
aura2 huffyuv pcm_mulaw
avrp idcin pcm_s16be
avs idf pcm_s16le
avui iff_byterun1 pcm_s16le_planar
ayuv iff_ilbm pcm_s24be
bethsoftvid imc pcm_s24daud
bfi indeo2 pcm_s24le
bink indeo3 pcm_s32be
binkaudio_dct indeo4 pcm_s32le
binkaudio_rdft indeo5 pcm_s8
bintext interplay_dpcm pcm_s8_planar
bmp interplay_video pcm_u16be
bmv_audio jacosub pcm_u16le
bmv_video jpeg2000 pcm_u24be
c93 jpegls pcm_u24le
cavs jv pcm_u32be
cdgraphics kgv1 pcm_u32le
cdxl kmvc pcm_u8
pcm_zork smc vmdvideo
pcx snow vmnc
pgm sol_dpcm vorbis
pgmyuv sonic vp3
pgssub sp5x vp5
pictor srt vp6
png sunrast vp6a
ppm svq1 vp6f
prores svq3 vp8
prores_lgpl targa vqa
ptx theora wavpack
qcelp thp wmalossless
qdm2 tiertexseqvideo wmapro
qdraw tiff wmav1
qpeg tmv wmav2
qtrle truehd wmavoice
r10k truemotion1 wmv1
r210 truemotion2 wmv2
ra_144 truespeech wmv3
ra_288 tscc wmv3image
ralf tta wnv1
rawvideo twinvq ws_snd1
rl2 txd xan_dpcm
roq ulti xan_wc3
roq_dpcm utvideo xan_wc4
rpza v210 xbin
rv10 v210x xbm
rv20 v308 xl
rv30 v408 xsub
rv40 v410 xwd
s302m vb y41p
sgi vble yop
shorten vc1 yuv4
sipr vc1image zerocodec
smackaud vcr1 zlib
smacker vmdaudio zmbv
Enabled encoders:
Enabled hwaccels:
Enabled parsers:
aac dvdsub mpegvideo
aac_latm flac png
ac3 gsm pnm
adx h261 rv30
cavsvideo h263 rv40
cook h264 vc1
dca mjpeg vorbis
dirac mlp vp3
dnxhd mpeg4video vp8
dvbsub mpegaudio
Enabled demuxers:
aac iff pcm_u24be
ac3 image2 pcm_u24le
act image2pipe pcm_u32be
adf ingenient pcm_u32le
adx ipmovie pcm_u8
aea iss pmp
aiff iv8 pva
amr ivf qcp
anm jacosub r3d
apc jv rawvideo
ape latm rl2
asf lmlm4 rm
ass loas roq
au lxf rpl
avi m4v rso
avs matroska rtp
bethsoftvid mgsts rtsp
bfi microdvd sap
bink mjpeg sbg
bintext mlp sdp
bit mm segafilm
bmv mmf shorten
c93 mov siff
caf mp3 smacker
cavsvideo mpc smjpeg
cdg mpc8 sol
cdxl mpegps sox
daud mpegts spdif
dfa mpegtsraw srt
dirac mpegvideo str
dnxhd msnwc_tcp swf
dsicin mtv thp
dts mvi tiertexseq
dv mxf tmv
dxa mxg truehd
ea nc tta
ea_cdata nsv tty
eac3 nut txd
ffm nuv vc1
ffmetadata ogg vc1t
filmstrip oma vmd
flac pcm_alaw voc
flic pcm_f32be vqf
flv pcm_f32le w64
fourxm pcm_f64be wav
g722 pcm_f64le wc3
g723_1 pcm_mulaw wsaud
g729 pcm_s16be wsvqa
gsm pcm_s16le wtv
gxf pcm_s24be wv
h261 pcm_s24le xa
h263 pcm_s32be xbin
h264 pcm_s32le xmv
hls pcm_s8 xwma
ico pcm_u16be yop
idcin pcm_u16le yuv4mpegpipe
idf
Enabled muxers:
a64 ipod pcm_mulaw
ac3 ismv pcm_s16be
adts ivf pcm_s16le
adx jacosub pcm_s24be
aiff latm pcm_s24le
amr m4v pcm_s32be
asf matroska pcm_s32le
asf_stream matroska_audio pcm_s8
ass md5 pcm_u16be
au microdvd pcm_u16le
avi mjpeg pcm_u24be
avm2 mkvtimestamp_v2 pcm_u24le
bit mlp pcm_u32be
caf mmf pcm_u32le
cavsvideo mov pcm_u8
crc mp2 psp
daud mp3 rawvideo
dirac mp4 rm
dnxhd mpeg1system roq
dts mpeg1vcd rso
dv mpeg1video rtp
eac3 mpeg2dvd rtsp
ffm mpeg2svcd sap
ffmetadata mpeg2video segment
filmstrip mpeg2vob smjpeg
flac mpegts sox
flv mpjpeg spdif
framecrc mxf srt
framemd5 mxf_d10 swf
g722 null tg2
g723_1 nut tgp
gif ogg truehd
gxf oma vc1t
h261 pcm_alaw voc
h263 pcm_f32be wav
h264 pcm_f32le webm
image2 pcm_f64be wtv
image2pipe pcm_f64le yuv4mpegpipe
Enabled protocols:
applehttp hls pipe
cache http rtmp
concat httpproxy rtp
crypto md5 tcp
file mmsh udp
gopher mmst
Enabled filters:
abuffersink earwax pan
aconvert fade pixdesctest
aevalsrc fieldorder removelogo
aformat fifo rgbtestsrc
amerge format select
amix fps setdar
amovie gradfun setfield
anull hflip setpts
anullsink idet setsar
anullsrc life settb
aresample lut showinfo
ashowinfo lutrgb silencedetect
asplit lutyuv slicify
astreamsync mandelbrot split
bbox movie swapuv
blackdetect negate testsrc
buffersink noformat thumbnail
cellauto null tile
color nullsink transpose
copy nullsrc unsharp
crop overlay vflip
deshake pad volume
drawbox
Enabled bsfs:
aac_adtstoasc mjpeg2jpeg mp3_header_decompress
chomp mjpega_dump_header noise
dump_extradata mov2textsub remove_extradata
h264_mp4toannexb mp3_header_compress text2movsub
imx_dump_header
Enabled indevs:
dv1394 lavfi v4l2
fbdev
Enabled outdevs:
License: LGPL version 2.1 or later
Creating config.mak and config.h...
libavutil/avconfig.h is unchanged