网站大量收购独家精品文档,联系QQ:2885784924

Android手机开发 四.docx

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android手机开发 四

Android手机开发(四)?发布于2011-07-26?导读:对于Android开发者来说,成系列的技术文章对他们的技术成长帮助最大。如下是我们向您强烈推荐的主题为Android开发的第一个系列文章。《Android核心分析》整理如下:24.Android GDI之显示缓冲管理Android GDI之屏幕设备管理-动态链接库万丈高楼从地起,从最根源的硬件帧缓冲区开始。我们知道显示FrameBuffer在系统中就是一段内存,GDI的工作就是把需要输出的内容放入到该段内存的某个位置。我们从基本的点(像素点)和基本的缓冲区操作开始。1 基本知识1.1点的格式对于不同的LCD来讲,FrameBuffer的二进制格式不一样,并且可以分为两部分:1)点的格式:通常将Depth,即表示多少位表示一个点。1位表示一个点2位表示一个点16位表示一个点32位表示一个点(Alpha通道)2) 点内格式:RGB分量分布表示。例如对于我们常见的16位表示一个点1.2.格式之间的转换所以屏幕输出实际上是一个值映射的关系。我们可以有如下的点格式转换,源格式可能来自单色位图和彩色位图,对于具体的目标机来讲,我们的目标格式可能就是一种,例如16位(5/6/5)格式。其实就只存在一种格式的转换,即从目标格式都是16位格式。但是,在设计GDI时,基本要求有一个可移植性好,所以我们还是必须考虑对于不同点格式LCD之间的转换操作。所以在GDI的驱动程序中涉及到如下几类主要操作:区域操作(Blit):我们在显示缓冲区上做的最多的操作就是区块搬运。由此,很多的应用处理器使用了硬件图形加速器来完成区域搬运:blit.从我们的主要操作的对象来看,可以分为两个方向:1)内存区域到屏幕区域2)屏幕区域到屏幕区域3)屏幕区域到内存区域4)内存区域到内存区域在这里我们需要特别提出的是,由于在Linux不同进程之间的内存不能自由的访问,使得我们的每个Android应用对于内存区域和屏幕缓冲区的使用变得很复杂。在Android的设计中,在屏幕缓冲区和显示内存缓冲区的管理分类很多的层次,最上层的对象是可以在进程间自由传递,但是对于缓冲区内容则使用共享内存的机制。基于以上的基础知识,我们可以知道:(1)代码中Config及其Format的意义所在了。也就理解了兼容性的意义:采用同硬件相同的点的描述对象(2)所有屏幕上图形的移动都是显示缓冲区搬运的结果。1.2图形加速器应用处理器都可能带有图形加速器,对于不同的应用处理器对其图形加速器可能有不同的处理方式,对于2D加速来讲,都可归结为Blit。多为数据的搬运,放大缩小,旋转等。2 Android的缓冲区抽象定义不同的硬件有不同的硬件图形加速设备和缓冲内存实现方法。Android Gralloc动态库抽象的任务就是消除不同的设备之间的差别,在上层看来都是同样的方法和对象。在Moudle层隐藏缓冲区操作细节。Android使用了动态链接库gralloc.xxx.so,来完成底层细节的封装。2.1 本地定义@hardware/libhandware/modules/gralloc每个动态链接库都是用相同名称的调用接口:1)硬件图形加速器的抽象:BlitEngine,CopyBit的加速操作。2)硬件FrameBuffer内存管理3)共享缓存管理从数据关系上我们来考察..动态链接库的抽象行为:在层次:Hardware.c@hardware/libhardware中对动态链接库中的内容作了全新的包装。/system/lib/hw/gralloc.xxx.so动态库文件。从文件Gralloc.h(handware/libhardware/include/hardware)是抽象的结果:hw_get_module从gralloc.xxx.so提取了HAL_MODULE_INFO_SYM(SYM变量)从展露在外部的数据结构,我们在@Gralloc.cpp看到到了这样的布局:static structhw_module_methods_tgralloc_module_methods = {open: gralloc_device_open};structprivate_module_t HAL_MODULE_INFO_SYM = {base: {common: {tag: HARDWARE_MODULE_TAG,…id: GRALLOC_HARDWARE_MODULE_ID,name: Graphics Memory Allocator Module,author: The Android Open Source Project,methods: gralloc_module_methods},registerBuffer: gralloc_register_

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档