之前的教程是在桌面系统上实现的,由于系统已经为我们提供好了相关的库,所以我们之需要调用库的接口就可以使用ffmpeg为我们提供的功能了。但是我们现在需要在android系统上面调用这些函数,ffmpeg没有为我们提供可在android上运行的动态链接库。这时候我们需要。

此次移植的是ffmpeg0.11.2,使用的编译工具是android提供的android-r8d,编译脚本与Android.mk参考了abitno。

First of the first,我们需要在ffmpeg主页下载源代码。到目前为止,ffmpeg的版本已经发展到了1.1.3,可我们的目标却是0.11.2,真是个固步自封的熊孩子。说话回来,我们不是在追求最新,只是追求可用。

ffmpeg的链接: http://www.ffmpeg.org/download.html,其实ffmpeg已经把代码托管到github,把github的版本库拉回来,想用哪个版本就切换到那个版本会更方便点。

##config.h

config.h是一个很重要的配置文件,但是这个文件不是手工编写或者默认提供,而是需要通过configure得到。configure又是如何使用的?ffmpeg源代码目录敲入命令./configure --help,可以列出configure的相关选项。下面我提供了一个脚本,里面记录了configure的选项,只要我们运行脚本,就会配置ffmpeg了。

:::sh
#!/bin/sh

ANDROID_NDK=/home/gavin/android-ndk-r8d
SYSROOT=$ANDROID_NDK/platforms/android-14/arch-arm
TOOLCHAIN=`echo $ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86`
export PATH=$TOOLCHAIN/bin:$PATH
FLAGS="--target-os=linux --cross-prefix=arm-linux-androideabi- --arch=arm --cpu=armv7-a "
FLAGS="$FLAGS --sysroot=$SYSROOT"
FLAGS="$FLAGS --disable-avdevice 
				--disable-static 
				--enable-shared 
				--disable-ffplay 
				--disable-doc 
				--disable-ffmpeg 
				--disable-ffprobe 
				--disable-ffserver 
				--disable-avfilter 
				--disable-encoders 
				--disable-muxers 
				--disable-filters 
				--disable-devices 
				--enable-version3 
				--enable-asm  
				--enable-neon "

EXTRA_CFLAGS="-I$ANDROID_NDK/sources/cxx-stl/system/include"

EXTRA_CFLAGS="$EXTRA_CFLAGS -fPIC -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
#EXTRA_CFLAGS="$EXTRA_CFLAGS -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16"
EXTRA_LDFLAGS="-Wl,--fix-cortex-a8 -nostdlib"
EXTRA_CXXFLAGS="-Wno-multichar -fno-exceptions -fno-rtti"
ABI="armeabi-v7a"

echo $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-cxxflags="$EXTRA_CXXFLAGS" > info.txt
./configure $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" --extra-cxxflags="$EXTRA_CXXFLAGS" | tee configuration.txt

Info 把libavutil/libm.h里面的static方法注释掉

编译出config.h后我们需要一些改动,#define restrict restrict改为#define restrict后就可以了。android系统有pthread,config.h需要打开pthread,#define HAVE_PTHREADS 1。这样就可以了,再在工程目录加入以下Android.mk,这个Android.mk的好处就是可以知道编译了什么文件,方便增删、改参数等操作。最后要生成avcodec.h。

##Android.mk

Info codec_names.h如何生成?在ffmpeg源代码目录运行cat libavcodec/avcodec.h | libavcodec/codec_names.sh config.h libavcodec/codec_names.h

:::c
LOCAL_PATH:= $(call my-dir)

AVUTIL_FILES := \
	libavutil/adler32.c   \
	libavutil/aes.c \
	libavutil/audioconvert.c \
	libavutil/audio_fifo.c \
	libavutil/avstring.c \
	libavutil/base64.c \
	libavutil/bprint.c \
	libavutil/cpu.c \
	libavutil/crc.c \
	libavutil/des.c \
	libavutil/dict.c \
	libavutil/error.c \
	libavutil/eval.c \
	libavutil/fifo.c \
	libavutil/file.c \
	libavutil/imgutils.c \
	libavutil/intfloat_readwrite.c \
	libavutil/inverse.c \
	libavutil/lfg.c \
	libavutil/lls.c \
	libavutil/log.c \
	libavutil/lzo.c \
	libavutil/mathematics.c \
	libavutil/md5.c \
	libavutil/mem.c \
	libavutil/opt.c \
	libavutil/parseutils.c \
	libavutil/pixdesc.c \
	libavutil/random_seed.c \
	libavutil/rational.c \
	libavutil/rc4.c \
	libavutil/samplefmt.c \
	libavutil/sha.c \
	libavutil/timecode.c \
	libavutil/tree.c \
	libavutil/utils.c \
	libavutil/arm/cpu.c


