基于ARM Linux QT的掌上多媒体系统的设计和实现
if(!output_stream.bufferaudio_setup_buf(&out stream))
return-ENOMEM;
在Write方法中首先判断设备文件打开的方式,具有write特性打开的设备才可以写入,然后判断是否没有建立DMA缓冲区,若没有,则通过audio_setup_buf()来创建,定义一个结构体(audio_stream_t)的指针如下:
2.3 Gu l程序的设计与播放器的实现
2.3.1 GUI程序的设计和实现
播放器的图形界面在Qtopia视窗环境下运行,采用Qt/Embedded2.3.7作为底层图形库,用于生成用户界面。QT是一个跨平台的c++图形用户界面库,Qt/Embedded是面向嵌入式系统的版本,其最大的特点就是使信号和槽用于对象间的通信,Qt的窗口部件有多个预定义的信号,槽是一个可以被调用处理特定信号的函数。Qt的窗口部件有多个预定义的槽,当一个特定事件发生的时候,一个信号被发射,对应感兴趣的槽就会调用对应的相应函数。播放器界面主要包括主界面窗口、文件操作窗口、播放列表窗口。主界面窗口有一个显示屏和一些控制按钮,包括播放、暂停、快进、快退、下一首、上一首、音量调整以及播放进度条和播放时间显示。文件操作窗口可以使用户选择要播放的文件。播放列表用来播放最近播放的五个多媒体文件。
2.3.2 播放器的实现
Linux下的播放器Mplayer是Linux上最优秀的多媒体播放器,它能够使用众多的编解码器,支持多种输出设备。可以播放市面上几乎所有的音视频格式。本系统选择其作为播放器,对其进行优化和移植。进行的优化主要有:
(1)Mplayer在系统上运行的时候颜色会有偏差,因此编程校正Mplayer的色彩;
(2)Mplayer正常模式不能在FramBuffer的中间显示,带-fs的全屏参数播放后,只能将播放位置移到中间,并不放大,修改播放显示位置,让它和Nplayer图形界面的调用相符合;
(3)编程实现播放时对键盘事件正常化;
(4)Mplayer采用的自带的mp3lib浮点音频解码库的解码效率很低,在播放音频时会很卡,通过采用使用定点运算的libmad音频解码库替代原来的mp3lib库进行音频解码;
(5)使用Mplayer的-input选项,通过FIFO从GUI向后端程序传递控制信息。通过优化后,对Mplayer交叉编译,移植到系统上可以流畅地播放mp3等音频文件以及mpeg-1、mpeg-2、avi等视频格式。
评论