基于A(yíng)RM Linux QT的掌上多媒體系統的設計和實(shí)現

發(fā)布時(shí)間:2010-3-22 16:37    發(fā)布者:李寬
關(guān)鍵詞: arm , linux , 多媒體系統 , 設計 , 掌上
0 引言

隨著(zhù)人們生活水平的提高,消費結構發(fā)生了巨大變化,消費者用于娛樂(lè )方面的支出在總支出中所占的比例正在不斷擴大。掌上多媒體系統可以滿(mǎn)足人們對于試聽(tīng)以及便攜的需求,另外還可以實(shí)現一些其他功能,如圖片瀏覽、網(wǎng)絡(luò )下載、以及影音錄制等。目前市場(chǎng)上的掌上多媒體系統多是Windows CE、Symbian、Palm OS等商用操作系統,其開(kāi)放的程序不夠高,而且價(jià)格偏高,不適于第三方應用軟件的移植。ARM體系作為專(zhuān)用嵌入式系統設計的通用處理器內核,具備高性能、低功耗、易擴展的特點(diǎn)。本系統基于A(yíng)RM9、嵌入式Linux操作系統設計并實(shí)現了一個(gè)更為開(kāi)放的嵌入式平臺,來(lái)實(shí)現掌上多媒體系統的諸多功能。

1 多功能掌上媒體播放器系統的硬件設計

多功能掌上媒體播放器系統的硬件設計如圖1所示。LCD采用的是Sharp的TFT屏,3.52in,分辨率240×320;音頻控制器是IIS接口的音頻控制器,解碼芯片是UDA1314TS;另外擴展了用于視頻錄制的Philips的視頻解碼芯片SAA7113和ADI的JPEG壓縮芯片。視頻錄制的框圖如圖2所示。

2 多功能掌上媒體播放器系統的軟件設計

系統設計和軟件設計是本系統的難點(diǎn)。系統軟件設計的總體框架如圖3所示。

2.1 嵌入式Linux操作系統

Linux最初由Linux Torvalds編寫(xiě),后來(lái)在網(wǎng)絡(luò )上被眾多的Linux愛(ài)好者加以修改和維護,具有內核高效穩定、開(kāi)源、可移植性強、內核可定制可裁剪、多線(xiàn)程多任務(wù)等特點(diǎn),因此選擇其作為本媒體播放器系統的操作系統。

首先定制裁剪并移植了Linux2.6的內核,然后為使各硬件能正常工作編寫(xiě)了鍵盤(pán)驅動(dòng)、LCD驅動(dòng)、觸摸屏驅動(dòng)、音頻驅動(dòng)、USB驅動(dòng)等驅動(dòng)。多功能掌上多媒體系統的正常工作首先是進(jìn)入ARM-Linux操作系統,然后加載各個(gè)硬件的驅動(dòng)程序并初始化各外圍設備,接著(zhù)就進(jìn)入基于QT/Embedded庫的Qtopia桌面系統編寫(xiě)的GUI圖形界面程序的播放器,最后選擇要進(jìn)行的操作。

對于Linux內核的移植首先要移植bootloader,系統采用的是VIVI,其功能包括:分區管理、參數管理、啟動(dòng)Linux操作系統、文件系統管理、支持網(wǎng)絡(luò )、通過(guò)串口下載程序到Flash或者RAM等。建立嵌入式開(kāi)發(fā)環(huán)境,使得能夠交叉編譯源代碼,對VIVI的源代碼進(jìn)行交叉編譯,生成能在 ARM Linux上運行的bin文件,通過(guò)開(kāi)發(fā)板的JTAG口將其燒寫(xiě)到開(kāi)發(fā)板的Flash中。

對內核的移植首先要對內核進(jìn)行修改MAKEFILE文件指定編譯器以及目標平臺,然后配置內核,交叉編譯生成內核鏡像,通過(guò)UART口(串口)下載到開(kāi)發(fā)板上。移植相應的文件系統。文件系統中的文件是數據的集合,不僅包含著(zhù)文件中的數據,而且還有文件系統的結構,所有Linux用戶(hù)和程序看到的文件、目錄、軟連接及文件保護信息等都存儲在其中。在設計過(guò)程中把文件系統設置為可讀寫(xiě),這樣操作性強一些,在投入到生產(chǎn)中的時(shí)候應該把文件系統設置為只讀的,這樣整個(gè)掌上多功能媒體播放器的操作系統就加載好了。

2.2 驅動(dòng)程序的設計

本系統共涉及到鍵盤(pán)驅動(dòng)、觸摸屏驅動(dòng)、LCD驅動(dòng)、音頻驅動(dòng)和USB驅動(dòng)等驅動(dòng)。因為多媒體功能是本系統的重點(diǎn),所以播放器部分很重要,這里主要介紹音頻驅動(dòng)的編寫(xiě)。

