0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

采用Android多媒體框架實現(xiàn)重力感應(yīng)

電子設(shè)計 ? 作者:電子設(shè)計 ? 2018-10-23 10:26 ? 次閱讀

Android一詞的本義指“機器人”,同時也是Google于2007年11月5日宣布的基于Linux平臺的開源手機操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,號稱是首個為移動終端打造的真正開放和完整的移動軟件。目前,最新版本為Android 2.4 Gingerbread和Android 3.0 Honeycomb.Android是基于Linux內(nèi)核的操作系統(tǒng),是Google公司在2007年11月5日公布的手機操作系統(tǒng)。它采用了軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分為三部分。底層Linux內(nèi)核只提供基本功能,其他的應(yīng)用軟件則由各公司自行開發(fā),部分程序以Java編寫。我們可以通過本文介紹的Android多媒體框架的源碼解讀,來具體分析一下這方面的基本知識。

重力感應(yīng)裝置包括感應(yīng)器、處理器控制器三個部分。感應(yīng)器負(fù)責(zé)偵測存儲器的狀態(tài),計算存儲器的重力加速度值;處理器則對加速度值是否超出安全范圍進(jìn)行判斷;而控制器則負(fù)責(zé)控制將磁頭鎖定或者釋放出安全停泊區(qū)。一旦感應(yīng)器偵測并經(jīng)處理器判斷當(dāng)前的重力加速度超過安全值之后,控制器就會通過硬件控制磁頭停止讀寫工作,并快速歸位,鎖定在專有的磁頭停泊區(qū)。這一系列動作會在200毫秒內(nèi)完成。當(dāng)感應(yīng)裝置探測到加速度值恢復(fù)到正常值范圍之后,產(chǎn)品才會恢復(fù)工作。

Android多媒體框架的代碼在以下目錄中:external/opencore/。這個目錄是Android多媒體框架的根目錄,其中包含的子目錄如下所示:

* android:這里面是一個上層的庫,它基于PVPlayer和PVAuthor的SDK實現(xiàn)了一個為Android使用的Player和Author.

* baselibs:包含數(shù)據(jù)結(jié)構(gòu)和線程安全等內(nèi)容的底層庫

* codecs_v2:這是一個內(nèi)容較多的庫,主要包含編解碼的實現(xiàn),以及一個OpenMAX的實現(xiàn)

* engines:包含PVPlayer和PVAuthor引擎的實現(xiàn)

* extern_libs_v2:包含了khronos的OpenMAX的頭文件

* fileformats:文件格式的據(jù)具體解析(parser)類

* nodes:編解碼和文件解析的各個node類。

* oscl:操作系統(tǒng)兼容庫

* pvmi: 輸入輸出控制的抽象接口

* protocols:主要是與網(wǎng)絡(luò)相關(guān)的RTSP、RTP、HTTP等協(xié)議的相關(guān)內(nèi)容

* pvcommon:pvcommon庫文件的Android.mk文件,沒有源文件。

* pvplayer:pvplayer庫文件的Android.mk文件,沒有源文件。

* pvauthor:pvauthor庫文件的Android.mk文件,沒有源文件。

* tools_v2:編譯工具以及一些可注冊的模塊。

Splitter的定義與初始化

以wav的splitter為例,在fileformats目錄下有解析wav文件格式的pvwavfileparser.cpp文件,在nodes目錄下有pvmf_wavffparser_factory.cpp,pvmf_wavffparser_node.h, pvmf_wavffparser_port.h等文件。

我們由底往上看,vwavfileparser.cpp中的PV_Wav_Parser類有InitWavParser(),GetPCMData(),RetrieveFileInfo()等解析wav格式的成員函數(shù),此類應(yīng)該就是最終的解析類。我們搜索PV_Wav_Parser類被用到的地方可知,在PVMFWAVFFParserNode類中有PV_Wav_Parser的一個指針成員變量。

再搜索可知,PVMFWAVFFParserNode類是通過PVMFWAVFFParserNodeFactory的CreatePVMFWAVFFParserNode()成員函數(shù)生成的。而CreatePVMFWAVFFParserNode()函數(shù)是在PVPlayerNodeRegistry::PVPlayerNodeRegistry()類構(gòu)造函數(shù)中通過PVPlayerNodeInfo類被注冊到Oscl_Vector 的vector中,在這個構(gòu)造函數(shù)中,AMR,mp3等node也是同樣被注冊的。

由上可知,Android多媒體框架中對splitter的管理也是與ffmpeg等類似,都是在框架的初始化時注冊的,只不過Opencore注冊的是每個splitter的factory函數(shù)。

綜述一下splitter的定義與初始化過程:

每個splitter都在fileformats目錄下有個對應(yīng)的子目錄,其下有各自的解析類。

