zoukankan      html  css  js  c++  java
  • 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接口来话一些图形将非常的高效。

  • 相关阅读:
    python爬取酷狗音乐
    python爬取酷我音乐
    排列组合+逆元模板
    python爬取QQVIP音乐
    一维数组的动态和
    买卖股票的最佳时机 II
    最佳买卖股票时机含冷冻期
    买卖股票的最佳时机
    子集
    最短无序连续子数组
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10885213.html
Copyright © 2011-2022 走看看