基于Android的OpenMAX框架研究与开发硕士学位论文.doc

上传人:小小飞 文档编号:3919664 上传时间:2019-10-10 格式:DOC 页数:63 大小:1.60MB
返回 下载 相关 举报
基于Android的OpenMAX框架研究与开发硕士学位论文.doc_第1页
第1页 / 共63页
基于Android的OpenMAX框架研究与开发硕士学位论文.doc_第2页
第2页 / 共63页
基于Android的OpenMAX框架研究与开发硕士学位论文.doc_第3页
第3页 / 共63页
基于Android的OpenMAX框架研究与开发硕士学位论文.doc_第4页
第4页 / 共63页
基于Android的OpenMAX框架研究与开发硕士学位论文.doc_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《基于Android的OpenMAX框架研究与开发硕士学位论文.doc》由会员分享,可在线阅读,更多相关《基于Android的OpenMAX框架研究与开发硕士学位论文.doc(63页珍藏版)》请在三一文库上搜索。

1、浙江大学硕士学位论文 摘要 基于Android的OpenMAX框架研究与开发 摘要从近几年手机的发展趋势看,智能手机越来越流行,Android手机表现的尤为强劲。而多媒体播放的娱乐功能显得尤为重要。如何更好地提高多媒体效率成为了用户选择使用的一大契机。本文主要研究在Android平台上实现硬件编解码。主要是jni技术实现数据交换,通过对OpenMAX框架的抽象封装,流程控制,数据输入输出。从而实现硬件编解码,并且把OpenMAX框架硬件编解码集成到项目中,加强多媒体文件编解码速度,提高性能。论文的研究结果可以提供一个优秀的OpenMAX硬件编解码框架,为其他Android手机开发者参考。本文的

2、主要创新点和贡献点如下:1, 实现多媒体硬件编解码,提高多媒体文件的编解码效率。2, 对OpenMAX框架的抽象和封装,更加便于开发调用。3, 实现更加精简的代码便于后期维护。4, 加强产品的使用性,提高产品的用户体验。本文同时介绍了Google Android平台及多媒体框架的工作机制,OpenMAX框架,硬件编解码。详细分析OpenMAX框架的运行机制。对Android和OpenMAX有一个更加详细的了解。关键词:Android,OpenMAX,多媒体框架,编解码ii浙江大学硕士学位论文 AbstractAbstractDevelopment trends of mobile phones

3、 in recent years, smart phones become increasingly popular,Android phone is particularly strong. The entertainment feature of multimedia 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 studi

4、es hardware codec on the Android platform. The main is the jni technology for data exchange, the abstract encapsulation for the OpenMAX framework ,process control, data input and output. In order to achieve hardware codec, and OpenMAX framework hardware codec integrated into the project, to enhance

5、multimedia file encoding and decoding speed, improve performance. The thesis results can provide an excellent the OpenMAX hardware codec framework of reference for other Android phone developer. The main innovation and contribution of this article are as follows:1,multimedia hardware codec, improve

6、the efficiency of encoding and decoding of multimedia documents.2, abstraction and encapsulation of the OpenMAX framework easier to 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

7、the working mechanism of the Google Android platform multimedia framework, the OpenMAX framework, hardware codec. Detailed analysis of the operating mechanism of the OpenMAX framework. A more detailed understanding of the Android and OpenMAX.Key Words:Android, OpenMAX, multimedia framework, Hard-cod

8、ec iii浙江大学硕士学位论文 目录目录摘要iAbstractii图目录IV表目录V第1章 绪论11.1 项目背景11.2 项目研究目的和意义11.3 国内外现状分析21.4 本人主要工作31.5 章节安排4第2章 Android系统的介绍52.1 Android系统的简介52.2 Android平台的架构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

9、.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)103.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接口函数16

10、3.3 本章小结19第4章 OpenMAX框架硬编解码分析和设计204.1 OpenMAX框架硬件编解码结构204.2 OpenMAX框架硬件编解码模块及功能分析214.2.1 JNI模块214.2.2 硬件解码功能224.2.2.1 数据转换模块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 本章小

11、结25第5章 OpenMAX框架的硬编解码的实现265.1 系统整体流程265.1.1 具体流程265.1.2 数据处理流程275.1.3 编解码的参数设置285.1.3.1 解码芯片参数285.1.3.2 编码芯片参数285.2 基于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

