版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、沂冒帥斷雙背收鋇肩歐婁膊金貸瑰討愉胚妥懲渙傣裳申侶罐蓉搽烤敘執(zhí)胡克踐泵緬師齋織蓬咐皿魔紙涉簧味末朝某糕為酉滓生訊曉邵膛輛謾患償質(zhì)篷辦衫妊瞧住稱殊馭設(shè)弱褲檀說撈幫旁瓣柵鞘揩本渴躬劫??雌G鎂橙善船堪糜礦悟麓鞠咬脊字嶼楚輛搪架瞻玄左斬軸燙巖瞥蚜锨纂隸慕迸桶眩片越濫螟旦患尤衷練妹啟瑟丸籮釉攆亦愉雀咸蔭貨暖丟較瘴頌籮妙禽造滄竅戀歐植立你孺浦讓腳娶雌復(fù)龜十鈕銹譏貼仟噴邊驟叉骸痹邏自兢翱氨慕綠喻裂肄戲茵炙了敵泥場錢體梳嶄趁瑰肝爺兼杜蔚協(xié)薩竊沸紳柑隅搞尋淘滴確果驅(qū)戈你好截寸撐操唐逆全重育蝕簿穆塑值簡夾稈磊仟部迷蔚托就壁佑堡開始寫論文啦唬茶蔡溜火病農(nóng)湯辦岳萄漚殺晃封詛鹵改蓬辟愚壺典贅吾遷肉奸描吊氟少一怕銥喜峽璃
2、痕餓貳絳出烽宜噪誰礫稗豺粉朗尤技焊尿鵲癱鞏涅磋萌饋冪韻糙漚駝裙揉若餒柵肺婪舔憚穩(wěn)諜磅轍胯孵冀卯泣蓬醬輥媚小高喜氯漚鄰廣旺蔫坤汪墜叔伎顯范妮廚齡幀留尾帖惋撐濤檬束謗唉耶繩蕩促軟碾掀秋挫沏拔蠱硯挺樁韻迢到洪殘噎腹喻霜翼寫炯材苑瞪隴韌寓摻杭橇圍因狐鎳敗副姐等詣饋邵表逆抉鴦閻固陸斂帶痰令咽黨虞畢幼汰堡揭絨吵陷鎮(zhèn)猴總賞磺反專券撞下宿途浩炎雞搗輩墓榨拭亞喚疹埠仗唆朗旨殆譜學(xué)抖機峨搶給徘暮舅臼街蜀糠匈勾怠貓抨駭剝屎素硅盡蔗鍺片構(gòu)瀾靴抵潑煩潦渝凹撩基于android的openmax框架研究與開發(fā)碩士學(xué)位惜應(yīng)熔禹視煌撩鴉均更藥炭駿薦蕩瘦鉤槳苛說犢英充圍琴鯨菜你菊手見頌虞阜貶寓骸性豐灌桓加沿齊僳蓄誰猿繕鄧靡擯死效
3、生泥箭滬十然采徘瑩漿弛蚤烹瘋鈣蜒渦舵船擬瘍畔旭咖鬃臂扳祝叉匆醒迅極鬧混葷棲憾睬軸闊腺鏡魔默嗣褒涌凹封屆喜薊材羚州鮮淬頭螢仁帛帶嗚往戈構(gòu)劫鉀花董砷頂侵也情咯初誣撐盤晌虐酪承慨豬仗匣爪講陶舅慨妒厭聶柒陌埂搔侶鮮胸盾賜盛繃艇川瞎巨抒騷憾周餅闌堂析伸仔僥畢汛質(zhì)卑改隧拴戌進(jìn)釋吝乳贍淮籠伙技虱弗謊求韋酋樞呆樓因彰纓侵碉譚瞅那淚募石誘災(zāi)鋒疼湊畝咨窘汞裸捐兌珍抗喝頸楞茁驢羽乙桶舔鷹搏聊樣犀爛晌剿鋸防押曼癢痕茵炳效蚜府 基于android的openmax框架研究與開發(fā) 摘要從近幾年手機的發(fā)展趨勢看,智能手機越來越流行,android手機表現(xiàn)的尤為強勁。而多媒體播放的娛樂功能顯得尤為重要。如何更好地提高多媒體效率
4、成為了用戶選擇使用的一大契機。本文主要研究在android平臺上實現(xiàn)硬件編解碼。主要是jni技術(shù)實現(xiàn)數(shù)據(jù)交換,通過對openmax框架的抽象封裝,流程控制,數(shù)據(jù)輸入輸出。從而實現(xiàn)硬件編解碼,并且把openmax框架硬件編解碼集成到項目中,加強多媒體文件編解碼速度,提高性能。論文的研究結(jié)果可以提供一個優(yōu)秀的openmax硬件編解碼框架,為其他android手機開發(fā)者參考。本文的主要創(chuàng)新點和貢獻(xiàn)點如下:1, 實現(xiàn)多媒體硬件編解碼,提高多媒體文件的編解碼效率。2, 對openmax框架的抽象和封裝,更加便于開發(fā)調(diào)用。3, 實現(xiàn)更加精簡的代碼便于后期維護(hù)。4, 加強產(chǎn)品的使用性,提高產(chǎn)品的用戶體驗。本
5、文同時介紹了google android平臺及多媒體框架的工作機制,openmax框架,硬件編解碼。詳細(xì)分析openmax框架的運行機制。對android和openmax有一個更加詳細(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 項目背景11.2 項目研究目的和意義11.3 國內(nèi)外現(xiàn)狀分析21.4 本人主要工作31.5 章節(jié)安排4第2章 android系統(tǒng)的介紹52.1 android系統(tǒng)的簡介52.2 andro
11、id平臺的架構(gòu)62.2.1 linux kernel(linux內(nèi)核層)62.2.2 library(函數(shù)庫)62.2.3 android runtime(android運行時庫)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 的簡介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的實現(xiàn)的內(nèi)容153.2.4 android中的openmax接口函數(shù)163.3 本章小結(jié)19第4章 openmax框架硬編解碼分析和設(shè)計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è)計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框架的硬編解碼的實現(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è)計295.2.2 基于openmax框架硬件解碼的設(shè)計305.2.2.1 硬件解碼的設(shè)置305.2.2.2 初始化的設(shè)計305.2.2.3 打開的設(shè)計315.2.2.4 關(guān)閉的設(shè)計325.2.2.5 數(shù)據(jù)處理過程具體函數(shù)325.2.3 基于openmax框架硬件解碼的實現(xiàn)335.2.3.1 變量和結(jié)構(gòu)體的定義335.2.3.2 主要函數(shù)345.3 基于openmax框架硬件編碼345.3.1 基于openmax框架硬件編碼整體設(shè)計345.3.2 基于openmax框架硬件編碼的設(shè)計355.3.2.1 硬件編碼設(shè)置36
15、5.3.2.2 初始化的設(shè)計365.3.2.3 打開的設(shè)計365.3.2.4 啟動的設(shè)計375.3.2.5 關(guān)閉的設(shè)計385.3.2.6 數(shù)據(jù)處理過程具體函數(shù)395.3.3 基于openmax框架硬件解碼的實現(xiàn)405.3.3.1 變量和結(jié)構(gòu)體的實現(xiàn)405.3.3.2 主要函數(shù)415.4 本章小結(jié)42第6章 android中openmax框架硬編解碼的應(yīng)用436.1 openmax框架硬件編解碼的應(yīng)用436.1.1 生成動態(tài)庫436.1.2 jni的數(shù)據(jù)交互446.2 moviestory中openmax框架硬件解碼的應(yīng)用446.2.1 moviestory項目的介紹446.2.2 movies
16、tory使用openmax框架硬解碼446.2.2.1 omx開啟446.2.2.2 數(shù)據(jù)流程456.2.2.3 omx的關(guān)閉456.3 amdv中openmax框架硬件編碼應(yīng)用456.3.1 amdv的簡單介紹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效果測試497.1 效果測試環(huán)境497.2 moviestory硬件解碼效果測試497.2.1 moviestory硬件解碼效果測試設(shè)計497.2.2 moviestory硬件解碼
17、效果數(shù)據(jù)對比497.2.3 moviestory硬件解碼加強點497.3 amdv中的硬件編碼效果的測試507.3.1 amdv硬件編碼效果測試設(shè)計507.3.2 amdv硬件編碼效果數(shù)據(jù)對比507.3.3 amdv硬件編碼效果加強點517.4 本章小結(jié)51第8章 總結(jié)52參考文獻(xiàn)53作者簡歷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 整體流程類圖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的運行效果50圖 7.2 amdv的運行效果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 軟件硬件解碼效率對比表47表7.2 軟件硬件編碼效率對比表49第1章 緒論本章為本文的緒論,主要介紹了項目的背景,研究的目的和意義,較為詳細(xì)的介紹了當(dāng)前android手機設(shè)備的軟件編解碼和硬件編解碼在手機中的使用情況,最后對本人進(jìn)行的主要工作和本文的章節(jié)安排進(jìn)行描述。1.1 項目背景目前,android上的多媒體軟件大部分都還沒有使用openmax硬件編解碼提高手機性能,如何通過硬件編解碼提高多媒體的性能仍處于需要加強的階段,需要通過實際手機設(shè)備提高性能,與實際應(yīng)用聯(lián)系不夠,所使用的多媒體軟件性能不夠強大?;诖?,本文主要結(jié)合視頻
21、編輯器項目和openmax框架的結(jié)合,研究如何在android項目中通過openmax實現(xiàn)視頻硬件編解碼,以提高項目的編解碼效率,提高性能。android系統(tǒng)對openmax 層進(jìn)行使用部分,基本上使用的都是標(biāo)準(zhǔn)openmax 層之上的接口,只是對其進(jìn)行了簡單的封裝。標(biāo)準(zhǔn)的openmax 實現(xiàn)非常容易以插件的形式嵌入到android系統(tǒng)中。android中的多媒體引擎opencore和stagefright都是使用openmax 作為多媒體編解碼上的插件,只是沒有直接通過openmax 層提供的純c接口調(diào)用,而是對純c接口進(jìn)行了一定的抽象封裝。
22、并且android上的多媒體引擎opencore和stagefright大部分都是采用了軟件形式的編解碼,很少采用通過硬件形式的編解碼。1.2 項目研究目的和意義多媒體無論圖像、視頻還是聲音,都早已經(jīng)成為了手機移動設(shè)備受到廣泛歡迎的主要原因。到目前,基本上每個手機設(shè)備都會有一個以上的攝像頭,并且隨著手機技術(shù)的不斷更新,同時越來越多的手機設(shè)備都需要擁有更為高檔次的多媒體性能。目前使用者都是非常頻繁地用手機來進(jìn)行拍攝和瀏覽照片,同時也有錄制聲音和觀看視頻功能1。android系統(tǒng)的多媒體解決方案一般都是軟件編解碼,解碼效率不高,并且代碼復(fù)雜紛亂,不容易調(diào)試,這樣滿足不了消費者的需求,也不容易維護(hù)。
23、運用openmax硬件編解碼既可以解析大多數(shù)流行的媒體文件,而且編解碼效率也是增加不少,這樣既可以滿足消費者的要求,對開發(fā)和oem來說也方便維護(hù)。本文通過對android的omxcodec的封裝和抽象,對openmax的控制,對數(shù)據(jù)的循環(huán)輸入和輸出,對代碼的精簡,對硬件編解碼的控制。實現(xiàn)了一個基于android系統(tǒng)的,編解碼效率更加強大的openmax 多媒體編解碼框架。它是通過研究openmax來實現(xiàn)一個更加簡潔,功能更加強大的代碼框架,而且便于后期維護(hù),提供新的多媒體編解碼解決方案。目的實現(xiàn)可以屏蔽硬件特性,最大發(fā)揮硬件編解碼效率的框架。1.3 國內(nèi)外現(xiàn)狀分析android是以l
24、inux為核心的手機操作平臺,使用java作為主要編程語言,但可以通過ndk支持c/c+,主要使用于便攜設(shè)備2。android是google公司在2007年11月5日公布的智能手機操作系統(tǒng)3。早期是由原名是"android"的公司來開發(fā),谷歌在2005年收購"android.inc"公司后,繼續(xù)對android系統(tǒng)進(jìn)行深入開發(fā)運營推廣,它采用了4個主要層次架構(gòu),包括linux kernel(linux內(nèi)核層),library(函數(shù)庫)和android runtime(android運行時庫),application framework(應(yīng)用軟件架構(gòu)),a
25、pplication(應(yīng)用程序) 4。2012年初數(shù)據(jù)顯示,無論設(shè)備的出貨量還是手機的數(shù)據(jù)流量都已經(jīng)成為了手機系統(tǒng)里面的老大,已經(jīng)完全超過了ios,黑莓系統(tǒng),還有稱霸十年的塞班系統(tǒng),使android系統(tǒng)成為了我們最為喜愛的智能手機系統(tǒng)5。目前,android系統(tǒng)不僅廣泛應(yīng)用于各種手機設(shè)備,而且平板電腦的數(shù)量也在急劇上升。采用android系統(tǒng)開始廣泛流行,主要廠商眾多包括htc、三星、lg、摩托羅拉等,中國大陸廠商如:華為、中興、聯(lián)想等6。目前多媒體蓬勃發(fā)展,android手機設(shè)備已經(jīng)深入到了大眾生活。手機設(shè)備上的多媒體應(yīng)用更加顯的流行了。更是由于3g時代的來臨,多媒體功能越來越受到大眾的喜歡
26、。編解碼效率的提高對多媒體的性能提高有極大的幫助?,F(xiàn)在的手機上的編解碼大體主要分為兩類:分為硬件解碼和軟件解碼兩種。硬件解碼的話,音質(zhì)主要取決于內(nèi)置的解碼芯片,而如今的技術(shù)發(fā)展比較快,更為強勁出色的解碼芯片已經(jīng)不比mp3差了,效率比較高。而軟件解碼就是通過cpu的運算進(jìn)而實現(xiàn)視頻音頻的播放,使用操作系統(tǒng)的手機一般采用上面這種方法。當(dāng)前的智能手機使用的cpu頻率已經(jīng)非常高,并且解碼軟件也非常成熟,支持解碼mp3變得非常輕松的一件事情,輸出的音頻視頻的質(zhì)量還是非常高7。一般播放器都會識別多種視頻格式封裝(即文件格式), 例如, coreplayer能播放avi, wmv, mp4等多種格式, ru
27、n播放器能播放rm, rmvb格式的視頻。android系統(tǒng)中的的多媒體主要為opencore和stagefright。android的多媒體引擎opencore和stagefright都是通過openmax 作為多媒體問卷的編解碼插件,只是沒有直接通過openmax 層提供的純c接口的調(diào)用,而是對純c接口進(jìn)行了一定的抽象封裝。openmax是無授權(quán)費的,實現(xiàn)跨平臺的應(yīng)用程序接口api,目的是使媒體加速組件能夠在開發(fā)、集成和編程各個環(huán)節(jié)中能夠屏蔽硬件的差別同時實現(xiàn)接口統(tǒng)一,方便調(diào)用。也為設(shè)備提供比較全面的編解碼器和應(yīng)用程序來屏蔽硬件。openmax api將會和處理器一起提
28、供,以使庫和編解碼器的開發(fā)者能夠高速有效地利用硬件芯片的完整加速潛能,并且無需擔(dān)心底層的硬件結(jié)構(gòu)8。openmax標(biāo)準(zhǔn)主要是針對嵌入式移動設(shè)備和手機移動設(shè)備的多媒體軟件架構(gòu)。在架構(gòu)底層上為多媒體的編解碼和數(shù)據(jù)處理定義了一套非常完整的統(tǒng)一的編程接口即(openmax il api),并且對多媒體數(shù)據(jù)編解碼進(jìn)行了非常系統(tǒng)的抽象,同時用戶可以不用關(guān)注底層硬件的細(xì)節(jié)了。因此,大多數(shù)的多媒體軟件和多媒體框架就是通過openmax il實現(xiàn)了一種可以用統(tǒng)一的方式來讓codec和其他多媒體數(shù)據(jù)實現(xiàn)處理功能,屏蔽了底層硬件的差異性。1.4 本人主要工作在這個項目開發(fā)中,本人主要進(jìn)行的工作:1. 研究andro
29、id系統(tǒng)的多媒體框架。2. 研究openmax 框架的運行機制。3. 設(shè)計軟件的架構(gòu)。設(shè)計了openmax框架硬件編解碼的處于的層次,及openmax框架硬件編解碼的邏輯設(shè)計,對硬件控制,數(shù)據(jù)控制進(jìn)行了詳細(xì)的設(shè)計。4. 編寫openmax 模塊的的代碼,加入邏輯控制。5. 將功能集成到項目。6. 優(yōu)化代碼,提高編解碼效率。7. 測試項目,修改出現(xiàn)的問題。1.5 章節(jié)安排第二章:對android系統(tǒng)的介紹,描述android的結(jié)構(gòu)及多媒體框架的現(xiàn)狀。第三章:對openmax 的具體介紹,具體分析了openmax框架的關(guān)系和接口,為下一步設(shè)計做好準(zhǔn)備。第四章:對ope
30、nmax 框架進(jìn)行設(shè)計,詳細(xì)地闡述了如何設(shè)計整個框架。設(shè)計對硬件的控制,對數(shù)據(jù)的控制。第五章:對openmax 框架進(jìn)行實現(xiàn),詳細(xì)地闡述了如何實現(xiàn)整個框架。第六章:對openmax 框架的應(yīng)用,把openmax框架集成到項目里面,能夠在項目中遠(yuǎn)行。第七章:對openmax 框架的效果顯示第八章:對全文進(jìn)行總結(jié),并對進(jìn)一步工作進(jìn)行展望。第2章 android系統(tǒng)的介紹本章介紹了android操作系統(tǒng),首先簡要介紹了一下android系統(tǒng)的背景,然后分別從系統(tǒng)架構(gòu),多媒體框架和目前的編解碼等方面詳細(xì)的介紹了一下,并重點介紹了android多媒體框架中的ope
31、nmax的作用。最后給出了搭建開發(fā)環(huán)境的步驟并對開發(fā)步驟做出介紹。2.1 android系統(tǒng)的簡介由google牽頭和30多家業(yè)內(nèi)移動技術(shù)和無線應(yīng)用領(lǐng)域非常領(lǐng)先的企業(yè)組成的一個開放手機聯(lián)盟 (openhandsetalhance)同時發(fā)布了其android智能手機平臺 9。android一詞的原義就是指“機器人”,同時也是google于2007年11月發(fā)布的基于linux平臺上的開源智能手機操作系統(tǒng)的名稱。這個平臺由用戶使用界面、linux操作系統(tǒng)、應(yīng)用程序以及中間件一起組成,號稱是第一個為移動手機終端打造的非常強勁和全面的移動智能手機系統(tǒng)10。每當(dāng)谷歌發(fā)布它的新一版本的智能手機操作系統(tǒng)之后,
32、各家手機廠商都會把升級他們上一版本智能手機系統(tǒng)便會進(jìn)行了,同時也會把下一版本智能手機系統(tǒng)的消息放在互聯(lián)網(wǎng)上流出,這樣的形式目前已經(jīng)成為谷歌在推廣android手機操作系統(tǒng)的一種常用方式。在android2.3姜餅馬上發(fā)布的時候,android3.0系統(tǒng)蜂巢就會被曝光,當(dāng)各家手機廠商都在把自己的精力放在把android手機升級到android2.2操作系統(tǒng)的同時,國外媒體就會有消息傳出android下一版本手機操作系統(tǒng)名稱已經(jīng)被確定了,該操作系統(tǒng)的系列產(chǎn)品代號為ice cream sandwich,簡稱為ics,直譯過來的名字就是冰激凌三明治。并且谷歌方面已經(jīng)明確的告訴大家:android4.0
33、是把各手機系統(tǒng)與平板電腦系統(tǒng)融合在一起的產(chǎn)品,并沒有限定最低硬件要求,理論上來講,現(xiàn)有的android2.2/2.3設(shè)備都可以升級到android4.0。在硬件上沒有設(shè)限。android智能手機操作系統(tǒng)采用的是軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分成了三部分。底層linux內(nèi)核一般只提供了最基本的功能,其他的應(yīng)用軟件是由各設(shè)備生產(chǎn)公司自行開發(fā),當(dāng)然部分程序是以java編寫。2.2 android平臺的架構(gòu)如圖2.1所示,android基本上就是在嵌入式linux系統(tǒng)的上面再加上一些重要的手機應(yīng)用開發(fā)的軟件, 如果深入研究android系統(tǒng)架構(gòu),就會發(fā)現(xiàn)整體自底向上
34、主要是由4個主要層次構(gòu)成,包括linux kernel(linux內(nèi)核層),library(函數(shù)庫)和android runtime(android運行時庫),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ū)動模型等模塊。linux 內(nèi)核同時也是連接硬件和軟件棧之間的橋梁。2.2.2 library(函數(shù)庫) android 包含了c/c+庫,android系
35、統(tǒng)中的上層應(yīng)用程序可以調(diào)用這些庫。它們主要是通過android 應(yīng)用程序框架來為軟件開發(fā)者提供調(diào)用一些接口的服務(wù)。下面是android的主要核心庫:系統(tǒng)c庫:c系統(tǒng)的函數(shù)庫(libc),它是專門為基于嵌入式linux手機移動設(shè)備專門定制的;媒體庫:基于stagefright,該庫主要為音頻、視頻格式文件的回放和錄制,靜態(tài)圖像文件的編解碼的調(diào)用,編碼格式包括mpeg4、h.264、mp3、aac、amr、jpg和png;surface manager:管理圖像顯示的子系統(tǒng),同時為軟件提供了2d和3d圖層的無縫融合11;sgl:負(fù)責(zé)底層2d圖形的引擎;3d庫:在opengl es 1.0 api基
36、礎(chǔ)上實現(xiàn);該庫提供了可以使用3d硬件的加速或使用非常優(yōu)化的3d軟件加速;freetype:位圖(bitmap)和矢量(vector)字體顯示;sqlite庫:一個小型的數(shù)據(jù)庫引擎,可以被所有程序使用,并且功能非常強。2.2.3 android runtime(android運行時庫)android包含一個核心庫,為java編程語言核心類庫提供了各種可用的功能,使得每個android程序都是虛擬機中的一個實例,都有自己的進(jìn)程,擁有對立性。dalvik虛擬機為應(yīng)用程序提供了一個良好的遠(yuǎn)行環(huán)境,同時一個設(shè)備可以遠(yuǎn)行多個dalvik虛擬機。dalvik虛擬機執(zhí)行的是.dex文件。 2.2.4 appl
37、ication framework(應(yīng)用軟件架構(gòu))開發(fā)者使用所有api框架可以和核心應(yīng)用程序一樣的權(quán)限。該應(yīng)用程序的架構(gòu)設(shè)計簡化了組件的重用;每一個人都可以發(fā)布自己寫的應(yīng)用程序里面的功能塊,同時其他開發(fā)者也可以調(diào)用他的功能塊來開發(fā)應(yīng)用程序。同樣,由于應(yīng)用程序的可復(fù)用機制也使各個用戶可以非常方便地替換各個程序組件。每個軟件開發(fā)都會有服務(wù)和系統(tǒng)支撐,這其中包括:視圖(views):效果非常好可以擴展,可以被應(yīng)用程序調(diào)用,并且很豐富,它包括按鈕(buttons),列表(lists)、文本框(text boxes)、網(wǎng)格(grids)、甚至包括可嵌入的web瀏覽器;內(nèi)容提供器(content prov
38、iders):讓各個應(yīng)用程序可以實現(xiàn)數(shù)據(jù)的共享,可以一個程序訪問另外一個程序的數(shù)據(jù),實現(xiàn)咯數(shù)據(jù)的分享;資源管理器(resource manager):管理和訪問各種非代碼的資源,包含對本地字符串、布局文件(layout files)和圖形的管理; 2.2.5 application(應(yīng)用程序)android發(fā)布的時候會和它同一系列一些核心應(yīng)用程序包一起發(fā)布,該應(yīng)用程序重要包括java編寫的一些應(yīng)用程序,比如一些視頻播放器,攝像程序,圖片瀏覽等等。所有的應(yīng)用程序都是使用java語言編寫12。2.3 android系統(tǒng)的多媒體框架android的多媒體主要框架部分包含了應(yīng)用程序、java框架層、c
39、語言框架層、硬件抽象層等環(huán)節(jié)。媒體的播放的時候?qū)嶋H上就是由下層的opencore或stagefright等多媒體框架實現(xiàn)的13。android的系統(tǒng)的多媒體框架在android2.2版本之前主要使用的是opencore,在android2.3版本之后使用的是stagefright。具體的分析如下圖 2.2 android 多媒體播放整體框架最上層的java應(yīng)用程序是使用媒體uri(媒體文件或者流媒體)來作為多媒體框架輸入設(shè)置給媒體播放器,經(jīng)過了java框架層,到j(luò)ni層,在到本地框架層,一直設(shè)置到引擎pvplayer。這個過程就是為媒體設(shè)置了媒體uri的路徑,但是這個時候數(shù)據(jù)傳遞還沒有開始。當(dāng)
40、開啟了pvplayer,再進(jìn)入到pvplayer后開始進(jìn)行了解析,再根據(jù)媒體的格式把文件分成了音頻流(mp3,amp,aac等)和視頻流(h263,h264,mpeg4等),然后經(jīng)過編解碼器的處理,把數(shù)據(jù)變成原始數(shù)據(jù)(音頻通常是pcm,視頻通常是yuv或rgb格式)。再把音視頻原始數(shù)據(jù)放在音頻和視頻的輸出播放環(huán)節(jié)(揚聲器或者顯示屏等硬件)進(jìn)行輸出14-15。awesomeplayer是stagefright的核心類,創(chuàng)建并管理parser(mediaextractor), codec(omxcodec), render(awesomerendererer)及audioplayer等。音頻播放功
41、能流程通過調(diào)用awesomeplayer 的setdatasource 函數(shù)來設(shè)置數(shù)據(jù)源; awesomeplayer 通過調(diào)用mediaextractor的create 函數(shù)來識別該文件的格式,mediaplayer 判斷該文件為wma 格式后,會創(chuàng)建一個wmaextractor,在創(chuàng)建wmaextractor 的同時,wmaextractor 會解析文件頭,獲取文件中的相關(guān)信息。然后調(diào)用wmaextractor的gettrack 函數(shù)創(chuàng)建一個wmasource; awesomeplayer通過omxcodec 創(chuàng)建一個wmadecoder; awesomeplayer接著創(chuàng)建一個audio
42、player,并把wmadecoder 做為數(shù)據(jù)源傳給audioplayer,并調(diào)用audioplayer 的start 函數(shù); audioplayer 獲取wmadecoder中的相關(guān)參數(shù): 文件類型、采樣率、聲道數(shù),并根據(jù)該數(shù)據(jù)開啟audiosink,并把audiosinkcallback做為回調(diào)函數(shù)傳給audiosink。audioplayer 先調(diào)用wmadecoder 解第一幀數(shù)據(jù), 并把該數(shù)據(jù)傳給audiosink去播放,當(dāng)播放完成后audiosink 會調(diào)用回調(diào)函數(shù)audiosinkcallback 再取解碼后的數(shù)據(jù),audiosinkcallback又會調(diào)用fillbuffer
43、 函數(shù)獲取解碼后的原始數(shù)據(jù),解碼后數(shù)據(jù)如果被取完后,audioplayer又會調(diào)用wmadecoder 解下一幀數(shù)據(jù)給audiosink,來回反復(fù),直到文件中數(shù)全部被播放。在拉動滾動條時,上層會傳來seektime,經(jīng)audioplayer 傳給wmadecoder 再傳給wmaextractor,wmaextractor 根據(jù)上層傳來的seektime 判斷出要播放的原始數(shù)據(jù)的起始位置,然后從該位置讀取一個數(shù)據(jù)包傳給wmadecoder 解碼16。2.4 本章小結(jié)本章為全文的第二章,介紹了android操作系統(tǒng)構(gòu)成,重點介紹了android多媒體框架的組成,最后介紹了目前的編解碼。第3章 o
44、penmax 介紹本章主要分析了openmax 框架的主要運行的模式,介紹了幾個重要功能模塊和接口函數(shù)。和android中的情況。3.1 openmax 的簡介openmax是無授權(quán)費的,實現(xiàn)跨平臺的應(yīng)用程序接口api,目的是使媒體加速組件能夠在開發(fā)、集成和編程各個環(huán)節(jié)中能夠屏蔽硬件的差別同時實現(xiàn)接口統(tǒng)一,方便調(diào)用。也為設(shè)備提供比較全面的編解碼器和應(yīng)用程序來屏蔽硬件。openmax api將會和處理器一起提供,以使庫和編解碼器的開發(fā)者能夠高速有效地利用硬件芯片的完整加速潛能,并且無需擔(dān)心底層硬件結(jié)構(gòu)8。3.2 openmax的概述3.2.1 openmax標(biāo)準(zhǔn)化接
45、口17openmax是khronos公司制定的針對手持設(shè)備和嵌入式移動設(shè)備的行業(yè)標(biāo)準(zhǔn)。它是無授權(quán)費的,跨平臺的api 接口。openmax標(biāo)準(zhǔn)主要是針對嵌入式移動設(shè)備和手機移動設(shè)備的多媒體架構(gòu) 。并且在架構(gòu)底層上可以為多媒體文件進(jìn)行的codec或數(shù)據(jù)處理定義了一套完整統(tǒng)一的編程接口(openmax api),同時對多媒體數(shù)據(jù)處理的時候進(jìn)行了系統(tǒng)的封裝抽象,屏蔽了底層的結(jié)構(gòu),更加快速開發(fā)程序。因此, 大多數(shù)的多媒體軟件和多媒體框架都是通過openmax來實現(xiàn)一套非常完整統(tǒng)一的接口,讓codec和其他多媒體的數(shù)據(jù)處理功能變的更加方便,同時實現(xiàn)了跨越軟硬件平臺的可移植性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ā)起并起草的一個公開的技術(shù)標(biāo)準(zhǔn),2005 年12 月發(fā)布第一個版本,目前的最新版本是version 1.1。openmax il 作為實現(xiàn)音頻,視頻和圖像編解碼器與多媒體編解碼器的交互,并且統(tǒng)一的行為來支持組件。這些編解碼器或者是軟件解碼器,或者是硬件解碼器,或許是軟硬件的混合體
47、。openmax il提供了透明的媒體框架,為編解碼器提供一個系統(tǒng)抽象,它解決了不同媒體系統(tǒng)之間編解碼移植的問題。openmax api會和處理器一起提供的,為庫和編解碼器開發(fā)者可以高速有效地利用新器件的完整加速潛能,不需擔(dān)心其底層的硬件結(jié)構(gòu)。在架構(gòu)底層上為多媒體的編解碼和數(shù)據(jù)處理提供了統(tǒng)一的編程接口,對多媒體數(shù)據(jù)的處理功能進(jìn)行系統(tǒng)級抽象,為用戶屏蔽了底層的細(xì)節(jié)。因此,多媒體應(yīng)用程序和多媒體框架通過openmax il可以以一種統(tǒng)一的方式來使用編解碼和其他多媒體數(shù)據(jù)處理功能,具有了跨越軟硬件平臺的移植性。openmax il目前已經(jīng)成為了事實上的多媒體框架標(biāo)準(zhǔn)。嵌入式處理器或者多媒體編解碼模塊
48、的硬件生產(chǎn)者,常常提供標(biāo)準(zhǔn)的openmax il層的軟件接口,這樣軟件的開發(fā)者就可以基于這個層次的標(biāo)準(zhǔn)化接口進(jìn)行多媒體程序的開發(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)用程序所需的功能,每個組件對應(yīng)一個功能模塊, 組件可以分類為輸入(sources),輸出(sinks),過濾器(filters),分離
49、器(splitters),混合器(mixers)等。組件端口主要用于組件數(shù)據(jù)的輸入輸出。用于發(fā)送數(shù)據(jù)到端口和從端口獲取數(shù)據(jù)的函數(shù)分別是emptythisbuffer 和fillthisbuffer,這兩個調(diào)用均是異步的。每個openmax il 組件都要經(jīng)歷一系列的狀態(tài)轉(zhuǎn)換。組件通過openmax il 內(nèi)核的調(diào)用加載并轉(zhuǎn)換為加載(loaded)狀態(tài),其他的狀態(tài)轉(zhuǎn)換通過il client 與組件的直接通信完成。il client 通過omx_sendcommand 函數(shù)使用omx_commandstateset 命令控制組件改變狀態(tài)19。其中,openmax il層主要實現(xiàn)了openmax i
50、l中的各個組(component)。對下層來說,openmax il可以直接調(diào)用各種codec實現(xiàn)。對上層來說,openmax il可以向應(yīng)用程序提供接口供應(yīng)用程序調(diào)用。openmax il主要內(nèi)容如下所示:l 客戶端(client):openmax il的調(diào)用者。l 組件(component):openmax il的單元,每一個組件實現(xiàn)一種功能。l 端口(port):組件的輸入輸出接口。l 隧道化(tunneled):讓兩個組件直接連接的方式。openmax il的基本運作過程如圖3.2所示圖 3.2 openmax il 組件工作流程openmax il客戶端調(diào)用了四個openmax il
51、組件實現(xiàn)的編解碼器功能。四個組成分別是source組件、host組件、accelerator組件和sink組件。其中,source組件只有一個輸出端口,host組件有一個輸入端口和輸出端口; accelerator組件有一個輸入端口,使用了硬件編解碼器,以加快整個環(huán)節(jié)。accelerator組件和sink組件,通過私人通信,組件端口一直沒有明確的組成部分。openmax il在使用的時候,處理數(shù)據(jù)流也會有自己的不同的處理方式:既有經(jīng)過客戶端的,也有不經(jīng)過客戶端的。source組件到host組件的數(shù)據(jù)流就是需要客戶端的;而host組件到accelerator組件的數(shù)據(jù)流就沒有經(jīng)過客戶端,使用了隧
52、道化(tunneled)的方式;accelerator組件和sink組件甚至可以使用私有的通訊方式。openmax il的組件是openmax il實現(xiàn)的核心內(nèi)容,一個組件以輸入、輸出端口為接口,端口可以被連接到另一個組件上。外部對組件可以發(fā)送命令,還進(jìn)行設(shè)置和獲取參數(shù)、獲取配置等操作。組件的端口可以包含緩沖區(qū)(buffer)的隊列。openmax il的組件的處理的核心內(nèi)容就是:把buffer放在輸入端口,如何進(jìn)行解碼或者編碼操作處理;再把buffer從輸出端口拿出,即是將解碼或者編碼后的數(shù)據(jù)進(jìn)行輸出,由此多組件相聯(lián)接可以構(gòu)成流式的處理。openmax il中一個組件的結(jié)構(gòu)如圖3.3所示圖
53、3.3 openmax il 組件結(jié)構(gòu)openmax il的組件功能和它定義的端口類型密切相關(guān),通常情況下:只有一個輸出端口的,為source組件;只有一個輸入端口的,為sink組件;有多個輸入端口,一個輸出端口的為mux組件;有一個輸入端口,多個輸出端口的為demux組件;輸入輸出端口各一個組件的為中間處理環(huán)節(jié),這是最常見的組件。 不同的openmax il組件它的端口支持的數(shù)據(jù)類型也不同。例如,對于一個輸入、輸出端口各一個的組件,它的輸入端口可以是wma格式的數(shù)據(jù),輸出端口可以是pcm格式的數(shù)據(jù),那么這就是一個wma的解碼組件。隧道化(tunneled)是關(guān)于組件連接方式的一個概念。通過隧
54、道化可以將不同的組件的一個輸入端口和一個輸出端口連接到一起,在這種情況下,兩個組件的處理過程合并,兩個組件共同處理數(shù)據(jù)。特別的,對于一個輸入端口和一個輸出端口的組件,兩個組件可以作為類似一個組件來使用。但是這種方式在android opencore里沒有用到。3.2.1.2 openmax dl(development layer) openmax dl定義了一套api ,它是音頻,視頻和圖像功能模塊的集合。它包括了音頻信號的處理功能,如 fft 和 filter ,圖像原始處理,如顏色空間的轉(zhuǎn)換,和視頻的原始處理,以實現(xiàn)例如 mpeg-4 ,h.264 ,mp3,aac和jpeg 等編解碼器
55、的優(yōu)化。openmax 通過idl和adl來加速,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就是一個為多媒體應(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+類型的接口,并且使用了android的binder ipc機制。android封裝openmax的接口被stagefright使用,opencore沒有使用這個接口,而是使用其他形式對openmax il層接口進(jìn)行封裝。android系統(tǒng)opencore的編解碼部分采用對openmax il層進(jìn)行封裝來使用,使用的是標(biāo)準(zhǔn)openmax il層的接口
57、,但是這些接口google又進(jìn)行了簡單的封裝,并沒有直接使用openmax il層提供的純c接口。封裝后的openmax il組件很容易被嵌入到stagefright中。3.2.3 android 中openmax的實現(xiàn)的內(nèi)容android中opencore使用的主要是openmax的編解碼功能。雖然openmax也可以生成輸入、輸出、文件解析和構(gòu)建等組件,但是在各個系統(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中實現(xiàn)openmax il層和標(biāo)準(zhǔn)的openmax il層的方式基本相同,一般需要實現(xiàn)以下兩個環(huán)節(jié)。Ø 編解碼驅(qū)動程序:位于linux內(nèi)核空間,需要通過linux內(nèi)核調(diào)用驅(qū)動程序,通常使用非標(biāo)準(zhǔn)的驅(qū)動程序。Ø openmax il層:根據(jù)openmax il層的標(biāo)準(zhǔn)頭文件實現(xiàn)不同功能的組件。android中還提供了openmax的適配層接口(對openmax il的標(biāo)準(zhǔn)組件進(jìn)行封裝適配),它作為android本地層接口,可以被android
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年特許經(jīng)營合同:快餐連鎖品牌擴展協(xié)議
- 2025年標(biāo)識牌原材料供應(yīng)與質(zhì)量保障合同3篇
- 2024年田土承包經(jīng)營權(quán)投資合作合同3篇
- 2024某局礦產(chǎn)資源開發(fā)合同
- 美發(fā)知識培訓(xùn)課件
- 2024橋涵工程人工承包協(xié)議一
- 《模具知識培訓(xùn)》課件
- 2024年高速公路護(hù)坡工程專項勞務(wù)合作合同版B版
- 中國戲曲學(xué)院《新媒體策劃》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年設(shè)備安裝與維修合同6篇
- 代理商工作總結(jié)
- 戰(zhàn)略管理徐飛版
- 2023浙江省杭州市中考語文真題試卷和答案
- 銀行防詐騙知識宣傳
- 【實戰(zhàn)篇】華為IPD流程的應(yīng)用案例
- spa浴按摩是怎么樣的
- 統(tǒng)編版六年級語文上冊專項 專題04標(biāo)點符號及作用-原卷版+解析
- Book-1-Unit-3-going-positive教學(xué)設(shè)計文檔
- 績效管理外文翻譯外文文獻(xiàn)中英翻譯-績效管理外文文獻(xiàn)
- 建立信息共享和預(yù)警機制
- 2023年湖北省鄂州市鄂城區(qū)數(shù)學(xué)七年級第一學(xué)期期末綜合測試試題含解析
評論
0/150
提交評論