《精通Android 5 多媒体开发》——第6章,第6.1节视频系统结构
本节书摘来自异步社区《精通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节视频系统结构相关推荐
- 《精通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 智能手机系统介绍,作者 王石磊,更多章节内容可以访问云栖社区"异步社区"公众 ...
- 《精通Android 5 多媒体开发》——第6章,第6.3节实现Overlay硬件抽象层
本节书摘来自异步社区<精通Android 5 多媒体开发>一书中的第6章,第6.3节实现Overlay硬件抽象层,作者 王石磊,更多章节内容可以访问云栖社区"异步社区" ...
- 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 ...
最新文章
- 百度指数常见php框架,怎么导出数据到excel表格-如何将百度指数数据导出到Excel表格...
- Mesos在传统金融企业的实践——平安科技陈秋浩实录分享
- 看雪学院课程《汇编语言详解与二进制漏洞初阶》笔记
- Ajax同步调用 异步排序
- 2021云栖大会开源引力峰会重磅发布的战略合作,Grafana服务到底是什么?
- 手动将自定制的WebPart部署到 SharePoint 2010 中
- [Java5新特性]	动态代理
- iview tooltip自动消失_惠州广日自动人行道价格大概多少
- IDEA使用技巧整理
- 技术管理角色认知-管理都需要做哪些事
- OpenCL 第5课:向量相加
- 怎么提高自己的系统架构水平
- Kafka 详解(二)------集群搭建
- Python中[::-1]实现翻转列表的原理
- 强化学习(reinforcement learning)教程(后面是翻译)
- 徐思201771010132《面向对象程序设计(java)》第七周学习总结
- 紧急通知!限招100人:免费培训海外抖音TikTok视频搬运赚钱技能,0基础轻松月入2万+!...
- League of Legends 通过 游戏ID查询玩家QQ号码。
- SpringCloud OpenFeign 整合 logbook 实现链路日志
- Android 9.0 蓝牙扫描流程
热门文章
- ubuntu下mysql整个数据库备份与还原
- duilib list控件扩展
- WebStorm-2018.2.2配置
- Elasticsearch--Docker安装ES---全文检索引擎ElasticSearch工作笔记002
- springcloud工作笔记098---springcloud多项目包扫描问题
- C#.Net工作笔记007---关于Lst深层复制_浅层复制_提供一个方法可以直接使用
- java access 2013_jdk1.8环境下的java如何直连接microsoft access2013(都是64位系统也是)...
- 随想录(虚拟机实现)
- java 数据object_java常用的object数据处理
- python direct_Python Qt.DirectConnection方法代码示例