日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

簡述Android重力感應(yīng)實現(xiàn)方式

出處:again_gyf 發(fā)布于:2011-08-25 14:08:28

 

  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)器負責(zé)偵測存儲器的狀態(tài),計算存儲器的重力加速度值;處理器則對加速度值是否超出安全范圍進行判斷;而控制器則負責(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的輸入與輸出類型標示和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,有的話傳回其識別標識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

 ?。↗NIEnv *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多媒體框架的源代碼的解讀。

 



  
關(guān)鍵詞:Android

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!