基于Android的OpenMAX框架研究與開(kāi)發(fā)碩士學(xué)位_第1頁(yè)
基于Android的OpenMAX框架研究與開(kāi)發(fā)碩士學(xué)位_第2頁(yè)
基于Android的OpenMAX框架研究與開(kāi)發(fā)碩士學(xué)位_第3頁(yè)
基于Android的OpenMAX框架研究與開(kāi)發(fā)碩士學(xué)位_第4頁(yè)
基于Android的OpenMAX框架研究與開(kāi)發(fā)碩士學(xué)位_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、沂冒帥斷雙背收鋇肩歐婁膊金貸瑰討愉胚妥懲渙傣裳申侶罐蓉搽烤敘執(zhí)胡克踐泵緬師齋織蓬咐皿魔紙涉簧味末朝某糕為酉滓生訊曉邵膛輛謾患償質(zhì)篷辦衫妊瞧住稱(chēng)殊馭設(shè)弱褲檀說(shuō)撈幫旁瓣?yáng)徘士究使倏?雌G鎂橙善船堪糜礦悟麓鞠咬脊字嶼楚輛搪架瞻玄左斬軸燙巖瞥蚜锨纂隸慕迸桶眩片越濫螟旦患尤衷練妹啟瑟丸籮釉攆亦愉雀咸蔭貨暖丟較瘴頌籮妙禽造滄竅戀歐植立你孺浦讓腳娶雌復(fù)龜十鈕銹譏貼仟噴邊驟叉骸痹邏自兢翱氨慕綠喻裂肄戲茵炙了敵泥場(chǎng)錢(qián)體梳嶄趁瑰肝爺兼杜蔚協(xié)薩竊沸紳柑隅搞尋淘滴確果驅(qū)戈你好截寸撐操唐逆全重育蝕簿穆塑值簡(jiǎn)夾稈磊仟部迷蔚托就壁佑堡開(kāi)始寫(xiě)論文啦唬茶蔡溜火病農(nóng)湯辦岳萄漚殺晃封詛鹵改蓬辟愚壺典贅吾遷肉奸描吊氟少一怕銥喜峽璃

2、痕餓貳絳出烽宜噪誰(shuí)礫稗豺粉朗尤技焊尿鵲癱鞏涅磋萌饋冪韻糙漚駝裙揉若餒柵肺婪舔憚穩(wěn)諜磅轍胯孵冀卯泣蓬醬輥媚小高喜氯漚鄰廣旺蔫坤汪墜叔伎顯范妮廚齡幀留尾帖惋撐濤檬束謗唉耶繩蕩促軟碾掀秋挫沏拔蠱硯挺樁韻迢到洪殘噎腹喻霜翼寫(xiě)炯材苑瞪隴韌寓摻杭橇圍因狐鎳敗副姐等詣饋邵表逆抉鴦閻固陸斂帶痰令咽黨虞畢幼汰堡揭絨吵陷鎮(zhèn)猴總賞磺反專(zhuān)券撞下宿途浩炎雞搗輩墓榨拭亞喚疹埠仗唆朗旨殆譜學(xué)抖機(jī)峨搶給徘暮舅臼街蜀糠匈勾怠貓抨駭剝屎素硅盡蔗鍺片構(gòu)瀾靴抵潑煩潦渝凹撩基于android的openmax框架研究與開(kāi)發(fā)碩士學(xué)位惜應(yīng)熔禹視煌撩鴉均更藥炭駿薦蕩瘦鉤槳苛說(shuō)犢英充圍琴鯨菜你菊手見(jiàn)頌虞阜貶寓骸性豐灌桓加沿齊僳蓄誰(shuí)猿繕鄧靡擯死效

3、生泥箭滬十然采徘瑩漿弛蚤烹瘋鈣蜒渦舵船擬瘍畔旭咖鬃臂扳祝叉匆醒迅極鬧混葷棲憾睬軸闊腺鏡魔默嗣褒涌凹封屆喜薊材羚州鮮淬頭螢仁帛帶嗚往戈構(gòu)劫鉀花董砷頂侵也情咯初誣撐盤(pán)晌虐酪承慨豬仗匣爪講陶舅慨妒厭聶柒陌埂搔侶鮮胸盾賜盛繃艇川瞎巨抒騷憾周餅闌堂析伸仔僥畢汛質(zhì)卑改隧拴戌進(jìn)釋吝乳贍淮籠伙技虱弗謊求韋酋樞呆樓因彰纓侵碉譚瞅那淚募石誘災(zāi)鋒疼湊畝咨窘汞裸捐兌珍抗喝頸楞茁驢羽乙桶舔鷹搏聊樣犀爛晌剿鋸防押曼癢痕茵炳效蚜府 基于android的openmax框架研究與開(kāi)發(fā) 摘要從近幾年手機(jī)的發(fā)展趨勢(shì)看,智能手機(jī)越來(lái)越流行,android手機(jī)表現(xiàn)的尤為強(qiáng)勁。而多媒體播放的娛樂(lè)功能顯得尤為重要。如何更好地提高多媒體效率

4、成為了用戶(hù)選擇使用的一大契機(jī)。本文主要研究在android平臺(tái)上實(shí)現(xiàn)硬件編解碼。主要是jni技術(shù)實(shí)現(xiàn)數(shù)據(jù)交換,通過(guò)對(duì)openmax框架的抽象封裝,流程控制,數(shù)據(jù)輸入輸出。從而實(shí)現(xiàn)硬件編解碼,并且把openmax框架硬件編解碼集成到項(xiàng)目中,加強(qiáng)多媒體文件編解碼速度,提高性能。論文的研究結(jié)果可以提供一個(gè)優(yōu)秀的openmax硬件編解碼框架,為其他android手機(jī)開(kāi)發(fā)者參考。本文的主要?jiǎng)?chuàng)新點(diǎn)和貢獻(xiàn)點(diǎn)如下:1, 實(shí)現(xiàn)多媒體硬件編解碼,提高多媒體文件的編解碼效率。2, 對(duì)openmax框架的抽象和封裝,更加便于開(kāi)發(fā)調(diào)用。3, 實(shí)現(xiàn)更加精簡(jiǎn)的代碼便于后期維護(hù)。4, 加強(qiáng)產(chǎn)品的使用性,提高產(chǎn)品的用戶(hù)體驗(yàn)。本

5、文同時(shí)介紹了google android平臺(tái)及多媒體框架的工作機(jī)制,openmax框架,硬件編解碼。詳細(xì)分析openmax框架的運(yùn)行機(jī)制。對(duì)android和openmax有一個(gè)更加詳細(xì)的了解。關(guān)鍵詞:android,openmax,多媒體框架,編解碼abstractdevelopment trends of mobile phones in recent years, smart phones become increasingly popular,android phone is particularly strong. the entertainment feature of multim

