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接口来话一些图形将非常的高效。

 

posted on   Hello-World3  阅读(2529)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示