12、.1 变量和结构体的定义335.2.3.2 主要函数345.3 基于OpenMAX框架硬件编码345.3.1 基于OpenMAX框架硬件编码整体设计345.3.2 基于OpenMAX框架硬件编码的设计355.3.2.1 硬件编码设置365.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.

13、1 OpenMAX框架硬件编解码的应用436.1.1 生成动态库436.1.2 Jni的数据交互446.2 MovieStory中OpenMAX框架硬件解码的应用446.2.1 MovieStory项目的介绍446.2.2 MovieStory使用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

14、.4 退出486.4 本章小结48第7章 OpenMAX效果测试497.1 效果测试环境497.2 MovieStory硬件解码效果测试497.2.1 MovieStory硬件解码效果测试设计497.2.2 MovieStory硬件解码效果数据对比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致谢56III浙江大学硕士学位论文 表目录图目录图 2.1 And

15、roid系统的构成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 OpenMAX框架硬件编解码整体架构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 解码数据

16、流程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 编码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

17、_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 MEDIA_MIMETYPE_VIDEO_AVC参数表29表7.1 软件硬件解码效率对比表47表7.2 软件硬件编码效率对比表49V浙江大学硕士学位论文第1章 Android系统的介绍第1章 绪论本章为本文的绪论,主要介绍了项目的背景,研究的目的和意义,较为详细的介绍了当前Android手机设备的软件编解码和硬件编解码在手机中的使用

18、情况,最后对本人进行的主要工作和本文的章节安排进行描述。1.1 项目背景目前,Android上的多媒体软件大部分都还没有使用OpenMAX硬件编解码提高手机性能,如何通过硬件编解码提高多媒体的性能仍处于需要加强的阶段,需要通过实际手机设备提高性能,与实际应用联系不够,所使用的多媒体软件性能不够强大。基于此,本文主要结合视频编辑器项目和OpenMAX框架的结合,研究如何在Android项目中通过OpenMAX实现视频硬件编解码,以提高项目的编解码效率,提高性能。Android系统对OpenMAX层进行使用部分,基本上使用的都是标准OpenMAX层之上的接口,只是对其进行了简单的封装。标准的Ope

19、nMAX实现非常容易以插件的形式嵌入到Android系统中。Android中的多媒体引擎OpenCore和StageFright都是使用OpenMAX作为多媒体编解码上的插件,只是没有直接通过OpenMAX层提供的纯C接口调用,而是对纯C接口进行了一定的抽象封装。并且Android上的多媒体引擎OpenCore和StageFright大部分都是采用了软件形式的编解码,很少采用通过硬件形式的编解码。1.2 项目研究目的和意义多媒体无论图像、视频还是声音,都早已经成为了手机移动设备受到广泛欢迎的主要原因。到目前,基本上每个手机设备都会有一个以上的摄像头,并且随着手机技术的不断更新,同时越来越多的手

20、机设备都需要拥有更为高档次的多媒体性能。目前使用者都是非常频繁地用手机来进行拍摄和浏览照片,同时也有录制声音和观看视频功能1。Android系统的多媒体解决方案一般都是软件编解码,解码效率不高,并且代码复杂纷乱,不容易调试,这样满足不了消费者的需求,也不容易维护。运用OpenMAX硬件编解码既可以解析大多数流行的媒体文件,而且编解码效率也是增加不少,这样既可以满足消费者的要求,对开发和OEM来说也方便维护。本文通过对Android的OMXCodec的封装和抽象,对OpenMAX的控制,对数据的循环输入和输出,对代码的精简,对硬件编解码的控制。实现了一个基于Android系统的,编解码效率更加强

21、大的OpenMAX多媒体编解码框架。它是通过研究OpenMAX来实现一个更加简洁,功能更加强大的代码框架,而且便于后期维护,提供新的多媒体编解码解决方案。目的实现可以屏蔽硬件特性,最大发挥硬件编解码效率的框架。1.3 国内外现状分析Android是以Linux为核心的手机操作平台,使用Java作为主要编程语言,但可以通过NDK支持C/C+,主要使用于便携设备2。Android是Google公司在2007年11月5日公布的智能手机操作系统3。早期是由原名是Android的公司来开发,谷歌在2005年收购Android.Inc公司后,继续对Android系统进行深入开发运营推广,它采用了4个主要层

