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

6.1 视频系统结构
精通Android 5 多媒体开发
在Android系统中,视频输出系统对应的是Overlay子系统,此系统是Android的一个可选系统,用于加速显示输出视频数据。视频输出系统的硬件通常叠加在主显示区之上的额外的叠加显示区。这个额外的叠加显示区和主显示区使用独立的显示内存。在通常情况下,主显示区用于输出图形系统,通常是RGB颜色空间。额外显示区用于输出视频,通常是YUV颜色空间。主显示区和叠加显示区通过Blending(硬件混淆)自动显示在屏幕上。在软件部分我们无需关心叠加的实现过程,但是可以控制叠加的层次顺序和叠加层的大小等内容。

Overlay系统的基本层次结构如图6-1所示。


Android中的Overlay系统没有Java部分,在里面只包含了视频输出的驱动程序、硬件抽象层和本地框架等。Overlay系统的结构如图6-2所示。


在图6-2所示的系统结构中,各个构成部分的具体说明如下所示。

(1)Overlay驱动程序:通常是基于FrameBuffer或V4L2的驱动程序。在此文件中主要定义了两种结构,分别是data device和control device,这两个结构体分别针对data device和control device的函数open()和函数close()。这两个函数是注册到device_module里面的函数。

(2)Overlay硬件抽象层:代码路径如下所示。

hardware/qcom/display/liboverlay/overlay.h
Overlay硬件抽象层是一个Android中标准的硬件模块,其接口只有一个头文件。

(3)Overlay服务部分:代码路径如下所示。

frameworks/native/services/surfaceflinger/
由此可见,Overlay系统的服务部分包含在SurfaceFlinger中,此层次的内容比较简单,主要功能是通过类LayerBuffer实现的。首先要明确的是SurfaceFlinger只是负责控制merge Surface,比如说计算出两个Surface重叠的区域,至于Surface需要显示的内容,则通过Skia、Opengl和Pixflinger来计算。所以我们在介绍SurfaceFlinger之前先忽略里面存储的内容究竟是什么,先弄清楚它对merge的一系列控制的过程,然后再结合2D、3D引擎来看它的处理过程。

(4)本地框架代码。

在Overlay系统中,本地框架的头文件路径如下所示。

frameworks/native/include/ui
源代码路径如下所示。

frameworks/native/libs/ui
Overlay系统只是整个框架的一部分,主要功能是通过类Ioverlay和Overlay实现的,源代码被编译成libui.so,它提供的API主要在视频输出和照相机取景模块中使用。

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

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

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

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

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

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

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

  4. 《精通Android 5 多媒体开发》——第6章,第6.3节实现Overlay硬件抽象层

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

  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. 百度指数常见php框架,怎么导出数据到excel表格-如何将百度指数数据导出到Excel表格...
  2. Mesos在传统金融企业的实践——平安科技陈秋浩实录分享
  3. 看雪学院课程《汇编语言详解与二进制漏洞初阶》笔记
  4. Ajax同步调用 异步排序
  5. 2021云栖大会开源引力峰会重磅发布的战略合作,Grafana服务到底是什么?
  6. 手动将自定制的WebPart部署到 SharePoint 2010 中
  7. [Java5新特性] 动态代理
  8. iview tooltip自动消失_惠州广日自动人行道价格大概多少
  9. IDEA使用技巧整理
  10. 技术管理角色认知-管理都需要做哪些事
  11. OpenCL 第5课:向量相加
  12. 怎么提高自己的系统架构水平
  13. Kafka 详解(二)------集群搭建
  14. Python中[::-1]实现翻转列表的原理
  15. 强化学习(reinforcement learning)教程(后面是翻译)
  16. 徐思201771010132《面向对象程序设计(java)》第七周学习总结
  17. 紧急通知!限招100人:免费培训海外抖音TikTok视频搬运赚钱技能,0基础轻松月入2万+!...
  18. League of Legends 通过 游戏ID查询玩家QQ号码。
  19. SpringCloud OpenFeign 整合 logbook 实现链路日志
  20. Android 9.0 蓝牙扫描流程

热门文章

  1. ubuntu下mysql整个数据库备份与还原
  2. duilib list控件扩展
  3. WebStorm-2018.2.2配置
  4. Elasticsearch--Docker安装ES---全文检索引擎ElasticSearch工作笔记002
  5. springcloud工作笔记098---springcloud多项目包扫描问题
  6. C#.Net工作笔记007---关于Lst深层复制_浅层复制_提供一个方法可以直接使用
  7. java access 2013_jdk1.8环境下的java如何直连接microsoft access2013(都是64位系统也是)...
  8. 随想录(虚拟机实现)
  9. java 数据object_java常用的object数据处理
  10. python direct_Python Qt.DirectConnection方法代码示例