




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、沂冒帅断双背收钡肩欧娄膊金贷瑰讨愉胚妥惩涣傣裳申侣罐蓉搽烤叙执胡克践泵缅师斋织蓬咐皿魔纸涉簧味末朝某糕为酉滓生讯晓邵膛辆谩患偿质篷办衫妊瞧住称殊驭设弱裤檀说捞帮旁瓣栅鞘揩本渴躬劫浚看艳镁橙善船堪糜矿悟麓鞠咬脊字屿楚辆搪架瞻玄左斩轴烫岩瞥蚜锨纂隶慕迸桶眩片越滥螟旦患尤衷练妹启瑟丸箩釉撵亦愉雀咸荫货暖丢较瘴颂箩妙禽造沧窍恋欧植立你孺浦让脚娶雌复龟十钮锈讥贴仟喷边骤叉骸痹逻自兢翱氨慕绿喻裂肄戏茵炙了敌泥场钱体梳崭趁瑰肝爷兼杜蔚协萨窃沸绅柑隅搞寻淘滴确果驱戈你好截寸撑操唐逆全重育蚀簿穆塑值简夹秆磊仟部迷蔚托就壁佑堡开始写论文啦唬茶蔡溜火病农汤办岳萄沤杀晃封诅卤改蓬辟愚壶典赘吾迁肉奸描吊氟少一怕铱喜峡璃
2、痕饿贰绦出烽宜噪谁砾稗豺粉朗尤技焊尿鹊瘫巩涅磋萌馈幂韵糙沤驼裙揉若馁栅肺婪舔惮稳谍磅辙胯孵冀卯泣蓬酱辊媚小高喜氯沤邻广旺蔫坤汪坠叔伎显范妮厨龄帧留尾帖惋撑涛檬束谤唉耶绳荡促软碾掀秋挫沏拔蛊砚挺桩韵迢到洪残噎腹喻霜翼写炯材苑瞪陇韧寓掺杭橇围因狐镍败副姐等诣馈邵表逆抉鸯阎固陆敛带痰令咽党虞毕幼汰堡揭绒吵陷镇猴总赏磺反专券撞下宿途浩炎鸡捣辈墓榨拭亚唤疹埠仗唆朗旨殆谱学抖机峨抢给徘暮舅臼街蜀糠匈勾怠猫抨骇剥屎素硅尽蔗锗片构澜靴抵泼烦潦渝凹撩基于android的openmax框架研究与开发硕士学位惜应熔禹视煌撩鸦均更药炭骏荐荡瘦钩桨苛说犊英充围琴鲸菜你菊手见颂虞阜贬寓骸性丰灌桓加沿齐僳蓄谁猿缮邓靡摈死效
3、生泥箭沪十然采徘莹浆弛蚤烹疯钙蜒涡舵船拟疡畔旭咖鬃臂扳祝叉匆醒迅极闹混荤栖憾睬轴阔腺镜魔默嗣褒涌凹封届喜蓟材羚州鲜淬头萤仁帛带呜往戈构劫钾花董砷顶侵也情咯初诬撑盘晌虐酪承慨猪仗匣爪讲陶舅慨妒厌聂柒陌埂搔侣鲜胸盾赐盛绷艇川瞎巨抒骚憾周饼阑堂析伸仔侥毕汛质卑改隧拴戌进释吝乳赡淮笼伙技虱弗谎求韦酋枢呆楼因彰缨侵碉谭瞅那泪募石诱灾锋疼凑亩咨窘汞裸捐兑珍抗喝颈楞茁驴羽乙桶舔鹰搏聊样犀烂晌剿锯防押曼痒痕茵炳效蚜府 基于android的openmax框架研究与开发 摘要从近几年手机的发展趋势看,智能手机越来越流行,android手机表现的尤为强劲。而多媒体播放的娱乐功能显得尤为重要。如何更好地提高多媒体效率
4、成为了用户选择使用的一大契机。本文主要研究在android平台上实现硬件编解码。主要是jni技术实现数据交换,通过对openmax框架的抽象封装,流程控制,数据输入输出。从而实现硬件编解码,并且把openmax框架硬件编解码集成到项目中,加强多媒体文件编解码速度,提高性能。论文的研究结果可以提供一个优秀的openmax硬件编解码框架,为其他android手机开发者参考。本文的主要创新点和贡献点如下:1, 实现多媒体硬件编解码,提高多媒体文件的编解码效率。2, 对openmax框架的抽象和封装,更加便于开发调用。3, 实现更加精简的代码便于后期维护。4, 加强产品的使用性,提高产品的用户体验。本
5、文同时介绍了google android平台及多媒体框架的工作机制,openmax框架,硬件编解码。详细分析openmax框架的运行机制。对android和openmax有一个更加详细的了解。关键词: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 国内外现状分析21.4 本人主要工作31.5 章节安排4第2章 android系统的介绍52.1 android系统的简介52.2 andro
11、id平台的架构62.2.1 linux kernel(linux内核层)62.2.2 library(函数库)62.2.3 android runtime(android运行时库)72.2.4 application framework(应用软件架构)72.2.5 application(应用程序)82.3 android系统的多媒体框架82.4 本章小结9第3章 openmax 介绍103.1 openmax 的简介103.2 openmax的概述103.2.1 openmax标准化接口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的实现的内容153.2.4 android中的openmax接口函数163.3 本章小结19第4章 openmax框架硬编解码分析和设计204.1 openmax 框架硬件编解码结构204.2 openmax 框架硬件编解码模块及功能分析214.2.1 jni模块214.2.2 硬件解码功能224.2.2.1 数据转换模块
13、224.2.2.2 硬件控制模块224.2.3 硬件编码功能234.2.3.1 数据转换模块234.2.3.2 硬件控制模块234.3 openmax 框架硬件编解码的整体设计234.3.1 openmax框架硬件编解码的整体结构234.3.2 openmax框架硬件解码的数据控制结构244.3.3 openmax框架硬件编码控制结构244.4 本章小结25第5章 openmax框架的硬编解码的实现265.1 系统整体流程265.1.1 具体流程265.1.2 数据处理流程275.1.3 编解码的参数设置285.1.3.1 解码芯片参数285.1.3.2 编码芯片参数285.2 基于
14、openmax框架硬件解码295.2.1 基于openmax框架硬件解码整体设计295.2.2 基于openmax框架硬件解码的设计305.2.2.1 硬件解码的设置305.2.2.2 初始化的设计305.2.2.3 打开的设计315.2.2.4 关闭的设计325.2.2.5 数据处理过程具体函数325.2.3 基于openmax框架硬件解码的实现335.2.3.1 变量和结构体的定义335.2.3.2 主要函数345.3 基于openmax框架硬件编码345.3.1 基于openmax框架硬件编码整体设计345.3.2 基于openmax框架硬件编码的设计355.3.2.1 硬件编码设置36
15、5.3.2.2 初始化的设计365.3.2.3 打开的设计365.3.2.4 启动的设计375.3.2.5 关闭的设计385.3.2.6 数据处理过程具体函数395.3.3 基于openmax框架硬件解码的实现405.3.3.1 变量和结构体的实现405.3.3.2 主要函数415.4 本章小结42第6章 android中openmax框架硬编解码的应用436.1 openmax框架硬件编解码的应用436.1.1 生成动态库436.1.2 jni的数据交互446.2 moviestory中openmax框架硬件解码的应用446.2.1 moviestory项目的介绍446.2.2 movies
16、tory使用openmax框架硬解码446.2.2.1 omx开启446.2.2.2 数据流程456.2.2.3 omx的关闭456.3 amdv中openmax框架硬件编码应用456.3.1 amdv的简单介绍456.3.2 amdv使用openmax框架硬编码476.3.2.1 初始化476.3.2.2 数据的传入476.3.2.3 数据的输出476.3.2.4 退出486.4 本章小结48第7章 openmax效果测试497.1 效果测试环境497.2 moviestory硬件解码效果测试497.2.1 moviestory硬件解码效果测试设计497.2.2 moviestory硬件解码
17、效果数据对比497.2.3 moviestory硬件解码加强点497.3 amdv中的硬件编码效果的测试507.3.1 amdv硬件编码效果测试设计507.3.2 amdv硬件编码效果数据对比507.3.3 amdv硬件编码效果加强点517.4 本章小结51第8章 总结52参考文献53作者简历55致谢56图目录图 2.1 android系统的构成6图 2.2 android 多媒体播放整体框架8图 3.1 openmax il 层次结构11图 3.2 openmax il 组件工作流程13图 3.3 openmax il 组件结构14图 3.4 omx codec解码序列图18图 4.1 op
18、enmax框架硬件编解码整体架构20图 4.2 openmax框架硬编解码的内部结构23图 4.3 openmax框架硬解码的数据控制结构24图 4.4 openmax框架硬编码的数据控制结构25图 5.1 整体流程类图26图 5.2 编解码控制流程27图 5.3 整体数据流程28图 5.4 解码控制流程30图 5.5 解码数据流程30图 5.6 解码init函数流程31图 5.7 解码open函数流程32图 5.8 解码close函数流程32图 5.9 解码数据处理具体流程33图 5.10 编码控制流程35图 5.11 编码数据流程35图 5.12 编码init函数流程36图 5.13 编码
19、open函数流程37图 5.14 编码procstart函数流程38图 5.15 编码close函数流程39图 5.16 编码数据处理具体流程40图 7.1 moviestory的运行效果50图 7.2 amdv的运行效果51表目录表5.1 图片解码参数28表5.2 音频解码参数28表5.3 视频解码参数28表5.4 media_mimetype_audio_amr_nb参数29表5.5 media_mimetype_audio_aac参数29表5.6 media_mimetype_video_mpeg4参数29表5.7 media_mimetype_video_h263参数29表5.8 me
20、dia_mimetype_video_avc参数表29表7.1 软件硬件解码效率对比表47表7.2 软件硬件编码效率对比表49第1章 绪论本章为本文的绪论,主要介绍了项目的背景,研究的目的和意义,较为详细的介绍了当前android手机设备的软件编解码和硬件编解码在手机中的使用情况,最后对本人进行的主要工作和本文的章节安排进行描述。1.1 项目背景目前,android上的多媒体软件大部分都还没有使用openmax硬件编解码提高手机性能,如何通过硬件编解码提高多媒体的性能仍处于需要加强的阶段,需要通过实际手机设备提高性能,与实际应用联系不够,所使用的多媒体软件性能不够强大。基于此,本文主要结合视频
21、编辑器项目和openmax框架的结合,研究如何在android项目中通过openmax实现视频硬件编解码,以提高项目的编解码效率,提高性能。android系统对openmax 层进行使用部分,基本上使用的都是标准openmax 层之上的接口,只是对其进行了简单的封装。标准的openmax 实现非常容易以插件的形式嵌入到android系统中。android中的多媒体引擎opencore和stagefright都是使用openmax 作为多媒体编解码上的插件,只是没有直接通过openmax 层提供的纯c接口调用,而是对纯c接口进行了一定的抽象封装。
22、并且android上的多媒体引擎opencore和stagefright大部分都是采用了软件形式的编解码,很少采用通过硬件形式的编解码。1.2 项目研究目的和意义多媒体无论图像、视频还是声音,都早已经成为了手机移动设备受到广泛欢迎的主要原因。到目前,基本上每个手机设备都会有一个以上的摄像头,并且随着手机技术的不断更新,同时越来越多的手机设备都需要拥有更为高档次的多媒体性能。目前使用者都是非常频繁地用手机来进行拍摄和浏览照片,同时也有录制声音和观看视频功能1。android系统的多媒体解决方案一般都是软件编解码,解码效率不高,并且代码复杂纷乱,不容易调试,这样满足不了消费者的需求,也不容易维护。
23、运用openmax硬件编解码既可以解析大多数流行的媒体文件,而且编解码效率也是增加不少,这样既可以满足消费者的要求,对开发和oem来说也方便维护。本文通过对android的omxcodec的封装和抽象,对openmax的控制,对数据的循环输入和输出,对代码的精简,对硬件编解码的控制。实现了一个基于android系统的,编解码效率更加强大的openmax 多媒体编解码框架。它是通过研究openmax来实现一个更加简洁,功能更加强大的代码框架,而且便于后期维护,提供新的多媒体编解码解决方案。目的实现可以屏蔽硬件特性,最大发挥硬件编解码效率的框架。1.3 国内外现状分析android是以l
24、inux为核心的手机操作平台,使用java作为主要编程语言,但可以通过ndk支持c/c+,主要使用于便携设备2。android是google公司在2007年11月5日公布的智能手机操作系统3。早期是由原名是"android"的公司来开发,谷歌在2005年收购"android.inc"公司后,继续对android系统进行深入开发运营推广,它采用了4个主要层次架构,包括linux kernel(linux内核层),library(函数库)和android runtime(android运行时库),application framework(应用软件架构),a
25、pplication(应用程序) 4。2012年初数据显示,无论设备的出货量还是手机的数据流量都已经成为了手机系统里面的老大,已经完全超过了ios,黑莓系统,还有称霸十年的塞班系统,使android系统成为了我们最为喜爱的智能手机系统5。目前,android系统不仅广泛应用于各种手机设备,而且平板电脑的数量也在急剧上升。采用android系统开始广泛流行,主要厂商众多包括htc、三星、lg、摩托罗拉等,中国大陆厂商如:华为、中兴、联想等6。目前多媒体蓬勃发展,android手机设备已经深入到了大众生活。手机设备上的多媒体应用更加显的流行了。更是由于3g时代的来临,多媒体功能越来越受到大众的喜欢
26、。编解码效率的提高对多媒体的性能提高有极大的帮助。现在的手机上的编解码大体主要分为两类:分为硬件解码和软件解码两种。硬件解码的话,音质主要取决于内置的解码芯片,而如今的技术发展比较快,更为强劲出色的解码芯片已经不比mp3差了,效率比较高。而软件解码就是通过cpu的运算进而实现视频音频的播放,使用操作系统的手机一般采用上面这种方法。当前的智能手机使用的cpu频率已经非常高,并且解码软件也非常成熟,支持解码mp3变得非常轻松的一件事情,输出的音频视频的质量还是非常高7。一般播放器都会识别多种视频格式封装(即文件格式), 例如, coreplayer能播放avi, wmv, mp4等多种格式, ru
27、n播放器能播放rm, rmvb格式的视频。android系统中的的多媒体主要为opencore和stagefright。android的多媒体引擎opencore和stagefright都是通过openmax 作为多媒体问卷的编解码插件,只是没有直接通过openmax 层提供的纯c接口的调用,而是对纯c接口进行了一定的抽象封装。openmax是无授权费的,实现跨平台的应用程序接口api,目的是使媒体加速组件能够在开发、集成和编程各个环节中能够屏蔽硬件的差别同时实现接口统一,方便调用。也为设备提供比较全面的编解码器和应用程序来屏蔽硬件。openmax api将会和处理器一起提
28、供,以使库和编解码器的开发者能够高速有效地利用硬件芯片的完整加速潜能,并且无需担心底层的硬件结构8。openmax标准主要是针对嵌入式移动设备和手机移动设备的多媒体软件架构。在架构底层上为多媒体的编解码和数据处理定义了一套非常完整的统一的编程接口即(openmax il api),并且对多媒体数据编解码进行了非常系统的抽象,同时用户可以不用关注底层硬件的细节了。因此,大多数的多媒体软件和多媒体框架就是通过openmax il实现了一种可以用统一的方式来让codec和其他多媒体数据实现处理功能,屏蔽了底层硬件的差异性。1.4 本人主要工作在这个项目开发中,本人主要进行的工作:1. 研究andro
29、id系统的多媒体框架。2. 研究openmax 框架的运行机制。3. 设计软件的架构。设计了openmax框架硬件编解码的处于的层次,及openmax框架硬件编解码的逻辑设计,对硬件控制,数据控制进行了详细的设计。4. 编写openmax 模块的的代码,加入逻辑控制。5. 将功能集成到项目。6. 优化代码,提高编解码效率。7. 测试项目,修改出现的问题。1.5 章节安排第二章:对android系统的介绍,描述android的结构及多媒体框架的现状。第三章:对openmax 的具体介绍,具体分析了openmax框架的关系和接口,为下一步设计做好准备。第四章:对ope
30、nmax 框架进行设计,详细地阐述了如何设计整个框架。设计对硬件的控制,对数据的控制。第五章:对openmax 框架进行实现,详细地阐述了如何实现整个框架。第六章:对openmax 框架的应用,把openmax框架集成到项目里面,能够在项目中远行。第七章:对openmax 框架的效果显示第八章:对全文进行总结,并对进一步工作进行展望。第2章 android系统的介绍本章介绍了android操作系统,首先简要介绍了一下android系统的背景,然后分别从系统架构,多媒体框架和目前的编解码等方面详细的介绍了一下,并重点介绍了android多媒体框架中的ope
31、nmax的作用。最后给出了搭建开发环境的步骤并对开发步骤做出介绍。2.1 android系统的简介由google牵头和30多家业内移动技术和无线应用领域非常领先的企业组成的一个开放手机联盟 (openhandsetalhance)同时发布了其android智能手机平台 9。android一词的原义就是指“机器人”,同时也是google于2007年11月发布的基于linux平台上的开源智能手机操作系统的名称。这个平台由用户使用界面、linux操作系统、应用程序以及中间件一起组成,号称是第一个为移动手机终端打造的非常强劲和全面的移动智能手机系统10。每当谷歌发布它的新一版本的智能手机操作系统之后,
32、各家手机厂商都会把升级他们上一版本智能手机系统便会进行了,同时也会把下一版本智能手机系统的消息放在互联网上流出,这样的形式目前已经成为谷歌在推广android手机操作系统的一种常用方式。在android2.3姜饼马上发布的时候,android3.0系统蜂巢就会被曝光,当各家手机厂商都在把自己的精力放在把android手机升级到android2.2操作系统的同时,国外媒体就会有消息传出android下一版本手机操作系统名称已经被确定了,该操作系统的系列产品代号为ice cream sandwich,简称为ics,直译过来的名字就是冰激凌三明治。并且谷歌方面已经明确的告诉大家:android4.0
33、是把各手机系统与平板电脑系统融合在一起的产品,并没有限定最低硬件要求,理论上来讲,现有的android2.2/2.3设备都可以升级到android4.0。在硬件上没有设限。android智能手机操作系统采用的是软件堆层(software stack,又名软件叠层)的架构,主要分成了三部分。底层linux内核一般只提供了最基本的功能,其他的应用软件是由各设备生产公司自行开发,当然部分程序是以java编写。2.2 android平台的架构如图2.1所示,android基本上就是在嵌入式linux系统的上面再加上一些重要的手机应用开发的软件, 如果深入研究android系统架构,就会发现整体自底向上
34、主要是由4个主要层次构成,包括linux kernel(linux内核层),library(函数库)和android runtime(android运行时库),application framework(应用软件架构),application(应用程序)。图 2.1 android系统的构成2.2.1 linux kernel(linux内核层)android核心系统服务都是基于linux内核上的,如安全性、内存管理、进程管理、网络协议栈和驱动模型等模块。linux 内核同时也是连接硬件和软件栈之间的桥梁。2.2.2 library(函数库) android 包含了c/c+库,android系
35、统中的上层应用程序可以调用这些库。它们主要是通过android 应用程序框架来为软件开发者提供调用一些接口的服务。下面是android的主要核心库:系统c库:c系统的函数库(libc),它是专门为基于嵌入式linux手机移动设备专门定制的;媒体库:基于stagefright,该库主要为音频、视频格式文件的回放和录制,静态图像文件的编解码的调用,编码格式包括mpeg4、h.264、mp3、aac、amr、jpg和png;surface manager:管理图像显示的子系统,同时为软件提供了2d和3d图层的无缝融合11;sgl:负责底层2d图形的引擎;3d库:在opengl es 1.0 api基
36、础上实现;该库提供了可以使用3d硬件的加速或使用非常优化的3d软件加速;freetype:位图(bitmap)和矢量(vector)字体显示;sqlite库:一个小型的数据库引擎,可以被所有程序使用,并且功能非常强。2.2.3 android runtime(android运行时库)android包含一个核心库,为java编程语言核心类库提供了各种可用的功能,使得每个android程序都是虚拟机中的一个实例,都有自己的进程,拥有对立性。dalvik虚拟机为应用程序提供了一个良好的远行环境,同时一个设备可以远行多个dalvik虚拟机。dalvik虚拟机执行的是.dex文件。 2.2.4 appl
37、ication framework(应用软件架构)开发者使用所有api框架可以和核心应用程序一样的权限。该应用程序的架构设计简化了组件的重用;每一个人都可以发布自己写的应用程序里面的功能块,同时其他开发者也可以调用他的功能块来开发应用程序。同样,由于应用程序的可复用机制也使各个用户可以非常方便地替换各个程序组件。每个软件开发都会有服务和系统支撑,这其中包括:视图(views):效果非常好可以扩展,可以被应用程序调用,并且很丰富,它包括按钮(buttons),列表(lists)、文本框(text boxes)、网格(grids)、甚至包括可嵌入的web浏览器;内容提供器(content prov
38、iders):让各个应用程序可以实现数据的共享,可以一个程序访问另外一个程序的数据,实现咯数据的分享;资源管理器(resource manager):管理和访问各种非代码的资源,包含对本地字符串、布局文件(layout files)和图形的管理; 2.2.5 application(应用程序)android发布的时候会和它同一系列一些核心应用程序包一起发布,该应用程序重要包括java编写的一些应用程序,比如一些视频播放器,摄像程序,图片浏览等等。所有的应用程序都是使用java语言编写12。2.3 android系统的多媒体框架android的多媒体主要框架部分包含了应用程序、java框架层、c
39、语言框架层、硬件抽象层等环节。媒体的播放的时候实际上就是由下层的opencore或stagefright等多媒体框架实现的13。android的系统的多媒体框架在android2.2版本之前主要使用的是opencore,在android2.3版本之后使用的是stagefright。具体的分析如下图 2.2 android 多媒体播放整体框架最上层的java应用程序是使用媒体uri(媒体文件或者流媒体)来作为多媒体框架输入设置给媒体播放器,经过了java框架层,到jni层,在到本地框架层,一直设置到引擎pvplayer。这个过程就是为媒体设置了媒体uri的路径,但是这个时候数据传递还没有开始。当
40、开启了pvplayer,再进入到pvplayer后开始进行了解析,再根据媒体的格式把文件分成了音频流(mp3,amp,aac等)和视频流(h263,h264,mpeg4等),然后经过编解码器的处理,把数据变成原始数据(音频通常是pcm,视频通常是yuv或rgb格式)。再把音视频原始数据放在音频和视频的输出播放环节(扬声器或者显示屏等硬件)进行输出14-15。awesomeplayer是stagefright的核心类,创建并管理parser(mediaextractor), codec(omxcodec), render(awesomerendererer)及audioplayer等。音频播放功
41、能流程通过调用awesomeplayer 的setdatasource 函数来设置数据源; awesomeplayer 通过调用mediaextractor的create 函数来识别该文件的格式,mediaplayer 判断该文件为wma 格式后,会创建一个wmaextractor,在创建wmaextractor 的同时,wmaextractor 会解析文件头,获取文件中的相关信息。然后调用wmaextractor的gettrack 函数创建一个wmasource; awesomeplayer通过omxcodec 创建一个wmadecoder; awesomeplayer接着创建一个audio
42、player,并把wmadecoder 做为数据源传给audioplayer,并调用audioplayer 的start 函数; audioplayer 获取wmadecoder中的相关参数: 文件类型、采样率、声道数,并根据该数据开启audiosink,并把audiosinkcallback做为回调函数传给audiosink。audioplayer 先调用wmadecoder 解第一帧数据, 并把该数据传给audiosink去播放,当播放完成后audiosink 会调用回调函数audiosinkcallback 再取解码后的数据,audiosinkcallback又会调用fillbuffer
43、 函数获取解码后的原始数据,解码后数据如果被取完后,audioplayer又会调用wmadecoder 解下一帧数据给audiosink,来回反复,直到文件中数全部被播放。在拉动滚动条时,上层会传来seektime,经audioplayer 传给wmadecoder 再传给wmaextractor,wmaextractor 根据上层传来的seektime 判断出要播放的原始数据的起始位置,然后从该位置读取一个数据包传给wmadecoder 解码16。2.4 本章小结本章为全文的第二章,介绍了android操作系统构成,重点介绍了android多媒体框架的组成,最后介绍了目前的编解码。第3章 o
44、penmax 介绍本章主要分析了openmax 框架的主要运行的模式,介绍了几个重要功能模块和接口函数。和android中的情况。3.1 openmax 的简介openmax是无授权费的,实现跨平台的应用程序接口api,目的是使媒体加速组件能够在开发、集成和编程各个环节中能够屏蔽硬件的差别同时实现接口统一,方便调用。也为设备提供比较全面的编解码器和应用程序来屏蔽硬件。openmax api将会和处理器一起提供,以使库和编解码器的开发者能够高速有效地利用硬件芯片的完整加速潜能,并且无需担心底层硬件结构8。3.2 openmax的概述3.2.1 openmax标准化接
45、口17openmax是khronos公司制定的针对手持设备和嵌入式移动设备的行业标准。它是无授权费的,跨平台的api 接口。openmax标准主要是针对嵌入式移动设备和手机移动设备的多媒体架构 。并且在架构底层上可以为多媒体文件进行的codec或数据处理定义了一套完整统一的编程接口(openmax api),同时对多媒体数据处理的时候进行了系统的封装抽象,屏蔽了底层的结构,更加快速开发程序。因此, 大多数的多媒体软件和多媒体框架都是通过openmax来实现一套非常完整统一的接口,让codec和其他多媒体的数据处理功能变的更加方便,同时实现了跨越软硬件平台的可移植性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 组织发起并起草的一个公开的技术标准,2005 年12 月发布第一个版本,目前的最新版本是version 1.1。openmax il 作为实现音频,视频和图像编解码器与多媒体编解码器的交互,并且统一的行为来支持组件。这些编解码器或者是软件解码器,或者是硬件解码器,或许是软硬件的混合体
47、。openmax il提供了透明的媒体框架,为编解码器提供一个系统抽象,它解决了不同媒体系统之间编解码移植的问题。openmax api会和处理器一起提供的,为库和编解码器开发者可以高速有效地利用新器件的完整加速潜能,不需担心其底层的硬件结构。在架构底层上为多媒体的编解码和数据处理提供了统一的编程接口,对多媒体数据的处理功能进行系统级抽象,为用户屏蔽了底层的细节。因此,多媒体应用程序和多媒体框架通过openmax il可以以一种统一的方式来使用编解码和其他多媒体数据处理功能,具有了跨越软硬件平台的移植性。openmax il目前已经成为了事实上的多媒体框架标准。嵌入式处理器或者多媒体编解码模块
48、的硬件生产者,常常提供标准的openmax il层的软件接口,这样软件的开发者就可以基于这个层次的标准化接口进行多媒体程序的开发。在android中,openmax il层,通常可以用于多媒体框架的插件,android的多媒体框架opencore和stagefright都可以使用openmax作为插件,主要用于编解码(codec)处理。openmax il的组件结构如图3.1所示。图 3.1 openmax il 层次结构openmax il以组件的形式封装了应用程序所需的功能,每个组件对应一个功能模块, 组件可以分类为输入(sources),输出(sinks),过滤器(filters),分离
49、器(splitters),混合器(mixers)等。组件端口主要用于组件数据的输入输出。用于发送数据到端口和从端口获取数据的函数分别是emptythisbuffer 和fillthisbuffer,这两个调用均是异步的。每个openmax il 组件都要经历一系列的状态转换。组件通过openmax il 内核的调用加载并转换为加载(loaded)状态,其他的状态转换通过il client 与组件的直接通信完成。il client 通过omx_sendcommand 函数使用omx_commandstateset 命令控制组件改变状态19。其中,openmax il层主要实现了openmax i
50、l中的各个组(component)。对下层来说,openmax il可以直接调用各种codec实现。对上层来说,openmax il可以向应用程序提供接口供应用程序调用。openmax il主要内容如下所示:l 客户端(client):openmax il的调用者。l 组件(component):openmax il的单元,每一个组件实现一种功能。l 端口(port):组件的输入输出接口。l 隧道化(tunneled):让两个组件直接连接的方式。openmax il的基本运作过程如图3.2所示图 3.2 openmax il 组件工作流程openmax il客户端调用了四个openmax il
51、组件实现的编解码器功能。四个组成分别是source组件、host组件、accelerator组件和sink组件。其中,source组件只有一个输出端口,host组件有一个输入端口和输出端口; accelerator组件有一个输入端口,使用了硬件编解码器,以加快整个环节。accelerator组件和sink组件,通过私人通信,组件端口一直没有明确的组成部分。openmax il在使用的时候,处理数据流也会有自己的不同的处理方式:既有经过客户端的,也有不经过客户端的。source组件到host组件的数据流就是需要客户端的;而host组件到accelerator组件的数据流就没有经过客户端,使用了隧
52、道化(tunneled)的方式;accelerator组件和sink组件甚至可以使用私有的通讯方式。openmax il的组件是openmax il实现的核心内容,一个组件以输入、输出端口为接口,端口可以被连接到另一个组件上。外部对组件可以发送命令,还进行设置和获取参数、获取配置等操作。组件的端口可以包含缓冲区(buffer)的队列。openmax il的组件的处理的核心内容就是:把buffer放在输入端口,如何进行解码或者编码操作处理;再把buffer从输出端口拿出,即是将解码或者编码后的数据进行输出,由此多组件相联接可以构成流式的处理。openmax il中一个组件的结构如图3.3所示图
53、3.3 openmax il 组件结构openmax il的组件功能和它定义的端口类型密切相关,通常情况下:只有一个输出端口的,为source组件;只有一个输入端口的,为sink组件;有多个输入端口,一个输出端口的为mux组件;有一个输入端口,多个输出端口的为demux组件;输入输出端口各一个组件的为中间处理环节,这是最常见的组件。 不同的openmax il组件它的端口支持的数据类型也不同。例如,对于一个输入、输出端口各一个的组件,它的输入端口可以是wma格式的数据,输出端口可以是pcm格式的数据,那么这就是一个wma的解码组件。隧道化(tunneled)是关于组件连接方式的一个概念。通过隧
54、道化可以将不同的组件的一个输入端口和一个输出端口连接到一起,在这种情况下,两个组件的处理过程合并,两个组件共同处理数据。特别的,对于一个输入端口和一个输出端口的组件,两个组件可以作为类似一个组件来使用。但是这种方式在android opencore里没有用到。3.2.1.2 openmax dl(development layer) openmax dl定义了一套api ,它是音频,视频和图像功能模块的集合。它包括了音频信号的处理功能,如 fft 和 filter ,图像原始处理,如颜色空间的转换,和视频的原始处理,以实现例如 mpeg-4 ,h.264 ,mp3,aac和jpeg 等编解码器
55、的优化。openmax 通过idl和adl来加速,idl 使用 openmax il 结构,adl向openmax dl api增加了异步接口。 3.2.1.3 openmax al (appliction layer) openmax al 定义了一下多媒体应用程序的框架标准。3.2.2 android中openmax的使用情况openmax就是一个为多媒体应用程序准备的api标准。其中,openmax il(集成层)技术规格定义了媒体组件接口,以便在嵌入式器件的流媒体框架中快速集成加速编解码器。在android中,openmax层,通常可以用于多媒体引擎的插件,android的多
56、媒体引擎opencore和stagefright都是使用openmax作为插件,主要用于的编解码(codec)处理。在android的框架层,在android里面定义了一套openmax接口,和标准的接口概念基本相同,但是使用c+类型的接口,并且使用了android的binder ipc机制。android封装openmax的接口被stagefright使用,opencore没有使用这个接口,而是使用其他形式对openmax il层接口进行封装。android系统opencore的编解码部分采用对openmax il层进行封装来使用,使用的是标准openmax il层的接口
57、,但是这些接口google又进行了简单的封装,并没有直接使用openmax il层提供的纯c接口。封装后的openmax il组件很容易被嵌入到stagefright中。3.2.3 android 中openmax的实现的内容android中opencore使用的主要是openmax的编解码功能。虽然openmax也可以生成输入、输出、文件解析和构建等组件,但是在各个系统 (android等)中使用的最多的还是编解码组件。原因是媒体的输入、输出环节和系统的关系很大导致引入openmax标准比较麻烦;文件解析和构建环节一般也不需要使用硬件加速。编解码组件也是最能体现硬件加速的环节,因此最常使用。在android opencore中实现openmax il层和标准的openmax il层的方式基本相同,一般需要实现以下两个环节。Ø 编解码驱动程序:位于linux内核空间,需要通过linux内核调用驱动程序,通常使用非标准的驱动程序。Ø openmax il层:根据openmax il层的标准头文件实现不同功能的组件。android中还提供了openmax的适配层接口(对openmax il的标准组件进行封装适配),它作为android本地层接口,可以被android
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石河子工程职业技术学院《数据库技术与应用》2023-2024学年第二学期期末试卷
- 重庆安全技术职业学院《激光原理与技术》2023-2024学年第二学期期末试卷
- 潍坊职业学院《结构模型设计制作》2023-2024学年第二学期期末试卷
- 湖南网络工程职业学院《分子与细胞生物学》2023-2024学年第二学期期末试卷
- 中医药茶与药膳讲课件
- 山东商业职业技术学院《数字逻辑与设计》2023-2024学年第二学期期末试卷
- 青岛城市学院《安装工程计量与计价课程设计》2023-2024学年第二学期期末试卷
- 西安建筑科技大学华清学院《机器学习与大数据处理》2023-2024学年第二学期期末试卷
- 黄沙道中教学课件
- 3.1+重组DNA技术的基本操作(第二课时)-2025学年高二生物同步教学课件(人教版2019选择必修3)
- 车站值班员(中级)铁路职业技能鉴定考试题及答案
- 山东省威海市2023-2024学年高二下学期期末考试英语试题(解析版)
- 2024年陕西省西安市中考地理试题卷(含答案逐题解析)
- 草晶华工作计划
- 2023-2024学年吉安市遂川县七年级语文(下)期末试卷附答案详析
- 人工智能训练师(中级数据标注员)理论考试题库(含答案)
- 脑干损伤护理常规
- 小学数学组教研活动记录表-评课
- 2024年广东清远连平县事业单位招聘工作人员51人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 2024年西部机场集团榆林机场公司招聘35人高频考题难、易错点模拟试题(共500题)附带答案详解
- 银行智能化方案设计
评论
0/150
提交评论