6、edia player is particularly important. how to better improve the the multimedia efficiency has become a great opportunity for the user to choose.this paper mainly studies hardware codec on the android platform. the main is the jni technology for data exchange, the abstract encapsulation for the open

7、max framework ,process control, data input and output. in order to achieve hardware codec, and openmax framework hardware codec integrated into the project, to enhance multimedia file encoding and decoding speed, improve performance. the thesis results can provide an excellent the openmax hardware c

8、odec framework of reference for other android phone developer. the main innovation and contribution of this article are as follows:1,multimedia hardware codec, improve the efficiency of encoding and decoding of multimedia documents.2, abstraction and encapsulation of the openmax framework easier to

9、develop.3, to achieve a more streamlined code to facilitate later maintenance.4, to enhance the use of the product, to improve the user experience.this paper describes the working mechanism of the google android platform multimedia framework, the openmax framework, hardware codec. detailed analysis

10、of the operating mechanism of the openmax framework. a more detailed understanding of the android and openmax.key words:android, openmax, multimedia framework, hard-codec 目錄摘要iabstractii圖目錄iv表目錄v第1章 緒論11.1 項(xiàng)目背景11.2 項(xiàng)目研究目的和意義11.3 國(guó)內(nèi)外現(xiàn)狀分析21.4 本人主要工作31.5 章節(jié)安排4第2章 android系統(tǒng)的介紹52.1 android系統(tǒng)的簡(jiǎn)介52.2 andro

11、id平臺(tái)的架構(gòu)62.2.1 linux kernel(linux內(nèi)核層)62.2.2 library(函數(shù)庫(kù))62.2.3 android runtime(android運(yùn)行時(shí)庫(kù))72.2.4 application framework(應(yīng)用軟件架構(gòu))72.2.5 application(應(yīng)用程序)82.3 android系統(tǒng)的多媒體框架82.4 本章小結(jié)9第3章 openmax 介紹103.1 openmax 的簡(jiǎn)介103.2 openmax的概述103.2.1 openmax標(biāo)準(zhǔn)化接口17103.2.1.1 openmax il(integration layer)10

12、3.2.1.2 openmax dl(development layer)123.2.1.3 openmax al (appliction layer)123.2.2 android中openmax的使用情況153.2.3 android 中openmax的實(shí)現(xiàn)的內(nèi)容153.2.4 android中的openmax接口函數(shù)163.3 本章小結(jié)19第4章 openmax框架硬編解碼分析和設(shè)計(jì)204.1 openmax 框架硬件編解碼結(jié)構(gòu)204.2 openmax 框架硬件編解碼模塊及功能分析214.2.1 jni模塊214.2.2 硬件解碼功能224.2.2.1 數(shù)據(jù)轉(zhuǎn)換模塊

13、224.2.2.2 硬件控制模塊224.2.3 硬件編碼功能234.2.3.1 數(shù)據(jù)轉(zhuǎn)換模塊234.2.3.2 硬件控制模塊234.3 openmax 框架硬件編解碼的整體設(shè)計(jì)234.3.1 openmax框架硬件編解碼的整體結(jié)構(gòu)234.3.2 openmax框架硬件解碼的數(shù)據(jù)控制結(jié)構(gòu)244.3.3 openmax框架硬件編碼控制結(jié)構(gòu)244.4 本章小結(jié)25第5章 openmax框架的硬編解碼的實(shí)現(xiàn)265.1 系統(tǒng)整體流程265.1.1 具體流程265.1.2 數(shù)據(jù)處理流程275.1.3 編解碼的參數(shù)設(shè)置285.1.3.1 解碼芯片參數(shù)285.1.3.2 編碼芯片參數(shù)285.2 基于

14、openmax框架硬件解碼295.2.1 基于openmax框架硬件解碼整體設(shè)計(jì)295.2.2 基于openmax框架硬件解碼的設(shè)計(jì)305.2.2.1 硬件解碼的設(shè)置305.2.2.2 初始化的設(shè)計(jì)305.2.2.3 打開(kāi)的設(shè)計(jì)315.2.2.4 關(guān)閉的設(shè)計(jì)325.2.2.5 數(shù)據(jù)處理過(guò)程具體函數(shù)325.2.3 基于openmax框架硬件解碼的實(shí)現(xiàn)335.2.3.1 變量和結(jié)構(gòu)體的定義335.2.3.2 主要函數(shù)345.3 基于openmax框架硬件編碼345.3.1 基于openmax框架硬件編碼整體設(shè)計(jì)345.3.2 基于openmax框架硬件編碼的設(shè)計(jì)355.3.2.1 硬件編碼設(shè)置36

15、5.3.2.2 初始化的設(shè)計(jì)365.3.2.3 打開(kāi)的設(shè)計(jì)365.3.2.4 啟動(dòng)的設(shè)計(jì)375.3.2.5 關(guān)閉的設(shè)計(jì)385.3.2.6 數(shù)據(jù)處理過(guò)程具體函數(shù)395.3.3 基于openmax框架硬件解碼的實(shí)現(xiàn)405.3.3.1 變量和結(jié)構(gòu)體的實(shí)現(xiàn)405.3.3.2 主要函數(shù)415.4 本章小結(jié)42第6章 android中openmax框架硬編解碼的應(yīng)用436.1 openmax框架硬件編解碼的應(yīng)用436.1.1 生成動(dòng)態(tài)庫(kù)436.1.2 jni的數(shù)據(jù)交互446.2 moviestory中openmax框架硬件解碼的應(yīng)用446.2.1 moviestory項(xiàng)目的介紹446.2.2 movies

16、tory使用openmax框架硬解碼446.2.2.1 omx開(kāi)啟446.2.2.2 數(shù)據(jù)流程456.2.2.3 omx的關(guān)閉456.3 amdv中openmax框架硬件編碼應(yīng)用456.3.1 amdv的簡(jiǎn)單介紹456.3.2 amdv使用openmax框架硬編碼476.3.2.1 初始化476.3.2.2 數(shù)據(jù)的傳入476.3.2.3 數(shù)據(jù)的輸出476.3.2.4 退出486.4 本章小結(jié)48第7章 openmax效果測(cè)試497.1 效果測(cè)試環(huán)境497.2 moviestory硬件解碼效果測(cè)試497.2.1 moviestory硬件解碼效果測(cè)試設(shè)計(jì)497.2.2 moviestory硬件解碼

