亚洲高清在线观看_精品超碰_天天插天天干_欧美精品区_黄毛片视频_精品一区视频

Android重力感應實現方式簡介

來源:網絡

點擊:826

A+ A-

所屬頻道:新聞中心

關鍵詞: Android,重力感應

      Android中對于圖形界面以及多媒體的相關操作比較容易實現。而且對于大多數手機用戶來說,他們主要也就是根據這些方面的功能來對系統那個進行修改。我們可以通過本文介紹的Android多媒體框架的源碼解讀,來具體分析一下這方面的基本知識。

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

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

      * baselibs:包含數據結構和線程安全等內容的底層庫

      * codecs_v2:這是一個內容較多的庫,主要包含編解碼的實現,以及一個OpenMAX的實現

      * engines:包含PVPlayer和PVAuthor引擎的實現

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

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

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

      * oscl:操作系統兼容庫

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

      * protocols:主要是與網絡相關的RTSP、RTP、HTTP等協議的相關內容

      * 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格式的成員函數,此類應該就是最終的解析類。我們搜索PV_Wav_Parser類被用到的地方可知,在PVMFWAVFFParserNode類中有PV_Wav_Parser的一個指針成員變量。

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

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

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

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

      每個splitter都在nodes目錄下有關對應的子目錄,其下有各自的統一接口的node類和node factory類。

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

      在PVPlayerNodeRegistry的構造函數中,將 AMR, AAC, MP3等splitter的輸入與輸出類型標示和node factory類中的create node與release delete接口通過PVPlayerNodeInfo類push到Oscl_Vector《PVPlayerNodeInfo, OsclMemAllocator》 iType成員變量中。

      當前Splitter的匹配過程

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

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

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

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

      android_media_MediaPlayer_setDataSource},

      2.static void android_media_MediaPlayer_setDataSource

      (JNIEnv *env, jobject thiz, jstring path)

      此函數中先得到當前的MediaPlayer實例,然后調用其setDataSource函數,傳入路徑

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

      此函數通過調getMediaPlayerService()先得到當前的MediaPlayerService, const sp《IMediaPlayerService》& service(getMediaPlayerService());

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

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

      調status_t MediaPlayerService::Client::setDataSource(const char *url)函數,Client是MediaPlayerService的一個內部類。

      在MediaPlayerService::Client::setDataSource中,調sp《MediaPlayerBase》 MediaPlayerService::Client::createPlayer(player_type playerType)

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

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

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    主站蜘蛛池模板: 日韩美一区二区 | 91久久国产综合精品女同我 | 91精品久久久久 | 在线视频观看国产 | 国产日韩欧美高清 | 涩五月婷婷 | 精品久久久久久久久中文字幕 | 一区二区免费看 | 国产传媒一区二区三区四区五区 | 亚洲国产精品日韩在线 | 欧美综合自拍亚洲综合 | 真人一级一级毛片免费观看 | 一级毛片特黄久久免费看 | 欧美gv在线 | 精品久久久久国产 | 欧美成人精品一级高清片 | 成人免费大片a毛片 | 日韩欧美三级视频 | 亚洲欧美韩日 | 欧美另类网 | 亚洲欧美日韩在线观看播放 | 久久久久成人精品一区二区 | 自拍偷拍日韩 | 亚洲日韩在线观看 | 欧美亚洲综合在线观看 | 国产精品日韩 | 欧美视频亚洲视频 | 国产精品成人一区二区1 | 国产成人欧美一区二区三区的 | 国产精品美女久久久久 | 日韩欧美精品 | 高清视频一区 | 久久国产欧美日韩高清专区 | 天堂va欧美ⅴa亚洲va一国产 | 亚洲va乱码一区二区三区 | 韩国在线视频 | 久久精品国产99久久99久久久 | 亚洲小视频在线 | 国产免费资源高清小视频在线观看 | 国产一区亚洲欧美成人 | 国产精品久久久久9999 |