• / 5
  • 下载费用:5 金币  

Android下OpenMax IL框架的研究和应用.pdf

关 键 词:
ANDROID OPENMAXIL 框架 研究 应用
资源描述:
第29卷第8期2012年8月计算机应用与软件Computer Applications and SoftwareV01.29 No.8Aug.2012Android下OpenMax IL框架的研究和应用沈永增 李晓凤吴冬林(浙江工业大学信息工程学院浙江杭州310023)摘要 由于Android系统多媒体引擎使用的是OpenMax软件解码组件,出现了播放分辨率较高视频不流畅的问题。为此,提出在Android系统上设计一OpenMax硬件解码组件,并将其放在嵌入式开发平台上进行测试。该组件是在对Android系统自带Open—Max IL层进行研究的基础上,以SamSung$3C6410为嵌入式核心处理器,针对MPEG-4视频流而设计。实验结果表明,设计的硬件解码组件优于系统自带的软件解码组件,表明该方案切实可行。关键词 Android OpenMax解码组件嵌入式MPEG-4中图分类号TP399 文献标识码ARESEARCH AND APPLICATIoN oF OPENMAX IL FRAMEWORKBASED oN ANDRoIDShen Yongzeng Li Xiaofeng Wu Donglin(College ofj咖rmation Engineering,Zhejiang University of Technology,Hangzhou 310023,Zhejiang,China)Abstract Due to the use of OpenMax software decoding component in Android multimedia engine system,there arises the problem of lesssmooth when playing high resolution video.Therefore,we propose to design an OpenMax hardware decoding component on Android system,and test it on the embedded development platform.The component is designed for the MPEG-4 video streams using SamSung$3 C64 1 0 as itsembedded eore processor based Oil the researeh on OpenMax IL layer in Android system.Experimental results show that the designedhardware decoding component outperforms the software decoding component the android system comes with,this indicates that the program ispractical and feasible.Keywords Android OpenMax Decoding component Embedded system Mpeg-40 引 言Android作为一款开源的手机操作系统,自07年推出至今,在手机领域越来越受到推崇’1。。由于其底层是以开放性的Linux kernel为架构。2。,因此我们完全可以利用Android完整的体系结构、开放性以及应用程序开发便捷等特点,将Android广泛地应用于一般的嵌入式环境中去p o。既然Android是手机操作系统,当然其多媒体功能必然是强大的,但是恰恰在视频上,面对现在人们需求的提高,Android系统自带的软件解码插件已经满足不了人们的需求。因此,有些手机厂商在硬件上额外添加一图形处理器GPU,并且自主设计代码,来实现视频的硬件解码M。,这样导致了代码多样化。尤其在普通嵌入式平台上,现在很多CPU都集成了视频硬件解码功能,而这些CPU并不都是用于手机的,而是给手机以外其他移动终端使用的。这样就使得广大嵌入式开发者在选择用Android操作系统进行开发的时候必须自主开发视频硬件解码插件。这在开发上带来了一定的难度。OpenMax是无授权费的,跨平台的应用程序接口API,是一个多媒体应用程序的框架标准。OpenMAX分为三层,自底而上分别为OpenMAX DL(开发层),OpenMAX IL(集成层),Open—MAX AL(应用层)。其中,OpenMAX IL层目前已经成为了事实上的多媒体框架标准。多媒体框架和多媒体应用程序可以通过OpenMAX IL,以一种统一的方式来使用其他的多媒体数据处理功能和解码组件,具有跨越软硬件平台的移植性…。针对以上问题和分析,本文以TQ6410为开发平台,基于Android2.0操作系统’6。,对OpenMax IL框架进行研究,并在此框架下设计了一款能够解码MPEG-4标准视频流的OpenMax硬件解码组件,最后,在嵌入式平台上验证其合理有效性。1 OpenMax IL框架研究1.1 OpenMax IL层次结构Android下的OpenMax IL层,通常作为多媒体引擎插件,完成Android下的音视频编解码工作。其层次结构如图1所示。收稿El期:2011—09—06。沈永增,教授,主研领域:嵌入式系统,计算机智能控制,模式识别,图像处理。李晓凤,硕士生。吴冬林,硕士生。万方数据266 计算机应用与软件 2012血OpenCom多媒体引擎<乡妻拱≤层之乡l。pe№I蝠实现之乡硬件编解码驱动图1 OpenMax IL层层次结构Android下基本使用的是标准的OpenMax IL层接口,对其进行简单封装被OpenCore多媒体引擎所使用。7 J。由于Open—Max IL层是用C/C++编写的,其标准化的设计,易于与底层硬件解码驱动形成衔接,易于扩展硬件解码组件。1.2 OpenMax IL实现的结构在Android系统内,OpenMax IL实现的具体结构如图2所示。图2 OpenMax IL实现的具体结构多媒体引擎是通过一个olnx core来实现与OpenMax IL组件的通信。其实现方式是通过/system/etc下.c龟文件内标识的ID,对OpenMax IL入口库进行调用。该标识ID为固定ID,若要自己设计OpenMax IL层,避免修改Android系统源代码.此ID就不可修改。该ID为(Oxa054369e,0x22c5,0x412e,0x19,0x17,0x87,0x4c,0xla,0x19,0xd4,0xSf),相对应动态入口库libomx—sharedlibrary.SO。该动态库由5个静态库组成,分别为libomx—common_lib.a(公共库)、libomx—queue_lib.a(队列库)、libpvomx—proxy—lib.a(代理机制库)、libomx—baseclass—lib.a(基础类库)、libpv—omx—interface.a(接口库)。其中前四个库是基本库,提供了整个插件所用到的公共的函数,最后一个库是实现各个OpenMax组件的接口库。通过libomx—sharedlibrary.SO动态打开各个OpenMax组件,包括音频AAC、AMR、MP3编解码组件,视频AVC、MPEG-4编解码组件。各个编解码组件分别使用codecs—v2\audio和codecs—v2\video目录下的软件编解码库去实现。1.3 OpenMax IL下的Omx CoreOmx Core的功能是实现组件的初始化和对组件的管理。如果将OIYIX组件集成到PVMF框架下,必须提供相对应的OwxCore,并且所有的组件和相对应的Omx Core都必须放在同一个库下。Omx Core规范规定了Omx Core的9种方法。在Android下,实现了两个Omx Core,一个Omx Core是其他Omx Core的管理者,然后其他Omx Core去管理组件。这个职位最高的OmxCore在Android下称之为Omx Core封装层。该封装层通过动态调用dlopen的方式打开动态库,dlsym的方式来调用Omx Core方法。Android下的Omx Core封装层实现与其他Omx Core本质上是一样的。Omx Core封装层实现如下:首先,定义了一个包括重要全局数据的类,比如Omx Core库的索引,Omx Core对应的组件索引,整个组件数目,Omx Core数目等等,这个类提供了对所有Omx Core的一个全局管理功能;其次,实现了所有OmxCore的方法,比如OMX—MasterInit,该函数根据指定路径读取所有的配置文件,然后根据.cfg配置文件将支持OMX—INTER—FACE—ID的库加载进来,通过QueryInterface()验证这些库是否真的支持这个ID,初始化这些组件,将Omx Core索引与OmxCore相对应的组件建立联系,并对其各组件进行注册。再比如,OMX—MasterGetHandle函数的实现,它会从已注册的组件中根据名字来查找这个组件,然后根据查找到的组件索引获得对应的Omx Core的索引,然后再根据此索引获得相应的OMX—getHandle函数,并对其进行调用。还有OMX—MasterSetupTun.nel、OMX—MastercomponentNameEnum函数等等。2解码组件的设计与实现2.1 OpenMax组件部分由于我们是要在Android的OpenMax IL下添加一个新的组件,因此我们设计的组件必须符合其原有架构。我们在组件部分设计两个C++文件,一个为组件定义文件,另一个是硬件解码器调用者文件。由于原有自带软件解码组件已包含此目录,因此我们用自己设计的文件将其覆盖掉。并将其置于codeesv2\0131X\oInx—mpe94\src目录下o1)组件定义文件该文件内容主要是MPEG-4解码组件的构建、配置、数据流分离解析等函数实现。该文件实现的所有函数都设计在ClassOpenmaxmpe94AO下,该类继承于OmxComponentVideo基类。如下:Class Openmaxmpe94AO:public OmxComponentVideo{OMX—ERRORTYPE ConstructComponent(OMX—PrR pAppData,OMX—PTR pProxy); //组件构建OMX—ERRORTYPE DestroyComponent();OMX—ERRORTYPE Componentlnit();OMX—ERRORTYPE ComponentDeInit();void ProcessData();void DecodeWithoutMarker();void DecodeWithMarker();//组件初始化//组件资源释放//数据流处理};其中,组件构建与数据解析是最复杂的两个函数。组件构建主要包括:将命令控制SendCommand函数、参数设置SetPa.rameter函数、配置设置SetConfig函数等函数指针指向基类实现的相对应函数;然后设置该组件的能力,即能否支持外部输入输出buffer分配,是否支持部分帧、是否能够处理不完全帧等;最万方数据第8期 沈永增等:Android下OpenMax IL框架的研究和应用 267后,设置输入输出端口,包括输入格式,输出格式等。而数据解析函数中,主要是以上类中的ProeessData()函数,该函数对有标志位的buffer和没有标志位的buffer进行分开处理,最终实现输入视频数据流的处理功能。该函数调用DecodeWithoutMarker()与DecodeWithMarker()函数分开完成数据处理,这两个函数核心都是去调用硬件解码器调用者,并根据硬件解码器的返回进行操作,包括buffer不足、输入数据流已结束、解码出错等,最后将解码后的数据送到输出buffer中。其中,调用解码相关部分核心函数为OMX—BOOLmpe94Decoder—OMX::mpe94DecodeVideo—OMX(…)函数,该函数实现部分在硬件解码器调用者文件中,通过该函数来实现与硬件解码库调用者的连接。2)硬件解码器调用者文件该文件主要功能是实现与硬件解码库的连接与调用。整个文件实现mpe94Decoder_OMX类构建、初始化、反初始化、解码库调用、解码句柄初始化、获取输出YUV buffer、设置解码类型、复位/增加/获取时间戳以及解码slice等功能。该类一部分函数如下:class mpe94DecMer_OMX{OMX—BOOL Mp4DecodeVideo OMX(…);OMX—BOOL GetYuv(OMX—U8}{aOutBuf,OMX—U32}aOutBuf-Size,OMX—TICKS}aOutTimestamp);int mfc—create(void);int mfc—dec—slice(unsigned char+data,unsigned int size,OMXBOOL MuhiSliceFlag);unsigned char} mfc_get—yuv(unsigned int}out—size);int mfc—flag_.video—frame(unsigned char$data,int size);j’其中该类函数都是与硬件解码库相关的函数,最重要的当然是解码视频函数和获取输出YUV buffer函数,但是这两个函数最根本的是调用底层硬件解码驱动,而直接调用的是底层硬件解码驱动的封装层。其中,解码视频函数主要实现流程如图3所示。 <1丽矜解鹳m错获取输Abuflbr和size帧计数置I——]■~等_R蔫零输出buffersize镂为0帧计数加l解码成功———_._塑出—一图3核心函数实现流程图通过mfc—dec—slice()函数对输入的buffer进行解码,通过返回值再进一步做处理。当解码正常即返回值为1时,对端口参数的帧宽、帧长进行设置,同时通过mfc—get—yuv()函数获取解码输出的YUV buffer,最后对帧计数进行加1,继续循环。而获取输出YUV buffer函数,则是直接调用底层硬件解码封装层函数SsbSipMPEG4DeeodeGetOutBuf()直接获得应用层解码输出的buffer。2.2硬件解码封装部分这部分设计同样不能破坏原有的Android的OpenMax IL架构,因此我们将该部分设计文件内容放在video目录下,新建一名为mpe94文件夹。同时设计相应的.mk文件。该部分主要是完成底层驱动与上层调用的接口。核心C函数主要有底层硬件资源初始化函数void$SsbSipMPEG4Decodelnit(),底层硬件指定buffer下解码函数,int SsbSipMPEG4DeeodeExe(void女open.Handle,long lengthBufFill),底层硬件解码获取输出buffer函数void%SsbSipMPEG4DecodeGetOutBuf(void$openHandle,tong。size),还有设置底层配置、获取底层配置、获取输入buffer函数。其中,初始化函数通过open来打开底层设备,映射输入输出buffer,然后对重要解码数据结构体进行初始化。而解码函数则是调用ioctl函数,先使用IOCTL—MFC—MPEG4一DEC—INIT命令,对底层解码进行初始化,然后使用IOCTL—MFC—MPEG4一DEC—EXE命令对输入buffer进行解码。获取输出buffer函数则是直接使用iectl函数,通过IOCTL-MFC—GET—FRAM—BUF—AD—DR命令获取输出参数。该部分代码均是C文件,因为这里调用到了底层驱动。由于linux内核是用C语言写的,其驱动必然也是C语言写的,直接调用当然也用C语言。我们将与硬件解码封装层连接的底层硬件解码驱动置于内核下,结合起来最终实现本文目标。3测试结果3.1测试程序设计测试程序采用Java语言编写,工具使用eclipse 3.5.2,利用Android SDK在模拟器上进行开发。测试程序流程如图4所示。图4 Java简易播放器流程图该测试程序完成对SD卡内指定MPEG-4视频流进行播放的功能,测试程序重点是VideoView类的控制㈣。3.2测试结果.我们采用SAMSUNG 6410 ARMl 1处理器,128M DDRAM内飘万方数据计算机应用与软件 2012年存(建议最好256M及以上),4.3寸LcD屏(480×272)等器件作为嵌入式测试平台。我们将编译好的测试程序安装到测试平台上。测试视频码率为1000kbps,大小为640 X480,通过postproe㈣r驱动处理,在4.3寸屏上播放。测试播放时长结果如表l所示。测试播放结果如图5所示,能够正常的播放MPEG-4视频流,相比软解码播放视频像播放幻灯片的情况消失了,达到了预期目标。 ·表1视频播放时长比较 .原视频 硬件解码后 软件解码后’播放时长 播放时长 播放时长1分48秒 1分鸽秒 1分58秒4结语图5视频流播放效果本文利用Android自带的Openl~lax IL框架及其软件解码组件,在此基础上对硬件解码组件进行设计,并且将其放在嵌入式开发平台上进行测试,最终完成高分辨率MPEG-4视频流的正常播放。这对于我们将;Amdroid操作系统移植到一般嵌入式开发环境中去,并且在该嵌入式环境中进行多媒体技术开发带来了实际参考价值。对我们以后能够将手机拥有的多媒体功能更好地应用到普通嵌入式设备中,带来了一定的实际意义。参考文献[1]李健.Andmid:“安致”移动信息处理的未来?[J].电子产品世界,2010,3(1):9一18.[2]张仕成.基于GOOSe Android平台的应用程序开发与研究[J].电脑知识与技术.2009,5(28):7959—7962.[3]单李旺.Android操作平台的研究与应用[D].天津:南开大学,2009.[4]李强.【曲呱视频硬件解码技术与应用研究[D].北京:北京邮电大学,2009.[5]韩超,梁泉.Android系统级深入开发[M].北京:电子工业出版社.2011:292-293.[6]Android open soum p叫∞t[CWOL].[2011—7—20].httl)://柚一droid.git_kemd.o,lg/.[7]韩超.粱泉.AMroid系统原理及开发要点详解[M].北京:电子工业出版社,2011:222—223.[8】余志龙,陈昱勋,郑名杰,等.C009le Android SDK开发范例大全[M].北京:人民邮电出版社,2009:384—393.(上接第244页)5结语图2节点移动速度随着无线传感器网络的研究和应用的深入发展,其优势日益突出,而作为重要的共性支撑技术之一的节点定位问题也更为显著。本文针对蚊群算法存在的优缺点,在蚁群算法的基础上,利用蚁群算法的分布式概率和转移概率并借助一定的移动模型。结合蒙特卡罗思想,以及目标函数来确定节点可能存在的问题。仿真实验结果验证了算法的有效性,与Mixture MCL算法相比可知,在相同的条件下,该算法定位的精度更高,稳定性更好,可以为无线传感器网络的实际应用提供参考。参考文献【1】Til止S。AhlJGh蜘IelI N B,Helnl.elman W.Ataxonomy of wirelessmie∞-semor network models[J].Mob丑e ComputiI-g and Coalmtmi∞-fiom Review。2002。6(2):1—8.【2】Cull舡D,E穹舡in D,st—瞄哪a M.Overview 0f解nsolr network[J].Co硼吣,2004,37(8):41—49.[3]Bu hl Su N,He Dem Ann J,E心IIl D.GPS-Ie%low c06t伽tdowlo-∞li龃跏for very small devioes[C】//Proe Of衄Personal COIDIImU.mealions 20∞。7(5):28—34.[4】Het,Huang C D,Blum B M.RI,ge-fr睫loealinlti蛳∞hemes iIl IaIgescale∞n舳f netl删rks[C]//Pr∞0f the 9tll Annual IIIterlut.do,al Con.feI蚰∞∞MobiIe c,xnptIll.g and Netwodtinlg(Mob com),San Die.伊,California,OSA:ACM Pro,.枷3:81—95.[5]Nieoleseu D.Ad H∞Posi60,i,g Sy曩ems[C]//Proe of mEE GLO.BECOM’OI-[S.1.】:耻E Pr嘲.2001. .【6】Rshl P.RADAR:An III-I,.ildi%RF-ba皇ed Oser Li;iclllJ蚰柚d Trackingsystm[c]//Proe of m既INFOCOM’00.【S.1.]:皿EEPress.20∞.【7】熊小华,等.无线传感器网络节点定位算法的研究综述[J].机电工程,2啷,26(2):14—17.[8】Dori伊M,Manil%zn V,Colomi A.11le眦system:唧血ni枷∞hy a蒯伽y 0f co,,pmling agent8【J].IEEE Tram剃om佣Sy咖魈,M姐.柚d Cybemeti伪Pact B。1996 26(1):29—41.[9]k H,Do唱H,A加j∞H.Robot·as6i8ted Ioe41inti∞t钟hniqu鹧for咖lessimage∞nsoT netwodts[C]//m腿Conf.∞sen80r,Mesh,and Ad H∞Commmlieatiom面d Networlb(sECON)。2006.[10】Dil B,D|【|l】man s,ltaYi咿P J M.R蛳伊Based LoclllJT洳iII MobfieSemorNetwo出[J].LectureNotesiIIComput日Scienee。2006,3868(2):164—179.[11]SlLa/elllS N E,Vivekanaladan V,Wong V w s.Dual∞d Mixtu弛Mmte C_mlo ka^i龃6∞Algorithnm for M0bde WireIes8 Selll舯r Net-works[c]//eroc 0f the IEEE Wireless Communieatiom nd Networ-kitlg C∞feⅫm。Ho,g Ko.g,2007:4027—4031.万方数据Android下OpenMax IL框架的研究和应用作者: 沈永增, 李晓凤, 吴冬林, Shen Yongzeng, Li Xiaofeng, Wu Donglin作者单位: 浙江工业大学信息工程学院 浙江杭州310023刊名: 计算机应用与软件英文刊名: Computer Applications and Software年,卷(期): 2012,29(8)参考文献(8条)1.李健 Android:“安致”移动信息处理的未来 2010(01)2.张仕成 基于Google Android平台的应用程序开发与研究[期刊论文]-电脑知识与技术 2009(28)3.单李旺 Android操作平台的研究与应用[学位论文] 20094.李强 Linux视频硬件解码技术与应用研究[学位论文] 20095.韩超;梁泉 Android系统级深入开发 20116.Android open source project 20117.韩超;梁泉 Android系统原理及开发要点详解 20118.余志龙;陈昱勋;郑名杰 Google Android SDK开发范例大全 2009本文链接:http://d.g.wanfangdata.com.cn/Periodical_jsjyyyrj201208073.aspx
展开阅读全文
1
  金牌文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:Android下OpenMax IL框架的研究和应用.pdf
链接地址:http://www.gold-doc.com/p-255601.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们
[email protected] 2014-2018 金牌文库网站版权所有
经营许可证编号:浙ICP备15046084号-3
收起
展开