androidgdi之屏幕设备管理-动态链接库

androidgdi之屏幕设备管理-动态链接库

ID:30104347

大小:431.55 KB

页数:10页

时间:2018-12-27

androidgdi之屏幕设备管理-动态链接库_第1页
androidgdi之屏幕设备管理-动态链接库_第2页
androidgdi之屏幕设备管理-动态链接库_第3页
androidgdi之屏幕设备管理-动态链接库_第4页
androidgdi之屏幕设备管理-动态链接库_第5页
资源描述:

《androidgdi之屏幕设备管理-动态链接库》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、AndroidGDI之屏幕设备管理-动态链接库万丈高楼从地起,从最根源的硬件帧缓冲区开始。我们知道显示FrameBuffer在系统中就是一段内存,GDI的工作就是把需要输出的内容放入到该段内存的某个位置。我们从基本的点(像素点)和基本的缓冲区操作开始。1基本知识1.1点的格式对于不同的LCD来讲,FrameBuffer的二进制格式不一样,并且可以分为两部分:1)点的格式:通常将Depth,即表示多少位表示一个点。1位表示一个点2位表示一个点16位表示一个点32位表示一个点(Alpha通道)2)点内格式:RGB分量分布表示。例如对于我们常见的16位

2、表示一个点1.2.格式之间的转换所以屏幕输出实际上是一个值映射的关系。我们可以有如下的点格式转换,源格式可能来自单色位图和彩色位图,对于具体的目标机来讲,我们的目标格式可能就是一种,例如16位(5/6/5)格式。其实就只存在一种格式的转换,即从目标格式都是16位格式。但是,在设计GDI时,基本要求有一个可移植性好,所以我们还是必须考虑对于不同点格式LCD之间的转换操作。所以在GDI的驱动程序中涉及到如下几类主要操作:区域操作(Blit):我们在显示缓冲区上做的最多的操作就是区块搬运。由此,很多的应用处理器使用了硬件图形加速器来完成区域搬运:bli

3、t.从我们的主要操作的对象来看,可以分为两个方向:1)内存区域到屏幕区域2)屏幕区域到屏幕区域3)屏幕区域到内存区域4)内存区域到内存区域在这里我们需要特别提出的是,由于在Linux不同进程之间的内存不能自由的访问,使得我们的每个Android应用对于内存区域和屏幕缓冲区的使用变得很复杂。在Android的设计中,在屏幕缓冲区和显示内存缓冲区的管理分类很多的层次,最上层的对象是可以在进程间自由传递,但是对于缓冲区内容则使用共享内存的机制。基于以上的基础知识,我们可以知道:(1)代码中Config及其Format的意义所在了。也就理解了兼容性的意义

4、:采用同硬件相同的点的描述对象(2)所有屏幕上图形的移动都是显示缓冲区搬运的结果。1.2图形加速器应用处理器都可能带有图形加速器,对于不同的应用处理器对其图形加速器可能有不同的处理方式,对于2D加速来讲,都可归结为Blit。多为数据的搬运,放大缩小,旋转等。2Android的缓冲区抽象定义不同的硬件有不同的硬件图形加速设备和缓冲内存实现方法。AndroidGralloc动态库抽象的任务就是消除不同的设备之间的差别,在上层看来都是同样的方法和对象。在Moudle层隐藏缓冲区操作细节。Android使用了动态链接库gralloc.xxx.so,来完成

5、底层细节的封装。2.1本地定义@hardwarelibhandwaremodulesgralloc每个动态链接库都是用相同名称的调用接口:1)硬件图形加速器的抽象:BlitEngine,CopyBit的加速操作。2)硬件FrameBuffer内存管理3)共享缓存管理从数据关系上我们来考察..动态链接库的抽象行为:在层次:Hardware.c@hardwarelibhardware中对动态链接库中的内容作了全新的包装。/system/lib/hw/gralloc.xxx.so动态库文件。从文件Gralloc.h(handwarelibha

6、rdwareincludehardware)是抽象的结果:hw_get_module从gralloc.xxx.so提取了HAL_MODULE_INFO_SYM(SYM变量)从展露在外部的数据结构,我们在@Gralloc.cpp看到到了这样的布局:staticstructhw_module_methods_tgralloc_module_methods={open:gralloc_device_open};structprivate_module_tHAL_MODULE_INFO_SYM={base:{common:{tag:HARDWARE_

7、MODULE_TAG,…id:GRALLOC_HARDWARE_MODULE_ID,name:"GraphicsMemoryAllocatorModule",author:"TheAndroidOpenSourceProject",methods:&gralloc_module_methods},registerBuffer:gralloc_register_buffer,unregisterBuffer:gralloc_unregister_buffer,lock:gralloc_lock,unlock:gralloc_unlock,},fra

8、mebuffer:0,flags:0,numBuffers:0,bufferMask:0,…};我们建立了什么对象来支撑缓冲区的操作?b

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。