智汇工业-智慧工业、智能制造及工业智能、工业互联门户网站,专业的工业“互联网+”传媒

Android重力感應實現方式簡介

來源:網絡

點擊:821

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

    (審核編輯: 智匯小新)

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

    主站蜘蛛池模板: 山西配电柜,高低压成套柜,太原高低压柜,山西开关柜,箱变壳体_山西雷隆电柜电气设备有限公司 | 网带式等温正火生产线_燃气式铝合金加热炉_燃气式烘干窑炉-湖州中科炉业科技有限公司 | 人民交通网-人民交通杂志官网 | 深圳车牌识别系统厂家_人脸识别厂家_通道闸厂家_车位引导系统_智慧社区管理系统_深圳市利普诺科技有限公司官网 | 上海鑫迪机械有限公司 上海科蜀智能机械有限公司 | 全自动贴标机厂家-深圳市优斯迪自动贴标机官网 | 自恢复保险丝_贴片保险丝_插件保险丝_力特保险丝_力特经销商_SMD贴片保险丝_一次性保险丝厂家—深圳市集电通实业有限公司 | 意优教育|意大利留学中介_意大利留学费用_意大利申请条件_北京意大利语培训学校 | 伸缩机厂家-现货快递物流伸缩皮带机|装车输送机-乐清市华森自动化设备有限公司 | 天津实验室纯水机-GMP认证制药纯化水设备-天津开发区瑞尔环保科技有限公司 | 吸音板_隔音板多少钱_降噪声学材料_环保阻燃防火_吸声装饰工程定制_厂家价格直供 - 佛山天阶声学材料厂 | 射频导纳物位开关|雷达液位计|安全光栅光幕传感器|音叉料位开关|两级跑偏开关|双向拉绳开关|纵向撕裂保护装置-山东卓信机械有限公司 | 硫酸、硫酸铵、氯磺酸、氯化亚砜、硫酸钾、对位酯生产销售 - 河北和合化工有限公司 | 世界酒店网|世界酒店论坛|世界酒店联盟大会| 山东茶之恋杯业有限公司| 首页 菲律宾海运双清|马尼拉海运双清|广州菲律宾专线|广州通达供应链有限公司 | 徐州户外广告,标识标牌,展陈空间,精神堡垒-徐州雅努思文化发展有限公司 | 泥浆振动筛|卧式泥浆搅拌器|泥浆离心机|泥浆处理固控设备_沧州宏宇石油机械有限公司 | 精密电动平移台|光学隔振平台|手动位移台|隔振平台|电动滑台-北京集科仪器 | 云南打砂机_昆明制砂机_云南砂石生产线_昆明洗砂机_昆明除尘设备_云南昆明滇重矿山机械设备有限公司 | 耐磨工业软管,PTFE耐腐蚀软管,耐磨喷砂胶管,超耐磨软管厂家,漯河利通液压管利通科技-耐磨工业软管,PTFE耐腐蚀软管,耐磨喷砂胶管,超耐磨软管厂家,漯河利通液压管利通科技 | 围墙护栏,护栏网,围栏,锌钢栅栏,护栏网厂家--安平县沃达金属丝网制造有限公司 | 威学一百-专注国际学校择校备考-DSE-A-level-雅思-托福-OSSD-港澳台联考-AP-IGCSE-IB-AMC-多邻国-PTE-SAT-SSAT-小语种(如日语,韩语,德语,法语,西班牙语,意大利语,俄语,泰语)等考试培训,为出国留学学生提供个性化定制性学习方案,线下实体面授+线上网络课程, 提供一对一,小班课等多种班型 | 网络广播_公共广播系统_校园,学校数字ip,itc智能广播系统方案 | 辽宁鑫宇实验室系统工程有限公司| 配电箱自动生产线-配电箱生产线设备-山东炜桦智能 | 活性炭吸附设备,UV光氧废气处理设备,破碎机专用除尘器,催化燃烧设备厂家-河北碧清环保设备有限公司 | 慢直播摄像头厂家,监控直播摄像机厂家,景区慢直播设备,rtmp推流直播摄像头,实时摄像头监控直播-监控慢直播厂家:专注监控慢直播系统解决方案 | 昆明纸箱厂-礼盒定制-包装盒定做-纸箱厂-云南包掌柜包装有限公司 | 潍坊博发动力设备有限公司| 重大事件回顾:三亚哪里可以打炮?2025年最全实战攻略带你玩转真枪射击 | 曙海培训-仿真培训Linux培训html5培单片机培训PCB培训python培训PLC培训C语言培训android培训物联网培训无线电培训欧姆龙培训工业机器人培训5G培训Hadoop培训CFD培训项目外包开发咨询 | 徐州户外广告,标识标牌,展陈空间,精神堡垒-徐州雅努思文化发展有限公司 | 天之水网_新时代主流门户网站 十大文明网,主流新媒 、 值得信赖、关注我、温暖你! | 洗地机,洗地机价格,扫地机,工业吸尘器,手推式洗地机,驾驶式洗地机,北京洗地机【北京高美环保科技有限公司】 | 厦门鼎星五金制品有限公司-厦门弹簧,电池簧,扣簧 | 小型静音无油空压机价格-医用无油制氧空气压缩机-浙江盛源水润滑空压机制造有限公司 | 涂料分散剂_水墨分散剂-厚洹化学水性色浆助剂厂家 | 手术无影灯生产厂家-提供电动手术台,电动产床定制与批发-山东华辰医疗设备有限公司 | 苏州空气压缩机-无油涡旋空压机-真空泵价格-变频空压机-苏州赫利亚斯气体技术有限公司 | 医盟网-全国首家医疗信息化行业门户网站 |