目前Linux下常用的音頻驅動(dòng)程序主要有兩種類(lèi)型:OSS(Open Sound System) 和ALSA。最早出現的Linux上的編程接口是OSS,它由一套完整的內核驅動(dòng)程序模塊組成,可為大多數音頻芯片驅動(dòng)提供統一的編程接口。在嵌入式系統中,對于特定的處理器(如本系統采用的S3C2410),可以按照OSS接口標準來(lái)編寫(xiě)音頻驅動(dòng)程序,以滿(mǎn)足Linux上的應用程序。OSS接口已經(jīng)足夠簡(jiǎn)單,需要完成的主要的工作就是對音頻設備(本系統采用的是Philips的UDA1314TS)的read,write和ioctl等操作。

系統音頻驅動(dòng)主要是對UDA1314TS進(jìn)行驅動(dòng)編寫(xiě),包括對UDA1314TS的L3接口的控制。首先初始化I/O和UDA1 314芯片,然后申請兩個(gè)DMA(Direct Memory Access)通道用于音頻傳輸(音頻數據的發(fā)送和接收都通過(guò)一個(gè)先入先出的隊列FIFO,但是只靠FIFO要保證音頻的連續播放是很困難的,所以申請 DMA通道來(lái)解決此問(wèn)題)。OSS標準中由兩個(gè)最基本的音頻設備:混音器(Mixer)和數字信號處理器(DSP)又稱(chēng)編解碼器,其中混音器主要用來(lái)控制輸入輸出音量的大小,只有open和release以及幾個(gè)接管OSS標準的iotcl。而DSF設備驅動(dòng)的方法比較復雜,主要包括open、 release、read、write、poll、ioctl。其中主要在write和read方法中實(shí)現音頻的播放和錄音。以播放音頻來(lái)說(shuō)明DSP驅動(dòng)程序的編寫(xiě),對應了驅動(dòng)程序中的open和write方法,它們利用DMA實(shí)現了音頻的播放。在open中,首先判斷設備打開(kāi)的方法:讀取、寫(xiě)入和讀/寫(xiě),分別對應音頻的錄音、播放以及錄音同時(shí)回放,然后申請兩個(gè)與音頻DMA緩沖區相關(guān)的,在初始化DMA時(shí)要用到,最后程序可以根據設備打開(kāi)模式的初始化 S3C2410的工作模式,并清空所需的DMA緩沖區(在write方法被調用時(shí)創(chuàng )建)的數據結構,把它留給緩沖區創(chuàng )建。在這里,因為使用了兩個(gè)DMA音頻數據傳輸,DMA緩沖的建立發(fā)生在第一次調用wri te將音頻數據傳送到設備,而OSS驅動(dòng)的調用者通常要在打開(kāi)音頻設備時(shí)就期望獲得DMA緩沖的信息,然而因為緩沖尚未建立,會(huì )使得緩沖大小為0這個(gè)結果,解決辦法時(shí)在兩個(gè)與音頻DMA緩沖區相關(guān)的程序部分一定不能少了以下代碼:

    if(!output_stream.buffer&&audio_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 GUl程序的設計與播放器的實(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等視頻格式。

2.4 影音錄制

影音錄制的系統框架見(jiàn)圖2。通過(guò)擴展用于視頻錄制的Philips的視頻解碼芯片SAA7113和ADI的JPEG壓縮芯片來(lái)實(shí)現。首先輸入的模擬視頻信號經(jīng)過(guò)SAA7113轉換為數字信號,然后傳輸給ADI的JPEG壓縮芯片JPEG2000,壓縮為JPEG圖像信號,并通過(guò)擴展的總線(xiàn)接口傳輸到系統上。音頻信號則直接通過(guò)音頻輸入接口送到音頻解碼芯片,并轉化為數字信號進(jìn)行編碼。編寫(xiě)應用程序使傳到的音視頻數字信號一起轉化為Motion JPEG編碼的AVI格式的多媒體文件,并存入擴展的存儲設備(微硬盤(pán)或者M(jìn)MC/SD卡),這樣就可以被Mplayer播放。



3 性能優(yōu)化

盡管ARM9處理器主頻可以高達200MHz以上,但是為了降低功耗,本系統在保證滿(mǎn)足實(shí)時(shí)播放的前提下,對系統進(jìn)行優(yōu)化。所以,在一個(gè)資源受限的處理器上要實(shí)現多媒體文件的實(shí)時(shí)播放,性能優(yōu)化成為關(guān)鍵。本系統主要通過(guò)解碼程序優(yōu)化,打開(kāi)Cache等措施來(lái)提高系統性能。

3.1 對解碼程序的優(yōu)化

由于解碼過(guò)程絕大部分是計算,以MP3音頻文件為例,其解碼過(guò)程主要是高精度乘法和矢量運算,其中80%的CPU時(shí)間用于數值計算,因此對于解碼部分主要采用了以下方法進(jìn)行優(yōu)化:

(1)整數運算。在沒(méi)有硬件浮點(diǎn)單元的CPU上,浮點(diǎn)運算是仿真方式,因此解碼代碼中應直接采用整數運算方式編碼,而避免浮點(diǎn)運算;

(2)通過(guò)查表方式代替很多運算式獲取計算結果,對調用頻繁的小函數采用inline修飾;

(3)關(guān)鍵代碼采用匯編語(yǔ)言編程,以獲得更高效的目標代碼,來(lái)提高系統的運行性能。

3.2 打開(kāi)Cache

ARM9處理器帶有獨立的16 kB數據Cache和16 kB的指令Cache。本系統中,打開(kāi)指令Cache肯定能在一定程度上提高性能。至于數據Cache,由于從SD卡或者U盤(pán)讀進(jìn)來(lái)解碼的數據使用完畢后就再也不會(huì )使用了,解碼產(chǎn)生的數據也是一樣,使用一次就會(huì )被丟棄,因此數據訪(fǎng)問(wèn)的時(shí)間局限性基本是不存在的。但是,系統在訪(fǎng)問(wèn)數據時(shí)存在很強的"空間局限性",所以打開(kāi)數據Cache后可以提高性能,因為:

(1)Cache和IDRAM之間通過(guò)Burst方式傳遞數據,提高了總線(xiàn)帶寬,從而降低讀數據的延遲。

(2)Cache一次讀128bit或256bit,當讀已在Cache中的數據時(shí)就會(huì )命中。

(3)通過(guò)WriteBuffer或WriteBack方式讀內存時(shí),沒(méi)有寫(xiě)DRAM的延遲。

但是這樣也會(huì )帶來(lái)數據不一致的問(wèn)題,主要是DMA造成數據的不一致,因為SD卡或USB的傳輸是通過(guò)DMA進(jìn)行的,其傳輸過(guò)程無(wú)需CPU干預,DMA操作直接訪(fǎng)問(wèn)內存,但不會(huì )跟新Cache和寫(xiě)緩存相應的內容,這樣就造成了數據的不一致,可用以下方法解決:

(1)將SD卡或USB和CPU共享的控制數據空間設置為uncachable,否則無(wú)法保證CPU讀到的Cache中的數據是最新數據,從而可能造成系統運行錯誤。

(2)SD卡或USB輸入模塊通過(guò)DMA像主存傳輸文件數據時(shí),寫(xiě)數據的緩沖區是由文件系統提供的。該緩沖區的特點(diǎn)是存儲空間比較大而且是順序訪(fǎng)問(wèn)的,可將其設置為cachable。

經(jīng)過(guò)上述方法的優(yōu)化以后,系統性能得到了大幅度的提高。經(jīng)過(guò)測試表明,優(yōu)化后解碼所需的時(shí)間為優(yōu)化前的15%左右,均小于正常播放所需的時(shí)間,完全滿(mǎn)足實(shí)時(shí)播放的要求。

4 結束語(yǔ)

本系統以ARM9處理器為核心建立嵌入式多媒體系統,并在其上移植Mplayer播放器,擴展其功能,使mpeg-1、mpeg-2、avi等視頻格式以及MP3、WMA等音頻格式都能在其上流暢地播放,并實(shí)現了影音錄制功能。在測試中各模塊工作正常,達到了能全屏播放視頻,流暢播放音頻,能夠將攝像頭拍到的視頻傳送到Mplayer進(jìn)行播放,能讀取外接U盤(pán)或者SD卡中的多媒體文件進(jìn)行播放,能從網(wǎng)絡(luò )下載多媒體文件到擴展存儲設備被Mplayer播放的設計要求。隨著(zhù)多媒體技術(shù)的廣泛應用,掌上多功能媒體播放器會(huì )有更廣闊的應用前景。

參考文獻

   1. Rodriguez C S.Fischer G.Smolski S.陳莉君.賀炎.劉霞林 Linux 內核編程 2006
   2. 深圳市優(yōu)龍科技有限公司 ARM9 FS2410P應用教程
   3. 孫瓊 嵌入式Linux應用程序開(kāi)發(fā)詳解 2006
   4. 劉淼 嵌入式系統接口設計與Linux驅動(dòng)程序開(kāi)發(fā) 2006
   5. 倪繼利 QT 及Linux操作系統窗口設計 2006
   6. 楊水清.張劍.施云非 ARM 嵌入式Linux系統開(kāi)發(fā)技術(shù)詳解 2008
   7. Kamal R.陳曙暉 嵌入式系統一體系結構、編程與設計 2006

作者:劉立昶 (武漢大學(xué),物理科學(xué)與技術(shù)學(xué)院)
來(lái)源:電子技術(shù) 2009 36(9)
本文地址:http://selenalain.com/thread-9722-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)在線(xiàn)工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页