热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

精通,android,5,多媒体,开发,第,6,章,第,6,1,

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

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

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


e8f394469bdbc582566d33a9604e91a6f9341e8f

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


83cf2a95581b58c9d8b29d6999ed5333fb985f64

在图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 GPS机制:第五部分 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 这篇文章主要讲解了AndroidPhoneWindowManager监听屏幕右侧向左滑动实现返回功能的实现,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大 ... [详细]
  • NotificationManagerService启动(“Notifications 通知”拆解)
    NotificationManagerService启动(“Notifications通知”拆解)android12-release应用侧一般导入No ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 本文深入解析了Elasticsearch写入与查询的底层机制。在数据写入过程中,首先会将数据暂存至内存缓冲区,在此阶段数据尚不可被搜索。同时,为了保证数据的持久性和可靠性,系统会将这些数据同步记录到事务日志(translog)中。当内存缓冲区接近满载时,系统会触发刷新操作,将缓冲区中的数据写入到磁盘上的段文件中,从而使其可被搜索。此外,文章还探讨了查询过程中涉及的索引分片、倒排索引等关键技术,为读者提供了全面的技术理解。 ... [详细]
  • 1. 给定一个包含 n 个整数的数组 a 和一个整数 x,需要判断数组中是否存在两个不同的元素,它们的和恰好等于 x。2. 反转数对问题:对于一个包含 n 个不同元素的数组 A[1...n],如果存在 i < j 且 A[i] > A[j],则称 (i, j) 为一个反转数对。本文将详细探讨这两种与归并排序相关的算法题目,并提供高效的解决方案。 ... [详细]
  • 在MFC开发过程中,利用Windows内置的文件对话框可以显著提高文件操作的效率。本文总结了使用文件对话框进行文件选择和处理的经验,详细介绍了相关API的调用方法和参数设置,如`CFileDialog`类的使用、结构体`OPENFILENAME`的配置以及如何获取选中的文件路径。通过这些技巧,开发者可以快速实现文件的打开、保存等功能,提升应用程序的用户体验。 ... [详细]
  • 本文深入探讨了Android事件分发机制的源代码,重点分析了DecorView作为Activity根布局的角色及其在事件传递中的作用。同时,详细解析了PhoneWindow在Activity窗口管理中的关键功能,以及它如何与DecorView协同工作,确保用户交互事件的高效处理。 ... [详细]
  • 要调试RIL,最好的方法就是打开radio的log:$adblogcat-bradio最好加上log语法亮度工具coloredlogcat.py,一些常 ... [详细]
author-avatar
我叫博小微
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有