基于A(yíng)RM Linux QT的掌上多媒體系統的設計和實(shí)現
if(!output_stream.bufferaudio_setup_buf(&out stream))
return-ENOMEM;
在Write方法中首先判斷設備文件打開(kāi)的方式,具有write特性打開(kāi)的設備才可以寫(xiě)入,然后判斷是否沒(méi)有建立DMA緩沖區,若沒(méi)有,則通過(guò)audio_setup_buf()來(lái)創(chuàng )建,定義一個(gè)結構體(audio_stream_t)的指針如下:
2.3 Gu l程序的設計與播放器的實(shí)現
2.3.1 GUI程序的設計和實(shí)現
播放器的圖形界面在Qtopia視窗環(huán)境下運行,采用Qt/Embedded2.3.7作為底層圖形庫,用于生成用戶(hù)界面。QT是一個(gè)跨平臺的c++圖形用戶(hù)界面庫,Qt/Embedded是面向嵌入式系統的版本,其最大的特點(diǎn)就是使信號和槽用于對象間的通信,Qt的窗口部件有多個(gè)預定義的信號,槽是一個(gè)可以被調用處理特定信號的函數。Qt的窗口部件有多個(gè)預定義的槽,當一個(gè)特定事件發(fā)生的時(shí)候,一個(gè)信號被發(fā)射,對應感興趣的槽就會(huì )調用對應的相應函數。播放器界面主要包括主界面窗口、文件操作窗口、播放列表窗口。主界面窗口有一個(gè)顯示屏和一些控制按鈕,包括播放、暫停、快進(jìn)、快退、下一首、上一首、音量調整以及播放進(jìn)度條和播放時(shí)間顯示。文件操作窗口可以使用戶(hù)選擇要播放的文件。播放列表用來(lái)播放最近播放的五個(gè)多媒體文件。
2.3.2 播放器的實(shí)現
Linux下的播放器Mplayer是Linux上最優(yōu)秀的多媒體播放器,它能夠使用眾多的編解碼器,支持多種輸出設備??梢圆シ攀忻嫔蠋缀跛械囊粢曨l格式。本系統選擇其作為播放器,對其進(jìn)行優(yōu)化和移植。進(jìn)行的優(yōu)化主要有:
(1)Mplayer在系統上運行的時(shí)候顏色會(huì )有偏差,因此編程校正Mplayer的色彩;
(2)Mplayer正常模式不能在FramBuffer的中間顯示,帶-fs的全屏參數播放后,只能將播放位置移到中間,并不放大,修改播放顯示位置,讓它和Nplayer圖形界面的調用相符合;
(3)編程實(shí)現播放時(shí)對鍵盤(pán)事件正?;?;
(4)Mplayer采用的自帶的mp3lib浮點(diǎn)音頻解碼庫的解碼效率很低,在播放音頻時(shí)會(huì )很卡,通過(guò)采用使用定點(diǎn)運算的libmad音頻解碼庫替代原來(lái)的mp3lib庫進(jìn)行音頻解碼;
(5)使用Mplayer的-input選項,通過(guò)FIFO從GUI向后端程序傳遞控制信息。通過(guò)優(yōu)化后,對Mplayer交叉編譯,移植到系統上可以流暢地播放mp3等音頻文件以及mpeg-1、mpeg-2、avi等視頻格式。
評論