AVFORMAT_FILES := \
	libavformat/4xm.c \
	libavformat/a64.c \
	libavformat/aacdec.c \
	libavformat/ac3dec.c \
	libavformat/act.c \
	libavformat/adxdec.c \
	libavformat/aea.c \
	libavformat/aiffdec.c \
	libavformat/allformats.c \
	libavformat/amr.c \
	libavformat/anm.c \
	libavformat/apc.c \
	libavformat/ape.c \
	libavformat/apetag.c \
	libavformat/asf.c \
	libavformat/asfcrypt.c \
	libavformat/asfdec.c \
	libavformat/assdec.c \
	libavformat/au.c \
	libavformat/avidec.c \
	libavformat/avio.c \
	libavformat/aviobuf.c \
	libavformat/avlanguage.c \
	libavformat/avs.c \
	libavformat/bethsoftvid.c \
	libavformat/bfi.c \
	libavformat/bink.c \
	libavformat/bintext.c \
	libavformat/bit.c \
	libavformat/bmv.c \
	libavformat/c93.c \
	libavformat/caf.c \
	libavformat/cache.c \
	libavformat/cafdec.c \
	libavformat/cavsvideodec.c \
	libavformat/cdg.c \
	libavformat/cdxl.c \
	libavformat/concat.c \
	libavformat/crypto.c \
	libavformat/cutils.c \
	libavformat/daud.c \
	libavformat/dfa.c \
	libavformat/diracdec.c \
	libavformat/dnxhddec.c \
	libavformat/dsicin.c \
	libavformat/dtsdec.c \
	libavformat/dv.c \
	libavformat/dxa.c \
	libavformat/eacdata.c \
	libavformat/electronicarts.c \
	libavformat/ffmdec.c \
	libavformat/ffmetadec.c \
	libavformat/file.c \
	libavformat/filmstripdec.c \
	libavformat/flacdec.c \
	libavformat/flic.c \
	libavformat/flvdec.c \
	libavformat/framehash.c \
	libavformat/g723_1.c \
	libavformat/g729dec.c \
	libavformat/gopher.c \
	libavformat/gsmdec.c \
	libavformat/gxf.c \
	libavformat/h261dec.c \
	libavformat/h263dec.c \
	libavformat/h264dec.c \
	libavformat/hls.c \
	libavformat/hlsproto.c \
	libavformat/http.c \
	libavformat/httpauth.c \
	libavformat/icodec.c \
	libavformat/id3v1.c \
	libavformat/id3v2.c \
	libavformat/idcin.c \
	libavformat/idroqdec.c \
	libavformat/ingenientdec.c \
	libavformat/ivfdec.c \
	libavformat/iff.c \
	libavformat/img2.c \
	libavformat/img2dec.c \
	libavformat/ipmovie.c \
	libavformat/isom.c \
	libavformat/iss.c \
	libavformat/iv8.c \
	libavformat/jacosubdec.c \
	libavformat/jvdec.c \
	libavformat/lmlm4.c \
	libavformat/loasdec.c \
	libavformat/lxfdec.c \
	libavformat/m4vdec.c \
	libavformat/matroska.c \
	libavformat/matroskadec.c \
	libavformat/md5proto.c \
	libavformat/metadata.c \
	libavformat/mgsts.c \
	libavformat/microdvddec.c \
	libavformat/mm.c \
	libavformat/mmf.c \
	libavformat/mms.c \
	libavformat/mmsh.c \
	libavformat/mmst.c \
	libavformat/mov.c \
	libavformat/mov_chan.c \
	libavformat/mp3dec.c \
	libavformat/mpc.c \
	libavformat/mpc8.c \
	libavformat/mpeg.c \
	libavformat/mpegts.c \
	libavformat/mpegvideodec.c \
	libavformat/msnwc_tcp.c \
	libavformat/mtv.c \
	libavformat/mvi.c \
	libavformat/mxg.c \
	libavformat/mxf.c \
	libavformat/mxfdec.c \
	libavformat/ncdec.c \
	libavformat/network.c \
	libavformat/nsvdec.c \
	libavformat/nut.c \
	libavformat/nutdec.c \
	libavformat/nuv.c \
	libavformat/oggdec.c \
	libavformat/oggparsecelt.c \
	libavformat/oggparsedirac.c \
	libavformat/oggparseflac.c \
	libavformat/oggparseogm.c \
	libavformat/oggparseskeleton.c \
	libavformat/oggparsespeex.c \
	libavformat/oggparsetheora.c \
	libavformat/oggparsevorbis.c \
	libavformat/oma.c \
	libavformat/omadec.c \
	libavformat/options.c \
	libavformat/os_support.c \
	libavformat/pcm.c \
	libavformat/pcmdec.c \
	libavformat/pmpdec.c \
	libavformat/psxstr.c \
	libavformat/pva.c \
	libavformat/qcp.c \
	libavformat/r3d.c \
	libavformat/rawdec.c \
	libavformat/rawvideodec.c \
	libavformat/rdt.c \
	libavformat/riff.c \
	libavformat/rl2.c \
	libavformat/rm.c \
	libavformat/rmdec.c \
	libavformat/rpl.c \
	libavformat/rso.c \
	libavformat/rsodec.c \
	libavformat/rtmppkt.c \
	libavformat/rtmpproto.c \
	libavformat/rtp.c \
	libavformat/rtpdec.c \
	libavformat/rtpdec_amr.c \
	libavformat/rtpdec_asf.c \
	libavformat/rtpdec_g726.c \
	libavformat/rtpdec_h263.c \
	libavformat/rtpdec_h263_rfc2190.c \
	libavformat/rtpdec_h264.c \
	libavformat/rtpdec_xiph.c \
	libavformat/rtpdec_latm.c \
	libavformat/rtpdec_mpeg4.c \
	libavformat/rtpdec_qcelp.c \
	libavformat/rtpdec_qdm2.c \
	libavformat/rtpdec_qt.c \
	libavformat/rtpdec_svq3.c \
	libavformat/rtpdec_vp8.c \
	libavformat/rtpproto.c \
	libavformat/rtsp.c \
	libavformat/rtspdec.c \
	libavformat/sbgdec.c \
	libavformat/sdp.c \
	libavformat/sapdec.c \
	libavformat/sauce.c \
	libavformat/seek.c \
	libavformat/segafilm.c \
	libavformat/sierravmd.c \
	libavformat/siff.c \
	libavformat/smacker.c \
	libavformat/smjpeg.c \
	libavformat/smjpegdec.c \
	libavformat/sol.c \
	libavformat/soxdec.c \
	libavformat/spdif.c \
	libavformat/spdifdec.c \
	libavformat/srtdec.c \
	libavformat/swfdec.c \
	libavformat/tcp.c \
	libavformat/thp.c \
	libavformat/tiertexseq.c \
	libavformat/tmv.c \
	libavformat/tta.c \
	libavformat/tty.c \
	libavformat/txd.c \
	libavformat/udp.c \
	libavformat/utils.c \
	libavformat/vc1test.c \
	libavformat/voc.c \
	libavformat/vocdec.c \
	libavformat/vorbiscomment.c \
	libavformat/vqf.c \
	libavformat/wav.c \
	libavformat/wc3movie.c \
	libavformat/westwood_aud.c \
	libavformat/westwood_vqa.c \
	libavformat/wtv.c \
	libavformat/wtvdec.c \
	libavformat/wv.c \
	libavformat/xa.c \
	libavformat/xmv.c \
	libavformat/xwma.c \
	libavformat/yuv4mpeg.c \
	libavformat/yop.c


