移植mplayer通过,散分
今天终于将mplayer移植到了ARM-LINUX上,散分庆祝!!!!现将移植步骤说一下:
1.在mplayer官方网站下载最新版源码
2.编写脚本文件build.sh,文件内容如下:
./configure --cc=arm-linux-gcc \
--host-cc=gcc \
--enable-cross-compile \
--target=arm-armv4l-linux \
--enable-linux-devfs \
--disable-win32 \
--disable-dvdread \
--enable-fbdev \
--disable-mencoder \
--enable-libavcodec \
--enable-liba52 \
--disable-libmpeg2 \
--disable-mp3lib \
--enable-static \
--disable-live
3.为该文件加上可执行权限: chmod +x build.sh
4.执行此脚本文件: ./build.sh
5.如果你的板子上没有RTC驱动,就修改顶层目录下的config.h文件,将文件中的#define HAVE_RTC 1这一行给注释掉
6.如果你不想修改你的音频驱动(之所以要修改音频驱动,网上有相关介绍,主要原因是代码中与驱动的结合不太好,代码中出现了一个整数除以0的情况导致程序异常),就按照以下的方法修改libao2/ao_oss.c文件:
第一步:找到static int play(void* data,int len,int flags)函数,在第一行加入ao_data.outburst = 8192;
第二步:找到static float get_delay(void)函数,注释掉里面所有内容,最后加入:return 0.8;
第三步:找到static int init(int rate,int channels,int format,int flags)函数中的如下代码,并注释掉:
if(ioctl(audio_fd, SNDCTL_DSP_GETOSPACE, &zz)==-1){
int r=0;
mp_msg(MSGT_AO,MSGL_WARN,MSGTR_AO_OSS_CantUseGetospace);
if(ioctl(audio_fd, SNDCTL_DSP_GETBLKSIZE, &r)==-1){
mp_msg(MSGT_AO,MSGL_V,"audio_setup: %d bytes/frag (config.h)\n",ao_data.outburst);
} else {
ao_data.outburst=r;
mp_msg(MSGT_AO,MSGL_V,"audio_setup: %d bytes/frag (GETBLKSIZE)\n",ao_data.outburst);
}
} else {
mp_msg(MSGT_AO,MSGL_V,"audio_setup: frags: %3d/%d (%d bytes/frag) free: %6d\n",
zz.fragments, zz.fragstotal, zz.fragsize, zz.bytes);
if(ao_data.buffersize==-1) ao_data.buffersize=zz.bytes;
ao_data.outburst=zz.fragsize;
}
在之后加入以下两行:
ao_data.outburst=8192;
ao_data.buffersize=32768;
到此大功告成,在命令行下输入make,最终将会在当前目录下生成mplayer文件,大概有十来M,下载到板子上就可以播放音频或者视频文件了.注意:如果你没有使用RTC,就需要用软件同步的方法,也就是在播放同时有音频与视频的文件时,需要加上参数
-softsleep