本节书摘来自异步社区《精通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硬件抽象层相关推荐

  1. 《精通Android 5 多媒体开发》——第6章,第6.1节视频系统结构

    本节书摘来自异步社区<精通Android 5 多媒体开发>一书中的第6章,第6.1节视频系统结构,作者 王石磊,更多章节内容可以访问云栖社区"异步社区"公众号查看 6. ...

  2. 《精通Android 5 多媒体开发》——第6章,第6.2节分析硬件抽象层

    本节书摘来自异步社区<精通Android 5 多媒体开发>一书中的第6章,第6.2节分析硬件抽象层,作者 王石磊,更多章节内容可以访问云栖社区"异步社区"公众号查看 6 ...

  3. 《精通Android 5 多媒体开发》——第22章,第22.3节开发一个屏保程序

    本节书摘来自异步社区<精通Android 5 多媒体开发>一书中的第22章,第22.3节开发一个屏保程序,作者 王石磊,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  4. 《精通Android 5 多媒体开发》——第1章,第1.1节智能手机系统介绍

    本节书摘来自异步社区<精通Android 5 多媒体开发>一书中的第1章,第1.1节1.1 智能手机系统介绍,作者 王石磊,更多章节内容可以访问云栖社区"异步社区"公众 ...

  5. Web前端开发笔记——第二章 HTML语言 第二节 基本标签

    目录 前言 一.标题标签 二.段落标签和段内换行 三.预留格式标签 四.行内组合标签 五.水平线标签 六.注释标签 七.空格字符 例题(创建一个网页) 结语 前言 本节主要讲解HTML的一些基本标签. ...

  6. Web前端开发笔记——第二章 HTML语言 第九节 框架标签、脚本标签

    目录 一.框架标签 (一)显示目标页面 (二)规定大小的框架 (三)规定边框的框架 二.脚本标签 结语 一.框架标签 (一)显示目标页面 <iframe></iframe>标签 ...

  7. Web前端开发笔记——第二章 HTML语言 第一节 标签、元素、属性

    目录 一.什么是HTML? 二.标签 (一)标签.元素的定义 (二)标签的嵌套 (三)标签的属性 (四)父元素.子元素.兄弟元素 三.HTML DOM树 结语 一.什么是HTML? HTML语言,即超 ...

  8. Web前端开发笔记——第二章 HTML语言 第四节 超链接标签

    目录 前言 一.超链接标签 (一)链接其它子网页 (二)链接其它站点 (三)虚拟超链接 二.从当前页面链接到指定位置 三.链接的访问情况 四.在新窗口中打开链接 例题 结语 前言 本节介绍超链接标签即 ...

  9. 《精通Android 实例开发》——第1章,第1.15节向Eclipse中导入Android程

    本节书摘来自异步社区<精通Android 实例开发>一书中的第1章,第1.15节向Eclipse中导入Android程,作者 陈强,更多章节内容可以访问云栖社区"异步社区&quo ...

最新文章

  1. 利用runtime实现KVO
  2. Computing--状态机
  3. Fibonacci Again
  4. CentOS中Jenkins的下载、安装、配置与启动(图文教程)
  5. python if not a_python --- if not
  6. django admin单例对象
  7. Ubuntu18.04设置DNS服务器(可用)
  8. PPT双屏抽奖,大气,能Hold住全场!与其它PPT内容可融为一体,实现无缝切换!
  9. 与代码无关的网络安全
  10. 小胡学python【2】
  11. linux 终端分屏工具 tmux
  12. linux 时间怎么求差值_linux批量计算时间差脚本——awk
  13. 堆栈思想案例—汉诺塔问题求解最小步数
  14. 微信蓝牙设备开发教程之获取蓝牙设备deviceid和设备二维码(2)
  15. QT实现简单的上位机软件
  16. Hive体系结构介绍
  17. 购买安防监控摄像头时如何省钱
  18. 英雄杀朱雀之章在线活动
  19. 广西北海自愿连锁行业为什么要考察七天?行业的责任制能落实到位吗?
  20. 上了这个时代的贼船,就别想活着下去

热门文章

  1. FRM一级考试难度如何?官方发声...
  2. 如何长时间坚持学习python?
  3. c#使用ffmpeg显示rtsp视频流
  4. Sexy Beach PR 汉化补丁+新手教程
  5. 高级人工智能 读书笔记
  6. 面向数据安全治理的数据内容智能发现与分级分类 A榜rank7 B榜rank10
  7. aardio PDF与图片互相转换 PDFRender库
  8. CD4051的切换时间
  9. 7-35 猴子吃桃问题(含数学解释)
  10. 运营推广/新媒体运营