AVCODEC_FILES := \
	libavcodec/4xm.c \
	libavcodec/8bps.c \
	libavcodec/8svx.c \
	libavcodec/aacdec.c \
	libavcodec/aac_ac3_parser.c \
	libavcodec/aac_adtstoasc_bsf.c \
	libavcodec/aac_parser.c \
	libavcodec/aacadtsdec.c \
	libavcodec/aacsbr.c \
	libavcodec/aactab.c \
	libavcodec/aacps.c \
	libavcodec/aacpsdsp.c \
	libavcodec/aandcttab.c \
	libavcodec/ansi.c \
	libavcodec/ass.c \
	libavcodec/assdec.c \
	libavcodec/ass_split.c \
	libavcodec/aasc.c \
	libavcodec/ac3.c \
	libavcodec/ac3_parser.c \
	libavcodec/ac3dec.c \
	libavcodec/ac3dec_data.c \
	libavcodec/ac3dsp.c \
	libavcodec/ac3tab.c \
	libavcodec/acelp_filters.c \
	libavcodec/acelp_pitch_delay.c \
	libavcodec/acelp_vectors.c \
	libavcodec/adpcm.c \
	libavcodec/adpcm_data.c \
	libavcodec/adx.c \
	libavcodec/adxdec.c \
	libavcodec/adx_parser.c \
	libavcodec/alac.c \
	libavcodec/allcodecs.c \
	libavcodec/alsdec.c \
	libavcodec/amrnbdec.c \
	libavcodec/amrwbdec.c \
	libavcodec/anm.c \
	libavcodec/apedec.c \
	libavcodec/asv1.c \
	libavcodec/atrac.c \
	libavcodec/atrac1.c \
	libavcodec/atrac3.c \
	libavcodec/audioconvert.c \
	libavcodec/audio_frame_queue.c \
	libavcodec/aura.c \
	libavcodec/avfft.c \
	libavcodec/avpacket.c \
	libavcodec/avs.c \
	libavcodec/avuidec.c \
	libavcodec/bethsoftvideo.c \
	libavcodec/bfi.c \
	libavcodec/bgmc.c \
	libavcodec/bink.c \
	libavcodec/binkaudio.c \
	libavcodec/binkdsp.c \
	libavcodec/bintext.c \
	libavcodec/bitstream.c \
	libavcodec/bitstream_filter.c \
	libavcodec/bmp.c \
	libavcodec/bmv.c \
	libavcodec/c93.c \
	libavcodec/cabac.c \
	libavcodec/cavs.c \
	libavcodec/cavs_parser.c \
	libavcodec/cavsdec.c \
	libavcodec/cavsdsp.c \
	libavcodec/cdgraphics.c \
	libavcodec/cdxl.c \
	libavcodec/celp_filters.c \
	libavcodec/celp_math.c \
	libavcodec/cga_data.c \
	libavcodec/chomp_bsf.c \
	libavcodec/cinepak.c \
	libavcodec/cljr.c \
	libavcodec/cook.c \
	libavcodec/cook_parser.c \
	libavcodec/cscd.c \
	libavcodec/cyuv.c \
	libavcodec/dca.c \
	libavcodec/dca_parser.c \
	libavcodec/dcadsp.c \
	libavcodec/dct.c \
	libavcodec/dct32_fixed.c \
	libavcodec/dct32_float.c \
	libavcodec/dfa.c \
	libavcodec/dirac.c \
	libavcodec/dirac_arith.c \
	libavcodec/diracdec.c \
	libavcodec/diracdsp.c \
	libavcodec/dirac_parser.c \
	libavcodec/dnxhd_parser.c \
	libavcodec/dnxhddata.c \
	libavcodec/dnxhddec.c \
	libavcodec/dpcm.c \
	libavcodec/dpx.c \
	libavcodec/dsicinav.c \
	libavcodec/dsputil.c \
	libavcodec/dump_extradata_bsf.c \
	libavcodec/dv.c \
	libavcodec/dvbsub_parser.c \
	libavcodec/dvbsubdec.c \
	libavcodec/dvdata.c \
	libavcodec/dvdec.c \
	libavcodec/dvdsub_parser.c \
	libavcodec/dvdsubdec.c \
	libavcodec/dv_profile.c \
	libavcodec/dwt.c \
	libavcodec/dxa.c \
	libavcodec/dxtory.c \
	libavcodec/eac3dec.c \
	libavcodec/eac3_data.c \
	libavcodec/eacmv.c \
	libavcodec/eaidct.c \
	libavcodec/eamad.c \
	libavcodec/eatgq.c \
	libavcodec/eatgv.c \
	libavcodec/eatqi.c \
	libavcodec/error_resilience.c \
	libavcodec/escape124.c \
	libavcodec/escape130.c \
	libavcodec/exr.c \
	libavcodec/faanidct.c \
	libavcodec/faxcompr.c \
	libavcodec/fft_fixed.c \
	libavcodec/fft_float.c \
	libavcodec/ffv1.c \
	libavcodec/ffwavesynth.c \
	libavcodec/flac.c \
	libavcodec/flacdata.c \
	libavcodec/flacdec.c \
	libavcodec/flac_parser.c \
	libavcodec/flashsv.c \
	libavcodec/flicvideo.c \
	libavcodec/flvdec.c \
	libavcodec/fmtconvert.c \
	libavcodec/fraps.c \
	libavcodec/frwu.c \
	libavcodec/g722.c \
	libavcodec/g722dec.c \
	libavcodec/g723_1.c \
	libavcodec/g726.c \
	libavcodec/g729dec.c \
	libavcodec/g729postfilter.c \
	libavcodec/gifdec.c \
	libavcodec/golomb.c \
	libavcodec/golomb-test.c \
	libavcodec/gsmdec.c \
	libavcodec/gsmdec_data.c \
	libavcodec/gsm_parser.c \
	libavcodec/h261.c \
	libavcodec/h261data.c \
	libavcodec/h261_parser.c \
	libavcodec/h261dec.c \
	libavcodec/h263.c \
	libavcodec/h263_parser.c \
	libavcodec/h263dec.c \
	libavcodec/h264.c \
	libavcodec/h264_cabac.c \
	libavcodec/h264_cavlc.c \
	libavcodec/h264_direct.c \
	libavcodec/h264_loopfilter.c \
	libavcodec/h264_mp4toannexb_bsf.c \
	libavcodec/h264_parser.c \
	libavcodec/h264_ps.c \
	libavcodec/h264_refs.c \
	libavcodec/h264_sei.c \
	libavcodec/h264dsp.c \
	libavcodec/h264idct.c \
	libavcodec/h264pred.c \
	libavcodec/huffman.c \
	libavcodec/huffyuv.c \
	libavcodec/idcinvideo.c \
	libavcodec/iff.c \
	libavcodec/imgconvert.c \
	libavcodec/imc.c \
	libavcodec/imx_dump_header_bsf.c \
	libavcodec/indeo2.c \
	libavcodec/indeo3.c \
	libavcodec/indeo4.c \
	libavcodec/indeo5.c \
	libavcodec/intelh263dec.c \
	libavcodec/interplayvideo.c \
	libavcodec/intrax8.c \
	libavcodec/intrax8dsp.c \
	libavcodec/ituh263dec.c \
	libavcodec/ivi_common.c \
	libavcodec/ivi_dsp.c \
	libavcodec/j2k.c \
	libavcodec/j2k_dwt.c \
	libavcodec/j2kdec.c \
	libavcodec/jacosubdec.c \
	libavcodec/jpegls.c \
	libavcodec/jpeglsdec.c \
	libavcodec/jrevdct.c \
	libavcodec/jvdec.c \
	libavcodec/kbdwin.c \
	libavcodec/kgv1dec.c \
	libavcodec/kmvc.c \
	libavcodec/lagarith.c \
	libavcodec/lagarithrac.c \
	libavcodec/latm_parser.c \
	libavcodec/lcldec.c \
	libavcodec/loco.c \
	libavcodec/lpc.c \
	libavcodec/lsp.c \
	libavcodec/lzw.c \
	libavcodec/mace.c \
	libavcodec/mdct_fixed.c \
	libavcodec/mdct_float.c \
	libavcodec/mdec.c \
	libavcodec/microdvddec.c \
	libavcodec/mimic.c \
	libavcodec/mjpeg.c \
	libavcodec/mjpeg2jpeg_bsf.c \
	libavcodec/mjpeg_parser.c \
	libavcodec/mjpega_dump_header_bsf.c \
	libavcodec/mjpegbdec.c \
	libavcodec/mjpegdec.c \
	libavcodec/mlp.c \
	libavcodec/mlp_parser.c \
	libavcodec/mlpdec.c \
	libavcodec/mlpdsp.c \
	libavcodec/mmvideo.c \
	libavcodec/motionpixels.c \
	libavcodec/movsub_bsf.c \
	libavcodec/mp3_header_compress_bsf.c \
	libavcodec/mp3_header_decompress_bsf.c \
	libavcodec/mpc.c \
	libavcodec/mpc7.c \
	libavcodec/mpc8.c \
	libavcodec/mpeg12.c \
	libavcodec/mpeg12data.c \
	libavcodec/mpeg4audio.c \
	libavcodec/mpeg4video.c \
	libavcodec/mpeg4video_parser.c \
	libavcodec/mpeg4videodec.c \
	libavcodec/mpegaudio.c \
	libavcodec/mpegaudio_parser.c \
	libavcodec/mpegaudiodata.c \
	libavcodec/mpegaudiodec.c \
	libavcodec/mpegaudiodec_float.c \
	libavcodec/mpegaudiodecheader.c \
	libavcodec/mpegaudiodsp.c \
	libavcodec/mpegaudiodsp_fixed.c \
	libavcodec/mpegaudiodsp_float.c \
	libavcodec/mpegvideo.c \
	libavcodec/mpegvideo_parser.c \
	libavcodec/mqc.c \
	libavcodec/mqcdec.c \
	libavcodec/msgsmdec.c \
	libavcodec/msmpeg4.c \
	libavcodec/msmpeg4data.c \
	libavcodec/msrle.c \
	libavcodec/msrledec.c \
	libavcodec/msvideo1.c \
	libavcodec/mxpegdec.c \
	libavcodec/nellymoser.c \
	libavcodec/nellymoserdec.c \
	libavcodec/noise_bsf.c \
	libavcodec/nuv.c \
	libavcodec/options.c \
	libavcodec/parser.c \
	libavcodec/pcm-mpeg.c \
	libavcodec/pcm.c \
	libavcodec/pcx.c \
	libavcodec/pgssubdec.c \
	libavcodec/pictordec.c \
	libavcodec/png.c \
	libavcodec/pngdsp.c \
	libavcodec/png_parser.c \
	libavcodec/pngdec.c \
	libavcodec/pnm.c \
	libavcodec/pnm_parser.c \
	libavcodec/proresdata.c \
	libavcodec/pnmdec.c \
	libavcodec/proresdec_lgpl.c \
	libavcodec/proresdec2.c \
	libavcodec/proresdsp.c \
	libavcodec/pthread.c \
	libavcodec/ptx.c \
	libavcodec/qcelpdec.c \
	libavcodec/qdm2.c \
	libavcodec/qdrw.c \
	libavcodec/qpeg.c \
	libavcodec/qtrle.c \
	libavcodec/r210dec.c \
	libavcodec/ra144.c \
	libavcodec/ra144dec.c \
	libavcodec/ra288.c \
	libavcodec/ralf.c \
	libavcodec/rangecoder.c \
	libavcodec/raw.c \
	libavcodec/rawdec.c \
	libavcodec/rdft.c \
	libavcodec/remove_extradata_bsf.c \
	libavcodec/resample.c \
	libavcodec/resample2.c \
	libavcodec/rl2.c \
	libavcodec/roqvideo.c \
	libavcodec/roqvideodec.c \
	libavcodec/rpza.c \
	libavcodec/rtjpeg.c \
	libavcodec/rv10.c \
	libavcodec/rv30.c \
	libavcodec/rv30dsp.c \
	libavcodec/rv34.c \
	libavcodec/rv34_parser.c \
	libavcodec/rv34dsp.c \
	libavcodec/rv40.c \
	libavcodec/rv40dsp.c \
	libavcodec/s302m.c \
	libavcodec/s3tc.c \
	libavcodec/sbrdsp.c \
	libavcodec/sgidec.c \
	libavcodec/shorten.c \
	libavcodec/simple_idct.c \
	libavcodec/sinewin.c \
	libavcodec/sipr.c \
	libavcodec/sipr16k.c \
	libavcodec/smacker.c \
	libavcodec/smc.c \
	libavcodec/snow.c \
	libavcodec/snowdec.c \
	libavcodec/sonic.c \
	libavcodec/sp5xdec.c \
	libavcodec/srtdec.c \
	libavcodec/sunrast.c \
	libavcodec/sunrastenc.c \
	libavcodec/svq1.c \
	libavcodec/svq1dec.c \
	libavcodec/svq3.c \
	libavcodec/synth_filter.c \
	libavcodec/targa.c \
	libavcodec/tiertexseqv.c \
	libavcodec/tiff.c \
	libavcodec/tmv.c \
	libavcodec/truemotion1.c \
	libavcodec/truemotion2.c \
	libavcodec/truespeech.c \
	libavcodec/tscc.c \
	libavcodec/tta.c \
	libavcodec/twinvq.c \
	libavcodec/txd.c \
	libavcodec/ulti.c \
	libavcodec/utils.c \
	libavcodec/utvideo.c \
	libavcodec/v210dec.c \
	libavcodec/v210x.c \
	libavcodec/v308dec.c \
	libavcodec/v408dec.c \
	libavcodec/v410dec.c \
	libavcodec/vb.c \
	libavcodec/vble.c \
	libavcodec/vc1.c \
	libavcodec/vc1_parser.c \
	libavcodec/vc1data.c \
	libavcodec/vc1dec.c \
	libavcodec/vc1dsp.c \
	libavcodec/vcr1.c \
	libavcodec/vmdav.c \
	libavcodec/vmnc.c \
	libavcodec/vorbis.c \
	libavcodec/vorbis_parser.c \
	libavcodec/vorbis_data.c \
	libavcodec/vorbisdec.c \
	libavcodec/vp3.c \
	libavcodec/vp3_parser.c \
	libavcodec/vp3dsp.c \
	libavcodec/vp5.c \
	libavcodec/vp56.c \
	libavcodec/vp56data.c \
	libavcodec/vp56dsp.c \
	libavcodec/vp56rac.c \
	libavcodec/vp6.c \
	libavcodec/vp6dsp.c \
	libavcodec/vp8.c \
	libavcodec/vp8_parser.c \
	libavcodec/vp8dsp.c \
	libavcodec/vqavideo.c \
	libavcodec/wavpack.c \
	libavcodec/wma.c \
	libavcodec/wma_common.c \
	libavcodec/wmadec.c \
	libavcodec/wmalosslessdec.c \
	libavcodec/wmaprodec.c \
	libavcodec/wmavoice.c \
	libavcodec/wmv2.c \
	libavcodec/wmv2dec.c \
	libavcodec/wnv1.c \
	libavcodec/ws-snd1.c \
	libavcodec/xan.c \
	libavcodec/xbmdec.c \
	libavcodec/xiph.c \
	libavcodec/xl.c \
	libavcodec/xsubdec.c \
	libavcodec/xwddec.c \
	libavcodec/yuv4dec.c \
	libavcodec/zerocodec.c \
	libavcodec/xxan.c \
	libavcodec/y41pdec.c \
	libavcodec/yop.c \
	libavcodec/zmbv.c 