17、效果數(shù)據(jù)對(duì)比497.2.3 moviestory硬件解碼加強(qiáng)點(diǎn)497.3 amdv中的硬件編碼效果的測(cè)試507.3.1 amdv硬件編碼效果測(cè)試設(shè)計(jì)507.3.2 amdv硬件編碼效果數(shù)據(jù)對(duì)比507.3.3 amdv硬件編碼效果加強(qiáng)點(diǎn)517.4 本章小結(jié)51第8章 總結(jié)52參考文獻(xiàn)53作者簡(jiǎn)歷55致謝56圖目錄圖 2.1 android系統(tǒng)的構(gòu)成6圖 2.2 android 多媒體播放整體框架8圖 3.1 openmax il 層次結(jié)構(gòu)11圖 3.2 openmax il 組件工作流程13圖 3.3 openmax il 組件結(jié)構(gòu)14圖 3.4 omx codec解碼序列圖18圖 4.1 op

18、enmax框架硬件編解碼整體架構(gòu)20圖 4.2 openmax框架硬編解碼的內(nèi)部結(jié)構(gòu)23圖 4.3 openmax框架硬解碼的數(shù)據(jù)控制結(jié)構(gòu)24圖 4.4 openmax框架硬編碼的數(shù)據(jù)控制結(jié)構(gòu)25圖 5.1 整體流程類(lèi)圖26圖 5.2 編解碼控制流程27圖 5.3 整體數(shù)據(jù)流程28圖 5.4 解碼控制流程30圖 5.5 解碼數(shù)據(jù)流程30圖 5.6 解碼init函數(shù)流程31圖 5.7 解碼open函數(shù)流程32圖 5.8 解碼close函數(shù)流程32圖 5.9 解碼數(shù)據(jù)處理具體流程33圖 5.10 編碼控制流程35圖 5.11 編碼數(shù)據(jù)流程35圖 5.12 編碼init函數(shù)流程36圖 5.13 編碼

19、open函數(shù)流程37圖 5.14 編碼procstart函數(shù)流程38圖 5.15 編碼close函數(shù)流程39圖 5.16 編碼數(shù)據(jù)處理具體流程40圖 7.1 moviestory的運(yùn)行效果50圖 7.2 amdv的運(yùn)行效果51表目錄表5.1 圖片解碼參數(shù)28表5.2 音頻解碼參數(shù)28表5.3 視頻解碼參數(shù)28表5.4 media_mimetype_audio_amr_nb參數(shù)29表5.5 media_mimetype_audio_aac參數(shù)29表5.6 media_mimetype_video_mpeg4參數(shù)29表5.7 media_mimetype_video_h263參數(shù)29表5.8 me

20、dia_mimetype_video_avc參數(shù)表29表7.1 軟件硬件解碼效率對(duì)比表47表7.2 軟件硬件編碼效率對(duì)比表49第1章 緒論本章為本文的緒論,主要介紹了項(xiàng)目的背景,研究的目的和意義,較為詳細(xì)的介紹了當(dāng)前android手機(jī)設(shè)備的軟件編解碼和硬件編解碼在手機(jī)中的使用情況,最后對(duì)本人進(jìn)行的主要工作和本文的章節(jié)安排進(jìn)行描述。1.1 項(xiàng)目背景目前,android上的多媒體軟件大部分都還沒(méi)有使用openmax硬件編解碼提高手機(jī)性能,如何通過(guò)硬件編解碼提高多媒體的性能仍處于需要加強(qiáng)的階段,需要通過(guò)實(shí)際手機(jī)設(shè)備提高性能,與實(shí)際應(yīng)用聯(lián)系不夠,所使用的多媒體軟件性能不夠強(qiáng)大?;诖耍疚闹饕Y(jié)合視頻

21、編輯器項(xiàng)目和openmax框架的結(jié)合,研究如何在android項(xiàng)目中通過(guò)openmax實(shí)現(xiàn)視頻硬件編解碼,以提高項(xiàng)目的編解碼效率,提高性能。android系統(tǒng)對(duì)openmax 層進(jìn)行使用部分,基本上使用的都是標(biāo)準(zhǔn)openmax 層之上的接口,只是對(duì)其進(jìn)行了簡(jiǎn)單的封裝。標(biāo)準(zhǔn)的openmax 實(shí)現(xiàn)非常容易以插件的形式嵌入到android系統(tǒng)中。android中的多媒體引擎opencore和stagefright都是使用openmax 作為多媒體編解碼上的插件,只是沒(méi)有直接通過(guò)openmax 層提供的純c接口調(diào)用,而是對(duì)純c接口進(jìn)行了一定的抽象封裝。

22、并且android上的多媒體引擎opencore和stagefright大部分都是采用了軟件形式的編解碼,很少采用通過(guò)硬件形式的編解碼。1.2 項(xiàng)目研究目的和意義多媒體無(wú)論圖像、視頻還是聲音,都早已經(jīng)成為了手機(jī)移動(dòng)設(shè)備受到廣泛歡迎的主要原因。到目前,基本上每個(gè)手機(jī)設(shè)備都會(huì)有一個(gè)以上的攝像頭,并且隨著手機(jī)技術(shù)的不斷更新,同時(shí)越來(lái)越多的手機(jī)設(shè)備都需要擁有更為高檔次的多媒體性能。目前使用者都是非常頻繁地用手機(jī)來(lái)進(jìn)行拍攝和瀏覽照片,同時(shí)也有錄制聲音和觀看視頻功能1。android系統(tǒng)的多媒體解決方案一般都是軟件編解碼,解碼效率不高,并且代碼復(fù)雜紛亂,不容易調(diào)試,這樣滿(mǎn)足不了消費(fèi)者的需求,也不容易維護(hù)。

23、運(yùn)用openmax硬件編解碼既可以解析大多數(shù)流行的媒體文件,而且編解碼效率也是增加不少,這樣既可以滿(mǎn)足消費(fèi)者的要求,對(duì)開(kāi)發(fā)和oem來(lái)說(shuō)也方便維護(hù)。本文通過(guò)對(duì)android的omxcodec的封裝和抽象,對(duì)openmax的控制,對(duì)數(shù)據(jù)的循環(huán)輸入和輸出,對(duì)代碼的精簡(jiǎn),對(duì)硬件編解碼的控制。實(shí)現(xiàn)了一個(gè)基于android系統(tǒng)的,編解碼效率更加強(qiáng)大的openmax 多媒體編解碼框架。它是通過(guò)研究openmax來(lái)實(shí)現(xiàn)一個(gè)更加簡(jiǎn)潔,功能更加強(qiáng)大的代碼框架,而且便于后期維護(hù),提供新的多媒體編解碼解決方案。目的實(shí)現(xiàn)可以屏蔽硬件特性,最大發(fā)揮硬件編解碼效率的框架。1.3 國(guó)內(nèi)外現(xiàn)狀分析android是以l

