本文实例为借鉴 http://www.ixueyi.com/jingyan/1865079.html 该文档后所写。主要是android的gralloc操作显存的模块实例,如有不正确的地方欢迎指出谢谢。

  Android帧缓冲区硬件抽象层模块Gralloc的实现原理。

   1. 分配一个匹配屏幕大小的图形缓冲区

2. 将分配好的图形缓冲区注册(映射)到当前进程的地址空间来

3. 将要绘制的画面的内容写入到已经注册好的图形缓冲区中去,并且渲染(拷贝)到系统帧缓冲区中去

为了实现以上三个操作,我们还需要:

1. 加载Gralloc模块

2. 打开Gralloc模块中的gralloc设备和fb设备

其中,gralloc设备负责分配图形缓冲区,Gralloc模块负责注册图形缓冲区,而fb设备负责渲染图形缓冲区。

  直接看源码:

  

 framebuffer_device_t* fbDev;
alloc_device_t* grDev; hw_module_t const* module;
buffer_handle_t handle;
gralloc_module_t const *mAllocMod;
void* vaddr;
int stride;
int err;
if (hw_get_module(GRALLOC_HARDWARE_MODULE_ID, &module) == ) {//加载gralloc模块 err = framebuffer_open(module, &fbDev); //打开fb设备
if(err) LOGE("couldn't open framebuffer HAL (%s)", strerror(-err));
err = gralloc_open(module, &grDev); //打开gralloc设备
if(err) LOGE("couldn't open gralloc HAL (%s)", strerror(-err)); err = grDev->alloc(grDev, display.w, display.h, HAL_PIXEL_FORMAT_RGBA_8888, GRALLOC_USAGE_HW_FB/*决定申请的是系统图形内存还是普通内存*/, &handle, &stride); //分配图形缓冲区
// err = grDev->alloc(grDev, 1024, 600, HAL_PIXEL_FORMAT_RGBA_8888, 0/*决定申请的是系统图形内存还是普通内存*/, &handle, &stride); //分配图形缓冲区 mAllocMod = (gralloc_module_t const *)module;
err = mAllocMod->registerBuffer(mAllocMod, handle); //映射内存到进程中 err = mAllocMod->lock(mAllocMod, handle, HAL_PIXEL_FORMAT_RGBA_8888, , , display.w, display.h, &vaddr);
LOGE("++++++++++++++++> vaddr = %p\n", vaddr); err = mAllocMod->lock(mAllocMod, handle, HAL_PIXEL_FORMAT_RGBA_8888, , , , , &vaddr);
LOGE("++++++++++++++++> vaddr = %p\n", vaddr);

//这就绘图即可,将绘制的图的内存直接拷贝到vaddr里面即可
bitmap.lockPixels();
  canvas->drawPath(path, paint);
  memcpy(vaddr, bitmap.getPixels(), bitmap.getSize());
  bitmap.unlockPixels();
err = mAllocMod->unlock(mAllocMod, handle); err = fbDev->post(fbDev, handle); //图形缓冲区的渲染 err = mAllocMod->unregisterBuffer(mAllocMod, handle); //解除映射内存 grDev->free(grDev, handle);//释放图形缓冲区 gralloc_close(grDev);//关闭gralloc设备
framebuffer_close(fbDev);//关闭fb设备
} 这样就可以直接绘图显示在屏幕上了,比直接操作/dev/graphics/fb0 设备文件要稳定很多。

Android gralloc 模块实例的更多相关文章

  1. Android HAL模块实现

    1. HAL介绍 Android的HAL(Hardware Abstract Layer硬件抽象层)是为了保护一些硬件提供商的知识产权而提出的.是为了避开linux的GPL束缚. 思路是把控制硬件的动 ...

  2. Android照相机模块编程 照片颠倒问题及查询摄像头参数问题的解决

    这两天编程弄Android照相机模块,设置好各种参数后,发现预览的时候,照片是颠倒了,不是上下颠倒而是颠倒90°. 我的手机是华为U9200,用的Android4.0.3,后来看到http://www ...

  3. android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)

    如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http:// ...

  4. Android 下载模块分析(DownloadManager和DownloadProvider)

    Android下载模块主要有2个部分组成:DownloadManager和DownloadProvider:其中DownloadManager提供接口供调用,具体的实现是 DownloadProvid ...

  5. Android进阶(二十三)Android开发过程之实例讲解

    Android开发过程之实例讲解 前言 回过头来审视之前做过的Android项目,发觉自己重新开发时忽然间不知所措了,间隔了太长时间没有开发导致自己的Android技能知识急剧下降.温故而知新. 废话 ...

  6. React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块

    尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...

  7. [转]Android:布局实例之模仿QQ登录界面

    Android:布局实例之模仿QQ登录界面 预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布 ...

  8. Android 应用开发实例之情景模式

    2013-07-01 Android 应用开发实例 1. 情景模式 使用TabHost来实现主界面的布局. 设置一组RadioButton来切换不同的情景模式. 对比普通情景模式,定时情景模式需要加上 ...

  9. android 编译模块

    android 编译模块 在写完.c文件之后,需要加载到android上进行测试.使用arm-linux-gcc编译,并添加到android开发板上运行失败. 由于android与linux不同,需要 ...

随机推荐

  1. andorid 反编译

    1. 字节码文件转java文件 smali2java是一个将smali代码反编译成java代码的工具.什么是smali?smali是将Android字节码用可阅读的字符串形式表现出来的一种语言,可以称 ...

  2. IIS上部署DotNet Core程序

    1.安装托管捆绑包 https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore-2.1 ...

  3. 编译安装zabbix3.2.5

    1. 配置lnmp环境 首先配置Nginx+mysql+php-fpm的系统环境,具体配置见另一篇文章 2. 编译安装zabbix 2.1 下载并解压zabbix 可以到zabbix官网下载zabbi ...

  4. 基于Jquery实现省份、城市、区县三级联动

    前端感觉写的比较少,也是为了练手,下午没事用来写了这个三级联动,也是第一次写这东西. 据我了解,城市信息可以选择存在数据库或者直接写在前端,为了省事,我直接写在前端,下面是我的代码: <!DOC ...

  5. synchronized一个(二)

    今天遇到了一个关于synchronized的一个问题,关于其持有锁的问题.这个问题以前是有看过相关文章的,但是一直没有记录,今天大概记录一下当前的认知. 对于静态方法,synchronized的使用的 ...

  6. Sqlserver 按照时间段统计数据

    WITH t1 ( [hour], title ) , ' 0:00:00--- 1:00:00' UNION ALL , ' 1:00:00--- 2:00:00' UNION ALL , ' 2: ...

  7. ubuntu:NVIDIA设置性能模式,以降低CPU使用、温度

    NVIDIA设置性能模式,以降低CPU使用.温度 ubuntu安装完NVIDIA显卡驱动后 终端输入 nvidia-settings 选择OpenGL Settings->Image Setti ...

  8. MyBatis的一对一

    1. 建立好工程后,在pom.xml中配置myBatis的依赖. <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...

  9. POJ 1611:The Suspects(并查集)

    The Suspects Time Limit: 1000MS   Memory Limit: 20000K Total Submissions: 48327   Accepted: 23122 De ...

  10. 基于http协议的加密传输方案

    最近公司需要通过公网与其它平台完成接口对接,但是基于开发时间和其它因素的考虑,本次对接无法采用https协议实现.既然不能用https协议,那就退而求其次采用http协议吧! 那么问题来了!在对接的过 ...