ARM_GENERAL_AVCODEC_FILES := \
	libavcodec/arm/asm.S \
	libavcodec/arm/aacpsdsp_init_arm.c \
	libavcodec/arm/aacpsdsp_neon.S \
	libavcodec/arm/ac3dsp_arm.S \
	libavcodec/arm/ac3dsp_init_arm.c \
	libavcodec/arm/dcadsp_init_arm.c \
	libavcodec/arm/dsputil_arm.S \
	libavcodec/arm/dsputil_init_arm.c \
	libavcodec/arm/dsputil_init_armv5te.c \
	libavcodec/arm/fft_init_arm.c \
	libavcodec/arm/fft_fixed_init_arm.c \
	libavcodec/arm/fmtconvert_init_arm.c \
	libavcodec/arm/h264dsp_init_arm.c \
	libavcodec/arm/h264pred_init_arm.c \
	libavcodec/arm/jrevdct_arm.S \
	libavcodec/arm/mpegaudiodsp_init_arm.c \
	libavcodec/arm/mpegvideo_arm.c \
	libavcodec/arm/mpegvideo_armv5te.c \
	libavcodec/arm/mpegvideo_armv5te_s.S \
	libavcodec/arm/simple_idct_arm.S \
	libavcodec/arm/simple_idct_armv5te.S \
	libavcodec/arm/vp56dsp_init_arm.c \
	libavcodec/arm/vp8dsp_init_arm.c