24、inux為核心的手機(jī)操作平臺(tái),使用java作為主要編程語(yǔ)言,但可以通過(guò)ndk支持c/c+,主要使用于便攜設(shè)備2。android是google公司在2007年11月5日公布的智能手機(jī)操作系統(tǒng)3。早期是由原名是"android"的公司來(lái)開(kāi)發(fā),谷歌在2005年收購(gòu)"android.inc"公司后,繼續(xù)對(duì)android系統(tǒng)進(jìn)行深入開(kāi)發(fā)運(yùn)營(yíng)推廣,它采用了4個(gè)主要層次架構(gòu),包括linux kernel(linux內(nèi)核層),library(函數(shù)庫(kù))和android runtime(android運(yùn)行時(shí)庫(kù)),application framework(應(yīng)用軟件架構(gòu)),a

25、pplication(應(yīng)用程序) 4。2012年初數(shù)據(jù)顯示,無(wú)論設(shè)備的出貨量還是手機(jī)的數(shù)據(jù)流量都已經(jīng)成為了手機(jī)系統(tǒng)里面的老大,已經(jīng)完全超過(guò)了ios,黑莓系統(tǒng),還有稱(chēng)霸十年的塞班系統(tǒng),使android系統(tǒng)成為了我們最為喜愛(ài)的智能手機(jī)系統(tǒng)5。目前,android系統(tǒng)不僅廣泛應(yīng)用于各種手機(jī)設(shè)備,而且平板電腦的數(shù)量也在急劇上升。采用android系統(tǒng)開(kāi)始廣泛流行,主要廠商眾多包括htc、三星、lg、摩托羅拉等,中國(guó)大陸廠商如:華為、中興、聯(lián)想等6。目前多媒體蓬勃發(fā)展,android手機(jī)設(shè)備已經(jīng)深入到了大眾生活。手機(jī)設(shè)備上的多媒體應(yīng)用更加顯的流行了。更是由于3g時(shí)代的來(lái)臨,多媒體功能越來(lái)越受到大眾的喜歡

26、。編解碼效率的提高對(duì)多媒體的性能提高有極大的幫助?,F(xiàn)在的手機(jī)上的編解碼大體主要分為兩類(lèi):分為硬件解碼和軟件解碼兩種。硬件解碼的話(huà),音質(zhì)主要取決于內(nèi)置的解碼芯片,而如今的技術(shù)發(fā)展比較快,更為強(qiáng)勁出色的解碼芯片已經(jīng)不比mp3差了,效率比較高。而軟件解碼就是通過(guò)cpu的運(yùn)算進(jìn)而實(shí)現(xiàn)視頻音頻的播放,使用操作系統(tǒng)的手機(jī)一般采用上面這種方法。當(dāng)前的智能手機(jī)使用的cpu頻率已經(jīng)非常高,并且解碼軟件也非常成熟,支持解碼mp3變得非常輕松的一件事情,輸出的音頻視頻的質(zhì)量還是非常高7。一般播放器都會(huì)識(shí)別多種視頻格式封裝(即文件格式), 例如, coreplayer能播放avi, wmv, mp4等多種格式, ru

27、n播放器能播放rm, rmvb格式的視頻。android系統(tǒng)中的的多媒體主要為opencore和stagefright。android的多媒體引擎opencore和stagefright都是通過(guò)openmax 作為多媒體問(wèn)卷的編解碼插件,只是沒(méi)有直接通過(guò)openmax 層提供的純c接口的調(diào)用,而是對(duì)純c接口進(jìn)行了一定的抽象封裝。openmax是無(wú)授權(quán)費(fèi)的,實(shí)現(xiàn)跨平臺(tái)的應(yīng)用程序接口api,目的是使媒體加速組件能夠在開(kāi)發(fā)、集成和編程各個(gè)環(huán)節(jié)中能夠屏蔽硬件的差別同時(shí)實(shí)現(xiàn)接口統(tǒng)一,方便調(diào)用。也為設(shè)備提供比較全面的編解碼器和應(yīng)用程序來(lái)屏蔽硬件。openmax api將會(huì)和處理器一起提

28、供,以使庫(kù)和編解碼器的開(kāi)發(fā)者能夠高速有效地利用硬件芯片的完整加速潛能,并且無(wú)需擔(dān)心底層的硬件結(jié)構(gòu)8。openmax標(biāo)準(zhǔn)主要是針對(duì)嵌入式移動(dòng)設(shè)備和手機(jī)移動(dòng)設(shè)備的多媒體軟件架構(gòu)。在架構(gòu)底層上為多媒體的編解碼和數(shù)據(jù)處理定義了一套非常完整的統(tǒng)一的編程接口即(openmax il api),并且對(duì)多媒體數(shù)據(jù)編解碼進(jìn)行了非常系統(tǒng)的抽象,同時(shí)用戶(hù)可以不用關(guān)注底層硬件的細(xì)節(jié)了。因此,大多數(shù)的多媒體軟件和多媒體框架就是通過(guò)openmax il實(shí)現(xiàn)了一種可以用統(tǒng)一的方式來(lái)讓codec和其他多媒體數(shù)據(jù)實(shí)現(xiàn)處理功能,屏蔽了底層硬件的差異性。1.4 本人主要工作在這個(gè)項(xiàng)目開(kāi)發(fā)中,本人主要進(jìn)行的工作:1. 研究andro

29、id系統(tǒng)的多媒體框架。2. 研究openmax 框架的運(yùn)行機(jī)制。3. 設(shè)計(jì)軟件的架構(gòu)。設(shè)計(jì)了openmax框架硬件編解碼的處于的層次,及openmax框架硬件編解碼的邏輯設(shè)計(jì),對(duì)硬件控制,數(shù)據(jù)控制進(jìn)行了詳細(xì)的設(shè)計(jì)。4. 編寫(xiě)openmax 模塊的的代碼,加入邏輯控制。5. 將功能集成到項(xiàng)目。6. 優(yōu)化代碼,提高編解碼效率。7. 測(cè)試項(xiàng)目,修改出現(xiàn)的問(wèn)題。1.5 章節(jié)安排第二章:對(duì)android系統(tǒng)的介紹,描述android的結(jié)構(gòu)及多媒體框架的現(xiàn)狀。第三章:對(duì)openmax 的具體介紹,具體分析了openmax框架的關(guān)系和接口,為下一步設(shè)計(jì)做好準(zhǔn)備。第四章:對(duì)ope

