FFMPEG源文件放在$TOP/external/ffmpeg中, 编译成几个静态库libavcodec/libavformat/libavutil/...,以后再改成动态库。照网上的,写几个Android.mk和一个av.mk,可以 搞定。写了一个脚本调用configure, 在脚本中做一些配置,把需要的parser, decoder, encoder, demuxer等放进去,其它的disable掉。
写个ffdecoder, 在stagefright中调用ffmpeg.
C code:
1. 仿照AVCDecoder在libstagefright/codecs中建立相关目录和文件:ffdecoder.cpp, ffdecoder.h, ffdecoder_api.cpp, ffdecoder_api.h
2. 仿照AVCDecoder实现ffdecoder的函数:ffdecoder(), ~ffdecoder(), start(), stop(), getFormat(), read(), releaseFrames(), signalBufferReturned(). start()中调用ffmpeg_init(); stop()中调用ffmpeg_deinit(); read()中调用ffmpeg_decode(bufptr, size, other output data), 若framefinished, 传出yuv的MediaBuffer.
3. ffdecoder_api.cpp中 #include "ffmpeg headers" 时,需要加extern "C" {}.
3.1) ffmpeg_init(): av_register_all(); 需要根据传入的mime设置ffmpeg中对应的CodecID, width, height, extradata, extradata_size都从参数传入. pCodecCtx中需要配置的参数有c