每個splitter都在nodes目錄下有關(guān)對應(yīng)的子目錄,其下有各自的統(tǒng)一接口的node類和node factory類。

播放引擎PVPlayerEngine類中有PVPlayerNodeRegistry iPlayerNodeRegistry成員變量。

在PVPlayerNodeRegistry的構(gòu)造函數(shù)中,將 AMR, AAC, MP3等splitter的輸入與輸出類型標(biāo)示和node factory類中的create node與release delete接口通過PVPlayerNodeInfo類push到Oscl_Vector iType成員變量中。

當(dāng)前Splitter的匹配過程

PVMFStatus PVPlayerNodeRegistry::QueryRegistry(PVMFFormatType& aInputType, PVMFFormatType& aOutputType, Oscl_Vector& aUuids)函數(shù)的功能是根據(jù)輸入類型和輸出類型,在已注冊的node vector中尋找是否有匹配的node,有的話傳回其唯一識別標(biāo)識PVUuid.

從QueryRegistry這個函數(shù)至底向上搜索可得到,在android中splitter的匹配過程如下:

android_media_MediaPlayer.cpp之中定義了一個JNINativeMethod(JAVA本地調(diào)用方法)類型的數(shù)組gMethods,供java代碼中調(diào)用MultiPlayer類的setDataSource成員函數(shù)時找到對應(yīng)的c++函數(shù)

1.{“setDataSource”, “(Ljava/lang/String;)V”, (void *)

android_media_MediaPlayer_setDataSource},

2.static void android_media_MediaPlayer_setDataSource

(JNIEnv *env, jobject thiz, jstring path)

此函數(shù)中先得到當(dāng)前的MediaPlayer實例,然后調(diào)用其setDataSource函數(shù),傳入路徑

3.status_t MediaPlayer::setDataSource(const char *url)

此函數(shù)通過調(diào)getMediaPlayerService()先得到當(dāng)前的MediaPlayerService, const sp& service(getMediaPlayerService());

然后新建一個IMediaPlayer變量, sp player(service-》create(getpid(), this, fd, offset, length));

在sp MediaPlayerService::create(pid_t pid, const sp& client, const char* url)中

調(diào)status_t MediaPlayerService::Client::setDataSource(const char *url)函數(shù),Client是MediaPlayerService的一個內(nèi)部類。

在MediaPlayerService::Client::setDataSource中,調(diào)sp MediaPlayerService::Client::createPlayer(player_type playerType)

生成一個繼承自MediaPlayerBase的PVPlayer實例。

以上就是對Android多媒體框架的源代碼的解讀。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19382

    瀏覽量

    230475
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16416

    瀏覽量

    178758
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3939

    瀏覽量

    127641