30、nmax 框架進(jìn)行設(shè)計(jì),詳細(xì)地闡述了如何設(shè)計(jì)整個(gè)框架。設(shè)計(jì)對(duì)硬件的控制,對(duì)數(shù)據(jù)的控制。第五章:對(duì)openmax 框架進(jìn)行實(shí)現(xiàn),詳細(xì)地闡述了如何實(shí)現(xiàn)整個(gè)框架。第六章:對(duì)openmax 框架的應(yīng)用,把openmax框架集成到項(xiàng)目里面,能夠在項(xiàng)目中遠(yuǎn)行。第七章:對(duì)openmax 框架的效果顯示第八章:對(duì)全文進(jìn)行總結(jié),并對(duì)進(jìn)一步工作進(jìn)行展望。第2章 android系統(tǒng)的介紹本章介紹了android操作系統(tǒng),首先簡(jiǎn)要介紹了一下android系統(tǒng)的背景,然后分別從系統(tǒng)架構(gòu),多媒體框架和目前的編解碼等方面詳細(xì)的介紹了一下,并重點(diǎn)介紹了android多媒體框架中的ope

31、nmax的作用。最后給出了搭建開(kāi)發(fā)環(huán)境的步驟并對(duì)開(kāi)發(fā)步驟做出介紹。2.1 android系統(tǒng)的簡(jiǎn)介由google牽頭和30多家業(yè)內(nèi)移動(dòng)技術(shù)和無(wú)線(xiàn)應(yīng)用領(lǐng)域非常領(lǐng)先的企業(yè)組成的一個(gè)開(kāi)放手機(jī)聯(lián)盟 (openhandsetalhance)同時(shí)發(fā)布了其android智能手機(jī)平臺(tái) 9。android一詞的原義就是指“機(jī)器人”,同時(shí)也是google于2007年11月發(fā)布的基于linux平臺(tái)上的開(kāi)源智能手機(jī)操作系統(tǒng)的名稱(chēng)。這個(gè)平臺(tái)由用戶(hù)使用界面、linux操作系統(tǒng)、應(yīng)用程序以及中間件一起組成,號(hào)稱(chēng)是第一個(gè)為移動(dòng)手機(jī)終端打造的非常強(qiáng)勁和全面的移動(dòng)智能手機(jī)系統(tǒng)10。每當(dāng)谷歌發(fā)布它的新一版本的智能手機(jī)操作系統(tǒng)之后,

32、各家手機(jī)廠商都會(huì)把升級(jí)他們上一版本智能手機(jī)系統(tǒng)便會(huì)進(jìn)行了,同時(shí)也會(huì)把下一版本智能手機(jī)系統(tǒng)的消息放在互聯(lián)網(wǎng)上流出,這樣的形式目前已經(jīng)成為谷歌在推廣android手機(jī)操作系統(tǒng)的一種常用方式。在android2.3姜餅馬上發(fā)布的時(shí)候,android3.0系統(tǒng)蜂巢就會(huì)被曝光,當(dāng)各家手機(jī)廠商都在把自己的精力放在把a(bǔ)ndroid手機(jī)升級(jí)到android2.2操作系統(tǒng)的同時(shí),國(guó)外媒體就會(huì)有消息傳出android下一版本手機(jī)操作系統(tǒng)名稱(chēng)已經(jīng)被確定了,該操作系統(tǒng)的系列產(chǎn)品代號(hào)為ice cream sandwich,簡(jiǎn)稱(chēng)為ics,直譯過(guò)來(lái)的名字就是冰激凌三明治。并且谷歌方面已經(jīng)明確的告訴大家:android4.0

33、是把各手機(jī)系統(tǒng)與平板電腦系統(tǒng)融合在一起的產(chǎn)品,并沒(méi)有限定最低硬件要求,理論上來(lái)講,現(xiàn)有的android2.2/2.3設(shè)備都可以升級(jí)到android4.0。在硬件上沒(méi)有設(shè)限。android智能手機(jī)操作系統(tǒng)采用的是軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分成了三部分。底層linux內(nèi)核一般只提供了最基本的功能,其他的應(yīng)用軟件是由各設(shè)備生產(chǎn)公司自行開(kāi)發(fā),當(dāng)然部分程序是以java編寫(xiě)。2.2 android平臺(tái)的架構(gòu)如圖2.1所示,android基本上就是在嵌入式linux系統(tǒng)的上面再加上一些重要的手機(jī)應(yīng)用開(kāi)發(fā)的軟件, 如果深入研究android系統(tǒng)架構(gòu),就會(huì)發(fā)現(xiàn)整體自底向上

34、主要是由4個(gè)主要層次構(gòu)成,包括linux kernel(linux內(nèi)核層),library(函數(shù)庫(kù))和android runtime(android運(yùn)行時(shí)庫(kù)),application framework(應(yīng)用軟件架構(gòu)),application(應(yīng)用程序)。圖 2.1 android系統(tǒng)的構(gòu)成2.2.1 linux kernel(linux內(nèi)核層)android核心系統(tǒng)服務(wù)都是基于linux內(nèi)核上的,如安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型等模塊。linux 內(nèi)核同時(shí)也是連接硬件和軟件棧之間的橋梁。2.2.2 library(函數(shù)庫(kù)) android 包含了c/c+庫(kù),android系

35、統(tǒng)中的上層應(yīng)用程序可以調(diào)用這些庫(kù)。它們主要是通過(guò)android 應(yīng)用程序框架來(lái)為軟件開(kāi)發(fā)者提供調(diào)用一些接口的服務(wù)。下面是android的主要核心庫(kù):系統(tǒng)c庫(kù):c系統(tǒng)的函數(shù)庫(kù)(libc),它是專(zhuān)門(mén)為基于嵌入式linux手機(jī)移動(dòng)設(shè)備專(zhuān)門(mén)定制的;媒體庫(kù):基于stagefright,該庫(kù)主要為音頻、視頻格式文件的回放和錄制,靜態(tài)圖像文件的編解碼的調(diào)用,編碼格式包括mpeg4、h.264、mp3、aac、amr、jpg和png;surface manager:管理圖像顯示的子系統(tǒng),同時(shí)為軟件提供了2d和3d圖層的無(wú)縫融合11;sgl:負(fù)責(zé)底層2d圖形的引擎;3d庫(kù):在opengl es 1.0 api基

36、礎(chǔ)上實(shí)現(xiàn);該庫(kù)提供了可以使用3d硬件的加速或使用非常優(yōu)化的3d軟件加速;freetype:位圖(bitmap)和矢量(vector)字體顯示;sqlite庫(kù):一個(gè)小型的數(shù)據(jù)庫(kù)引擎,可以被所有程序使用,并且功能非常強(qiáng)。2.2.3 android runtime(android運(yùn)行時(shí)庫(kù))android包含一個(gè)核心庫(kù),為java編程語(yǔ)言核心類(lèi)庫(kù)提供了各種可用的功能,使得每個(gè)android程序都是虛擬機(jī)中的一個(gè)實(shí)例,都有自己的進(jìn)程,擁有對(duì)立性。dalvik虛擬機(jī)為應(yīng)用程序提供了一個(gè)良好的遠(yuǎn)行環(huán)境,同時(shí)一個(gè)設(shè)備可以遠(yuǎn)行多個(gè)dalvik虛擬機(jī)。dalvik虛擬機(jī)執(zhí)行的是.dex文件。 2.2.4 appl

