《精通Android 5 多媒体开发》——第6章,第6.3节实现Overlay硬件抽象层
本节书摘来自异步社区《精通Android 5 多媒体开发》一书中的第6章,第6.3节实现Overlay硬件抽象层,作者 王石磊,更多章节内容可以访问云栖社区“异步社区”公众号查看
6.3 实现Overlay硬件抽象层
精通Android 5 多媒体开发
在前面的内容中,了解了Overlay系统的基本知识和硬件抽象层的原理。在接下来的内容中,将详细讲解实现Overlay硬件抽象层的框架的基本知识,为进入本书后面知识的学习打下基础。
在Android系统中,提供了一个Overlay硬件抽象层的框架实现,在里面有完整的实现代码,我们可以将其作为使用Overlay硬件抽象层的方法。但是在里面没有使用具体硬件,所以不会有实际的现实效果。上述框架实现的的源码目录如下所示。
hardware/libhardware/modules/overlay/
在上述目录中,主要包含了文件Android.mk和overlay.cpp,其中文件Android.mk的主要代码如下所示。
LOCAL_PATH := $(call my-dir)# HAL module implemenation, not prelinked and stored in
# hw/<OVERLAY_HARDWARE_MODULE_ID>.<ro.product.board>.so
include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
LOCAL_SHARED_LIBRARIES := liblog
LOCAL_SRC_FILES := overlay.cpp
LOCAL_MODULE := overlay.trout
include $(BUILD_SHARED_LIBRARY)
Overlay库是一个C语言库,没有被其他库所链接,在使用时是被动打开的。所以它必须被放置在目标文件系统的“system/lib/hw”目录中。
文件overlay.cpp的主要代码如下所示。
//此结构体用于扩充overlay_control_device_t结构体
struct overlay_control_context_t { struct overlay_control_device_t device;/* our private state goes below here */
};
//此结构体用于扩充overlay_data_device_t结构体
struct overlay_data_context_t {struct overlay_data_device_t device;/* our private state goes below here */
};//定义打开函数
static int overlay_device_open(const struct hw_module_t* module, const char* name,struct hw_device_t** device);static struct hw_module_methods_t overlay_module_methods = {open: overlay_device_open
};
struct overlay_module_t HAL_MODULE_INFO_SYM = {common: {tag: HARDWARE_MODULE_TAG,version_major: 1,version_minor: 0,id: OVERLAY_HARDWARE_MODULE_ID,name: "Sample Overlay module",author: "The Android Open Source Project",methods: &overlay_module_methods,}
static int overlay_device_open(const struct hw_module_t* module, const char* name,struct hw_device_t** device)
{int status = -EINVAL;if (!strcmp(name, OVERLAY_HARDWARE_CONTROL)) { //Overlay的控制设备struct overlay_control_context_t *dev;dev = (overlay_control_context_t*)malloc(sizeof(*dev));/* initialize our state here */memset(dev, 0, sizeof(*dev)); //初始化结构体/* initialize the procs */dev->device.common.tag = HARDWARE_DEVICE_TAG;dev->device.common.version = 0;dev->device.common.module = const_cast<hw_module_t*>(module);dev->device.common.close = overlay_control_close;dev->device.get = overlay_get;dev->device.createOverlay = overlay_createOverlay;dev->device.destroyOverlay = overlay_destroyOverlay;dev->device.setPosition = overlay_setPosition;dev->device.getPosition = overlay_getPosition;dev->device.setParameter = overlay_setParameter;*device = &dev->device.common;status = 0;} else if (!strcmp(name, OVERLAY_HARDWARE_DATA)) { //Overlay的数据设备struct overlay_data_context_t *dev;dev = (overlay_data_context_t*)malloc(sizeof(*dev));/* initialize our state here */memset(dev, 0, sizeof(*dev)); //初始化结构体/* initialize the procs */dev->device.common.tag = HARDWARE_DEVICE_TAG;dev->device.common.version = 0;dev->device.common.module = const_cast<hw_module_t*>(module);dev->device.common.close = overlay_data_close;dev->device.initialize = overlay_initialize;dev->device.dequeueBuffer = overlay_dequeueBuffer;dev->device.queueBuffer = overlay_queueBuffer;dev->device.getBufferAddress = overlay_getBufferAddress;*device = &dev->device.common;status = 0;}return status;
}
《精通Android 5 多媒体开发》——第6章,第6.3节实现Overlay硬件抽象层相关推荐
- 《精通Android 5 多媒体开发》——第6章,第6.1节视频系统结构
本节书摘来自异步社区<精通Android 5 多媒体开发>一书中的第6章,第6.1节视频系统结构,作者 王石磊,更多章节内容可以访问云栖社区"异步社区"公众号查看 6. ...
- 《精通Android 5 多媒体开发》——第6章,第6.2节分析硬件抽象层
本节书摘来自异步社区<精通Android 5 多媒体开发>一书中的第6章,第6.2节分析硬件抽象层,作者 王石磊,更多章节内容可以访问云栖社区"异步社区"公众号查看 6 ...
- 《精通Android 5 多媒体开发》——第22章,第22.3节开发一个屏保程序
本节书摘来自异步社区<精通Android 5 多媒体开发>一书中的第22章,第22.3节开发一个屏保程序,作者 王石磊,更多章节内容可以访问云栖社区"异步社区"公众号查 ...
- 《精通Android 5 多媒体开发》——第1章,第1.1节智能手机系统介绍
本节书摘来自异步社区<精通Android 5 多媒体开发>一书中的第1章,第1.1节1.1 智能手机系统介绍,作者 王石磊,更多章节内容可以访问云栖社区"异步社区"公众 ...
- Web前端开发笔记——第二章 HTML语言 第二节 基本标签
目录 前言 一.标题标签 二.段落标签和段内换行 三.预留格式标签 四.行内组合标签 五.水平线标签 六.注释标签 七.空格字符 例题(创建一个网页) 结语 前言 本节主要讲解HTML的一些基本标签. ...
- Web前端开发笔记——第二章 HTML语言 第九节 框架标签、脚本标签
目录 一.框架标签 (一)显示目标页面 (二)规定大小的框架 (三)规定边框的框架 二.脚本标签 结语 一.框架标签 (一)显示目标页面 <iframe></iframe>标签 ...
- Web前端开发笔记——第二章 HTML语言 第一节 标签、元素、属性
目录 一.什么是HTML? 二.标签 (一)标签.元素的定义 (二)标签的嵌套 (三)标签的属性 (四)父元素.子元素.兄弟元素 三.HTML DOM树 结语 一.什么是HTML? HTML语言,即超 ...
- Web前端开发笔记——第二章 HTML语言 第四节 超链接标签
目录 前言 一.超链接标签 (一)链接其它子网页 (二)链接其它站点 (三)虚拟超链接 二.从当前页面链接到指定位置 三.链接的访问情况 四.在新窗口中打开链接 例题 结语 前言 本节介绍超链接标签即 ...
- 《精通Android 实例开发》——第1章,第1.15节向Eclipse中导入Android程
本节书摘来自异步社区<精通Android 实例开发>一书中的第1章,第1.15节向Eclipse中导入Android程,作者 陈强,更多章节内容可以访问云栖社区"异步社区&quo ...
最新文章
- 利用runtime实现KVO
- Computing--状态机
- Fibonacci Again
- CentOS中Jenkins的下载、安装、配置与启动(图文教程)
- python if not a_python --- if not
- django admin单例对象
- Ubuntu18.04设置DNS服务器(可用)
- PPT双屏抽奖,大气,能Hold住全场!与其它PPT内容可融为一体,实现无缝切换!
- 与代码无关的网络安全
- 小胡学python【2】
- linux 终端分屏工具 tmux
- linux 时间怎么求差值_linux批量计算时间差脚本——awk
- 堆栈思想案例—汉诺塔问题求解最小步数
- 微信蓝牙设备开发教程之获取蓝牙设备deviceid和设备二维码(2)
- QT实现简单的上位机软件
- Hive体系结构介绍
- 购买安防监控摄像头时如何省钱
- 英雄杀朱雀之章在线活动
- 广西北海自愿连锁行业为什么要考察七天?行业的责任制能落实到位吗?
- 上了这个时代的贼船,就别想活着下去