zoukankan      html  css  js  c++  java
  • MPlayer在ARM上的移植(S5PV210开发板)

     MPlayer 1.0已经把大部分解码库都自带了,如ffmpeg,但是自带的音频库在S5PV210下效果非常不好.换成使用libmad效果不错.因此MPlayer 在ARM-Linux的最简单的移植只需要移植这两个即可.移植后即进行字符界面的播放.
          移植之前先做好移植前准备,安装好arm-linux交叉编译器,并下载 MPlayer-1.0rc2.tar.bz2 和libmad包(libmad-0.15.1b.tar.gz)

    1.安装libmad
    (1)解压libmad
    解压libmad包(libmad-0.15.1b.tar.gz);
    $  tar   zxvf   libmad-0.15.1b.tar.gz  -C   libmad

    (2)进入libmad的目录,输入配置命令:
    $  cd libmad
    $  ./configure --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=/home/bamboo/testcode/libmad/lib CC=/opt/caozhudong/bin/armv4tl-caozhudong-linux-gnueabi-gcc(要保证arm-linux-gcc的路径已经有 export过,否则给出完整路径。)

    (3)交叉编译libmad(运行)
    $  make
    $  make install
    这样就可以看到 /usr/local/arm/3.3.2/lib 目录下多了include和lib目录,这些就是libmad相关的库。


    2.安装MPlayer
    (1)解压 MPlayer
    解压 MPlayer包( MPlayer-1.0rc2.tar.bz2)
    $  tar   jxvf    MPlayer-1.0rc2.tar.bz2   -C   mplayer

    (2)进入mplayer的目录,输入配置命令:
    $  cd  mplayer
     ./configure关键就是后面的配置参数了。rc2版本的配置参数相比pre版本而言有些微的改变,配置参数如下:
    $  ./configure --cc=/opt/caozhudong/bin/armv4tl-caozhudong-linux-gnueabi-gcc --host-cc=gcc --target=arm-linux --enable-static --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=/home/bamboo/testcode/libmad/lib/include  --with-extralibdir=/home/bamboo/testcode/libmad/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后需要指定(此路径就是第一步交叉编译libmad时生成的include和lib目录,很关键,第一次交叉编译时就是这里没有指定,出现错误的)。
      注:在pre版本中需要指定--host-cc=gcc配置参数。用来编译一些需要在host上执行的中间文件的,如codec-cfg,切记不能缺少。但在rc2版本中该参数可以省略掉。

    (3).交叉编译MPlayer(运行)
    ./configure 之后就开始make了。
    $  make
    编译过程中会出现很多错误,以下是我编译时出现的错误及其解决方法
    错误(1)
    ./codec-cfg ./etc/codecs.conf > codecs.conf.h
    ./codec-cfg: 1: Syntax error: word unexpected (expecting ")")
    解决方法:在configure时添加 --host-cc=gcc就可以解决

    错误(2)
    make[1]: *** [armv4l/dsputil_arm_s.o] Error 1
    make[1]: Leaving directory `/root/MPlayer-1.0rc2/libavcodec'
    make: *** [libavcodec/libavcodec.a] 错误 2
    错误原因是pld指令只在armv5te以上版本有效,在2440(armv4l)无效
    预读取PLD指令
    功能:cache预读取(PLD,PreLoad),使用PLD指示存储系统从后面几条指令所指定的存储器地址读取,存储系统可使用这种方法加速以后的存 储器访问。
    解决方法:修改MPlayer-1.0rc2/libmpeg2/motion_comp_arm_s.S和MPlayer-1.0rc2 /libavcodec/armv4l/dsputil_arm_s.S这两个报错文件,在前面添加上:
    #ifndef HAVE_PLD
    .macro pld reg
    .endm
    #endif
    然后再make

    (4)交叉编译生成可执行程序mplayer,用NFS文件系统挂载启动开发板,MPlayer支持播放视频文件MP4,avi,ASF,我自己板子的LCD屏是320×240,所以用视频转换器转换一下视频的分辨率。
    开始运行mplayer。
     $  ./mplayer test.avi -framedrop -quiet -vf rotate=1,scale=320:240

  • 相关阅读:
    401. Binary Watch
    46. Permutations
    61. Rotate List
    142. Linked List Cycle II
    86. Partition List
    234. Palindrome Linked List
    19. Remove Nth Node From End of List
    141. Linked List Cycle
    524. Longest Word in Dictionary through Deleting
    android ListView详解
  • 原文地址:https://www.cnblogs.com/sankye/p/4648192.html
Copyright © 2011-2022 走看看