ARM_VFP_AVCODEC_FILES := \
	libavcodec/arm/dsputil_init_vfp.c \
	libavcodec/arm/dsputil_vfp.S \
	libavcodec/arm/fmtconvert_vfp.S


ARM_ARMV6_AVCODEC_FILES := \
	libavcodec/arm/ac3dsp_armv6.S \
	libavcodec/arm/dsputil_armv6.S \
	libavcodec/arm/dsputil_init_armv6.c \
	libavcodec/arm/mpegaudiodsp_fixed_armv6.S \
	libavcodec/arm/simple_idct_armv6.S \
	libavcodec/arm/vp8_armv6.S \
	libavcodec/arm/vp8dsp_armv6.S \
	libavcodec/arm/vp8dsp_init_armv6.c 


ARM_NEON_AVCODEC_FILES := \
	libavcodec/arm/ac3dsp_neon.S \
	libavcodec/arm/dcadsp_neon.S \
	libavcodec/arm/dsputil_init_neon.c \
	libavcodec/arm/dsputil_neon.S \
	libavcodec/arm/fft_neon.S \
	libavcodec/arm/fft_fixed_neon.S \
	libavcodec/arm/fmtconvert_neon.S \
	libavcodec/arm/h264dsp_neon.S \
	libavcodec/arm/h264idct_neon.S \
	libavcodec/arm/h264cmc_neon.S \
	libavcodec/arm/h264pred_neon.S \
	libavcodec/arm/int_neon.S \
	libavcodec/arm/mdct_neon.S \
	libavcodec/arm/mdct_fixed_neon.S \
	libavcodec/arm/mpegvideo_neon.S \
	libavcodec/arm/neon.S \
	libavcodec/arm/rdft_neon.S \
	libavcodec/arm/rv34dsp_init_neon.c \
	libavcodec/arm/rv34dsp_neon.S \
	libavcodec/arm/rv40dsp_init_neon.c \
	libavcodec/arm/rv40dsp_neon.S \
	libavcodec/arm/simple_idct_neon.S \
	libavcodec/arm/synth_filter_neon.S \
	libavcodec/arm/vp3dsp_neon.S \
	libavcodec/arm/vp56dsp_neon.S \
	libavcodec/arm/vp8dsp_neon.S \
	libavcodec/arm/sbrdsp_init_arm.c \
	libavcodec/arm/sbrdsp_neon.S \
	libavcodec/arm/vp8dsp_init_neon.c 