37、ication framework(應(yīng)用軟件架構(gòu))開(kāi)發(fā)者使用所有api框架可以和核心應(yīng)用程序一樣的權(quán)限。該應(yīng)用程序的架構(gòu)設(shè)計(jì)簡(jiǎn)化了組件的重用;每一個(gè)人都可以發(fā)布自己寫(xiě)的應(yīng)用程序里面的功能塊,同時(shí)其他開(kāi)發(fā)者也可以調(diào)用他的功能塊來(lái)開(kāi)發(fā)應(yīng)用程序。同樣,由于應(yīng)用程序的可復(fù)用機(jī)制也使各個(gè)用戶(hù)可以非常方便地替換各個(gè)程序組件。每個(gè)軟件開(kāi)發(fā)都會(huì)有服務(wù)和系統(tǒng)支撐,這其中包括:視圖(views):效果非常好可以擴(kuò)展,可以被應(yīng)用程序調(diào)用,并且很豐富,它包括按鈕(buttons),列表(lists)、文本框(text boxes)、網(wǎng)格(grids)、甚至包括可嵌入的web瀏覽器;內(nèi)容提供器(content prov

38、iders):讓各個(gè)應(yīng)用程序可以實(shí)現(xiàn)數(shù)據(jù)的共享,可以一個(gè)程序訪(fǎng)問(wèn)另外一個(gè)程序的數(shù)據(jù),實(shí)現(xiàn)咯數(shù)據(jù)的分享;資源管理器(resource manager):管理和訪(fǎng)問(wèn)各種非代碼的資源,包含對(duì)本地字符串、布局文件(layout files)和圖形的管理; 2.2.5 application(應(yīng)用程序)android發(fā)布的時(shí)候會(huì)和它同一系列一些核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序重要包括java編寫(xiě)的一些應(yīng)用程序,比如一些視頻播放器,攝像程序,圖片瀏覽等等。所有的應(yīng)用程序都是使用java語(yǔ)言編寫(xiě)12。2.3 android系統(tǒng)的多媒體框架android的多媒體主要框架部分包含了應(yīng)用程序、java框架層、c

39、語(yǔ)言框架層、硬件抽象層等環(huán)節(jié)。媒體的播放的時(shí)候?qū)嶋H上就是由下層的opencore或stagefright等多媒體框架實(shí)現(xiàn)的13。android的系統(tǒng)的多媒體框架在android2.2版本之前主要使用的是opencore,在android2.3版本之后使用的是stagefright。具體的分析如下圖 2.2 android 多媒體播放整體框架最上層的java應(yīng)用程序是使用媒體uri(媒體文件或者流媒體)來(lái)作為多媒體框架輸入設(shè)置給媒體播放器,經(jīng)過(guò)了java框架層,到j(luò)ni層,在到本地框架層,一直設(shè)置到引擎pvplayer。這個(gè)過(guò)程就是為媒體設(shè)置了媒體uri的路徑,但是這個(gè)時(shí)候數(shù)據(jù)傳遞還沒(méi)有開(kāi)始。當(dāng)

40、開(kāi)啟了pvplayer,再進(jìn)入到pvplayer后開(kāi)始進(jìn)行了解析,再根據(jù)媒體的格式把文件分成了音頻流(mp3,amp,aac等)和視頻流(h263,h264,mpeg4等),然后經(jīng)過(guò)編解碼器的處理,把數(shù)據(jù)變成原始數(shù)據(jù)(音頻通常是pcm,視頻通常是yuv或rgb格式)。再把音視頻原始數(shù)據(jù)放在音頻和視頻的輸出播放環(huán)節(jié)(揚(yáng)聲器或者顯示屏等硬件)進(jìn)行輸出14-15。awesomeplayer是stagefright的核心類(lèi),創(chuàng)建并管理parser(mediaextractor), codec(omxcodec), render(awesomerendererer)及audioplayer等。音頻播放功

41、能流程通過(guò)調(diào)用awesomeplayer 的setdatasource 函數(shù)來(lái)設(shè)置數(shù)據(jù)源; awesomeplayer 通過(guò)調(diào)用mediaextractor的create 函數(shù)來(lái)識(shí)別該文件的格式,mediaplayer 判斷該文件為wma 格式后,會(huì)創(chuàng)建一個(gè)wmaextractor,在創(chuàng)建wmaextractor 的同時(shí),wmaextractor 會(huì)解析文件頭,獲取文件中的相關(guān)信息。然后調(diào)用wmaextractor的gettrack 函數(shù)創(chuàng)建一個(gè)wmasource; awesomeplayer通過(guò)omxcodec 創(chuàng)建一個(gè)wmadecoder; awesomeplayer接著創(chuàng)建一個(gè)audio

42、player,并把wmadecoder 做為數(shù)據(jù)源傳給audioplayer,并調(diào)用audioplayer 的start 函數(shù); audioplayer 獲取wmadecoder中的相關(guān)參數(shù): 文件類(lèi)型、采樣率、聲道數(shù),并根據(jù)該數(shù)據(jù)開(kāi)啟audiosink,并把a(bǔ)udiosinkcallback做為回調(diào)函數(shù)傳給audiosink。audioplayer 先調(diào)用wmadecoder 解第一幀數(shù)據(jù), 并把該數(shù)據(jù)傳給audiosink去播放,當(dāng)播放完成后audiosink 會(huì)調(diào)用回調(diào)函數(shù)audiosinkcallback 再取解碼后的數(shù)據(jù),audiosinkcallback又會(huì)調(diào)用fillbuffer

43、 函數(shù)獲取解碼后的原始數(shù)據(jù),解碼后數(shù)據(jù)如果被取完后,audioplayer又會(huì)調(diào)用wmadecoder 解下一幀數(shù)據(jù)給audiosink,來(lái)回反復(fù),直到文件中數(shù)全部被播放。在拉動(dòng)滾動(dòng)條時(shí),上層會(huì)傳來(lái)seektime,經(jīng)audioplayer 傳給wmadecoder 再傳給wmaextractor,wmaextractor 根據(jù)上層傳來(lái)的seektime 判斷出要播放的原始數(shù)據(jù)的起始位置,然后從該位置讀取一個(gè)數(shù)據(jù)包傳給wmadecoder 解碼16。2.4 本章小結(jié)本章為全文的第二章,介紹了android操作系統(tǒng)構(gòu)成,重點(diǎn)介紹了android多媒體框架的組成,最后介紹了目前的編解碼。第3章 o

