Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(10)...
7. 图形缓冲区的注销过程
- int gralloc_unregister_buffer(gralloc_module_t const* module,
- buffer_handle_t handle)
- {
- if (private_handle_t::validate(handle) < 0)
- return -EINVAL;
- // never unmap buffers that were created in this process
- private_handle_t* hnd = (private_handle_t*)handle;
- if (hnd->pid != getpid()) {
- if (hnd->base) {
- gralloc_unmap(module, handle);
- }
- }
- return 0;
- }
- static int gralloc_unmap(gralloc_module_t const* module,
- buffer_handle_t handle)
- {
- private_handle_t* hnd = (private_handle_t*)handle;
- if (!(hnd->flags & private_handle_t::PRIV_FLAGS_FRAMEBUFFER)) {
- void* base = (void*)hnd->base;
- size_t size = hnd->size;
- //LOGD("unmapping from %p, size=%d", base, size);
- if (munmap(base, size) < 0) {
- LOGE("Could not unmap %s", strerror(errno));
- }
- }
- hnd->base = 0;
- return 0;
- }
- static int fb_post(struct framebuffer_device_t* dev, buffer_handle_t buffer)
- {
- if (private_handle_t::validate(buffer) < 0)
- return -EINVAL;
- fb_context_t* ctx = (fb_context_t*)dev;
- private_handle_t const* hnd = reinterpret_cast<private_handle_t const*>(buffer);
- private_module_t* m = reinterpret_cast<private_module_t*>(
- dev->common.module);
- if (hnd->flags & private_handle_t::PRIV_FLAGS_FRAMEBUFFER) {
- const size_t offset = hnd->base - m->framebuffer->base;
- m->info.activate = FB_ACTIVATE_VBL;
- m->info.yoffset = offset / m->finfo.line_length;
- if (ioctl(m->framebuffer->fd, FBIOPUT_VSCREENINFO, &m->info) == -1) {
- LOGE("FBIOPUT_VSCREENINFO failed");
- m->base.unlock(&m->base, buffer);
- return -errno;
- }
- m->currentBuffer = buffer;
- } else {
- // If we can't do the page_flip, just copy the buffer to the front
- // FIXME: use copybit HAL instead of memcpy
- void* fb_vaddr;
- void* buffer_vaddr;
- m->base.lock(&m->base, m->framebuffer,
- GRALLOC_USAGE_SW_WRITE_RARELY,
- 0, 0, m->info.xres, m->info.yres,
- &fb_vaddr);
- m->base.lock(&m->base, buffer,
- GRALLOC_USAGE_SW_READ_RARELY,
- 0, 0, m->info.xres, m->info.yres,
- &buffer_vaddr);
- memcpy(fb_vaddr, buffer_vaddr, m->finfo.line_length * m->info.yres);
- m->base.unlock(&m->base, buffer);
- m->base.unlock(&m->base, m->framebuffer);
- }
- return 0;
- }
Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(10)...相关推荐
- Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析
前面在介绍Android系统的开机画面时提到,Android设备的显示屏被抽象为一个帧缓冲区,而Android系统中的SurfaceFlinger服务就是通过向这个帧缓冲区写入内容来绘制应用程序的用户 ...
- Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(9)...
5. 图形缓冲区的释放过程 前面提到,用户空间的应用程序用到的图形缓冲区是由Gralloc模块中的函数gralloc_free来释放的,这个函数实现在文件hardwa ...
- Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(8)...
4. 分配图形缓冲区 前面提到,用户空间的应用程序用到的图形缓冲区是由Gralloc模块中的函数gralloc_alloc来分配的,这个函数实现在文件hardware/libha ...
- Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(2)...
函数load也是实现在文件hardware/libhardware/hardware.c文件中,如下所示: static int load(const char *id, const char *pa ...
- Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(5)...
3. fb设备的打开过程 在Gralloc模块中,fb设备的ID值定义为GRALLOC_HARDWARE_FB0.GRALLOC_HARDWARE_FB0是一个宏,定义在文件h ...
- Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(4)...
成员变量fd指向一个文件描述符,这个文件描述符要么指向帧缓冲区设备,要么指向一块匿名共享内存,取决于它的宿主结构体private_handle_t描述的一个图形缓冲区是在帧缓冲区分配的 ...
- Android帧布局(Frame Layout)
Android帧布局(Frame Layout) FrameLayout是最简单的一个布局管理器.FrameLayout为每个加入其中的组件创建一个空白区域(一帧),这些组件根据layout_grav ...
- 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)
更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,共同探讨软件知识经验,关注就有海量学习资料免费领哦: 目录 0背景 1.手机USB接口通信特点 1.1 使用方便 1.2 通用性强 1.3 ...
- Android系统Surface机制的SurfaceFlinger服务对帧缓冲区(Frame Buffer)的管理分析
在前文中,我们分析了SurfaceFlinger服务的启动过程.SurfaceFlinger服务在启动的过程中,会对系统的硬件帧缓冲区进行初始化.由于系统的硬件帧缓冲区一般只有一个,并且不是谁都可以随 ...
最新文章
- python map(function, iterable, ...) 内置函数的用法 (序列迭代调用并返回)
- python 相对路径
- C语言位操作--不用中间变量交换两数值
- java 重载 不可_深入深刻深到不能再深的理解java中的重载和重写
- Spring Boot EasyPoi导出Excel下载
- ElasticSearch 全文检索实战
- 2018自然语言处理与机器学习论文发表统计
- paip.提升用户体验----自定义移位操作符重载
- 关于SRE方法论的一些笔记
- TPM分析笔记(二)TPM2.0 规范文档
- 史上最全的Unreal Engine 4学习资料整理
- android apk 微信登入_微信第三方登录(Android 实现)
- linux 全选 编辑文本_强烈推荐:Linux终端文本编辑器Micro
- 好看的网站发布导航页HTML源码
- Python手写实现LDA与QDA算法
- 鸿蒙文化博物馆,有趣、有味、有文化!“周末儿童博物馆”在成博欢乐启幕
- wordpress更改主页
- 【编程工具】程序中出现中文乱码的解决方法
- Model Inspector — 软件模型静态规范检查工具
- 豆瓣电影影评爬取---最受欢迎的影评[xpath语法]
热门文章
- machine learning(15) --Regularization:Regularized logistic regression
- IDE to AHCI/RAID 蓝屏补丁
- 《SqlServer性能分析一》
- [原]请留心asp:Image控件中的ImageUrl属性
- 十大编程算法助程序员走上高手之路
- 一种基于FPGA 的1080p 高清多摄像头全景视频拼接的泊车(机)
- (Kubernetes)k8s和docker的关系
- STM32F407的时钟配置
- 未来区块链技术将赋能多个领域促进全球经济发展
- 苹果手机(ios)拍照上传图片旋转90度问题---java后台处理