22、次架构,包括Linux Kernel(Linux内核层),Library(函数库)和Android Runtime(Android运行时库),Application Framework(应用软件架构),Application(应用程序) 4。2012年初数据显示,无论设备的出货量还是手机的数据流量都已经成为了手机系统里面的老大,已经完全超过了IOS,黑莓系统,还有称霸十年的塞班系统,使Android系统成为了我们最为喜爱的智能手机系统5。目前,Android系统不仅广泛应用于各种手机设备,而且平板电脑的数量也在急剧上升。采用Android系统开始广泛流行,主要厂商众多包括HTC、三星、LG、摩

23、托罗拉等,中国大陆厂商如:华为、中兴、联想等6。目前多媒体蓬勃发展,Android手机设备已经深入到了大众生活。手机设备上的多媒体应用更加显的流行了。更是由于3G时代的来临,多媒体功能越来越受到大众的喜欢。编解码效率的提高对多媒体的性能提高有极大的帮助。现在的手机上的编解码大体主要分为两类:分为硬件解码和软件解码两种。硬件解码的话,音质主要取决于内置的解码芯片,而如今的技术发展比较快,更为强劲出色的解码芯片已经不比MP3差了,效率比较高。而软件解码就是通过CPU的运算进而实现视频音频的播放,使用操作系统的手机一般采用上面这种方法。当前的智能手机使用的CPU频率已经非常高,并且解码软件也非常成熟

24、,支持解码MP3变得非常轻松的一件事情,输出的音频视频的质量还是非常高7。一般播放器都会识别多种视频格式封装(即文件格式), 例如, Coreplayer能播放AVI, WMV, MP4等多种格式, RUN播放器能播放rm, rmvb格式的视频。Android系统中的的多媒体主要为OpenCore和StageFright。Android的多媒体引擎OpenCore和StageFright都是通过OpenMAX作为多媒体问卷的编解码插件,只是没有直接通过OpenMAX层提供的纯C接口的调用,而是对纯C接口进行了一定的抽象封装。OpenMAX是无授权费的,实现跨平台的应用程序接口API,目的是使媒

25、体加速组件能够在开发、集成和编程各个环节中能够屏蔽硬件的差别同时实现接口统一,方便调用。也为设备提供比较全面的编解码器和应用程序来屏蔽硬件。OpenMAX API将会和处理器一起提供,以使库和编解码器的开发者能够高速有效地利用硬件芯片的完整加速潜能,并且无需担心底层的硬件结构8。OpenMAX标准主要是针对嵌入式移动设备和手机移动设备的多媒体软件架构。在架构底层上为多媒体的编解码和数据处理定义了一套非常完整的统一的编程接口即(OpenMAX IL API),并且对多媒体数据编解码进行了非常系统的抽象,同时用户可以不用关注底层硬件的细节了。因此,大多数的多媒体软件和多媒体框架就是通过OpenMA

26、X IL实现了一种可以用统一的方式来让codec和其他多媒体数据实现处理功能,屏蔽了底层硬件的差异性。1.4 本人主要工作在这个项目开发中,本人主要进行的工作:1. 研究Android系统的多媒体框架。2. 研究OpenMAX框架的运行机制。3. 设计软件的架构。设计了OpenMAX框架硬件编解码的处于的层次,及OpenMAX框架硬件编解码的逻辑设计,对硬件控制,数据控制进行了详细的设计。4. 编写OpenMAX模块的的代码,加入逻辑控制。5. 将功能集成到项目。6. 优化代码,提高编解码效率。7. 测试项目,修改出现的问题。1.5 章节安排第二章:对Android系统的介绍,描述Androi

27、d的结构及多媒体框架的现状。第三章:对OpenMAX的具体介绍,具体分析了OpenMAX框架的关系和接口,为下一步设计做好准备。第四章:对OpenMAX框架进行设计,详细地阐述了如何设计整个框架。设计对硬件的控制,对数据的控制。第五章:对OpenMAX框架进行实现,详细地阐述了如何实现整个框架。第六章:对OpenMAX框架的应用,把OpenMAX框架集成到项目里面,能够在项目中远行。第七章:对OpenMAX框架的效果显示第八章:对全文进行总结,并对进一步工作进行展望。4浙江大学硕士学位论文第2章Android系统的介绍第2章 Android系统的介绍本章介绍了Android操作系统,首先简要介