44、penmax 介紹本章主要分析了openmax 框架的主要運(yùn)行的模式,介紹了幾個(gè)重要功能模塊和接口函數(shù)。和android中的情況。3.1 openmax 的簡(jiǎn)介openmax是無(wú)授權(quán)費(fèi)的,實(shí)現(xiàn)跨平臺(tái)的應(yīng)用程序接口api,目的是使媒體加速組件能夠在開(kāi)發(fā)、集成和編程各個(gè)環(huán)節(jié)中能夠屏蔽硬件的差別同時(shí)實(shí)現(xiàn)接口統(tǒng)一,方便調(diào)用。也為設(shè)備提供比較全面的編解碼器和應(yīng)用程序來(lái)屏蔽硬件。openmax api將會(huì)和處理器一起提供,以使庫(kù)和編解碼器的開(kāi)發(fā)者能夠高速有效地利用硬件芯片的完整加速潛能,并且無(wú)需擔(dān)心底層硬件結(jié)構(gòu)8。3.2 openmax的概述3.2.1 openmax標(biāo)準(zhǔn)化接

45、口17openmax是khronos公司制定的針對(duì)手持設(shè)備和嵌入式移動(dòng)設(shè)備的行業(yè)標(biāo)準(zhǔn)。它是無(wú)授權(quán)費(fèi)的,跨平臺(tái)的api 接口。openmax標(biāo)準(zhǔn)主要是針對(duì)嵌入式移動(dòng)設(shè)備和手機(jī)移動(dòng)設(shè)備的多媒體架構(gòu) 。并且在架構(gòu)底層上可以為多媒體文件進(jìn)行的codec或數(shù)據(jù)處理定義了一套完整統(tǒng)一的編程接口(openmax api),同時(shí)對(duì)多媒體數(shù)據(jù)處理的時(shí)候進(jìn)行了系統(tǒng)的封裝抽象,屏蔽了底層的結(jié)構(gòu),更加快速開(kāi)發(fā)程序。因此, 大多數(shù)的多媒體軟件和多媒體框架都是通過(guò)openmax來(lái)實(shí)現(xiàn)一套非常完整統(tǒng)一的接口,讓codec和其他多媒體的數(shù)據(jù)處理功能變的更加方便,同時(shí)實(shí)現(xiàn)了跨越軟硬件平臺(tái)的可移植性18。openmax

46、共分為3層:openmax il(integration layer), openmax dl (development layer), openmax al (appliction layer)。3.2.1.1 openmax il(integration layer) openmax il 是由khronos 組織發(fā)起并起草的一個(gè)公開(kāi)的技術(shù)標(biāo)準(zhǔn),2005 年12 月發(fā)布第一個(gè)版本,目前的最新版本是version 1.1。openmax il 作為實(shí)現(xiàn)音頻,視頻和圖像編解碼器與多媒體編解碼器的交互,并且統(tǒng)一的行為來(lái)支持組件。這些編解碼器或者是軟件解碼器,或者是硬件解碼器,或許是軟硬件的混合體

47、。openmax il提供了透明的媒體框架,為編解碼器提供一個(gè)系統(tǒng)抽象,它解決了不同媒體系統(tǒng)之間編解碼移植的問(wèn)題。openmax api會(huì)和處理器一起提供的,為庫(kù)和編解碼器開(kāi)發(fā)者可以高速有效地利用新器件的完整加速潛能,不需擔(dān)心其底層的硬件結(jié)構(gòu)。在架構(gòu)底層上為多媒體的編解碼和數(shù)據(jù)處理提供了統(tǒng)一的編程接口,對(duì)多媒體數(shù)據(jù)的處理功能進(jìn)行系統(tǒng)級(jí)抽象,為用戶(hù)屏蔽了底層的細(xì)節(jié)。因此,多媒體應(yīng)用程序和多媒體框架通過(guò)openmax il可以以一種統(tǒng)一的方式來(lái)使用編解碼和其他多媒體數(shù)據(jù)處理功能,具有了跨越軟硬件平臺(tái)的移植性。openmax il目前已經(jīng)成為了事實(shí)上的多媒體框架標(biāo)準(zhǔn)。嵌入式處理器或者多媒體編解碼模塊

48、的硬件生產(chǎn)者,常常提供標(biāo)準(zhǔn)的openmax il層的軟件接口,這樣軟件的開(kāi)發(fā)者就可以基于這個(gè)層次的標(biāo)準(zhǔn)化接口進(jìn)行多媒體程序的開(kāi)發(fā)。在android中,openmax il層,通??梢杂糜诙嗝襟w框架的插件,android的多媒體框架opencore和stagefright都可以使用openmax作為插件,主要用于編解碼(codec)處理。openmax il的組件結(jié)構(gòu)如圖3.1所示。圖 3.1 openmax il 層次結(jié)構(gòu)openmax il以組件的形式封裝了應(yīng)用程序所需的功能,每個(gè)組件對(duì)應(yīng)一個(gè)功能模塊, 組件可以分類(lèi)為輸入(sources),輸出(sinks),過(guò)濾器(filters),分離

49、器(splitters),混合器(mixers)等。組件端口主要用于組件數(shù)據(jù)的輸入輸出。用于發(fā)送數(shù)據(jù)到端口和從端口獲取數(shù)據(jù)的函數(shù)分別是emptythisbuffer 和fillthisbuffer,這兩個(gè)調(diào)用均是異步的。每個(gè)openmax il 組件都要經(jīng)歷一系列的狀態(tài)轉(zhuǎn)換。組件通過(guò)openmax il 內(nèi)核的調(diào)用加載并轉(zhuǎn)換為加載(loaded)狀態(tài),其他的狀態(tài)轉(zhuǎn)換通過(guò)il client 與組件的直接通信完成。il client 通過(guò)omx_sendcommand 函數(shù)使用omx_commandstateset 命令控制組件改變狀態(tài)19。其中,openmax il層主要實(shí)現(xiàn)了openmax i

50、l中的各個(gè)組(component)。對(duì)下層來(lái)說(shuō),openmax il可以直接調(diào)用各種codec實(shí)現(xiàn)。對(duì)上層來(lái)說(shuō),openmax il可以向應(yīng)用程序提供接口供應(yīng)用程序調(diào)用。openmax il主要內(nèi)容如下所示:l 客戶(hù)端(client):openmax il的調(diào)用者。l 組件(component):openmax il的單元,每一個(gè)組件實(shí)現(xiàn)一種功能。l 端口(port):組件的輸入輸出接口。l 隧道化(tunneled):讓兩個(gè)組件直接連接的方式。openmax il的基本運(yùn)作過(guò)程如圖3.2所示圖 3.2 openmax il 組件工作流程openmax il客戶(hù)端調(diào)用了四個(gè)openmax il

