MPlayer
1.0已经把大部分解码库都自带了,如ffmpeg,但是自带的音频库在S32440下效果非常不好.换成使用libmad效果不错.因此MPlayer
在ARM-Linux的最简单的移植只需要移植这两个即可.移植后即进行字符界面的播放. 但完整版本需要如下库.
如果需要字幕支持.需要移植freetype库.支持JPG皮肤需要
libjpeg库,打开DVD光盘格式,需要dvdread,dvdnav等,支持pnm库需要libpnm MPlayer的皮肤主要采用X11支持.
但移植X11需要大量工作.这一部分程序由我的学生童军实现,已经在S3C2440开发板上看皮肤的效果.MPlayer也支持SDL,但是实测好象其实
现并不支持皮肤显示.一般将其关掉.ARM版同样可以加入live555支持,支持远程的RTSP的流媒体播放器,方法同X86版类似. MPlayer的简单移植 按照移植规范,libmad在libs目录下,MPlayer本身在项目目录下. libmad的移植CC=arm-linux-gcc ./configure --prefix=$PWD/../../output/arm_linux
--enable-fpm=arm --host=arm-linux --disable-debugging --enable-shared
--enable-static 修改Makefile 去掉129行
-fforce-mem标志,因为arm-eabi编译器都不支持这个选项,否则将会报错 cc1:
error: unrecognized command line option "-fforce-mem" make[2]: *** [version.lo] Error 1 make[2]: Leaving directory `/arm/madplay/libs/libmad-0.15.1b'' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/arm/madplay/libs/libmad-0.15.1b'' make: *** [all] Error 2 makemake install MPlayer 的移植0.下载MPlayer v1.0rc2 http://www1./MPlayer/releases/MPlayer-1.0rc2.tar.bz2 编译环境: 在arm-linux-gcc 3.3.2 +ARM-Linux 2.6.13. arm-linux-gcc 4.3.2 + ARM-Linux 2.6.29 arm-linux-gcc 4.3.3 + ARM-Linux 2.6.30 均测试通过. 1.生成Makefile ./configure --prefix=$PWD/../output/arm_linux --cc=arm-linux-gcc --ar=arm-linux-ar \ --ranlib=arm-linux-ranlib --disable-gui \ --target=arm-armv4-linux --host-cc=gcc --disable-freetype\ --enable-fbdev --disable-mencoder --disable-sdl --disable-live --disable-dvdread \ --disable-libdvdcss-internal --disable-x11 --enable-cross-compile --disable-mp3lib \ --enable-mad --with-extraincdir="$PWD/../output/arm_linux/include " --with-extralibdir="$PWD/../output/arm_linux/lib " \ --disable-dvdnav --disable-dvdread-internal --disable-jpeg --disable-tga \ --disable-dvbhead --disable-pnm --disable-tv --disable-ivtv \ --disable-fontconfig --disable-xanim --disable-win32dll --disable-armv5te --disable-armv6 移植注意.
2.编译: 如果有编译错误,修改源码
否则会产生如下编译错误,intptr_t在标准C中有定义,但在这里死活找不到,因此直接定义:
arm-linux-gcc -I../libswscale -I../libavcodec
-DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-D_ISOC9X_SOURCE -I.. -I.. -I../libavutil -Wdisabled-optimization
-Wno-pointer-sign -Wdeclaration-after-statement -I. -I.. -I../libavutil
-Wall -Wno-switch -Wpointer-arith -Wredundant-decls -O4 -pipe
-ffast-math -fomit-frame-pointer -D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DHAVE_CONFIG_H
-I/usr/X11R6/include -c -o cyuv.o cyuv.c
修改源码 libavcodec\armv4l\dsputil_arm_s.S, libmpeg2\motion_comp_arm_s.S
pld指令只在armv5te以上版本有效,在2440(armv4l)无效.必须取消掉,这个指令的格式是 预读取PLD指令 格式: 如果不取消,将会产生如下错误
arm-linux-gcc -I../libswscale -I../libavcodec
-DHAVE_AV_CONFIG_H
-D_FILE_OFFSET _BITS=64
-D_LARGEFILE_SOURCE -D_ISOC9X_SOURCE -I.. -I.. -I../libavutil
-Wdisable d-optimization
-Wno-pointer-sign -Wdeclaration-after-statement -I. -I..
-I../lib avutil -Wall
-Wno-switch -Wpointer-arith -Wredundant-decls -O4 -pipe
-ffast-ma th
-fomit-frame-pointer -D_REENTRANT -DHAVE_CONFIG_H
-I/home/workspace/MPlayer/M
Player-1.0rc2/../output/linux_arm/include -I/usr/X11R6/include -c -o
armv4l/dsp util_arm_s.o
armv4l/dsputil_arm_s.S make 修改make install的bug 执行make install时会提示 install -m 755 -s mplayer /home/hxy/MPlayer/ 查资料看install带-s 参数时会自动调用strip来strip应用程序。但是arm编译时要调用arm-linux-strip才有正确处理。解决办法是取消-s参数,查看Makefile可以发现-s是如下 $(INSTALL) -m 755 $(INSTALLSTRIP) mplayer$(EXESUF) $(BINDIR) 的INSTALLSTRIP设置的,它默认是-s,因此只要简单在Makefile的前面(95行)加入 INSTALLSTRIP := #将其置为空即可惟 4.执行: export LD_LIBRARY_PATH=${LIB};./mplayer -ac mad demo.mpg 其中$LIB是保存有Mplayer所需的库的路径 -ac mad 是必须,表示强制用libmad解码. 这是我的成功执行一段脚本: export APP_ROOT=/mnt/nfs/MPlayer/output/arm_linux 测试mpg,avi,mp3,mp4均可播放,默认是按视频的原始分辨率播放的。如果想让MPlayer完整在LCD上显示,可以用video filter 参数 scale来设置 ./mplayer -vf scale=240:320 另外有人测试发现在有一些开发板下.Mplayer播放后,输出会干扰后续shell的执行行.用下面比较长的参数一般没事 export APP_ROOT=/mnt/nfs/MPlayer/output/arm_linux 如果搞不清自己分辩率的,可在MPlayer用 -fullscreen参数 .或者执行busybox shell命令fbset查看自n己板的分辩率 |
|