SWSCALE_FILES := \
	libswscale/options.c \
	libswscale/rgb2rgb.c \
	libswscale/swscale.c \
	libswscale/output.c \
	libswscale/input.c \
	libswscale/swscale_unscaled.c \
	libswscale/utils.c \
	libswscale/yuv2rgb.c 

SWRESAMPLE_FILES := \
	libswresample/audioconvert.c \
	libswresample/dither.c \
	libswresample/rematrix.c \
	libswresample/resample.c \
	libswresample/swresample.c 


# FFMPEG NEON
include $(CLEAR_VARS)

LOCAL_MODULE := ffmpeg
LOCAL_LDLIBS += -llog -lz -lm
LOCAL_CFLAGS += -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DPIC -DHAVE_SYS_UIO_H=1 -DANDROID
LOCAL_CFLAGS += $(CC_OPTIMIZE_FLAG)
LOCAL_CFLAGS += -march=armv7-a -mfpu=neon -mfloat-abi=softfp -mvectorize-with-neon-quad
LOCAL_CXXFLAGS += -D__STDC_CONSTANT_MACROS
LOCAL_LDFLAGS += -Wl,--fix-cortex-a8

TARGET_ARCH_ABI := armeabi-v7a
LOCAL_ARM_MODE := arm
LOCAL_ARM_NEON := true

LOCAL_SRC_FILES += $(AVCORE_FILES) \
									 $(AVUTIL_FILES) \
									 $(AVFORMAT_FILES) \
									 $(AVCODEC_FILES) \
									 $(ARM_GENERAL_AVCODEC_FILES) \
									 $(ARM_ARMV6_AVCODEC_FILES) \
									 $(ARM_VFP_AVCODEC_FILES) \
									 $(ARM_NEON_AVCODEC_FILES) \
									 $(SWSCALE_FILES) \
									 $(SWRESAMPLE_FILES)

LOCAL_C_INCLUDES +=$(LOCAL_PATH) \
	$(LOCAL_PATH)/libavcodec \
	$(LOCAL_PATH)/libavformat \
	$(LOCAL_PATH)/libavutil \
	$(LOCAL_PATH)/libswscale \
	$(LOCAL_PATH)/libswresample \
	$(LOCAL_PATH)/libavutil/arm 

include $(BUILD_SHARED_LIBRARY)