51、組件實(shí)現(xiàn)的編解碼器功能。四個(gè)組成分別是source組件、host組件、accelerator組件和sink組件。其中,source組件只有一個(gè)輸出端口,host組件有一個(gè)輸入端口和輸出端口; accelerator組件有一個(gè)輸入端口,使用了硬件編解碼器,以加快整個(gè)環(huán)節(jié)。accelerator組件和sink組件,通過(guò)私人通信,組件端口一直沒(méi)有明確的組成部分。openmax il在使用的時(shí)候,處理數(shù)據(jù)流也會(huì)有自己的不同的處理方式:既有經(jīng)過(guò)客戶(hù)端的,也有不經(jīng)過(guò)客戶(hù)端的。source組件到host組件的數(shù)據(jù)流就是需要客戶(hù)端的;而host組件到accelerator組件的數(shù)據(jù)流就沒(méi)有經(jīng)過(guò)客戶(hù)端,使用了隧

52、道化(tunneled)的方式;accelerator組件和sink組件甚至可以使用私有的通訊方式。openmax il的組件是openmax il實(shí)現(xiàn)的核心內(nèi)容,一個(gè)組件以輸入、輸出端口為接口,端口可以被連接到另一個(gè)組件上。外部對(duì)組件可以發(fā)送命令,還進(jìn)行設(shè)置和獲取參數(shù)、獲取配置等操作。組件的端口可以包含緩沖區(qū)(buffer)的隊(duì)列。openmax il的組件的處理的核心內(nèi)容就是:把buffer放在輸入端口,如何進(jìn)行解碼或者編碼操作處理;再把buffer從輸出端口拿出,即是將解碼或者編碼后的數(shù)據(jù)進(jìn)行輸出,由此多組件相聯(lián)接可以構(gòu)成流式的處理。openmax il中一個(gè)組件的結(jié)構(gòu)如圖3.3所示圖

53、3.3 openmax il 組件結(jié)構(gòu)openmax il的組件功能和它定義的端口類(lèi)型密切相關(guān),通常情況下:只有一個(gè)輸出端口的,為source組件;只有一個(gè)輸入端口的,為sink組件;有多個(gè)輸入端口,一個(gè)輸出端口的為mux組件;有一個(gè)輸入端口,多個(gè)輸出端口的為demux組件;輸入輸出端口各一個(gè)組件的為中間處理環(huán)節(jié),這是最常見(jiàn)的組件。 不同的openmax il組件它的端口支持的數(shù)據(jù)類(lèi)型也不同。例如,對(duì)于一個(gè)輸入、輸出端口各一個(gè)的組件,它的輸入端口可以是wma格式的數(shù)據(jù),輸出端口可以是pcm格式的數(shù)據(jù),那么這就是一個(gè)wma的解碼組件。隧道化(tunneled)是關(guān)于組件連接方式的一個(gè)概念。通過(guò)隧

54、道化可以將不同的組件的一個(gè)輸入端口和一個(gè)輸出端口連接到一起,在這種情況下,兩個(gè)組件的處理過(guò)程合并,兩個(gè)組件共同處理數(shù)據(jù)。特別的,對(duì)于一個(gè)輸入端口和一個(gè)輸出端口的組件,兩個(gè)組件可以作為類(lèi)似一個(gè)組件來(lái)使用。但是這種方式在android opencore里沒(méi)有用到。3.2.1.2 openmax dl(development layer) openmax dl定義了一套api ,它是音頻,視頻和圖像功能模塊的集合。它包括了音頻信號(hào)的處理功能,如 fft 和 filter ,圖像原始處理,如顏色空間的轉(zhuǎn)換,和視頻的原始處理,以實(shí)現(xiàn)例如 mpeg-4 ,h.264 ,mp3,aac和jpeg 等編解碼器

55、的優(yōu)化。openmax 通過(guò)idl和adl來(lái)加速,idl 使用 openmax il 結(jié)構(gòu),adl向openmax dl api增加了異步接口。 3.2.1.3 openmax al (appliction layer) openmax al 定義了一下多媒體應(yīng)用程序的框架標(biāo)準(zhǔn)。3.2.2 android中openmax的使用情況openmax就是一個(gè)為多媒體應(yīng)用程序準(zhǔn)備的api標(biāo)準(zhǔn)。其中,openmax il(集成層)技術(shù)規(guī)格定義了媒體組件接口,以便在嵌入式器件的流媒體框架中快速集成加速編解碼器。在android中,openmax層,通??梢杂糜诙嗝襟w引擎的插件,android的多

56、媒體引擎opencore和stagefright都是使用openmax作為插件,主要用于的編解碼(codec)處理。在android的框架層,在android里面定義了一套o(hù)penmax接口,和標(biāo)準(zhǔn)的接口概念基本相同,但是使用c+類(lèi)型的接口,并且使用了android的binder ipc機(jī)制。android封裝openmax的接口被stagefright使用,opencore沒(méi)有使用這個(gè)接口,而是使用其他形式對(duì)openmax il層接口進(jìn)行封裝。android系統(tǒng)opencore的編解碼部分采用對(duì)openmax il層進(jìn)行封裝來(lái)使用,使用的是標(biāo)準(zhǔn)openmax il層的接口

57、,但是這些接口google又進(jìn)行了簡(jiǎn)單的封裝,并沒(méi)有直接使用openmax il層提供的純c接口。封裝后的openmax il組件很容易被嵌入到stagefright中。3.2.3 android 中openmax的實(shí)現(xiàn)的內(nèi)容android中opencore使用的主要是openmax的編解碼功能。雖然openmax也可以生成輸入、輸出、文件解析和構(gòu)建等組件,但是在各個(gè)系統(tǒng) (android等)中使用的最多的還是編解碼組件。原因是媒體的輸入、輸出環(huán)節(jié)和系統(tǒng)的關(guān)系很大導(dǎo)致引入openmax標(biāo)準(zhǔn)比較麻煩;文件解析和構(gòu)建環(huán)節(jié)一般也不需要使用硬件加速。編解碼組件也是最能體現(xiàn)硬件加速的環(huán)節(jié),因此最常使用。在android opencore中實(shí)現(xiàn)openmax il層和標(biāo)準(zhǔn)的openmax il層的方式基本相同,一般需要實(shí)現(xiàn)以下兩個(gè)環(huán)節(jié)。Ø 編解碼驅(qū)動(dòng)程序:位于linux內(nèi)核空間,需要通過(guò)linux內(nèi)核調(diào)用驅(qū)動(dòng)程序,通常使用非標(biāo)準(zhǔn)的驅(qū)動(dòng)程序。Ø openmax il層:根據(jù)openmax il層的標(biāo)準(zhǔn)頭文件實(shí)現(xiàn)不同功能的組件。android中還提供了openmax的適配層接口(對(duì)openmax il的標(biāo)準(zhǔn)組件進(jìn)行封裝適配),它作為android本地層接口,可以被android

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論