分类: 嵌入式
2010-06-04 17:55:53
FFMPEG 编译与移植
(1)FFMPEG下载
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpegs
(2)FFMPEG x86 平台编译安装
进入ffmpeg 目录
#./configure --prefix=/usr
#make
#make install
(3)FFMPEG 移植ARM(S
a.修改ffmpeg/libavcodec/armv
--- armv
+++ armv
@@ -19,6 +19,10 @@
@ Foundation, Inc.,
@+.macro pld arg+
@+.endm+.macro ADJ_ALIGN_QUADWORD_D shift, Rd0, Rd1, Rd2, Rd3, Rn0, Rn1, Rn2, Rn3, Rn4
mov \Rd0, \Rn0, lsr #(\shift * 8)
mov \Rd1, \Rn1, lsr #(\shift * 8)
注意:pld 这条指令好像是ARM5TE里面的指令,而S
b.修改libavcodec/armv
//extern void simple_idct_armv5te(DCTELEM *data);
//extern void simple_idct_put_armv5te(uint8_t *dest, int line_size,
// DCTELEM *data);
//extern void simple_idct_add_armv5te(uint8_t *dest, int line_size,
// DCTELEM *data);
//extern void ff_simple_idct_armv6(DCTELEM *data);
//extern void ff_simple_idct_put_armv6(uint8_t *dest, int line_size,
// DCTELEM *data);
//extern void ff_simple_idct_add_armv6(uint8_t *dest, int line_size,
// DCTELEM *data);
将以上这些声明注释掉,编译的时候要把ARMV5TE和ARMV6 disable掉。所以这
几个函数所在的汇编文件不会编译。
c.配置,编译
#./configure --cross-prefix=armv
#make
#make install DESTDIR=/root/ffmpeg/install
FFMPEG相关的头文件,库文件都在/root/ffmpeg/install目录下。将lib里面的动态连接库拷贝到开发板的/mnt/yaffs/lib目录下。
d.FFMPEG库的使用
FFMpeg 中比较重要的函数以及数据结构如下:
1. 数据结构:
(1) AVFormatContext
(2) AVOutputFormat
(3) AVInputFormat
(4) AVCodecContext
(5) AVCodec
(6) AVFrame
(7) AVPacket
(8) AVPicture
(9) AVStream
2. 初始化函数:
(1) av_register_all()
(2) avcodec_open()
(3) avcodec_close()
(4) av_open_input_file()
(5) av_find_input_format()
(6) av_find_stream_info()
(7) av_close_input_file()
3. 音视频编解码函数:
(1) avcodec_find_decoder()
(2) avcodec_alloc_frame()
(3) avpicture_get_size()
(4) avpicture_fill()
(5) img_convert()
(6) avcodec_alloc_context()
(7) avcodec_decode_video()
(8) av_free_packet()
(9) av_free()
4. 文件操作:
(1) avnew_steam()
(2) av_read_frame()
(3) av_write_frame()
(4) dump_format()
5. 其他函数:
(1) avpicture_deinterlace()
(2) ImgReSampleContext()