移植Mplayer到s3c2410上

     今晚碰到一师弟问mplayer移植的问题···时间过得真快~这样就一年过去了,去年我还才刚接触arm开发··还是最基本的博创的2410···上个笔记,当时在2410上移植mplayer的心得。

 

---------

 

Mplayer版本:MPlayer-1.0rc2

交叉编译器:Arm-linux-gcc 3.4.1

Libmad库:libmad-0.15.1b.tar.gz

 

1.       在终端中输入“arm-linux-“ 看是否能够自动适配出arm-linux-gcc, 然后输入-v 查看交叉编译器版本是否为3.4.1 否则返回上面第一步。

 

2.       交叉编译libmad
解压libmad-0.15.1b.tar.gz打开终端,进入该目录,输入配置命令:

   ./configure --enable-fpm=arm --host=arm-linux --disable-shared --disable-debugging --prefix=/usr/local/arm/3.4.1/lib CC="arm-linux-gcc"

然后make, make install;

之后可在/usr/local/arm/3.4.1/lib 目录下找到生成的includelib目录,这些就是libmad相关的库

 

3.     交叉编译Mplayer1.0rc2

MPlayer-1.0rc2.tar.bz2解压至/usr/src/目录下,将目录下的libdvdcss/ioctl.c文件中的所有#error "DVD ioctls are unavailable on this system"注释掉,否则后面的编译会出错。

进入解压后的目录,在终端中输入以下命令:


4.  ./configure --target=arm-linux --cc=arm-linux-gcc --enable-fbdev --disable-win32dll --disable-dvdread --disable-network --enable-menu --disable-ftp --disable-alsa --enable-ossaudio --disable-tv --disable-x11 --enable-cross-compile --target=arm-linux --host-cc=gcc --disable-armv5te --disable-armv6 --language=en --enable-debug --disable-mp3lib --enable-libavcodec_a --enable-fbdev --disable-mencoder --enable-mad --with-extraincdir=/usr/local/arm/3.4.1/arm-linux/sys-include/:/usr/local/arm/3.4.1/lib/include --with-extralibdir=/usr/local/arm/3.4.1/arm-linux/lib:/usr/local/arm/3.4.1/lib/lib  --enable-libavcodec_mpegaudio_hp --enable-static --disable-live


5.  make


6.  重新编译s3c2410的2.4.18的内核(2410用2.4内核的话必须重新编译,否则卡死,因为音频驱动的原因)。


修改音频驱动源码(linux-2.4.18-2410cl/drivers/sound/ s3c2410-uda1341.c),在smdk2410_audio_open函数中添加一下两行代码:

   if (!output_stream .buffers && audio_setup_buf(&output_stream))

                   return -ENOMEM;

添加的位置具体见以下代码注释的那个if语句:

static int smdk2410_audio_open(struct inode *inode, struct file *file) { int cold = !audio_active; DPRINTK("audio_open//n"); 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); // 加上以下这行代码 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); } } MOD_INC_USE_COUNT; return 0; } 


改完驱动后,重新编译内核。

修改arm板上的mplayer配置文件,打开/root/.mplayer/下的配置文件config,在里面添加一行ao=mad  

这是用于指定音频输出采用libmad解码`    

 

你可能感兴趣的:(c,Stream,struct,audio,编译器,output)