• 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

  • 相关阅读:
    macOS 升级后重装命令行工具的问题
    Windows系统制作Ubuntu启动U盘(命令行)
    远程管理相关命令的学习(域名和端口号的概念)
    远程管理相关命令的学习(ssh工作方式的简介)
    远程管理相关命令的学习(网卡和IP地址)
    远程管理相关命令的学习(shutdown)
    其他命令的使用(echo find 硬软链接)
    文件内容相关命令(cat more grep)
    拷贝和移动文件(tree cp mv命令的使用)
    touch mkdir rm命令的使用
  • 原文地址:https://www.cnblogs.com/sankye/p/4648192.html
Copyright © 2020-2023  润新知