android 显示系统架构

本文深入探讨了Android显示系统的架构,重点介绍了Surfaceflinger的角色和功能,包括它如何合成2D、3D surface,以及如何通过OpenGL与硬件交互。此外,文章还详细阐述了JNI与Surfaceflinger之间的通信机制,以及Surfaceflinger与libui、OpenGL和显示设备的连接过程。
摘要由CSDN通过智能技术生成
Android display system introduce(Qualcomm 8x60 platform)(二、SW架构--1)
2010-12-31 11:17

一、Overview

    上图的原型取自高通的文档,由于原图无法描述现有的架构,我在原图的基础了做了些修改,主要是增加了 overlay 部分,另外其他部分根据现有的软件也做了些许改动。下面先对上图做个大概的介绍,后面会针对重点部分做详细的分析。

          最上面一层为应用程序,根据数据类型以及应用的不同可以分为几种。

第一种是最普通的应用,如 UI 界面的显示,这部分通常数据类型为 RGB 格式,数据无须再经过特殊的处理。该应用可以说遍布各个应用程序,几乎是实时存在的。

第二种是针对大块 YUV 数据的应用,如 camera 的 preview 、视频的播放等。该应用只针对特定的应用程序,开启时通过 overlay 直接把大块的 YUV 数据送到 kernel 显示。

         第三种其实和第一种类似,只不过由于应用的需求在显示之前需要对数据进行 2D 、 3D 的处理(使用 OpenGL 、 OpenVG 、 SVG 、 SKIA ),处理之后的流程和普通的显示就没什么差别了。一般在 Game 、地图、 Flash 等应用中会用到。

         应用之下是 framework ,其中最核心的就是 surfaceflinger 了,它为所有的应用程序的显示提供服务。由于 overlay 的接口挂在 surfaceflinger 里面(虽然 2 者在功能上不相干),所有使用 overlay 的 AP 需要通过 surfaceflinger 才可以访问 overlay ;另外,由于 surfaceflinger 需要使用 OpenGL 来 compose surface ,这也就是为什么 surfacelfinger 会调用 EGL wrapper 了, EGL wrapper 是对 Graphics HAL 的封装,除了 surfaceflinger 会调用它来 compose surface 外,上层的 2D 、 3D 应用也会调用它来进行图形处理。

         再下一层就是 HAL 了。

首先一个是 overlay 模块,对上提供 control channel 和 data channel ;对下则通过系统调用到 kernel 中的 MDP driver 。

再一个是 Gralloc 模块,注意它是和 overlay 并列的,它包含 2 个部分,一部分是为上层提供 pmem 的接口,另一部分则是对 framebuffer 进行刷新,这里的 framebuffer 其实就是 UI 的数据。由此可见上层有 2 个通道把显示数据送到 kernel 中, framebuffe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值