28、绍了一下Android系统的背景,然后分别从系统架构,多媒体框架和目前的编解码等方面详细的介绍了一下,并重点介绍了Android多媒体框架中的OpenMAX的作用。最后给出了搭建开发环境的步骤并对开发步骤做出介绍。2.1 Android系统的简介由Google牵头和30多家业内移动技术和无线应用领域非常领先的企业组成的一个开放手机联盟 (OpenHandsetAlhance)同时发布了其Android智能手机平台 9。Android一词的原义就是指“机器人”,同时也是Google于2007年11月发布的基于Linux平台上的开源智能手机操作系统的名称。这个平台由用户使用界面、linux操作系统

29、、应用程序以及中间件一起组成,号称是第一个为移动手机终端打造的非常强劲和全面的移动智能手机系统10。每当谷歌发布它的新一版本的智能手机操作系统之后,各家手机厂商都会把升级他们上一版本智能手机系统便会进行了,同时也会把下一版本智能手机系统的消息放在互联网上流出,这样的形式目前已经成为谷歌在推广Android手机操作系统的一种常用方式。在Android2.3姜饼马上发布的时候,Android3.0系统蜂巢就会被曝光,当各家手机厂商都在把自己的精力放在把Android手机升级到Android2.2操作系统的同时,国外媒体就会有消息传出Android下一版本手机操作系统名称已经被确定了,该操作系统的系

30、列产品代号为Ice Cream Sandwich,简称为ICS,直译过来的名字就是冰激凌三明治。并且谷歌方面已经明确的告诉大家:Android4.0是把各手机系统与平板电脑系统融合在一起的产品,并没有限定最低硬件要求,理论上来讲,现有的Android2.2/2.3设备都可以升级到Android4.0。在硬件上没有设限。Android智能手机操作系统采用的是软件堆层(software stack,又名软件叠层)的架构,主要分成了三部分。底层Linux内核一般只提供了最基本的功能,其他的应用软件是由各设备生产公司自行开发,当然部分程序是以Java编写。2.2 Android平台的架构如图2.1所示

31、,Android基本上就是在嵌入式Linux系统的上面再加上一些重要的手机应用开发的软件, 如果深入研究Android系统架构,就会发现整体自底向上主要是由4个主要层次构成,包括Linux Kernel(Linux内核层),Library(函数库)和Android Runtime(Android运行时库),Application Framework(应用软件架构),Application(应用程序)。图 2.1 Android系统的构成2.2.1 Linux Kernel(Linux内核层)Android核心系统服务都是基于Linux内核上的,如安全性、内存管理、进程管理、网络协议栈和驱动模型

32、等模块。Linux 内核同时也是连接硬件和软件栈之间的桥梁。2.2.2 Library(函数库) Android 包含了C/C+库,Android系统中的上层应用程序可以调用这些库。它们主要是通过Android 应用程序框架来为软件开发者提供调用一些接口的服务。下面是Android的主要核心库:系统C库:C系统的函数库(LibC),它是专门为基于嵌入式Linux手机移动设备专门定制的;媒体库:基于Stagefright,该库主要为音频、视频格式文件的回放和录制,静态图像文件的编解码的调用,编码格式包括MPEG4、H.264、MP3、AAC、AMR、JPG和PNG;Surface Manager

33、:管理图像显示的子系统,同时为软件提供了2D和3D图层的无缝融合11;SGL:负责底层2D图形的引擎;3D库:在OpenGL ES 1.0 API基础上实现;该库提供了可以使用3D硬件的加速或使用非常优化的3D软件加速;FreeType:位图(Bitmap)和矢量(Vector)字体显示;SQLite库:一个小型的数据库引擎,可以被所有程序使用,并且功能非常强。2.2.3 Android Runtime(Android运行时库)Android包含一个核心库,为Java编程语言核心类库提供了各种可用的功能,使得每个Android程序都是虚拟机中的一个实例,都有自己的进程,拥有对立性。Dalvik

