




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、WinCE下音樂播放器的實現(xiàn)摘 要:近年來隨著嵌入式技術的發(fā)展,嵌入式的應用領域也越來越廣泛。嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,并且軟硬件可裁剪,適用于應用系統(tǒng)對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統(tǒng)。本設計是在嵌入式WinCE系統(tǒng)下實現(xiàn)音樂播放器驅(qū)動的編寫。本設計運用C+ 語言實現(xiàn)WinCE下的音樂播放器。采用Visual Studio 2005中的Plafform Builder for CE 6.0工具進行開發(fā),搭建WinCE開發(fā)平臺,編寫音頻驅(qū)動程序,實現(xiàn)播放音樂功能。采用DMA數(shù)據(jù)傳輸方式,把要播放的音頻數(shù)據(jù)存儲在一段固定的內(nèi)存區(qū),然后DMA控制器把內(nèi)存
2、區(qū)的音頻數(shù)據(jù)通過IIS通信接口送往音頻芯片UDA1341TS解碼播放。本音樂播放器實現(xiàn)了以下功能:顯示及調(diào)節(jié)當前音樂播放的進度;調(diào)節(jié)聲音的大小;更換正在播放的音樂;查看正在播放文件的相關信息;顯示當前歌曲的歌詞等。關鍵詞:WinCE 音頻驅(qū)動 IIS通信接口Implement the music player under the WinCE systemAbstrac:In recent years, with the development of Embedded technology, Embedded application field is becoming more and more
3、 broad. Embedded system is a special purpose computer system which takes application as center and the computer technology as foundation; its cuttable in software and hardware, and suitable for the application system which has strict requirements for the function, dependability, cost, volume and con
4、sumption. This design is to implement the writing of music player driver based on the Embedded WinCE system. This design is using C+ language to implement the music player under the WinCE system; Using Plafform Builder for CE 6.0 in Visual Studio 2005 to develop, build WinCE development platform, wr
5、ite audio driver, and implement music player functions; And using DMA data transferring way to put the audio data which is for playing on a fixed memory area, and then the DMA controller send the audio data in memory area to audio chip UDA1341TS through the IIS communication interface to decode and
6、playback. This music player implements the following functions: display and adjust the progress of the currently playing music, adjust the size of the voice, change the playing music, view the relevant information of the playing file, and display the current song lyrics, etc.Key Words: WinCE Audio d
7、river IIS communication interface 目 錄 前 言1第1章 緒論21.1 選題背景21.2 國內(nèi)外研究現(xiàn)狀21.3 課題研究的意義21.4 論文框架結(jié)構(gòu)3第2章 相關技術簡介42.1 Visual Studio 200542.2 MSDN52.3 Windows CE 6.052.4 設備仿真器72.5 EduKit-IV平臺72.6 Microsoft ActiveSync8第3章 系統(tǒng)分析93.1 系統(tǒng)開發(fā)的意義93.2 需求分析93.3 功能介紹9第4章 WinCE下音樂播放器的設計與實現(xiàn)114.1 系統(tǒng)總體設計114.2 播放器功能模塊設計124.2.1
8、 播放器設計124.2.2 common 工程核心模塊134.2.3 common 工程核心模塊數(shù)據(jù)結(jié)構(gòu)154.2.4 nodedef 功能模塊定義對象174.2.5 nodeclass 功能模塊定義對象鏈表結(jié)構(gòu)174.2.6 node 功能模塊數(shù)據(jù)對象174.2.7 幾個數(shù)據(jù)對象的相互關系174.2.8 datadef 功能模塊屬性184.2.9 datatable 功能模塊屬性列表184.2.10 nodemodule 外部插件功能模塊184.2.11 核心模塊的初始化流程及相應代碼對應關系194.2.12 界面相交互的播放控制模塊194.3 音頻驅(qū)動20第5章 系統(tǒng)可靠性測試245.1
9、播放器啟動測試245.2 添加文件測試245.3 播放歌曲測試245.4 測試總結(jié)26結(jié) 論27致 謝28參考文獻29前 言隨著計算機技術和微電子技術的迅速發(fā)展,嵌入式系統(tǒng)應用領域越來越廣泛,嵌入式實時操作系統(tǒng)目前應用范圍越來越廣,逐漸成為操作系統(tǒng)開發(fā)和發(fā)展的主要方向。其應用領域大到工業(yè)控制,小到個人消費品如數(shù)碼相機,手機和PAD等無處不在。嵌入式系統(tǒng)在我們的生活中發(fā)揮著巨大的作用,嵌入式是專用的計算機系統(tǒng),軟硬件的設計必須協(xié)同和嚴格規(guī)范1。這些年來掀起了嵌入式系統(tǒng)應用熱潮的原因主要有幾個方面:一是芯片技術的發(fā)展,使得單個芯片具有更強的處理能力,而且使集成多種接口已經(jīng)成為可能,眾多芯片生產(chǎn)廠商
10、已經(jīng)將注意力集中在這方面。另一方面的原因就是應用的需要,由于對產(chǎn)品可靠性、成本、更新?lián)Q代要求的提高,使得嵌入式系統(tǒng)逐漸從純硬件實現(xiàn)和使用通用計算機實現(xiàn)的應用中脫穎而出,成為近年來令人關注的焦點2。經(jīng)過幾十年的發(fā)展,嵌入式系統(tǒng)已經(jīng)在很大程度上改變了人們的生活、工作和娛樂方式,而且這些改變還在加速3。 Windows CE有大量的經(jīng)過嵌入式處理的應用軟件和操作系統(tǒng)特性,可供用戶靈活選用。Windows CE操作系統(tǒng)對每一款硬件設備,都有其對應的設備驅(qū)動程序。驅(qū)動程序使得某個硬件可以響應一些定義良好的編程接口,同時完全隱藏了設備的工作細節(jié)。因此,研究驅(qū)動程序的設計方法對嵌入式系統(tǒng)設計有著十分重要的意
11、義4。本文分析了基于WinCE嵌入式的MP3播放器的工作原理,詳細介紹了MP3播放器的功能及其硬件設計、軟件設計和驅(qū)動程序編寫的方法,給出了基于 Mini270開發(fā)板的MP3播放器的具體實現(xiàn)方案并重點講述了其硬件的實現(xiàn)、軟件和驅(qū)動的編寫,實現(xiàn)了WinCE嵌入式MP3播放器對音樂的演奏。第1章 緒 論1.1 選題背景 雖然嵌入式系統(tǒng)是近幾年才風靡起來的,但是這個概念并非新近才出現(xiàn)。從20世紀七十年代單片機的出現(xiàn)到今天各式各樣的嵌入式微處理器,微控制器的大規(guī)模應用,嵌入式系統(tǒng)已經(jīng)有了近30年的發(fā)展歷史。 目前嵌入式的應用滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有嵌入式的蹤跡。導彈的導航裝置
12、,飛機上各種儀表的控制,計算機的網(wǎng)絡通訊與數(shù)據(jù)傳輸,工業(yè)自動化過程的實時控制和數(shù)據(jù)處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全保障系統(tǒng),錄像機、攝像機、全自動洗衣機的控制,以及程控玩具、電子寵物等等5,這些都離不開嵌入式。1.2 國內(nèi)外研究現(xiàn)狀 21世紀,電子技術進入了突飛猛進的發(fā)展階段。隨著集成電子技術的迅速發(fā)展,特別是微型計算機的出現(xiàn)使現(xiàn)代科學研究得到了質(zhì)的飛躍,可以毫無夸張的說,嵌入式技術的出現(xiàn)則是給現(xiàn)代工業(yè)測控領域帶來一次新的技術革命。目前,嵌入式以其功能強、可靠性高、造價低等優(yōu)點,在工業(yè)控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、智能化儀器儀表、智能家居、智能手機、辦公自動化等諸多領域得到極為廣泛
13、的應用,并已進入家庭,從洗衣機、微波爐到音響、汽車,到處都可見到嵌入式的蹤影。因此,嵌入式技術開發(fā)和應用水平已逐步成為一個國家工業(yè)發(fā)展水平的標志之一。 目前,我國物聯(lián)網(wǎng)發(fā)展與全球同處于起步階段,初步具備了一定的技術、產(chǎn)業(yè)和應用基礎,呈現(xiàn)出良好的發(fā)展態(tài)勢。產(chǎn)業(yè)發(fā)展初具基礎。將要建成全球最大、技術先進的公共通信網(wǎng)和互聯(lián)網(wǎng)。據(jù)不完全統(tǒng)計,我國2010年物聯(lián)網(wǎng)市場規(guī)模接近2000億元。在十二五的規(guī)劃中未來嵌入式會有更大更好的發(fā)展前景。1.3 課題研究的意義 隨著芯片技術的快速發(fā)展,嵌入式系統(tǒng)的性能逐步提高,功能也越來越豐富。嵌入式系統(tǒng)在眾多領域的應用給我們的生活帶來了便利,并且對人們的生活方式的改變和
14、生活質(zhì)量的提高具有重要的影響。在這些領域中,消費電子產(chǎn)品的應用具有更為廣泛的潛力。智能手機、掌上電腦為代表的高端嵌入式終端產(chǎn)品的普及率也越來越高,嵌入式系統(tǒng)產(chǎn)品中對多媒體的應用也越來越多,而在這些多媒體的應用當中,要求對各種多媒體文件的播放支持顯得越來越重要6。 當前,消費類電子產(chǎn)品更新?lián)Q代的速度進一步加快,市場需求不斷增大。MP3是嵌入式的最主要應用之一,高端的MP3已經(jīng)不僅僅著眼于實現(xiàn)音樂播放這一簡單功能,而是同時具備了文本瀏覽,圖片瀏覽,甚至視頻播放等強大功能。本文重點討論了基于Mini270開發(fā)板的MP3的功能的實現(xiàn),包括開發(fā)環(huán)境建立,內(nèi)核配置與編譯,開發(fā)等一系列詳細過程。1.4 論文
15、框架結(jié)構(gòu) 論文主要完成的工作是在現(xiàn)有的硬件和軟件環(huán)境下,利用開發(fā)工具進行設計、編碼和調(diào)試,實現(xiàn)的功能包括:音樂播放、顯示當前音樂播放進度、聲音控制、正在播放文件的信息、演唱文件信息、播放時間信息、播放文件歌詞。本論文主要章節(jié)安排如下: 第1章,首先分析嵌入式系統(tǒng),以及嵌入式系統(tǒng)在國內(nèi)外的研究現(xiàn)狀。 第2章,介紹編寫驅(qū)動中用到的開發(fā)工具及開發(fā)環(huán)境。 第3章,從需求、功能、設計方面進行系統(tǒng)分析。 第4章,驅(qū)動的編寫流程與代碼的實現(xiàn)。 第5章,對播放器進行測試。第2章 相關技術簡介2.1 Visual Studio 2005Visual Studio 2005是基于.NET2.0框架的。它同時也能開
16、發(fā)跨平臺的應用程序,如開發(fā)使用微軟操作系統(tǒng)的手機的程序等??傮w來說是一個非常龐大的軟件,甚至包含代碼測試功能。Visual Studio 包含有眾多版本,分別面向不同的開發(fā)角色。 VS2005開發(fā)工具支持Windows CE操作系統(tǒng)定制與開發(fā)、應用程序的開發(fā),并且為一系列設備提供了操作系統(tǒng)構(gòu)造塊以滿足縱向市場的需求。 VS2005為應用程序開發(fā)提供了一系列重要功能,其中包括用于托管應用程序開發(fā)的.NET Compact Framework 2.0以及適用于本地應用程序開發(fā)人員的Win32、MFC、ATL、WTL和STL。在VS2005中可以重用在Windows Embedde CE早期版本中開
17、發(fā)的用戶界面和應用程序中的大多數(shù)現(xiàn)有資源。 Windows CE 6.0操作系統(tǒng)定制與開發(fā)使用VS2005中的一個集成工具:Plafform Builder for CE 6.0。PB6.0是一個用于構(gòu)建自定義嵌入式操作系統(tǒng)設計的集成開發(fā)環(huán)境,其附帶有用于執(zhí)行設計、創(chuàng)建、安裝、測試和調(diào)試操作的開發(fā)工具。VS2005的初始主界面如圖2.1所示。 圖2.1 VS2005初始界面 2.2 MSDN MSDN 技術資源庫是為使用微軟工具、產(chǎn)品和技術的開發(fā)人員提供的精華資源。它包含豐富的技術編程信息,包括示例代碼、文檔、技術文章和參考指南。在學習Windows CE 6.0的過程中,MSDN是一個不可或
18、缺的幫助文檔,幾乎所有的技術問題都可以找到解決的答案。 2.3 Windows CE 6.0Windows CE 6.0是微軟公司推出的Windows CE系列最新版本,是當前主流的實時性強、模塊化、功能強大、性能穩(wěn)定的嵌入式操作系統(tǒng)之一。Windows CE是高度模塊化的嵌入式操作系統(tǒng),它可以根據(jù)目標設備或平臺的不同特點進行定制。Windows CE是一個實時操作系統(tǒng),實時支持功能在以下幾方面提升了其性能:支持嵌套中斷; 允許更高優(yōu)先級別的中斷首先得到響應,而不是等待級別低的中斷服務線程完成;更好的線程響應能力;對高級別的IST的響應時間上限的要求更加嚴格;更多的優(yōu)先級別,256個優(yōu)先級別;
19、更強的控制能力,對系統(tǒng)內(nèi)的線程數(shù)量的控制能力可使開發(fā)人員更好地掌握復雜程序的工作情況;豐富的多媒體和多語言支持豐富的多媒體支持是 Windows CE 的一大特點,基于 DirectX API和 WindowsMedia 的技術可以提供高性能的視頻、音頻、流式多媒體和 3D 圖形處理服務7。 從Windows CE 6.0版本開始,Windows CE的名字改為Windows Embedded CE,當然這也是為了結(jié)合Windows Embedded品牌作出的改變。Windows CE 6.0經(jīng)歷了CE歷史上第二次內(nèi)核重寫,使CE操作系統(tǒng)更加符合當今嵌入式開發(fā)的方向。它的特性如下: 強壯的架構(gòu)
20、; 統(tǒng)一的內(nèi)核;驅(qū)動;安全;兼容性;設備性能;新的媒體和通訊組件;網(wǎng)絡媒體設備;數(shù)碼攝像機;蜂窩網(wǎng)絡;投影儀;強大的開發(fā)環(huán)境;設備模擬;編輯器;改進的編譯器;可獲取源碼。 Windows CE 6.0的操作系統(tǒng)布局在原來的基礎上進行了更新,其主要特點是具有新的統(tǒng)一的內(nèi)核。如圖2.2所示。OEM層是嵌入式硬件與Windows CE操作系統(tǒng)的接合層。在OEM層的代碼構(gòu)成中,OEM層主要由CSP(Chip Support Package)代碼與BSP(Board Support Package)代碼組成。CSP支持不同的微處理器體系結(jié)構(gòu),BSP支持不同的微處理器和外設,BSP包如圖2.3所示。操作系
21、統(tǒng)層是Windows CE 6.0操作系統(tǒng)的核心層,其為下層的OEM以及上層的應用程序提供服務與應用程序接口。應用層包括了Windows CE應用程序、Internet客戶服務、用戶接口以及客戶應用程序。圖2.2 Windows CE 6.0 的架構(gòu)圖2.3 BSP包的組成 2.4 設備仿真器Windows CE 6.0的開發(fā)工作中,定制操作系統(tǒng)的工作是基于BSP來實現(xiàn)的。BSP包叫做板級支持包,主要是對硬件功能的軟件抽象。針對實際應用平臺,要開發(fā)或移植一個BSP包,往往會花費較長的一段時間。為了能夠快速地開發(fā)應用系統(tǒng),Windows CE 6.0提供了設備仿真功能稱作模擬器(Device E
22、mulator)。設備仿真主要用于調(diào)試創(chuàng)建的內(nèi)核和應用程序,操作系統(tǒng)的大多數(shù)API對于任何CPU而言都是相同的,考慮到不受CPU類型影響的簡單程序,都可以在模擬器上調(diào)試。在實際開發(fā)中,模擬器常用來調(diào)試軟件的界面。仿真設備運行后如下圖 2.4所示。 圖2.4 仿真工程運行界面 2.5 EduKit-IV平臺 Windows CE 6.0基于ARMV4I的設備仿真,為調(diào)試內(nèi)核及應用程序提供了便捷,但是最終需要的是在實際的應用平臺上運行應用系統(tǒng),所有的開發(fā)工作都要在實際平臺上最終實現(xiàn)。一個應用平臺會根據(jù)需要擴展外設,在板級支持包BSP中會提供對外設的軟件支持,可見BSP包的開發(fā)是一個重要的工作,而定
23、制Windows CE 操作系統(tǒng)也是基于BSP來完成的,同時,定制操作系統(tǒng)的過程本身也包含了BSP的開發(fā)。如果BSP本身存在問題,那么在定制操作系統(tǒng)的時候就會暴露出來,通過不斷地開發(fā)、修正,最終得到一個成熟的BSP。BSP(Board Support Package)又稱主板級支持包,它是一個包括啟動程序BootLoader、OEM適配層程序(OAL)、設備驅(qū)動程序Drivers和相關配置文件的軟件包,是對目標設備板的功能抽象。2.6 Microsoft ActiveSyncMicrosoft ActiveSync是微軟同步軟件,用于設備端與電腦的連接與通訊。其支持在PC機與Windows C
24、E設備、PPC 和微軟智能手機之間進行數(shù)據(jù)同步。第3章 系統(tǒng)分析3.1 系統(tǒng)可行性嵌入式系統(tǒng)具有可裁剪性、強實時性、統(tǒng)一的接口、操作簡單、使用方便、提供友好的圖形GUI和圖形界面、追求易學易用、強穩(wěn)定性,弱交互性、固化代碼、更好的硬件適應性等優(yōu)點,使得嵌入式產(chǎn)品成為信息產(chǎn)業(yè)的主流。隨著人們的生活水平不斷提高,精神資料的需求逐漸提高,多媒體已經(jīng)成為生活中必不可少的一部分。各式各樣的多媒體迅速充斥了我們的生活,我們生活中數(shù)字信息的數(shù)量在今后幾十年中將急劇增加,質(zhì)量上也將大大地改善。多媒體正以迅速的、意想不到的方式進入人們生活的多個方面,大的趨勢是各個方面都將朝著當今新技術綜合的方向發(fā)展?;赪in
25、CE的音樂播放器便是其中的一部分。3.2 需求分析需求分析是關于音樂播放器實現(xiàn)之后能否滿足用戶的需求,是非常重要的。如果需求分析沒做好,后面極可能會事倍功半,不能滿足用戶需求。用戶對功能的需求主要是聽一些歌曲,包括查看歌曲目錄、顯示當前音樂播放進度、聲音的控制、正在播放文件的信息、演唱文件信息、播放時間信息、播放文件歌詞查看等,管理播放用例圖如圖3.1所示。對于一個音樂播放器,是非常重視系統(tǒng)的可靠性與易用性的。系統(tǒng)的可靠性是指系統(tǒng)放置硬件失靈、軟件錯誤、自然災害等造成的實效的性能。易用性問題是播放器的關鍵,這不僅是技術問題,更是使用問題。為了保證音樂播放器易用性,要求保證播放器簡單易使用,即播
26、放器的界面友好,為此需要采用簡單易用的圖形界面。本系統(tǒng)就采用WinCE的圖形界面;使操作簡單實用易上手。3.3 功能介紹1.用戶可以方便地查看當前音樂播放進度、正在播放文件的信息、演唱文件信息、播放時間信息、播放文件歌詞。 2.用戶可以方便地調(diào)節(jié)音量。3.用戶可以方便地對對播放器進行播放暫停操作。4.用戶可以方便的進行歌曲的快進和快退操作。5.用戶可以方便地進行歌曲的更換。圖3.1 管理播放用例圖第4章 WinCE下音樂播放器的設計與實現(xiàn)根據(jù)需求分析及該系統(tǒng)的原理進行軟件設計。主要包括了解IIS總線的通信原理以及音頻芯片UDA1341使用方法;編寫Windows CE 6.0下的音頻驅(qū)動程序,
27、實現(xiàn)放音功能。 4.1 系統(tǒng)總體設計此結(jié)構(gòu)圖給出了本音樂播放器的主要功能,如圖4.1所示。圖4.1 基本功能結(jié)構(gòu)圖主程序流程圖如圖4.2所示。圖4.2 主程序流程圖4.2 播放器功能模塊設計4.2.1 播放器設計 播放器應該具有添加歌曲、更換歌曲、音量調(diào)節(jié)、顯示歌曲信息、調(diào)節(jié)歌曲進度、顯示歌詞等功能。該播放器具有三個狀態(tài),分別是播放狀態(tài)、暫停狀態(tài)和停止狀態(tài)。狀態(tài)轉(zhuǎn)換圖如圖4.3所示。圖4.3 狀態(tài)轉(zhuǎn)換圖系統(tǒng)硬件初始化完成后,即處于IDLE狀態(tài),等待用戶命令,然后根據(jù)用戶命令轉(zhuǎn)換狀態(tài)并進行相應的處理。播放的流程工作圖如圖 4.4所示。圖4.4 播放的流程工作圖暫停的工作流程圖如圖 4.5所示。圖
28、4.5 暫停的工作流程圖停止的工作流程圖如圖 4.6 所示。圖4.6 停止的工作流程圖播放器主要由核心框架模塊(common 工程)和解碼器、分離器插件組成。其中主要的插件有:interface 插件實現(xiàn)了播放器的界面,ffmpeg 是系統(tǒng)主要的音頻解碼模塊,splitter 是媒體文件分離器。 common 工程是核心模塊,是一個開放的集數(shù)據(jù)輸入、轉(zhuǎn)換、音頻解碼、信號輸出等功能為一體的完整的多媒體播放框架。這個框架自身不包含任何的 Decode 和 Split 功能,這些功能由插件實現(xiàn),核心模塊以一個樹狀結(jié)構(gòu)管理所有的功能模塊和插件模塊,實現(xiàn)數(shù)據(jù) Render 功能,對輸入、轉(zhuǎn)換、輸出流程的
29、控制,接受播放過程中的操作和對事件進行處理,同時也實現(xiàn)系統(tǒng)運行中經(jīng)常使用的一些共用函數(shù)。common 工程的主目錄下主要有:blit、dyncode、overlay、pcm、 softidct 、win32 、zlib 等子目錄。其中pcm 存放 PCM 音頻信號轉(zhuǎn)換模塊,softidct 存放逆離散余弦變換函數(shù),win32 存放內(nèi)存操作等常用模塊,dyncode 這個目錄的代碼比較晦澀,存放的是程序運行時動態(tài)生成代碼模塊,針對不同的 CPU 指令集, PCM 數(shù)據(jù)聲道和采樣率不同情況動態(tài)生成不同的優(yōu)化代碼,zlib 則提供了內(nèi)存中壓縮和解壓縮的函數(shù),包括未壓縮數(shù)據(jù)的完整性檢查。 4.2.2
30、common 工程核心模塊 1. 上下文對象 context該對象在初始化函數(shù)bool_t Context_Init中創(chuàng)建了一個該對象實例( context.h)。該對象實例記錄管理各個功能模塊,用戶界面可以通過該對象和核心模塊交互,管理控制播放過程。 2. 功能模塊功能模塊包括定義對象 nodedef 和數(shù)據(jù)對象 node ,定義對象描述功能模塊相互間的邏輯結(jié)構(gòu),數(shù)據(jù)對象記錄模塊屬性和方法。所有的功能模塊結(jié)構(gòu)按一個樹狀結(jié)構(gòu)來組織,結(jié)構(gòu)關系如下, NODE 是整個結(jié)構(gòu)的根結(jié)點,其下為子節(jié)點,節(jié)點按類型可分為 實節(jié)點,全局節(jié)點,設置節(jié)點,抽象節(jié)點 。抽象節(jié)點沒有對應的對象實例,為了按照邏輯關系組
31、織系統(tǒng)結(jié)構(gòu)而存在。全局節(jié)點只有一個對象的實例,如播放控制模塊 PLAYER_ID 。設置節(jié)點表示和系統(tǒng)播放設置相關,比如聲音均衡器模塊 EQUALIZER_ID 實節(jié)點與抽象節(jié)點不同,指可以生成對象實例的節(jié)點,實節(jié)點沒有特殊標識,一般以數(shù)據(jù)對象占用內(nèi)存大小表示是否是一個實節(jié)點,創(chuàng)建節(jié)點時要根據(jù)該信息分配內(nèi)存單元,實節(jié)點也可以有子節(jié)點。全局節(jié)點,設置節(jié)點和實節(jié)點可以相互組合。 節(jié)點樹狀分布圖如圖4.7所示。 NODE (根節(jié)點) FLOW (流控制模塊) CODEC (解碼模塊) EQUALIZER_ID (聲音均衡器模塊) DMO ( DirectX Media Object ) WMV_ID
32、 WMS_ID WMVA_ID WMA_ID WMAV_ID FFMPEG VIDEO ( FFMpeg 解碼模塊) LIBMAD_ID ( Libmad Mp3 解碼模塊) OUT (信號渲染模塊) AOUT (音頻信號渲染) NULLAUDIO_ID WAVEOUT_ID NULLVIDEO_ID OVERLAY IDCT (離散余弦解碼模塊) SOFTIDCT_ID CODECIDCT (離散余弦解碼模塊,函數(shù)比 IDCT 要少) MPEG1_ID MEDIA (媒體文件格式編碼解析模塊) FORMAT (格式解析模塊) FORMATBASE RAWAUDIO MP3_ID WAV_ID
33、 PLAYLIST (播放列表模塊) ASX_ID M3U_ID PLS_ID STREAMPROCESS (數(shù)據(jù)流處理模塊) STREAM (數(shù)據(jù)輸入模塊) MEMSTREAM_ID (內(nèi)存數(shù)據(jù)流模塊) FILE_ID (文件 IO 模塊) TIMER (定時器模塊) SYSTIMER_ID ASSOCIATION_ID (文件擴展名自動關聯(lián)模塊) ADVANCED_ID (高級設置模塊) COLOR_ID (顏色控制模塊) PLATFORM_ID (平臺信息模塊) XSCALEDRIVER_ID PLAYER_ID (播放控制模塊) 圖4.7節(jié)點樹狀分布圖4.2.3 common 工程核心
34、模塊數(shù)據(jù)結(jié)構(gòu)context 上下文對象 typedef struct context int Version;/ 版本信息 uint32_t ProgramId;/ 應用程序句柄 const tchar_t* ProgramName;/ 應用程序名稱 const tchar_t* ProgramVersion;/ 程序版本號 , 字符串 const tchar_t* CmdLine;/ 程序命令行信息 void* NodeLock;/ 功能模塊訪問臨界區(qū)互斥變量 array Node; / 功能模塊數(shù)據(jù)對象數(shù)組 array NodeClass; / ordered by id 功能模塊定義對象
35、數(shù)組 , 按照系統(tǒng)邏輯關系組織 array NodeClassPri; / ordered by priority|id 功能模塊定義對象數(shù)組 , 按照系統(tǒng)邏輯關系和優(yōu)先級排列 array NodeModule;/ 外部插件模塊數(shù)組 int LoadModuleNo;/ 當前正在加載的外部插件序號 void* LoadModule;/ 當前正在加載的外部插件 array StrTable2;/ 字符串資源數(shù)組 , 字符串分為:給底層使用的標準字符串資源、給界面使用的顯示字符串資源 , 兩個資源用兩個數(shù)組表示 array StrBuffer; array StrModule; void* Str
36、Lock;/ 字符串數(shù)組訪問臨界區(qū)互斥變量 uint32_t Lang;/ 當前使用語言標志 int CodePage;/ 當前使用代碼頁標志 struct pcm_soft* PCM;/PCM 音頻信號轉(zhuǎn)換模塊 struct node* Platform;/ 得到平臺相關信息 struct node* Advanced;/ 得到播放模塊高級信息 struct node* Player;/ 播放控制模塊 notify Error;/ 信息錯誤回調(diào)函數(shù) int (*HwOrientation)(void*); void *HwOrientationContext; bool_t TryDynam
37、ic; int SettingsPage; size_t StartUpMemory;/ 可以使用的有效內(nèi)存數(shù) bool_t InHibernate;/ 是否進入休眠狀態(tài) bool_t WaitDisable; int FtrId; bool_t LowMemory;/ 可以使用的有效內(nèi)存數(shù)是否小于系統(tǒng)要求的最低要求 / 動態(tài)代碼生成中間狀態(tài)及數(shù)據(jù) bool_t CodeFailed; bool_t CodeMoveBack; bool_t CodeDelaySlot; void* CodeLock; void* CodeInstBegin; void* CodeInstEnd; int Ne
38、xtCond; bool_t NextSet; bool_t NextByte; bool_t NextHalf; bool_t NextSign; uint32_t* FlushCache; void* CharConvertUTF8; void* CharConvertCustom; int CustomCodePage; void* CharConvertAscii; void* Application; void* Logger; bool_t KeepDisplay;/ 是否保持背光長亮 int DisableOutOfMemory; context;4.2.4 nodedef功能模
39、塊定義對象功能模塊樹狀結(jié)構(gòu)通常由若干個靜態(tài)定義對象 (nodedef) 實例實現(xiàn), typedef struct nodedef int Flags;/ 功能模塊節(jié)點的類型:抽象、實節(jié)點、全局、設置。 int Class;/ 功能模塊節(jié)點的標識 int ParentClass;/ 功能模塊父節(jié)點的標識 int Priority;/ 表示功能模塊節(jié)點優(yōu)先級。 nodecreate Create;/ 創(chuàng)建功能模塊定義對象的函數(shù)指針 nodedelete Delete;/ 銷毀功能模塊定義對象的函數(shù)指針 nodedef;/ 功能模塊定義對象4.2.5 nodeclass功能模塊定義對象鏈表結(jié)構(gòu)用鏈表
40、的方式實現(xiàn)了功能模塊樹狀結(jié)構(gòu),每個鏈表代表樹狀結(jié)構(gòu)的一個分支。typedef struct nodeclass nodedef Def;/ 功能模塊定義對象 int ModuleNo;/ 模塊標識 struct nodeclass* Parent;/ 功能模塊定義對象的父對象 nodeclass;/ 功能模塊定義節(jié)點對象鏈表結(jié)構(gòu)4.2.6 node功能模塊數(shù)據(jù)對象typedef struct node int Class;/ 功能模塊節(jié)點的類型 nodeenum Enum;/ 枚舉節(jié)點屬性函數(shù)指針 nodeget Get;/ 獲取節(jié)點屬性的函數(shù)指針 nodeset Set;/ 設置節(jié)點屬性的函
41、數(shù)指針 node;/ 功能模塊數(shù)據(jù)對象4.2.7 幾個數(shù)據(jù)對象的相互關系在系統(tǒng)上下文對象context中有兩個元素記錄功能模塊信息array Node 和array NodeClass,array是數(shù)組數(shù)據(jù)類型(在 buffer.h/c 中定義和實現(xiàn)),Node 是功能模塊數(shù)據(jù)對象的數(shù)組,NodeClass功能模塊定義對象的數(shù)組,按照系統(tǒng)邏輯關系組織。創(chuàng)建功能模塊時傳入nodedef對象到功能模塊創(chuàng)建函數(shù),函數(shù)會根據(jù) nodedef信息生成對應nodeclass對象添加到NodeClass數(shù)組,同時根據(jù) nodedef信息分配數(shù)據(jù)對象的內(nèi)存空間。在該節(jié)點的Create函數(shù)里面再初始化該功能模塊
42、的數(shù)據(jù)對象 node。4.2.8 datadef功能模塊屬性typedef struct datadef int No;/ 屬性的標識,播放或暫停。 int Type;/ 屬性的數(shù)據(jù)類型,在 node.h 中定義 int Flags;/ 屬性數(shù)據(jù)的標志,是屬性數(shù)據(jù)的標志,表示該數(shù)據(jù)是不是只讀數(shù)據(jù),是否有最大最小值等等, node.h 中定義 int Format1; int Format2; const tchar_t* Name; int Class; int Size; datadef;/ 屬性對象定義其中 Format1 和 Format2 是可選標志與 Flags 配合使用;另外,如果
43、( !(Flags & DF_NOSAVE) & !(Flags & DF_RDONLY) )即屬性標識為保存且可讀寫,則會被記錄到注冊表中,下次啟動時用注冊表的數(shù)據(jù)初始化該屬性表。4.2.9 datatable功能模塊屬性列表typedef struct datatable int No; int Type; int Flags; int Format1; int Format2; datatable;/ 功能模塊屬性列表各功能模塊的屬性通常以數(shù)組的形式定義和存儲4.2.10 nodemodule外部插件功能模塊typedef struct nodemodule int Id;/ 插件標識
44、int ObjectCount;/ 該插件的實例個數(shù) ( 引用計數(shù) ) bool_t Tmp;/ 是否是臨時節(jié)點 int64_t Date;/ 設置時間 int KeepAlive;/ 保持時間 void* Module;/ 外部插件模塊 void* Db; void* Func; uint8_t* Min; uint8_t* Max; nodemodule;/ 外部插件模塊節(jié)點4.2.11 核心模塊的初始化流程及相應代碼對應關系 Mem_Init(); / 內(nèi)存等資源初始化 String_Init(); / 系統(tǒng)使用字符串初始化PCM_Init(); / 音頻信號轉(zhuǎn)換模塊初始化 Node_I
45、nit(); / 根節(jié)點模塊初始化 Platform_Init(); / 平臺信息模塊初始化 Stream_Init(); / 輸入數(shù)據(jù)流模塊初始化 Advanced_Init();/ 高級設置模塊初始化 Flow_Init(); / 流控制模塊初始化Codec_Init(); / 解碼模塊初始化 Audio_Init(); / 音頻信號處理模塊初始化Format_Init(); / 格式解析模塊初始化Playlist_Init(); / 播放列表模塊初始化FormatBase_Init();/ 基本格式解析模塊初始化 NullOutput_Init();/ 無輸出設備模塊初始化RawAudi
46、o_Init();/RawAudio 模塊初始化RawImage_Init();/RawImage 模塊初始化 Plugins_Init(); / 外部插件模塊初始化4.2.12 界面相交互的播放控制模塊 在所有功能模塊中和界面加交互的主要就是播放控制模塊 struct node* Player; 使用方法如下:context* p = Context();player* myplayer = NULL;if(p) myplayer = (player*)(p-Player);1. 控制播放使用 Set(void* This,int No,const void* Data,int Size)第
47、一個參數(shù)是播放模塊指針,第二個參數(shù)是控制代碼,即要進行什么操作,第三個參數(shù)是需要賦值給控制代碼的數(shù)值,最后一個參數(shù)是所賦數(shù)值的占用內(nèi)存的大小。myplayer-Set(myplayer,PLAYER_PLAY,1,sizeof(int);PLAYER_PLAY 為控制代碼,表示當前控制的是播放暫停功能,數(shù)值為 1 表 示播放,為 0 表示暫停。2. 得到某一控制屬性 使用 Get(void* This,int No,void* Data,int Size); 函數(shù),參數(shù)含義和 Set 函數(shù)相同。3. 控制代碼 是一組宏,定義在 player.h 文件中。比較重要的控制參數(shù)有播放控制模塊可用參數(shù)
48、在 static const datatable PlayerParams 結(jié)構(gòu)。4. 添加一個媒體文件到播放模塊 使用int PlayerAdd(player* Player,int Index, const tchar_t* Path, const tchar_t* Title); 第一個參數(shù)為播放模塊指針。第二個參數(shù)是添加到播放模塊文件隊列的序號,如果是使文件成為第一個文 件該參數(shù)設為 0 。第三個參數(shù)是媒體文件的目錄和名稱。第四個參數(shù)為媒體文件標題,該參數(shù)可以忽略。4.3 音頻驅(qū)動 IIS音頻驅(qū)動流程圖如圖4.7所示。音頻驅(qū)動主要放在兩個函數(shù)里:WAV_Init()和WAV_IOCon
49、trol()。函數(shù)WAV_Init()在驅(qū)動加載時被調(diào)用執(zhí)行一次,里面主要完成一些初始化工作。在WAV_Init()里,首先創(chuàng)建了一個類HardwareContext,然后執(zhí)行類的成員函數(shù)HardwareContext:Init(),在HardwareContext:Init()里完成設備寄存器的地址映射(物理地址與虛擬地址之間的映射)、DMA內(nèi)存空間的分配與映射、DMA通道的初始化、DMA傳輸中斷處理事件的安裝、IIS音頻接口的初始化(主要是對IIS寄存器的配置)、音頻芯片UDA1341TS的初始化(主要通過IO模擬L3總線時序來配置UDA1341TS)。 無 圖4.7 IIS音頻驅(qū)動流程圖
50、WAV_Init()初始化設備實例,對硬件的操作由WAV_IOControl()函數(shù)完成。 WAV_IOControl()的函數(shù)原型如下: BOOL WAV_IOControl( DWORD dwOpenDate, DWORD dwCode, PBYTE pBufIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut); 參數(shù)dwOpenDate是由應用程序調(diào)用驅(qū)動程序的WAV_Open()后返回的,dwCode指定了一個操作設備的控制代碼。在本實驗音頻驅(qū)動中,IOCTL_WAV_MESSAGE是指所有與音頻操作有關的信息。pBufIn指向了一個結(jié)構(gòu)體,該結(jié)構(gòu)體包含了要輸入的操作數(shù)據(jù)或命令,由應用層傳入。對于音頻操作,其指向一個與音頻流操作相關的結(jié)構(gòu)體:MMDRV_MESSAGE_PARAMS。參數(shù) dwLenIn指定了傳入數(shù)據(jù)的大小,這里指定為sizeof
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 客運火車站旅客服務規(guī)范考核試卷
- 供應鏈協(xié)同案例解析考核試卷
- 低溫倉儲庫存管理與控制考核試卷
- 家用縫紉機維修實操考核試卷
- 土地利用規(guī)劃中的社區(qū)開放空間設計考核試卷
- 創(chuàng)業(yè)投資風險防范體系建設與實施路徑考核試卷
- 政府融資合同范本模板
- 自用高爾夫轉(zhuǎn)讓合同范本
- 工地叉車租憑合同范本
- 電氣質(zhì)量安全培訓課件
- 《口腔內(nèi)科護理》教學課件
- 幼兒園教師如何寫論文教學課件
- 動物性食品的食品安全課件
- 頸動脈狹窄的護理查房
- 中國后循環(huán)缺血的專家共識48506課件
- 信用管理概論課件整書電子教案完整版教學課件全套ppt教學教程最全課件最新
- 思想道德與法治全冊教案
- (高職)旅游景區(qū)服務與管理電子課件完整版PPT全書電子教案
- 唯美動畫生日快樂電子相冊視頻動態(tài)PPT模板
- 設計文件簽收表(一)
- 試運行方案計劃-
評論
0/150
提交評論