Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33177
  • 博文数量: 11
  • 博客积分: 1420
  • 博客等级: 上尉
  • 技术积分: 65
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-04 11:38
文章分类
文章存档

2010年(11)

我的朋友
最近访客

分类: 嵌入式

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(S3C2410)平台

a.修改ffmpeg/libavcodec/armv4l/dsputil_arm_s.S文件

--- armv4l/dsputil_arm_s.S (revision 8264)

+++ armv4l/dsputil_arm_s.S (working copy)

@@ -19,6 +19,10 @@
@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@+.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里面的指令,而S3C2410是貌似不支持这条指令。

b.修改libavcodec/armv4l/dsputil_arm.c

//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=armv4l-unknown-linux- --prefix=/usr --cross-compile --arch=armv4l --target-os=arm-linux --enable-static --enable-shared --disable-ffserver --disable-ffplay --disable-mmx --disable-ipv6 --disable-iwmmxt --disable-strip --disable-armv5te --disable-armv6

#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()

阅读(966) | 评论(0) | 转发(0) |
0

上一篇:Linux下FFmpeg的编译

下一篇:Ffmpeg编译详解

给主人留下些什么吧!~~