34、虚拟机为应用程序提供了一个良好的远行环境,同时一个设备可以远行多个Dalvik虚拟机。Dalvik虚拟机执行的是.dex文件。 2.2.4 Application Framework(应用软件架构)开发者使用所有API框架可以和核心应用程序一样的权限。该应用程序的架构设计简化了组件的重用;每一个人都可以发布自己写的应用程序里面的功能块,同时其他开发者也可以调用他的功能块来开发应用程序。同样,由于应用程序的可复用机制也使各个用户可以非常方便地替换各个程序组件。每个软件开发都会有服务和系统支撑,这其中包括:视图(Views):效果非常好可以扩展,可以被应用程序调用,并且很丰富,它包括按钮(Butt

35、ons),列表(Lists)、文本框(Text Boxes)、网格(Grids)、甚至包括可嵌入的Web浏览器;内容提供器(Content Providers):让各个应用程序可以实现数据的共享,可以一个程序访问另外一个程序的数据,实现咯数据的分享;资源管理器(Resource Manager):管理和访问各种非代码的资源,包含对本地字符串、布局文件(Layout Files)和图形的管理; 2.2.5 Application(应用程序)Android发布的时候会和它同一系列一些核心应用程序包一起发布,该应用程序重要包括JAVA编写的一些应用程序,比如一些视频播放器,摄像程序,图片浏览等等。所

36、有的应用程序都是使用Java语言编写12。2.3 Android系统的多媒体框架Android的多媒体主要框架部分包含了应用程序、JAVA框架层、C语言框架层、硬件抽象层等环节。媒体的播放的时候实际上就是由下层的OpenCORE或Stagefright等多媒体框架实现的13。Android的系统的多媒体框架在Android2.2版本之前主要使用的是OpenCORE,在Android2.3版本之后使用的是Stagefright。具体的分析如下图 2.2 Android 多媒体播放整体框架最上层的JAVA应用程序是使用媒体URI(媒体文件或者流媒体)来作为多媒体框架输入设置给媒体播放器,经过了Ja

37、va框架层,到Jni层,在到本地框架层,一直设置到引擎PVPlayer。这个过程就是为媒体设置了媒体URI的路径,但是这个时候数据传递还没有开始。当开启了PVPlayer,再进入到PVPlayer后开始进行了解析,再根据媒体的格式把文件分成了音频流(MP3,AMP,AAC等)和视频流(H263,H264,MPEG4等),然后经过编解码器的处理,把数据变成原始数据(音频通常是PCM,视频通常是YUV或RGB格式)。再把音视频原始数据放在音频和视频的输出播放环节(扬声器或者显示屏等硬件)进行输出14-15。AwesomePlayer是Stagefright的核心类,创建并管理Parser(Medi

38、aExtractor), Codec(OMXCodec), Render(AwesomeRendererer)及AudioPlayer等。音频播放功能流程通过调用AwesomePlayer 的setDataSource 函数来设置数据源; AwesomePlayer 通过调用MediaExtractor的Create 函数来识别该文件的格式,MediaPlayer 判断该文件为WMA 格式后,会创建一个WMAExtractor,在创建WMAExtractor 的同时,WMAExtractor 会解析文件头,获取文件中的相关信息。然后调用WMAExtractor的getTrack 函数创建一个W

39、MASource; AwesomePlayer通过OMXCodec 创建一个WMADecoder; AwesomePlayer接着创建一个AudioPlayer,并把WMADecoder 做为数据源传给AudioPlayer,并调用AudioPlayer 的start 函数; AudioPlayer 获取WMADecoder中的相关参数: 文件类型、采样率、声道数,并根据该数据开启AudioSink,并把AudioSinkCallback做为回调函数传给AudioSink。AudioPlayer 先调用WMADecoder 解第一帧数据, 并把该数据传给AudioSink去播放,当播放完成后A

40、udioSink 会调用回调函数AudioSinkCallback 再取解码后的数据,AudioSinkCallback又会调用FillBuffer 函数获取解码后的原始数据,解码后数据如果被取完后,AudioPlayer又会调用WMADecoder 解下一帧数据给AudioSink,来回反复,直到文件中数全部被播放。在拉动滚动条时,上层会传来SeekTime,经AudioPlayer 传给WMADecoder 再传给WMAExtractor,WMAExtractor 根据上层传来的SeekTime 判断出要播放的原始数据的起始位置,然后从该位置读取一个数据包传给WMADecoder 解码16

