现在的位置: 首页 > 综合 > 正文

linux-2.6.22.6移植mplayer到FL2440-I

2013年10月02日 ⁄ 综合 ⁄ 共 4056字 ⁄ 字号 评论关闭

/*2010-12-30*/
/*linux-2.6.22.6移植mplayer到FL2440-I*/
/*主机系统:ubuntu 10.10 */
/*目标板:FL2440-I / linux-2.6.22.6 */
/*交叉编译器:arm-linux-gcc-3.4.1 */
/*软件资源:libmad-0.15.1b.tar.gz,MPlayer-1.0rc2.tar.bz2*/

 

http://www.mplayerhq.hu/MPlayer/releases/
http://cdnetworks-kr-1.dl.sourceforge.net/project/mad/libmad/0.15.1b/libmad-0.15.1b.tar.gz

 

1.将libmad-0.15.1b.tar.gz和MPlayer-1.0rc2.tar.bz2解压.

 

2.进入libmad-0.15.1b:
   (1)配置,生成Makefile:(--prefix=/usr/local/arm/3.4.1/lib为指定最终生成的库文件的安装路径,CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc为指定交叉编译工具路径)
sudo ./configure --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=/usr/local/arm/3.4.1/lib CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc

 

   (2)编译:
sudo make

 

   (3)安装:
sudo make install

 

3.进入MPlayer-1.0rc2:
   (1)配置,生成Makefile:(extraincdir=/usr/local/arm/3.4.1/lib/include和--with-extralibdir=/usr/local/arm/3.4.1/lib/lib指定了上一步安装库文件在路径)

sudo ./configure --cc=/usr/local/arm/3.4.1/bin/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 --host-cc=gcc --enable-ossaudio

 

   (2)编译:
sudo make

 

当前目录下会生成mplayer.

将其拷到开发板上,执行:
./mplayer xxx.avi 不能播放...
./mplayer -nosound xxx.avi 有画面,没声音...

 

网上找办法......

修改音频驱动源程序:
vi sound/oss/s3c2410-uda1341.c

(s3c2410-uda1341.c为移植UDA1341驱动到FL2440-I时添加的,UDA1341移植见这里:http://blog.csdn.net/ll_0520/archive/2010/12/31/6110836.aspx)

添加的位置具体见以下代码的粗体部分:
static int smdk2410_audio_open(struct inode *inode, struct file *file)
{
int cold = !audio_active;
DPRINTK("audio_openn");
if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
if (audio_rd_refcount || audio_wr_refcount)
return -EBUSY;
audio_rd_refcount++;
} else if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
if (audio_wr_refcount)
return -EBUSY;
audio_wr_refcount++;
} else if ((file->f_flags & O_ACCMODE) == O_RDWR) {
if (audio_rd_refcount || audio_wr_refcount)
return -EBUSY;
audio_rd_refcount++;
audio_wr_refcount++;
} else
return -EINVAL;
if (cold) {
audio_rate = AUDIO_RATE_DEFAULT;
audio_channels = AUDIO_CHANNELS_DEFAULT;
audio_fragsize = AUDIO_FRAGSIZE_DEFAULT;
audio_nbfrags = AUDIO_NBFRAGS_DEFAULT;
if ((file->f_mode & FMODE_WRITE)){
init_s3c2410_iis_bus_tx();
audio_clear_buf(&output_stream);
// 加上以下这2行代码
if (!output_stream .buffers && audio_setup_buf(&output_stream))

return -ENOMEM;
}
if ((file->f_mode & FMODE_READ)){
init_s3c2410_iis_bus_rx();
audio_clear_buf(&input_stream);
}
}
return 0;
}
改完驱动后,重新编译内核。

 

按以上的方法做了,但是还是出现同样的提示,仔细的看了驱动,在驱动上加了

大量的调试信息最后发现在smdk2410_audio_ioctl 中调用的一个函数老是返回错

误,这个函数是access_ok(VERIFY_WRITE, inf, sizeof(*inf)),查了这个函数

的代码发现返回1的时候是表示可以访问,而不是错误,所以导致下面代码老是出

错,其实运行都是对的:
int err = access_ok(VERIFY_WRITE, inf, sizeof(*inf));
if (err)
return err;
于是改成int err = !access_ok(VERIFY_WRITE, inf, sizeof(*inf));

 

./mplayer -ac mad xxx.avi
./mplayer -ac mad xxx.mp3

 

泪奔啊......吗的终于有声了>_<

MPlayer 1.0rc2-3.4.1 (C) 2000-2007 MPlayer Team
CPU: ARM
用法:   mplayer [选项] [URL|路径/]文件名
 
基本选项: (完整列表参见手册页)
 -vo <drv>        选择视频输出驱动 (查看驱动列表用“-vo help”)
 -ao <drv>        选择音频输出驱动 (查看驱动列表用“-ao help”)
 vcd://<trackno>  播放 (S)VCD 轨迹号 (原始设备, 无需安挂)
 dvd://<titleno>  从设备而不是普通文件上播放 DVD 标题号
 -alang/-slang    选择 DVD 音轨/字幕的语言(使用两字符的国家代号)
 -ss <position>   寻找到给定(多少秒或时分秒 hh:mm:ss 的)位置
 -nosound         不播放声音
 -fs              全屏播放 (或者用 -vm, -zoom, 详见于手册页)
 -x <x> -y <y>    设置显示的分辨率(提供给 -vm 或者 -zoom 使用)
 -sub <file>      指定字幕文件 (参见 -subfps, -subdelay)
 -playlist <file> 指定播放列表文件
 -vid x -aid y    选择用于播放的 x 视频流和 y 音频流通道号
 -fps x -srate y  改变视频率为 x 帧秒(fps)和音频率为 y 赫兹(Hz)
 -pp <quality>    使用后期处理过滤器/滤镜 (详见于手册页)
 -framedrop       使用丢帧(用于慢机器)

基本控制键: (完整的列表参见于手册页, 同时也请核查 input.conf)
 <-  or  ->       后退/快进 10 秒
 down or up       后退/快进 1 分钟
 pgdown or pgup   后退/快进 10 分钟
 < or >           跳到播放列表中的前一个/后一个
 p or SPACE       暂停播放(按任意键继续)
 q or ESC         停止播放并退出程序
 + or -           调整音频延迟增加/减少 0.1 秒
 o                循环 OSD 模式:  无/搜索条/搜索条加计时器
 * or /           增加或减少 PCM 音量
 x or z           调整字幕延迟增加/减少 0.1 秒
 r or t           上/下调整字幕位置, 参见“-vf expand”

 

参考链接:

http://blog.chinaunix.net/u3/108761/showart_2144607.html
http://hi.baidu.com/vilont/blog/item/614c6b0af690fb1a94ca6b39.html/cmtid/2882ad3d57c2f6e33d6d97b8
http://www.cnitblog.com/puppypyb/archive/2008/10/10/48875.html

 

抱歉!评论已关闭.