<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)RM LinuxQT的掌上多媒體系統的設計和實(shí)現

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

作者: 時(shí)間:2012-12-08 來(lái)源:網(wǎng)絡(luò ) 收藏

  首先定制裁剪并移植了Linux2.6的內核,然后為使各硬件能正常工作編寫(xiě)了鍵盤(pán)驅動(dòng)、LCD驅動(dòng)、觸摸屏驅動(dòng)、音頻驅動(dòng)、USB驅動(dòng)等驅動(dòng)。多功能的正常工作首先是進(jìn)入-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)行交叉編譯,生成能在 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.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等視頻格式。

  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播放。



關(guān)鍵詞: ARM LinuxQT 掌上多媒體系統

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>