收藏 人收藏

    評論

    相關(guān)推薦

    CEVA推出用于高能效多內(nèi)核系統(tǒng)的AMF - Android多媒體框架

    全球領(lǐng)先的硅產(chǎn)品知識產(chǎn)權(quán)(SIP)平臺解決方案和數(shù)字信號處理器(DSP)內(nèi)核授權(quán)廠商CEVA公司針對基于Android系統(tǒng)推出全新低能耗軟件框架,它使用異構(gòu)CPU和DSP系統(tǒng)架構(gòu),能夠有效地降低復(fù)雜多媒體應(yīng)用所需的功耗。
    發(fā)表于 05-06 10:24 ?1658次閱讀

    多媒體應(yīng)用開發(fā)

    主要內(nèi)容多媒體框架(MMF)客戶端API音頻程序開發(fā)視頻程序開發(fā)攝像頭使用
    發(fā)表于 03-08 22:50

    基于ARM Linux QT的掌上多媒體系統(tǒng)的設(shè)計和實現(xiàn) (1)

    跟著人們糊口水平的進(jìn)步,消費結(jié)構(gòu)發(fā)生了巨大變化,消費者用于娛樂方面的支出在總支出中所占的比例正在不斷擴大。掌上多媒體系統(tǒng)可以知足人們對于試聽以及便攜的需求,另外還可以實現(xiàn)一些其他功能,如圖片瀏覽
    發(fā)表于 08-04 10:15

    多媒體空中鼠標(biāo)

    項目說明:多媒體空中鼠標(biāo)是一個集無線傳輸、多媒體控制、教學(xué)激光筆和傳統(tǒng)鼠標(biāo)功能于一身的創(chuàng)新生活作品。它擺脫了傳統(tǒng)鼠標(biāo)有數(shù)據(jù)線和必須放在平臺上的命運,只要在空中擺動就可以實現(xiàn)指針的偏移,達(dá)到控制的目的
    發(fā)表于 10-31 18:07

    多媒體空中鼠標(biāo)

    `作品進(jìn)展:目前已處于調(diào)試狀態(tài),空中鼠標(biāo)是利用靜態(tài)重力感應(yīng)來控制電腦的鼠標(biāo)指針,多媒體的功能主要體現(xiàn)在對電腦的各個軟件的控制和對家庭不同電器的控制,例如:控制PPT,控制音樂軟件,控制視頻播放軟件
    發(fā)表于 12-15 18:15

    多媒體的FPGA實現(xiàn)PDF

    多媒體的FPGA實現(xiàn)PDF
    發(fā)表于 10-26 21:14

    采用Au1200實現(xiàn)多媒體播放終端設(shè)計

    終端的設(shè)計方案。 2 硬件設(shè)計 2.1 功能分析 表1對新一代網(wǎng)絡(luò)播放終端與獨立播放機進(jìn)行了比較。為了實現(xiàn)網(wǎng)絡(luò)遠(yuǎn)程控制播放,多媒體播放終端必須具備以下功能:1)連接服務(wù)器:啟動后,自動連接遠(yuǎn)程服務(wù)器;2
    發(fā)表于 04-25 07:00

    怎么實現(xiàn)在嵌入式環(huán)境下使用QT多媒體框架?

    要在嵌入式環(huán)境下使用QT多媒體框架,必須包含第3方多媒體庫QT本身以插件的方式使用第3方多媒體庫:1 插件是動態(tài)庫方式,可以動態(tài)更新2 靜態(tài)插件的方式,只是靜態(tài)編譯QT時集成插件,不可
    發(fā)表于 10-27 09:34

    ART-PI重力感應(yīng)無線智能小車設(shè)計實現(xiàn)

    實現(xiàn)無線重力感應(yīng)遙控小車。終極目標(biāo):發(fā)射板采用MPU6050采集陀螺儀數(shù)據(jù),通過wifi+MQTT協(xié)議發(fā)布主題至Onenet服務(wù)器,控制板通過wifi+MQTT訂閱主題,
    發(fā)表于 02-10 06:39

    HarmonyOS多媒體框架介紹

    可以通過該接口調(diào)用實現(xiàn)對音頻數(shù)據(jù)的采集。Audio Manager提供了音頻流類型、音量、音頻設(shè)備管理等接口,開發(fā)者可以通過調(diào)用該接口實現(xiàn)對相關(guān)音頻對象的管理。 以上是多媒體框架的相
    發(fā)表于 01-03 16:36

    凌陽多媒體獲授權(quán)采用CEVA MM2000多媒體解決方案開發(fā)

    凌陽多媒體獲授權(quán)采用CEVA MM2000多媒體解決方案開發(fā)便攜式多媒體處理器 硅產(chǎn)品知識產(chǎn)權(quán) (SIP) 平臺解決方案和數(shù)字信號處理器 (DSP) 內(nèi)核授權(quán)廠商CEVA公司宣布,凌
    發(fā)表于 09-16 09:59 ?914次閱讀

    Viosoft推出針對MIPS-Based數(shù)字多媒體設(shè)計的A

    Viosoft推出針對MIPS-Based數(shù)字多媒體設(shè)計的Android采用套件 日前,Viosoft公司宣布針對MIPS-Based數(shù)字多媒體設(shè)計推出
    發(fā)表于 12-08 08:42 ?1224次閱讀

    基于JMF的多媒體遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計

    首先簡單介紹了多媒體遠(yuǎn)程監(jiān)控系統(tǒng)的概念和Java多媒體框架(JMF)的優(yōu)點;然后給出了多媒體遠(yuǎn)程監(jiān)控系統(tǒng)的系統(tǒng)結(jié)構(gòu)設(shè)計;并重點論述了實現(xiàn)
    發(fā)表于 09-20 16:05 ?15次下載
    基于JMF的<b class='flag-5'>多媒體</b>遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計

    軟方電子:android車載多媒體終端

    Android車載多媒體終端,“硬件+軟件”全套解決方案,具備很強的擴展性,豐富的免費應(yīng)用,可以實現(xiàn)對汽車導(dǎo)航、信息、娛樂綜合系統(tǒng)的深度定制。
    的頭像 發(fā)表于 10-10 10:24 ?1979次閱讀

    HarmonyOS多媒體框架介紹

    作為一款全新的面向全場景的分布式操作系統(tǒng),不斷創(chuàng)新,致力于為開發(fā)者提供更好、更高效的使用體驗。接下來讓我們一起學(xué)習(xí)了解下HarmonyOS中的多媒體框架的相關(guān)知識吧! 多媒體框架介紹結(jié)
    的頭像 發(fā)表于 12-30 19:15 ?792次閱讀