原创 成功移植ffmpeg 0.6到ARM平台

2011-4-3 16:39 3416 4 4 分类: MCU/ 嵌入式

 


关注realboard,请访问慧至科技官方网站www.hugacy.com


 


  ffmpeg已变成多媒体处理领域最有影响力的开源组件,接近50万行源代码的工程对ARM模拟器来说是个巨大的挑战,但多年的稳定性给了我很大信心。整个过程比较顺利,前后大约花2个半小时,包括在ARM开发板上验证。ffmpeg0.6的移植成功,进一步体现了ARM模拟器的巨大魅力。


    相对移植x264来说,移植ffmpeg虽然做法简单,但需要关注的问题会更加复杂,主要原因是ffmpeg有大量的arm汇编优化代码,如何选择目标平台和编译器是一个首要问题。换句话说,如果需要把ffmpeg移植到arm7平台,那么除了armv4指令,其它的全部高版本指令都要去掉,倘若目标平台是arm9,还得考虑armv5,以及是否要支持v5t。最新的ffmpeg 0.6已经包含armv6和armv6t2汇编代码,这又需要根据arm11平台的具体情况来选择。值得注意的是,arm gcc4.3之前的版本不支持armv6/v6t2指令,需要安装4.3及其后的编译器。期待ffmpeg尽快出cortex汇编优化版本,这样arm高档平台上的速度又会快几个数量级。


      由于ARM模拟器已经具备对arm11,甚至cortex指令的支持,所以这次的移植配置了最高级别的汇编优化,直接armv6t2,编译过程中出现了一些汇编指令无法识别的错误,原来是arm gcc的问题,不得不安装arm gcc 4.3.3版本。


      简单一点,具体的过程如下:


1. 在www.ffmpeg.org官方网站下载最新的release版本0.6


2. 在linux(或cygwin)下解压缩,进入ffmpeg目录,执行config配置


    ./configure --prefix=./_install/ --enable-shared --disable-static --enable-gpl --cross-prefix=/usr/bin/gcc-4.3.3-glibc-2.8-cs2009q1-203/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi- --enable-cross-compile --arch=arm --disable-stripping --target-os=linux


  具体的参数配置可以查看ffmpeg用户手册,这里特别注意的就是设置好gcc路径--cross-prefix


3. 执行make,   大约半杯茶时间,全部编译完成


4. 把生成的ffmpeg复制到ARM模拟器下,敲armulator.exe ffmpeg,提示缺少动态库,逐个copy过来,最后成功输出信息:


    $ ./armulator.exe ffmpeg
    FFmpeg version 0.6, Copyright (c) 2000-2010 the FFmpeg developers
    built on Aug 31 2010 15:44:28 with gcc 4.3.3
    configuration: --prefix=./_install/ --enable-shared --disable-static --enable-gpl --cross-prefix=/usr/bin/gcc-4.3.3-glibc-2.8-cs2009q1-203/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi- --enable-cross-compile --arch=arm --disable-stripping --target-os=linux
  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0.11. 0 /  0.11. 0
 Hyper fast Audio and Video encoder
 usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...


 Use -h to get full help or, even better, run 'man ffmpeg'
program exit with code 1
armulator v2.0, 12/18/2009
report bug to lixianzhong@ustc.edu


5.  第一步成功之后,再输入一组转码参数


  armulator.exe ffmpeg -i test.avi -y -b 20000 -s sqcif -r 10 -acodec aac -strict experimental -ab 23.85 -ac 1 -ar 16000 test.3gp


  运行结束后,就能生成转码成功后test.3gp文件。


6. 东找西借搞到一块arm11开发板,花个把钟头把环境配好(装u-boot, linux ..., 过程比较痛苦),再把ffmpeg及相关动态库安装上去,最后生成的test.3gp,完全和ARM模拟器相同。


上述信息仅供个人团体,及教育机构学习研究之用,移植方法谨供参考,ARM模拟器商业使用请联系作者。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lxzhg/archive/2010/09/01/5854954.aspx

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条