微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 消费类电子 > 基于ARM Linux QT掌上多媒体系统的设计和实现

基于ARM Linux QT掌上多媒体系统的设计和实现

时间:11-22 来源:武汉大学 刘立昶 点击:

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等视频格式。

2.4 影音录制

影音录制的系统框架见图2。通过扩展用于视频录制的Philips的视频解码芯片SAA7113和ADI的JPEG压缩芯片来实现。首先输入的模拟视频信号经过SAA7113转换为数字信号,然后传输给ADI的JPEG压缩芯片JPEG2000,压缩为JPEG图像信号,并通过扩展的总线接口传输到系统上。音频信号则直接通过音频输入接口送到音频解码芯片,并转化为数字信号进行编码。编写应用程序使传到的音视频数字信号一起转化为Motion JPEG编码的AVI格式的多媒体文件,并存入扩展的存储设备(微硬盘或者MMC/SD卡),这样就可以被Mplayer播放。

3 性能优化

尽管ARM9处理器主频可以高达200MHz以上,但是为了降低功耗,本系统在保证满足实时播放的前提下,对系统进行优化。所以,在一个资源受限的处理器上要实现多媒体文件的实时播放,性能优化成为关键。本系统主要通过解码程序优化,打开Cache等措施来提高系统性能。

3.1 对解码程序的优化

由于解码过程绝大部分是计算,以MP3音频文件为例,其解码过程主要是高精度乘法和矢量运算,其中80%的CPU时间用于数值计算,因此对于解码部分主要采用了以下方法进行优化:

(1)整数运算。在没有硬件浮点单元的CPU上,浮点运算是仿真方式,因此解码代码中应直接采用整数运算方式编码,而避免浮点运算;

(2)通过查表方式代替很多运算式获取计算结果,对调用频繁的小函数采用inline修饰;

(3)关键代码采用汇编语言编程,以获得更高效的目标代码,来提高系统的运行性能。

3.2 打开Cache

ARM9处理器带有独立的16 kB数据Cache和16 kB的指令Cache。本系统中,打开指令Cache肯定能在一定程度上提高性能。至于数据Cache,由于从SD卡或者U盘读进来解码的数据使用完毕后就再也不会使用了,解码产生的数据也是一样,使用一次就会被丢弃,因此数据访问的时间局限性基本是不存在的。但是,系统在访问数据时存在很强的"空间局限性",所以打开数据Cache后可以提高性能,因为:

(1)Cache和IDRAM之间通过Burst方式传递数据,提高了总线带宽,从而降低读数据的延迟。

(2)Cache一次读128bit或256bit,当读已在Cache中的数据时就会命中。

(3)通过WriteBuffer或WriteBack方式读内存时,没有写DRAM的延迟。

但是这样也会带来数据不一致的问题,主要是DMA造成数据的不一致,因为SD卡或USB的传输是通过DMA进行的,其传输过程无需CPU干预,DMA操作直接访问内存,但不会跟新Cache和写缓存相应的内容,这样就造成了数据的不一致,可用以下方法解决:

(1)将SD卡或USB和CPU共享的控制数据空间设置为uncachable,否则无法保证CPU读到的Cache中的数据是最新数据,从而可能造成系统运行错误。

(2)SD卡或USB输入模块通过DMA像主存传输文件数据时,写数据的缓冲区是由文件系统提供的。该缓冲区的特点是存储空间比较大而且是顺序访问的,可将其设置为cachable。

经过上述方法的优化以后,系统性能得到了大幅度的提高。经过测试表明,优化后解码所需的时间为优化前的15%左右,均小于正常播放所需的时间,完全满足实时播放的要求。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top