mplayer在s3c2440上的编译移植


转自:http://www.cnitblog.com/puppypyb/archive/2008/09/09/48875.html#FeedBack



        一个项目要求上音频、视频播放。项目环境为linux2.6 + s3c2440,google了一下,应该是mplayer无疑了。
        网上很多好人把mplayer的移植过程分享出来了,比较详细。自己交叉编译的过程中遇到的问题基本上都能搜索到解决办法。
        先到官方网站http://www.mplayerhq.hu下载一个最新的1.0-rc2版本,解压后就按照按照步骤来交叉编译了。
        MPlayer-1.0rc2.tar.bz2  + arm-linux-gcc-3.4.1.tar.bz2(就是网上流传的那个版本)

        1。./configure
         关键就是后面的配置参数了。rc2版本的配置参数相比pre版本而言有些微的改变,配置参数如下:

./configure --cc=arm-linux-gcc --target=arm-linux --enable-static \
     --prefix=/tmp/mplayer-rc2 --disable-win32dll --disable-dvdread \
     --enable-fbdev --disable-mencoder --disable-live --disable-mp3lib \
     --enable-mad --enable-libavcodec_a --language=zh_CN \
     --disable-armv5te --disable-armv6 \
     --with-extraincdir=/usr/local/arm/3.4.1/lib/include \
     --with-extralibdir=/usr/local/arm/3.4.1/lib/lib

         参数解释:
         --cc
         交叉编译工具,如果没添加到环境变量,就要指定完整路径

         --target
         在pre版本中,对于--target和这个配置参数是这样描述的:
===============================================
--target=arm-armv4l-linux这个参数要注意的是一个分三部分,第一部分的arm是指arch,这里设定为arm;第二部分的armv4l是指具体的版本,这个要注意了,一定要跟libavcodec目录下的平台目录名一致,否则为这个平台的优化代码没办法编译进去(据我观察是这样的);第三部分是系统平台。
===============================================
         但是在rc2版本中,只需要--target=arm-linux这样指定就好了。

         --enable-static
         是设定静态连接,不需要一堆乱七八糟的动态库,尤其对我们这些新手来说省了很多的麻烦。如果设置了这个参数就不用设置--prefix了,另外也不用执行make install。

         --prefix=/tmp/mplayer-rc2
         make install后,可执行程序就安装在/tmp/mplayer-rc2目录下。

         --disable-win32dll
         禁用win32动态链接库支持。在pre版本中该参数为

        --disable-dvdread
        禁用libdvdread.

        --enable-fbdev
       支持fbdev,这个一定要选上。

        --disable-mp3lib 和 --enable-mad
        arm系列的cpu,一般都没浮点运算单元,而mplayer的mp3解码默认使用mp3lib,这个是浮点运算库,在arm上肯定跑不了,使用ffmp3或者libmad(需要外部库libmad支持)应该就没问题了。所以这里需要禁止掉mencoder和使能libmad。

        --disable-mencoder
        禁止编码功能。项目上不需要此功能,禁掉以缩小尺寸。而且听说在这里编译mencoder会有问题,听说而已,没试过。

        --disable-live
        禁止live 555流媒体。(不知道干啥用)

        --enable-libavcodec_a

        启用静态的libavcodec解码。在pre版本中该参数为--enable-libavcodec。

        --disable-armv5te --disable-armv6
        禁用armv5te、armv6指令扩展。

        --with-extraincdir和-with-extralibdir
        指定libmad和mad.h的路径。mad的路径被添加到编译参数-I和-L后面,替换libmad后需要指定。

        注:在pre版本中需要指定--host-cc=gcc配置参数。用来编译一些需要在host上执行的中间文件的,如codec-cfg,切记不能缺少。但在rc2版本中该参数可以省略掉。

        2。make
       ./configure 之后就开始make了。
       编译过程应该是很顺利的。宿主环境是Fedora 8,GCC版本为4.1.2。在FC8上编译pre版本会通不过gcc编译器检测,pre版本不支持4.x以上的版本。或许可以加上--disable-gcc-check禁用gcc版本检测,不过我没有试过,有闲的可以试一试。
       另外在redhat9宿主环境下也编译过rc2版本。不过make的时候好像弹出了个dvdcss的什么错误,在配置选项中--disable-libdvdcss-internal禁掉dvdcss就好了。
       因为需要mad库播放音频,所以还需要交叉编译libmad。
       libmad的版本为 libmad-0.15.1b.tar.bz2
       libmad也是configure make之类的步骤。configure的配置参数为:
       ./configure --enable-fpm=arm --host=arm-linux --disable-shared \
                        --disable-debugging --prefix=/usr/local/arm/3.4.1/lib \
                        CC=arm-linux-gcc
        
       之后make,就很顺利的编译出libmad了。注意--prefix配置选项表示libmad库和头文件在哪个目录生成,比如本例中make install后在/usr/local/arm/3.4.1/lib目录下就多了include和lib两个目录。这与mplayer的配置选项--with-extraincdir指定的目录是相符的。

       编译完成后就生成了mplayer,最开始下载到板子上运行的时候却崩溃了,打出错误信息:
       "MPlayer interrupted by signal 4 in module: decode_video"
       google了一下,发现是用了不支持的armv5、armv6的优化指令,s3c2440是armv4,运行到不认识的armv5、armv6的指令就崩溃了。加上禁用armv5、armv6的指令扩展配置选项--disable-armv5te --disable-armv6,再重新来一次,下载运行mplayer,就OK了。其实这些高版本的指令扩展应当是自动检测的,不知道为什么没有生效。需要手动的禁止掉。

 

       3。运行mplayer
       手上板子的LCD屏很怪,是240×320的,而不是常见的320×240。这样,用命令播放:

       mplayer test.avi

       开始播放avi的时候画面就被截短了,并打印出错信息:
     “Could not find matching colorspace - restrying with -vf scale...”。

       于是加上参数:

       mplayer test.avi -framedrop -quiet -vf rotate -flip -x 240 -y 320 

       画面是对了,但是速度非常慢,就像我们平时用“1/2倍速”来播放影片一样。CPU占有率90%以上。

       再瞎试,看到一组参数,试一下:

       mplayer test.avi -framedrop -quiet -vf rotate=1,scale=240:320 

       播放就比较流畅了。但是CPU占有率还是90%以上。test.avi是Xvid格式的MP4,505kbps。

       如果视频源文件的分辨率比240×320大,最好用工具转换一下,否则播放的速度会非常慢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值