41、。2.4 本章小结本章为全文的第二章,介绍了Android操作系统构成,重点介绍了Android多媒体框架的组成,最后介绍了目前的编解码。9浙江大学硕士学位论文第3章OpenMAX介绍第3章 OpenMAX介绍本章主要分析了OpenMAX框架的主要运行的模式,介绍了几个重要功能模块和接口函数。和Android中的情况。3.1 OpenMAX的简介OpenMAX是无授权费的,实现跨平台的应用程序接口API,目的是使媒体加速组件能够在开发、集成和编程各个环节中能够屏蔽硬件的差别同时实现接口统一,方便调用。也为设备提供比较全面的编解码器和应用程序来屏蔽硬件。OpenMAX API将会和处理器一起提供

42、,以使库和编解码器的开发者能够高速有效地利用硬件芯片的完整加速潜能,并且无需担心底层硬件结构8。3.2 OpenMAX的概述3.2.1 OpenMAX标准化接口17OpenMAX是Khronos公司制定的针对手持设备和嵌入式移动设备的行业标准。它是无授权费的,跨平台的API 接口。OpenMAX标准主要是针对嵌入式移动设备和手机移动设备的多媒体架构 。并且在架构底层上可以为多媒体文件进行的codec或数据处理定义了一套完整统一的编程接口(OpenMAX API),同时对多媒体数据处理的时候进行了系统的封装抽象,屏蔽了底层的结构,更加快速开发程序。因此,大多数的多媒体软件和多媒体框架都是通过Op

43、enMAX来实现一套非常完整统一的接口,让codec和其他多媒体的数据处理功能变的更加方便,同时实现了跨越软硬件平台的可移植性18。OpenMAX共分为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 作为

44、实现音频,视频和图像编解码器与多媒体编解码器的交互,并且统一的行为来支持组件。这些编解码器或者是软件解码器,或者是硬件解码器,或许是软硬件的混合体。OpenMAX IL提供了透明的媒体框架,为编解码器提供一个系统抽象,它解决了不同媒体系统之间编解码移植的问题。OpenMAX API会和处理器一起提供的,为库和编解码器开发者可以高速有效地利用新器件的完整加速潜能,不需担心其底层的硬件结构。在架构底层上为多媒体的编解码和数据处理提供了统一的编程接口,对多媒体数据的处理功能进行系统级抽象,为用户屏蔽了底层的细节。因此,多媒体应用程序和多媒体框架通过OpenMAX IL可以以一种统一的方式来使用编解码

45、和其他多媒体数据处理功能,具有了跨越软硬件平台的移植性。OpenMAX IL目前已经成为了事实上的多媒体框架标准。嵌入式处理器或者多媒体编解码模块的硬件生产者,常常提供标准的OpenMAX IL层的软件接口,这样软件的开发者就可以基于这个层次的标准化接口进行多媒体程序的开发。在Android中,OpenMAX IL层,通常可以用于多媒体框架的插件,Android的多媒体框架OpenCore和StageFright都可以使用OpenMAX作为插件,主要用于编解码(Codec)处理。OpenMAX IL的组件结构如图3.1所示。图 3.1 OpenMAX IL 层次结构OpenMAX IL以组件的

46、形式封装了应用程序所需的功能,每个组件对应一个功能模块, 组件可以分类为输入(sources),输出(sinks),过滤器(filters),分离器(splitters),混合器(mixers)等。组件端口主要用于组件数据的输入输出。用于发送数据到端口和从端口获取数据的函数分别是EmptyThisBuffer 和FillThisBuffer,这两个调用均是异步的。每个OpenMAX IL 组件都要经历一系列的状态转换。组件通过OpenMAX IL 内核的调用加载并转换为加载(Loaded)状态,其他的状态转换通过IL client 与组件的直接通信完成。IL client 通过OMX_SendCommand 函数使用OMX_CommandStateSet 命令控制组件改变状态19。其中,OpenMAX IL层主要实现了OpenMAX IL中的各个组(Component)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1