Android gralloc 模块实例
本文实例为借鉴 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 模块实例的更多相关文章
- Android HAL模块实现
1. HAL介绍 Android的HAL(Hardware Abstract Layer硬件抽象层)是为了保护一些硬件提供商的知识产权而提出的.是为了避开linux的GPL束缚. 思路是把控制硬件的动 ...
- Android照相机模块编程 照片颠倒问题及查询摄像头参数问题的解决
这两天编程弄Android照相机模块,设置好各种参数后,发现预览的时候,照片是颠倒了,不是上下颠倒而是颠倒90°. 我的手机是华为U9200,用的Android4.0.3,后来看到http://www ...
- android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)
如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http:// ...
- Android 下载模块分析(DownloadManager和DownloadProvider)
Android下载模块主要有2个部分组成:DownloadManager和DownloadProvider:其中DownloadManager提供接口供调用,具体的实现是 DownloadProvid ...
- Android进阶(二十三)Android开发过程之实例讲解
Android开发过程之实例讲解 前言 回过头来审视之前做过的Android项目,发觉自己重新开发时忽然间不知所措了,间隔了太长时间没有开发导致自己的Android技能知识急剧下降.温故而知新. 废话 ...
- React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块
尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...
- [转]Android:布局实例之模仿QQ登录界面
Android:布局实例之模仿QQ登录界面 预览图: 准备: 1.找到模仿对象 QQ登陆界面UI下载>>>>> 2.导入工程 3.查看布局结构和使用控件 其对应效果图分布 ...
- Android 应用开发实例之情景模式
2013-07-01 Android 应用开发实例 1. 情景模式 使用TabHost来实现主界面的布局. 设置一组RadioButton来切换不同的情景模式. 对比普通情景模式,定时情景模式需要加上 ...
- android 编译模块
android 编译模块 在写完.c文件之后,需要加载到android上进行测试.使用arm-linux-gcc编译,并添加到android开发板上运行失败. 由于android与linux不同,需要 ...
随机推荐
- asp.net 导入Excel记录到数据库中
常用到的一个数据库导入功能,这样的话就省了很大一部分时间来处理程序上的问题而不是无休止的重复复制粘贴动作. 其他的废话不多说,直接上代码: 前提条件: 根目录下建立uploadfiles文件夹(用于保 ...
- ES6学习一 JS语言增强篇
一 背景 JavaScript经过二十来年年的发展,由最初简单的交互脚本语言,发展到今天的富客户端交互,后端服务器处理,跨平台(Native),以及小程序等等的应用.JS的角色越来越重要,处理场景越来 ...
- Double H2.0
Double H2.0 https://www.cnblogs.com/wxh9494/p/9879442.html 选题报告 一.项目描述(Project Description) 本项目提供一个公 ...
- Virtualbox安装Windows 8.1遇到0x000000C4错误解决办法 - 转
想要尝试一下 Windows 8.1 系统,又不愿意在电脑上直接安装,虚拟机提供了很好的平台.因为平时工作需要,其实电脑上装的虚拟机还是不少的,每天都要开着几个虚拟机一起用.多一个不多,于是尝试在自己 ...
- 16款最受关注的智能手表 苹果iWatch领衔
智能手表逐渐成为科技行业的新宠,而传闻中的苹果iWatch以及已经确认即将推出的三星Galaxy Gear,显然让这股热潮达到了顶峰,也预示着大牌厂商将逐渐进入该领域,推出更多成熟的产品.以下便是16 ...
- ios 加密解密工具类字符判断等
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface Helpers : NSObject ...
- 前端 —— SVG
0. 简介 SVG:可缩放矢量图形: SVG 是代码,通过浏览器的解析而渲染成一种图形: 可缩放矢量图形是基于可扩展标记语言(XML),以描述二维矢量图形的一种图形格式,由万维网联盟( World W ...
- JS字符串的问题
首先,搞了好几个小时,头都大了,原来出在字符串问题上. 具体如下: 今天做Yii,遇到用JQuery 的AJAX方法做注册验证,把传回来的字符串与textField中的比较,发现相等,但是就是不出结果 ...
- BZOJ3211: 花神游历各国(线段树)
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 5692 Solved: 2114[Submit][Status][Discu ...
- springboot整合mybatis增删改查(三):mybatis逆向工程
上一篇已经把项目基本框架完善,接下来就是利用Mybatis Generator逆向工程进行mybatis的整合. 我们在创建项目开始的时候已经勾选web,mybatis,sql等,但是这些依赖还是不够 ...