Android显示系统(1)——显示框架

1.Android系统显示框架参考文档
https://community.nxp.com/docs/DOC-93612

2. 涉及的概念:GPU DC HWC FB OverLay

GPU: (Graphic Process Unit)进行图像的混合渲染
FB : (Frame Buffer)帧缓冲,LCD显示的内容就对应一个帧缓冲。不但显示使用FB,Camera视频输入也使用了FB。
DC : (Display Controller)用于将FB中的数据搬移到LCD屏中
OverLay: 每个硬件图层称为一个Overlay图层。
HWC: (HardWare Composer)用于将OverlayLay图层混合后放到FB中。

3. FB表示的是帧缓冲,不但视频显示使用到,Camera视频输入也使用到,也就是说FB不是显示上特有的概念。

4. 不同的Soc上显示framebuffer的原理是一样的。

5. 每个FB使用一个fbX设备文件表示,tiny4412上的如下:
根据手册的1796页,fb0--fb3对应4个显示通道,其它的fb设备文件用于Camera输入接口、HDMI接口、视频编解码器等。

shell@tiny4412:/ # ls /dev/graphics/                                           
fb0
fb1
fb10
fb11
fb2
fb3
fb4
fb5
fb6
fb7
fb8
fb9
View Code


6. 多任务系统的显示,必须有一个显示管理者,这个管理者就是SurfaceFlinger,它的作用:
(1) 给App提供buffer:通过gralloc向ashmem(匿名内存)申请内存,得到一个fd,通过binder将fd传给某个App,App得到fd'后进行mmap(fd')。
(2) App1 App2 App3 把各自的界面发给SF,它根据Zorder,大小进行合成显示,显示。做两个事情:
① 根据各个界面的Zorder值(由WMS决定)决定前后顺序。
② 把这些排序后的buffer传给HardWare Controller.
(3) 当HWC不能处理(没有HWC或支持的层数不够)时,使用GL(Graphic Library)处理。


7.显示框架概图

上图中的EGL就是libEGL.so,它的作用是加载硬件GL库或软件GL库。

Anroid上考虑所有硬件资源的情况:有的硬件上没有HWC,有些层数超过了HWC支持的层数,这时软件GL来实现。此时又区分是否有GPU,若有就通过GL来操作GPU,若连GPU也没有,那么只能使用纯软件来实现了。

8. SurfaceFlinger可以使用EGL接口,App也可以使用EGL接口,App使用EGL接口来话一些图形将非常的高效。

原文地址:https://www.cnblogs.com/hellokitty2/p/10885213.html