MI FB API


REVISION HISTORY

Revision No.
Description
Date
3.0
  • Initial release
  • 07/27/2021
  • 修改图1-1,图形层支持叠加到SCL PATH,并新增相关说明
  • 1.5章节芯片差异部分新增图形层叠加到SCL PATH在不同芯片的支持情况
  • 1.7章节对新增INI配置参数做相关介绍
  • 08/08/2021
  • 新增PROCFS介绍
  • 08/25/2021
  • 改变HW_LAYER_ID的定义,并重构芯片差异表格
  • 12/17/2021
  • 新增Mochi芯片差异部分
  • 02/16/2022
  • 新增Maruko芯片差异部分
  • 03/21/2022
  • 新增API ”FBIO_WAITFORVSYNC”支持
  • 04/11/2022
  • 增加对 FB_BUFFER_LEN 字段的详细解释
  • 07/07/2022
  • 修改"配置启动参数"
  • 07/08/2022
  • Refined procfs & Added error code
  • 11/10/2023
  • 新增Iford芯片差异部分
  • 11/13/2023

    1. 概述


    1.1. 模块说明

    MI_FB是一个基于Linux Framebuff实现的图形层设备驱动。它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作,用户不必关心物理显示缓冲区的具体位置及存放方式,这些都由MI_FB模块驱动来完成。在提供Linux Framebuff基本功能的基础上,MI_FB还提供了一些扩展功能,如层间Alpha、ColorKey、设置显示区域等。


    1.2. 基本结构

    MI_FB主要用来管理多个图形层,每一个图形层在芯片能力支持的情况下可以选择叠加到不同的视频处理/输出路径上。

    1. 视频预览叠加路径指图形层可以叠加到视频显示单元上,MI_DISP子模块用来管理视频显示单元,如果选择叠加到视频显示单元需要首先配置MI_DISP子模块,然后再操作MI_FB子模块来进行图形层的绘制,最终由视频显示单元将叠加后的视频数据输出到显示设备,视频显示单元决定最终的显示分辨率。

    2. 视频处理叠加路径指图形层可以叠加到视频处理单元上,MI_SCL子模块用来管理视频处理单元,如果选择叠加到视频处理单元需要首先配置MI_SCL子模块,然后再操作MI_FB子模块进行图形层的绘制,最终由视频处理单元将叠加后的视频数据输出到视频编码单元,或者输出到视频显示单元进行预览播放。

      图1‑1 图形层叠加路径示意图

    从应用程序的开发角度来看,基于MI_FB的图形层绘制有两种方式。

    方式1:应用程序基于Linux文件系统使用MI_FB。

    方式2:应用程序基于MI_FB提供的API进行开发(提供和方式1同样的功能)。

    图1‑2 MI_FB的使用方式

    注意:以上两种方式是互斥的,应用程序只能选择其中一种进行开发。


    1.3. 功能介绍

    MI_FB支持以下Linux Framebuff的标准功能:

    1. 获取显示设备的固定信息(比如显存大小)

    2. 将物理显存映射(或解除映射)到虚拟内存空间

    3. 像操作普通文件一样操作物理显存

    4. 设置硬件显示分辨率和像素格式

    5. 从物理显存的任何位置进行读、写、显示等操作

    6. 支持设置和获取256色的调色板

    MI_FB增加以下的扩展功能:

    1. 设置和获取叠加图形层的Alpha值

    2. 设置和获取叠加图形层的ColorKey值

    3. 设置当前叠加图形层的显示位置(相对于屏幕原点的偏移)

    4. 设置当前叠加图形层的显示区域(支持画布放大显示)

    5. 设置和获取当前叠加层的显示状态(显示/隐藏)

    6. 通过INI配置文件管理物理显存大小和叠加图形层的数目

    7. 动态同步显示设备输出分辨率

    8. 支持硬件鼠标的一系列操作

    MI_FB不支持的Linux Framebuff标准功能:

    1. 设置和获取控制台对应的Linux Framebuff

    2. 获取硬件扫描的实时信息

    3. 获取硬件相关信息

    4. 设置硬件同步时序

    5. 设置硬件同步信号机制


    1.4. 应用场景

    MI_FB可应用于以下场景:

    1. Pure linux场景

      在linux环境下基于Framebuff框架的应用程序(例如MiniGUI),也可以基于MI_FB提供的API接口进行开发。

    2. Pure rtos场景

      在rtos环境下,不支援标准Linux Framebuff框架,应用程序可以基于MI_FB提供的API接口进行UI的开发(例如使用轻量级的lvgl开发UI)。

    3. Dualos场景

      在dualos环境下,在linux端运行的应用程序可以基于标准Framebuff框架,也可以基于MI_FB API开发;在rtos端运行的应用程序只能基于MI_FB API开发。


    1.5. 芯片差异

    MI_FB有两种形式的用户态接口,为了让用户行为保持一致,MI_FB加入了FB ID的概念。下图描述了FB ID和Framebuff设备节点的关系。

    图1‑3 FB ID和设备节点的关系

    MI_FB定义ID号的增长顺序和Framebuff的设备节点保持一致,即/dev/fbxxx对应FB IDxxx。

    MI_FB每一个FB ID最多可以控制一个GUI和一个鼠标层,即应用程序可以使用同一个FB ID来同时操作和该ID绑定的GUI和鼠标层,GUI可以选择叠加到视频显示单元或者视频处理单元,鼠标层只能叠加到视频显示单元上,GUI和鼠标层的叠加输出路径在config.ini中配置,在1.7.2节中会详细描述。

    MI_FB目前可以管理16个FB ID,具体支持的ID个数和芯片能力有关,不同芯片的差异如下表:

    • Layer ID对应MI_FB启动参数中的FB_HWLAYER_ID项,配置启动参数时请参照对应芯片表格中的Layer ID项进行配置。

    • 处于同一视频显示单元同一PATH的不同图形层的层级关系自底向上为 GUI → OSD → 鼠标。

    • Alpha0/1代表color format为ARGB1555,Alpha bit为0/1时,实际的Alpha值。在某些图形层上,只支持设置 Alpha1,不支持设置 Alpha0,此项就标记为 N。

    1.5.1. Taiyaki

    图形层 Layer ID 颜色格式 放大 Alpha0/1
    ARGB8888 ARGB1555 ARGB4444 RGB565 I2 I4 I8
    视频显示单元 DISP PATH0 GUI 1 Y Y Y Y N N Y Y N
    鼠标 0 N Y Y N N N Y N Y

    1.5.2. Takoyaki

    图形层 Layer ID 颜色格式 放大 Alpha0/1
    ARGB8888 ARGB1555 ARGB4444 RGB565 I2 I4 I8
    视频显示单元 DISP PATH0 GUI 1 Y Y Y Y N N Y Y N
    鼠标 0 N Y Y N N N Y N Y

    1.5.3. Ispahan

    图形层 Layer ID 颜色格式 放大 Alpha0/1
    ARGB8888 ARGB1555 ARGB4444 RGB565 I2 I4 I8
    视频处理单元 GUI NA N Y Y N N N Y N Y

    1.5.4. Pudding

    图形层 Layer ID 颜色格式 放大 Alpha0/1
    ARGB8888 ARGB1555 ARGB4444 RGB565 I2 I4 I8
    视频处理单元 GUI NA N Y Y N N N Y N Y

    1.5.5. Ikayaki

    图形层 Layer ID 颜色格式 放大 Alpha0/1
    ARGB8888 ARGB1555 ARGB4444 RGB565 I2 I4 I8
    视频显示单元 DISP PATH0 GUI 1 Y Y Y Y N N Y Y N

    1.5.6. Tiramisu

    图形层 Layer ID 颜色格式 放大 Alpha0/1
    ARGB8888 ARGB1555 ARGB4444 RGB565 I2 I4 I8
    视频显示单元 DISP PATH0 GUI 1 Y Y Y Y N N Y Y N
    鼠标 0 N Y Y N N N Y N Y
    DISP PATH1 GUI 3 Y Y Y Y N N Y Y N
    鼠标 2 N Y Y N N N Y N Y
    视频处理单元 GUI NA N Y Y N N N Y N Y

    1.5.7. Muffin

    图形层 Layer ID 颜色格式 放大 Alpha0/1
    ARGB8888 ARGB1555 ARGB4444 RGB565 I2 I4 I8
    视频显示单元 DISP PATH0 GUI 1 Y Y Y Y N N Y Y N
    鼠标 0 N Y Y N N N Y N Y
    OSD 2 N Y Y N N N Y N Y
    DISP PATH1 GUI 9 Y Y Y Y N N Y Y N
    鼠标 8 N Y Y N N N Y N Y
    OSD 10 N Y Y N N N Y N Y
    DISP PATH2 GUI 17 Y Y Y Y N N Y Y N
    鼠标 16 N Y Y N N N Y N Y
    OSD 18 N Y Y N N N Y N Y
    视频处理单元 GUI NA N Y Y N N N Y N Y

    Muffin系列芯片的视频显示单元新增了一个OSD图形层,通常作为MI_RGN叠加到DISP上的默认图形层,如果MI_FB需要使用OSD图形层,则MI_RGN无法叠加OSD到DISP。


    1.5.8. Mochi

    图形层 Layer ID 颜色格式 放大 Alpha0/1
    ARGB8888 ARGB1555 ARGB4444 RGB565 I2 I4 I8
    视频显示单元 DISP PATH0 GUI 1 Y Y Y Y N N Y Y N
    鼠标 0 N Y Y N N N Y N Y
    OSD 2 N Y Y N N N Y N Y
    DISP PATH1 GUI 9 Y Y Y Y N N Y Y N
    鼠标 8 N Y Y N N N Y N Y
    OSD 10 N Y Y N N N Y N Y
    视频处理单元 GUI NA N Y Y N N N Y N Y

    Mochi系列芯片的视频显示单元上的OSD图形层通常作为MI_RGN叠加到DISP上的默认图形层,如果MI_FB需要使用OSD图形层,则MI_RGN无法叠加OSD到DISP。


    1.5.9. Maruko&Souffle

    图形层 Layer ID 颜色格式 放大 Alpha0/1
    ARGB8888 ARGB1555 ARGB4444 RGB565 I2 I4 I8
    视频显示单元 DISP PATH0 GUI 2 Y Y Y Y N N Y N Y
    视频处理单元 GUI NA N Y Y N N N Y N Y

    Maruko和Souffle系列芯片视频显示单元GUI层、视频处理单元GUI层和MI_RGN中的SCL/DISP OSD共用同一个硬件,当MI_RGN向SCL/DISP上叠加OSD时,不能使用FB。反之亦然。


    1.5.9. Iford

    图形层 Layer ID 颜色格式 放大 Alpha0/1
    ARGB8888 ARGB1555 ARGB4444 RGB565 I2 I4 I8
    视频显示单元 DISP PATH0 GUI 2 Y Y Y Y N N Y N Y
    视频处理单元 GUI NA N N N N N N N N N

    Iford系列芯片视频显示单元GUI层和MI_RGN中的DISP OSD共用同一个硬件,当MI_RGN向DISP上叠加OSD时,不能使用FB。反之亦然。


    1.6. 工作原理

    1.6.1 图形层刷新模式

    1. 单buff模式

      图1‑4 单buff刷新模式

      • 单buff模式下,MI_FB提供一张显示buff,应用程序可以直接绘制显示buff。

      • 这种方式可以节省内存,但是用户会在显示设备上看到图形的绘制过程。

      • 用户也可以另外申请一块buff用于图形绘制,然后在绘制完成后将画面搬移到显示buff,但是这种方式会看到锯齿。

    2. 双buff模式

      图1‑5 双buff刷新模式

      • 在双buff模式下,MI_FB提供两张显示buff。

      • 当图形层设备正在使用显示buff2时,用户可以在buff1上绘制。

      • 当buff1绘制完成后,通过设置虚拟屏幕偏移位置使显示buff2切换到buff1的起始位置,反之同理。

      • 双buff模式比较消耗内存,但是显示效果最好。


    1.6.2 虚拟屏幕分辨率、可见区域和显示分辨率的关系

    图1‑6 各种分辨率之间的关系

    虚拟屏幕的大小可以看作MI_FB提供的整个显存的大小,用户可以自己在配置文件中定义可见区域的分辨率(xres,yres), MI_FB将会根据可见区域的范围调整虚拟屏幕分辨率(xres_virtual,yres_virtual), 默认情况下虚拟屏幕分辨率的xres_virtual=xoffset+xres,xoffset = 0, xoffset是可见区域在虚拟屏幕的水平方向偏移,xres是可见区域水平方向的width。

    MI_FB将会根据xres_virtual和像素格式以及整个显存的大小调整yres_virtual, 用户可以在(xres_virtual,yres_virtual)范围内随意改变可见区域的(xoffset,yoffset)来切换显示内容,双buff的刷新模式也是基于此来实现。

    图形层设备将会从可见区域读取内存数据,然后根据用户配置的显示区域属性输出到显示设备, 显示区域属性包括显示区域范围和相对显示屏幕原点的偏移位置。

    从可见区域到显示区域的过程支持放大, 显示区域的(dst_width,dst_height)可以大于可见区域的(xres,yres), 但是不能超过显示设备的分辨率(displaywidth, display height), 显示设备的分辨率由MI_DISP模块的输出timing决定。


    1.7. 开发流程

    1.7.1 编译配置

    1. 进入alkaid project根目录,make menuconfig

    2. 回车键进入Sdk Config子选项

    3. 回车键进入Interface Compile Config子选项

    4. 空格键选中fb子模块,并重新编译project

      编译完成将在sdk/interface/src/fb下生成 mi_fb.ko, 同时将mi_fb.h和mi_fb_datatype.h release到 project/release 目录, 在pure linux环境下会默认打包进入images,在dualos环境下默认不打包,需要手动编译并安装。


    1.7.2 配置MI_FB启动参数

    MI_FB的启动参数在系统配置文件config.json中管理, 在config.json中定义的fb_device_disp_path和fb_device_video_path字段描述了当前平台GUI参数的入口。

    1. fb_device_disp_path描述的是叠加到视频显示单元的GUI层和鼠标层的配置信息;
    2. fb_device_video_path描述的是叠加到视频处理单元的GUI层的配置信息。
    {
        "mi_fb": {
            "fb_device_disp_path": [
                {
                    "fb_hwlayer_id": 1,
                    "fb_hwwin_id": 0,
                    "fb_hwwin_format": 5,
                    "fb_hwlayer_outputcolor": 0,
                    "fb_width": 1920,
                    "fb_height": 1080,
                    "fb_timing_width": 1920,
                    "fb_timing_height": 1080,
                    "fb_mmap_name": "E_MMAP_ID_FB",
                    "fb_buffer_len": 16384,
                    "cursor": {
                        "fb_hwlayer_id": 0,
                        "fb_hwwin_id": 0,
                        "fb_hwlayer_dst": 3,
                        "fb_hwwin_format": 6,
                        "fb_hwlayer_outputcolor": 0,
                        "fb_mmap_name": "E_MMAP_ID_HW_CURSOR"
                    }
                },
                {
                    //其它叠加在disp path的GUI和鼠标(如果芯片支持)
                }
            ],
            "fb_device_video_path": [
                {
                    "fb_buf_id_path": {
                        "fb_gwin_id": 7,
                        "fb_mod": 34,
                        "fb_dev": 1,
                        "fb_chn": 0,
                        "fb_port": 0
                    },
                    "fb_hwwin_format": 6,
                    "fb_width": 1920,
                    "fb_height": 1080,
                    "fb_timing_width": 1920,
                    "fb_timing_height": 1080,
                    "fb_buf_cnt": 3
                },
                {
                    //其它叠加在video path的GUI(如果芯片支持)
                }
            ]
        }
    }
    

    注意:如果要添加多个GUI层(芯片支持的情况下),需要将新的节点加入对应的path里。/dev/fbxxx设备节点的增长顺序和path中的排序保持一致,fb_device_disp_path会排在前面。

    config.json 中各配置参数说明如下:

    参数 说明
    fb_hwlayer_id 当前图形层的ID(对应设备号)
    fb_hwwin_id 硬件设备ID(决定叠加到视频层设备DISP的哪一个输出PATH上)
    fb_hwwin_format 描述画布的像素格式
    fb_hwlayer_outputcolor 描述当前叠加层输出的颜色空间(YUV/RGB)
    fb_width 描述可见区域范围(xres)
    fb_height 描述可见区域范围(yres)
    fb_timing_width 描述显示设备分辨率(display width)
    fb_timing_height 描述显示设备分辨率(display height)
    fb_mmap_name 显存申请相关参数(默认为E_MMAP_ID_FB)
    fb_buffer_len 描述显存大小(单位Kbyte)
    fb_buf_cnt 用来计算叠加到视频处理单元的图形层的显存大小
    fb_gwin_id 叠加图形层的视频处理单元GWIN ID
    fb_mod 叠加图形层的视频处理单元MODULE ID
    fb_dev 叠加图形层的视频处理单元DEV ID
    fb_chn 叠加图形层的视频处理单元CHN ID
    fb_port 叠加图形层的视频处理单元PORT ID

    1.7.3 不同层显存大小计算

    对于"fb_device_disp_path"描述的GUI层,需要提前计算好实际应用场景中可能使用到的最大内存并填入"fb_buffer_len"。该值通常由以下几点决定:

    • 最大UI分辨率W x H

    • 颜色格式中最大的BPP(Byte Per Pixel,指每像素所占字节数,如ARGB8888的BPP为4)

    • 使用的buffer个数NUM

    fb_buffer_len = W * H * BPP * NUM / 1024 (KByte)

    如果GUI层设定中包含“cursor”字段,FB内部会在GUI申请内存时多申请0x20000 Byte 的内存给鼠标层使用。

    对于"fb_device_video_path"描述的GUI层,FB内部会根据配置文件中的FB_WIDTH / FB_HEIGHT / FB_HWWIN_FORMAT / FB_BUF_CNT自行计算所需的内存大小。


    1.7.4 配置MI_FB显示内存池

    芯片默认的mma_heap使用了64位的物理地址空间,但大多数芯片使用32位的编译器,标准framebuffer框架中用 unsigned long 定义了存放物理地址的变量,在32位编译环境下,会导致丢失数据。

    为了避免上述错误,需要在bootargs中为fb配置独立的mma_heap并关闭HW MMU。保证其地址空间位于32位可表示的范围内。

    需要增加的bootargs参数如下:

    mma_heap=mma_heap_fb,miu=0,sz=0x2040000
    

    默认已配置此参数,可以按需调整sz。

    size的计算方式如下:

    • 每增加一个disp path GUI,需要加上对应配置的fb_buffer_len大小(PS:请注意单位换算)

    • 每增加一个cursor,需要额外增加 0x20000 ,即128K

    • 每增加一个video path GUI,需要额外增加fb_device_video_path所需的内存大小。


    1.7.5 接口调用

    接口调用分为两种,一种是基于标准Linux Framebuff的文件系统调用,一种是基于MI_FB API的接口调用。两种调用方式实现相同的功能。

    图1‑7 MI_FB接口调用流程

    MI_FB的接口调用分为以下几步:

    1. 打开指定的FB设备

    2. 设置像素格式、可见区域等参数

    3. 获取MI_FB分配到的显存信息

    4. 将物理显存映射到虚拟内存空间

    5. 调用ioctl或者MI_FB API设置ColorKey、层间Alpha、显示位置和区域等参数

    6. 操作虚拟内存地址完成具体的绘制任务

    7. 解除显存映射

    8. 关闭FB设备

    9. 退出应用


    1.8. 实例介绍

    本实例分别基于Linux Framebuff和MI_FB API实现在屏幕中间位置显示红、橙、蓝三个阶梯排列的色块,使用ARGB8888像素格式。

    #include <stdio.h>
    #include <fcntl.h>
    #include <sys/ioctl.h>
    #include <sys/mman.h>
    #include <linux/fb.h>
    #include "mi_sys.h"
    #include "mi_disp.h"
    #include "mi_disp_datatype.h"
    #include "mi_fb.h
    #include "mi_fb_datatype.h"
    
    static void *framebuffer = NULL;
    #define LINUX_FRAMEBUFF
    
    void set_disp_dev(void)
    {
        MI_DISP_PubAttr_t stPubAttr;
        memset(&stPubAttr, 0, sizeof(MI_DISP_PubAttr_t));
        stPubAttr.u32BgColor = YUYV_BLACK;
        stPubAttr.eIntfType == E_MI_DISP_INTF_TTL;
        MI_DISP_SetPubAttr(0, &stPubAttr);
        MI_PANEL_Init(E_MI_DISP_INTF_TTL);
    }
    
    #ifdef LINUX_FRAMEBUFF
    
    //基于Linux Framebuff实现
    void drawRect_rgb32 (int x0, int y0, int width, int height, int color, struct fb_var_screeninfo *vinfo, struct fb_fix_screeninfo *finfo, char *fb)
    {
        const int bytesPerPixel = 4;
        const int stride = finfo->line_length / bytesPerPixel;
    
        int *dest = (int *) (fb)
            + (y0 + vinfo->yoffset) * stride + (x0 + vinfo->xoffset);
    
        int x, y;
        for (y = 0; y < height; ++y)
        {
            for (x = 0; x < width; ++x)
            {
                dest[x] = color;
            }
            dest += stride;
        }
    }
    
    int main(int argc, char **argv)
    {
        const char *devfile = "/dev/fb0";
        int fbFd = 0;
        long int screensize = 0;
    
        MI_SYS_Init(0);
    
        //set disp pub
        set_disp_dev();
        fbFd = open(devfile, O_RDWR);
        if(fbFd == -1)
        {
            perror ("Error: cannot open framebuffer device");
            exit(1);
        }
        //get fb_fix_screeninfo
        if(ioctl(fbFd, FBIOGET_FSCREENINFO, &finfo) == -1)
        {
            perror("Error reading fixed information");
            exit(2);
        }
        //get fb_var_screeninfo
        if(ioctl(fbFd, FBIOGET_VSCREENINFO, &vinfo) == -1)
        {
            perror("Error reading variable information");
            exit(3);
        }
        screensize = finfo.smem_len;
    
        /* Map the device to memory */
        framebuffer = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,
                fbFd, 0);
        if(framebuffer == MAP_FAILED)
        {
            perror ("Error: Failed to map framebuffer device to memory");
            exit (4);
        }
        //draw red rectangle
        drawRect_rgb32 (vinfo.xres / 8, vinfo.yres / 16,
                vinfo.xres / 4, vinfo.yres / 4, 0xffff0000, &vinfo, &finfo, framebuffer);
    
        //draw DarkGoldenrod rectangle
        drawRect_rgb32 (vinfo.xres * 3 / 8, vinfo.yres * 5 / 16,
                vinfo.xres / 4, vinfo.yres / 4, 0xffb8860b, &vinfo, &finfo, framebuffer);
    
        //draw blue rectanble
        drawRect_rgb32 (vinfo.xres * 5 / 8, vinfo.yres * 9 / 16,
                vinfo.xres / 4, vinfo.yres / 4, 0xff0000ff, &vinfo, &finfo, framebuffer);
    
        munmap(framebuffer, screensize);
        framebuffer = NULL;
    
        close(fbFd);
    
        return 0;
    }
    #else
    
    //基于MI_FB API实现
    void drawRect_rgb32(int x0, int y0, int width, int height, int color, MI_FB_VarScreenInfo_t *vinfo, MI_FB_FixScreenInfo_t *finfo, char *fb)
    {
        const int bytesPerPixel = 4;
        const int stride = finfo->u32LineLength/ bytesPerPixel;
    
        int *dest = (int *) (fb)
            + (y0 + vinfo->u32Yoffset) * stride + (x0 + vinfo->u32Xoffset);
    
        int x, y;
        for (y = 0; y < height; ++y)
        {
            for (x = 0; x < width; ++x)
            {
                dest[x] = color;
            }
            dest += stride;
        }
    }
    
    int main(int argc, char **argv)
    {
        MI_S32 s32Ret = 0;
        MI_U8 u8FbId = 0;
        MI_U32 screensize = 0;
    
        MI_SYS_Init(0);
    
        //set disp pub
        set_disp_dev();
    
        s32Ret = MI_FB_Open(u8FbId);
        if(s32Ret != MI_SUCCESS)
        {
            printf("open fb id:%d failed\n", u8FbId);
            exit(1);
        }
        s32Ret = MI_FB_GetFixScreenInfo(u8FbId, &stFixScreenInfo);
        if(s32Ret != MI_SUCCESS)
        {
            printf("get fix screen info failed\n");
            exit(2);
        }
    
        s32Ret = MI_FB_GetVarScreenInfo(u8FbId, &stVarScreenInfo);
        if(s32Ret != MI_SUCCESS)
        {
            printf("get var screen info failed\n");
            exit(3);
        }
        screensize = stFixScreenInfo.u32SmemLen;
        MI_FB_Mmap(u8FbId, screensize, &framebuffer);
        if(!framebuffer)
        {
            printf("mmap framebuffer failed\n");
            exit(4);
        }
        //draw red rectangle
        drawRect_rgb32 (stVarScreenInfo.u32Xres / 8, stVarScreenInfo.u32Yres/ 8,
             stVarScreenInfo.u32Xres / 4, stVarScreenInfo.u32Yres / 4, 0xffff0000, &stVarScreenInfo, &stFixScreenInfo, framebuffer);
    
        //draw DarkGoldenrod rectangle
        drawRect_rgb32 (stVarScreenInfo.u32Xres * 3 / 8, stVarScreenInfo.u32Yres * 3 / 8,
             stVarScreenInfo.u32Xres / 4, stVarScreenInfo.u32Yres / 4, 0xffb8860b, &stVarScreenInfo, &stFixScreenInfo, framebuffer);
    
        //draw blue rectanble
        drawRect_rgb32 (stVarScreenInfo.u32Xres * 5 / 8, stVarScreenInfo.u32Yres * 5 / 8,
                stVarScreenInfo.u32Xres / 4, stVarScreenInfo.u32Yres / 4, 0xff0000ff, &stVarScreenInfo, &stFixScreenInfo, framebuffer);
    
        MI_FB_Munmap(u8FbId, framebuffer, screensize);
        framebuffer = NULL;
    
        MI_FB_Close(u8FbId);
        return 0;
    }
    #endif
    

    2. API参考


    MI_FB的用户态接口有两种体现形式:

    1. 基于Linux Framebuff的文件操作,以ioctl的形式体现。int ioctl(int fd, unsigned long cmd, CMD_DATA_TYPE *cmddata); 其中CMD_DATA_TYPE随参数cmd的变化而变化,MI_FB支持以下cmd。

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符,是调用open函数的返回值。 输入
      cmd 主要的cmd(命令控制字)如下:
      FBIOGET_VSCREENINFO:获取屏幕可变信息
      FBIOPUT_VSCREENINFO:设置屏幕可变信息
      FBIOGET_FSCREENINFO:获取屏幕固定信息
      FBIOPAN_DISPLAY:设置 PAN 显示
      FBIOGETCMAP: 获取颜色表信息
      FBIOPUTCMAP: 设置颜色表信息
      FBIOGET_SCREEN_LOCATION:获取叠加层显示区域
      FBIOSET_SCREEN_LOCATION:设置叠加层显示区域
      FBIOGET_SHOW:获取叠加层显示状态
      FBIOSET_SHOW:设置叠加层显示状态
      FBIOGET_GLOBAL_ALPHA:获取叠加层 Alpha属性
      FBIOSET_GLOBAL_ALPHA:设置叠加层 Alpha属性
      FBIOGET_COLORKEY:获取叠加层的 Colorkey 属性
      FBIOSET_COLORKEY:设置叠加层的 Colorkey 属性
      FBIOGET_DISPLAYLAYER_ATTRIBUTES: 获取叠加层属性
      FBIOSET_DISPLAYLAYER_ATTRIBUTES: 设置叠加层属性
      FBIOGET_CURSOR_ATTRIBUTE: 获取鼠标层属性
      FBIOSET_CURSOR_ATTRIBUTE: 设置鼠标层属性
      FBIOGET_COMPRESSIONINFO: 获取压缩信息
      FBIOSET_COMPRESSIONINFO: 设置压缩信息
      输入
      cmddata 各cmd对应的数据类型:
      获取或设置屏幕可变信息:struct fb_var_screeninfo *类型
      获取屏幕固定信息:struct fb_fix_screeninfo *类型
      设置 PAN 显示:struct fb_var_screeninfo *类型
      获取或设置屏幕叠加层坐标原点:MI_FB_Rectangle_t *类型
      获取或设置叠加层显示状态:MI_BOOL *类型
      获取或设置叠加层Alpha:MI_FB_GlobalAlpha_t *类型
      获取或设置叠加层Colorkey: MI_FB_ColorKey_t *类型
      获取或设置叠加层属性: MI_FB_DisplayLayerAttr_t *类型
      获取或设置鼠标图层属性: MI_FB_CursorAttr_t *类型
      获取或设置压缩信息:MI_FB_Compression_t *类型
      输入/输出
    2. 基于MI_FB API以动态库或静态库的形式体现,目前支持以下API。

      API名 功能
      MI_FB_Open 打开FB设备
      MI_FB_Close 关闭FB设备
      MI_FB_Mmap 映射物理显存到虚拟内存空间
      MI_FB_Munmap 取消映射物理显存到虚拟内存空间
      MI_FB_GetVarScreenInfo 获取屏幕可变信息
      MI_FB_SetVarScreenInfo 设置屏幕可变信息
      MI_FB_GetFixScreenInfo 获取FB固定信息
      MI_FB_PanDisplay 设置从虚拟分辨率中的不同偏移处开始显示
      MI_FB_WaitForVsync 等待屏幕垂直刷新完成(Vsync)信号
      MI_FB_GetScreenLocation 获取叠加层在屏幕上的显示区域
      MI_FB_SetScreenLocation 设置叠加层在屏幕上的显示区域
      MI_FB_GetDisplayLayerAttr 获取图层信息
      MI_FB_SetDisplayLayerAttr 设置图层信息
      MI_FB_GetCursorAttr 获取鼠标图层信息
      MI_FB_SetCursorAttr 设置鼠标图层信息
      MI_FB_GetGlobalAlpha 获取叠加层的Alpha设置
      MI_FB_SetGlobalAlpha 设置叠加层的Alpha
      MI_FB_GetColorKey 获取叠加层的colorkey设置
      MI_FB_SetColorKey 设置叠加层的colorkey
      MI_FB_SetCmap 设置颜色表
      MI_FB_GetCmap 获取颜色表信息
      MI_FB_GetShow 获取叠加层显示状态
      MI_FB_SetShow 显示或隐藏叠加层
      MI_FB_GetCompressionInfo 获取压缩信息
      MI_FB_SetCompressionInfo 设置压缩信息

    在1.4章节已经介绍了两种体现形式的API在不同场景下的使用,用户可以根据实际情况选择使用其中一种API使用。

    注意:两种调用方式不可以共存,用户只能二选其一。

    以下内容将对两种体现形式的API接口进行详细描述。


    2.1. 标准功能

    2.1.1 FBIOGET_VSCREENINFO

    • 功能

      获取屏幕的可变信息。

    • 语法

      int ioctl (int fd, FBIOGET_VSCREENINFO, struct fb_var_screeninfo *var);
      
    • 描述

      使用此接口获取屏幕的可变信息,主要包括分辨率和像素格式。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOGET_VSCREENINFO ioctl cmd 输入
      var 可变信息结构体指针 输出
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:fb.h
    • 相关接口

      FBIOPUT_VSCREENINFO

    2.1.2 FBIOPUT_VSCREENINFO

    • 功能

      设置 Framebuffer 的屏幕分辨率和像素格式等。

    • 语法

      int ioctl (int fd, FBIOPUT_VSCREENINFO, struct fb_var_screeninfo *var);
      
    • 描述

      使用此接口设置屏幕分辨率、像素格式。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOPUT_VSCREENINFO ioctl cmd 输入
      var 可变信息结构体指针 输入
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:fb.h
    • 注意

      必须保证实际分辨率与偏移的和在虚拟分辨率范围内,否则系统会自动调整实际分辨率的大小让其在虚拟分辨率范围内。

    • 相关接口

      FBIOGET_VSCREENINFO

    2.1.3 FBIOGET_FSCREENINFO

    • 功能

      获取 Framebuffer 的固定信息。

    • 语法

      int ioctl (int fd, FBIOGET_FSCREENINFO, struct fb_fix_screeninfo *fix);
      
    • 描述

      使用此接口获取 Framebuffer 固定信息,包括显存起始物理地址、显存大小和行间距等。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOGET_FSCREENINFO ioctl cmd 输入
      fix 固定信息结构体指针 输出
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:fb.h

    2.1.4 FBIOPAN_DISPLAY

    • 功能

      设置从虚拟分辨率中的不同偏移处开始显示。

    • 语法

      int ioctl (int fd, FBIOPAN_DISPLAY, struct fb_var_screeninfo *var);
      
    • 描述

    使用此接口设置从虚拟分辨率中的不同偏移处开始显示,实际的分辨率不变。

    图2-1所示: (xres_virtual, yres_virtual)是虚拟分辨率, (xres,yres)是实际显示的分辨率, (xoffset, yoffset)是显示的偏移。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOPAN_DISPLAY ioctl cmd 输入
      var 可变信息结构体指针 输入
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:fb.h
    • 注意

      必须保证实际分辨率与偏移的和在虚拟分辨率范围内,否则设置不成功。

      图2‑1 设置从虚拟分辨率中的不同偏移处开始显示

      图2-1

    2.1.5 FBIO_WAITFORVSYNC

    • 功能

      等待屏幕垂直刷新完成(Vsync)信号。

    • 语法

      int ioctl (int fd, FBIO_WAITFORVSYNC, __u32 *zero);
      
    • 形参

      参数名称 描述 输入**/****输出**
      fd Framebuffer 设备文件描述符 输入
      FBIOGETCMAP ioctl cmd 输入
      zero 确保传递的参数值为0,否则它将无法工作 输入
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:fb.h

    2.1.6 FBIOGETCMAP

    • 功能

      获取颜色表信息。

    • 语法

      int ioctl (int fd, FBIOGETCMAP, struct fb_cmap_user *cmap);
      
    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOGETCMAP ioctl cmd 输入
      cmap 描述颜色表信息 输出
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:fb.h
    • 相关主题

      FBIOPUTCMAP

      MI_FB_SetCmap

    2.1.7 FBIOPUTCMAP

    • 功能

      设置颜色表信息。

    • 语法

      int ioctl (int fd, FBIOPUTCMAP, struct fb_cmap_user *cmap);
      
    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOPUTCMAP ioctl cmd 输入
      cmap 描述颜色表信息 输入
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:fb.h
    • 相关主题

      FBIOGETCMAP

      MI_FB_GetCmap


    2.2. 扩展功能

    2.2.1 FBIOGET_SCREEN_LOCATION

    • 功能

      获取叠加层在屏幕上的显示区域

    • 语法

      int ioctl (int fd, FBIOGET_SCREEN_LOCATION, MI_FB_Rectangle_t* pstRectangle);
      
    • 描述

      使用此接口获取叠加层在屏幕上的显示区域

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOGET_SCREEN_LOCATION ioctl cmd 输入
      pstRectangle MI_FB_Rectangle_t结构体指针,包含(x,y)坐标和width,height。表示叠加层在屏幕上的显示区域 输出
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

      FBIOSET_SCREEN_LOCATION

    2.2.2 FBIOSET_SCREEN_LOCATION

    • 功能

      设置叠加层在屏幕上的显示区域

    • 语法

      int ioctl (int fd, FBIOSET_SCREEN_LOCATION, MI_FB_Rectangle_t* pstRectangle);
      
    • 描述

      使用此接口设置叠加层在屏幕上的显示区域

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOSET_SCREEN_LOCATION ioctl cmd 输入
      pstRectangle MI_FB_Rectangle_t结构体指针,包含(x,y)坐标和width,height。表示叠加层在屏幕上的显示区域 输入
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

      FBIOGET_SCREEN_LOCATION

    2.2.3 FBIOGET_SHOW

    • 功能

      获取当前叠加层的显示状态。

    • 语法

      int ioctl (int fd, FBIOGET_SHOW, MI_BOOL *bShow);
      
    • 描述

      使用此接口获取当前叠加层显示状态。

    • 形参

      参数名称 描述 输入/输出
      Fd Framebuffer 设备文件描述符 输入
      FBIOGET_SHOW ioctl cmd 输入
      bShow 指示当前叠加层的状态:
      bShow = TRUE:当前叠加层处于显示状态
      bShow = FALSE:当前叠加层处于隐藏状态
      输出
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

      FBIOSET_SHOW

    2.2.4 FBIOSET_SHOW

    • 功能

      显示或隐藏该叠加层。

    • 语法

      int ioctl (int fd, FBIOSET_SHOW, MI_BOOL *bShow);
      
    • 描述

      使用此接口设置叠加层显示状态:显示或隐藏。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOSET_SHOW ioctl cmd 输入
      bShow 该叠加层的显示状态:
      bShow = TRUE:显示当前叠加层
      bShow = FALSE:隐藏当前叠加层
      输入
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

      FBIOGET_SHOW

    2.2.5 FBIOGET_GLOBAL_ALPHA

    • 功能

      获取叠加层 Alpha 设置。

    • 语法

      int ioctl (int fd, FBIOGET_GLOBAL_ALPHA, MI_FB_GlobalAlpha_t *pstAlpha);
      
    • 描述

      使用此接口获取当前叠加层的 Alpha 设置。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOGET_GLOBAL_ALPHA ioctl cmd 输入
      pstAlpha MI_FB_GlobalAlpha_t 结构体指针 输出
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

      FBIOSET_GLOBAL_ALPHA

    2.2.6 FBIOSET_GLOBAL_ALPHA

    • 功能

      设置叠加层的 Alpha。

    • 语法

      int ioctl (int fd, FBIOSET_GLOBAL_ALPHA, MI_FB_GlobalAlpha_t *pstAlpha);
      
    • 描述

      使用此接口设置当前叠加层的 Alpha 功能。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOSET_GLOBAL_ALPHA ioctl cmd 输入
      pstAlpha MI_FB_GlobalAlpha_t 结构体指针 输入
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

      FBIOGET_GLOBAL_ALPHA

    2.2.7 FBIOGET_COLORKEY

    • 功能

      获取叠加层的 colorkey。

    • 语法

      int ioctl (int fd, FBIOGET_COLORKEY, MI_FB_ColorKey_t *pstColorKey);
      
    • 描述

      使用此接口获取叠加层的 colorkey。

    • 形参

      参数名称 描述 输入/输出
      Fd Framebuffer 设备文件描述符 输入
      FBIOGET_COLORKEY ioctl cmd 输入
      pstColorKey MI_FB_ColorKey_t 结构体指针 输出
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

      FBIOSET_COLORKEY

    2.2.8 FBIOSET_COLORKEY

    • 功能

      设置叠加层的 colorkey。

    • 语法

      int ioctl (int fd, FBIOSET_COLORKEY, MI_FB_ColorKey_t *pstColorKey);
      
    • 描述

      使用此接口设置当前叠加层的 colorkey 功能。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOSET_COLORKEY ioctl cmd 输入
      pstColorKey MI_FB_ColorKey_t 结构体指针 输入
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

      FBIOGET_COLORKEY

    2.2.9 FBIOSET_DISPLAYLAYER_ATTRIBUTES

    • 功能

      设置图层信息。

    • 语法

      int ioctl (int fd, FBIOSET_DISPLAYLAYER_ATTRIBUTES,
      MI_FB_DisplayLayerAttr_t *pstLayerInfo);
      
    • 描述

      此接口用于设置图层信息,包括图层在屏幕的显示区域、画布分辨率、显存分辨率、屏幕显示分辨率以及是否使能预乘。以上信息的更详细说明见MI_FB_DisplayLayerAttr_t的描述。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOSET_DISPLAYLAYER_ATTRIBUTES ioctl cmd 输入
      pstLayerInfo MI_FB_DisplayLayerAttr_t结构体指针 输出
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

      FBIOSET_DISPLAYLAYER_ATTRIBUTES

    2.2.10 FBIOGET_DISPLAYLAYER_ATTRIBUTES

    • 功能

      获取图层信息。

    • 语法

      int ioctl (int fd, FBIOGET_DISPLAYLAYER_ATTRIBUTES,
      MI_FB_DisplayLayerAttr_t *pstLayerInfo);
      
    • 描述

      用于获取图层信息,包括图层在屏幕的显示区域、显存分辨率、屏幕显示分辨率以及是否使能预乘。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOGET_DISPLAYLAYER_ATTRIBUTES ioctl cmd 输入
      pstLayerInfo 图层信息结构体指针 输出
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

      FBIOGET_DISPLAYLAYER_ATTRIBUTES

    2.2.11 FBIOGET_CURSOR_ATTRIBUTE

    • 功能

      获取鼠标图层信息。

    • 语法

      int ioctl (int fd, FBIOGET_CURSOR_ATTRIBUTE, MI_FB_CursorAttr_t *pstCursorAttr)
      
    • 描述

      获取鼠标图层信息,包括hotspot、位置、Alpha、Colorkey、是否可见。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOGET_CURSOR_ATTRIBUTE ioctl cmd 输入
      pstCursorAttr MI_FB_CursorAttr_t结构体指针 输出
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

      FBIOSET_CURSOR_ATTRIBUTE

    2.2.12 FBIOSET_CURSOR_ATTRIBUTE

    • 功能

      设置鼠标图层信息。

    • 语法

      int ioctl (int fd, FBIOSET_CURSOR_ATTRIBUTE, MI_FB_CursorAttr_t *pstCursorAttr)
      
    • 描述

      设置鼠标图层信息, 包括hotspot、位置、Alpha、Colorkey、是否可见。

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOSET_CURSOR_ATTRIBUTE ioctl cmd 输入
      pstCursorAttr MI_FB_CursorAttr_t结构体指针 输出
    • 返回值

      • 0:成功

      • -1:失败

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关接口

    FBIOGET_CURSOR_ATTRIBUTE

    2.2.13 FBIOGET_COMPRESSIONINFO

    • 功能

      获取压缩信息

    • 语法

      int ioctl (int fd, FBIOGET_COMPRESSIONINFO, MI_FB_Compression_t *pstCompression)
      
    • 说明

      此接口仅Opera芯片支持

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOGET_COMPRESSIONINFO ioctl cmd 输入
      pstCompression MI_FB_Compression_t结构体指针 输出
    • 返回值

      • 0:成功。

      • -1:失败。

    • 依赖

      • 头文件:mi_fb_datatype.h
    • 相关主题

      FBIOSET_COMPRESSIONINFO

    2.2.14 FBIOSET_COMPRESSIONINFO

    • 功能

      设置压缩信息

    • 语法

      int ioctl (int fd, FBIOSET_COMPRESSIONINFO, MI_FB_Compression_t *pstCompression)
      
    • 说明

      此接口仅Opera芯片支持

    • 形参

      参数名称 描述 输入/输出
      fd Framebuffer 设备文件描述符 输入
      FBIOSET_COMPRESSIONINFO ioctl cmd 输入
      pstCompression MI_FB_Compression_t结构体指针 输入
    • 返回值

      • 0:成功。

      • -1:失败。

    • 依赖

      • 头文件: mi_fb_datatype.h
    • 相关主题

      FBIOGET_COMPRESSIONINFO


    2.3. MI_FB API参考

    2.3.1 MI_FB_Open

    • 功能

      该API功能和open framebuff设备节点相同

    • 语法

      MI_S32 MI_FB_Open (MI_U32 u32FbId);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h

      • 库文件:libmi_fb.a

    • 举例

      MI_S32 s32Ret = MI_SUCCESS;
      MI_U32 u32FbId = 0;
      void *framebuff = NULL;
      MI_U32 u32ScreenSize;
      MI_FB_VarScreenInfo_t stVarScreenInfo;
      MI_FB_FixScreenInfo_t stFixScreenInfo;
      
      memset(&stVarScreenInfo, 0, sizeof(MI_FB_VarScreenInfo_t));
      memset(&stFixScreenInfo, 0, sizeof(MI_FB_FixScreenInfo_t));
      
      s32Ret = MI_FB_Open(u32FbId);
      if(MI_SUCCESS == s32Ret)
      {
          MI_FB_GetFixScreenInfo(u32FbId, &stFixScreenInfo);
          MI_FB_GetVarScreenInfo(u32FbId, &stVarScreenInfo);
          u32ScreenSize = stFixScreenInfo.u32SmemLen;
          if(u32ScreenSize)
          MI_FB_Mmap(u32FbId, u32ScreenSize, &framebuff);
          if(framebuff)
          {
              draw(x, y, framebuff);
              stVarScreenInfo.u32Xoffset = 0;
              stVarScreenInfo.u32Yoffset = stVarScreenInfo.u32Yres;
              MI_FB_PanDisplay(u32FbId, &stVarScreenInfo);
          }
          MI_FB_Close(u32FbId);
      }
      
    • 相关主题

      MI_FB_Close

    2.3.2 MI_FB_Close

    • 功能

      该API功能和close framebuff设备节点相同

    • 语法

      MI_S32 MI_FB_Close (MI_U32 u32FbId);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_Open

    2.3.3 MI_FB_Mmap

    • 功能

      该API功能和framebuff mmap相同

    • 语法

      MI_S32 MI_FB_Mmap (MI_U32 u32FbId, MI_U32 u32size, void **pVirAddr);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      u32size buff大小 输入
      pVirAddr 返回映射后的虚拟地址 输出
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h

      • 库文件:libmi_fb.a

    2.3.4 MI_FB_Munmap

    • 功能

      该API功能和framebuff munmap相同。

    • 语法

      MI_S32 MI_FB_Munmap (MI_U32 u32FbId, void *pVirAddr, MI_U32 u32Size);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pVirAddr 映射过的虚拟地址 输入
      u32Size buff大小 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h

      • 库文件:libmi_fb.a

    2.3.5 MI_FB_GetVarScreenInfo

    • 功能

      该API功能和FBIOGET_VSCREENINFO相同。

    • 语法

      MI_S32 MI_FB_GetVarScreenInfo (MI_U32 u32FbId, MI_FB_VarScreenInfo_t *pstVarScreenInfo);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstVarScreenInfo 描述屏幕可变信息 输出
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_SetVarScreenInfo

      FBIOGET_VSCREENINFO

    2.3.6 MI_FB_SetVarScreenInfo

    • 功能

      该API功能和FBIOPUT_VSCREENINFO相同

    • 语法

      MI_S32 MI_FB_SetVarScreenInfo (MI_U32 u32FbId, MI_FB_VarScreenInfo_t *pstVarScreenInfo);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstVarScreenInfo 描述屏幕可变信息 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_GetVarScreenInfo

      FBIOPUT_VSCREENINFO

    2.3.7 MI_FB_GetFixScreenInfo

    • 功能

      该API功能和FBIOGET_FSCREENINFO相同。

    • 语法

      MI_S32 MI_FB_GetFixScreenInfo (MI_U32 u32FbId, MI_FB_FixScreenInfo_t *pstFixScreenInfo);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstFixScreenInfo 描述屏幕固定信息 输出
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      FBIOGET_FSCREENINFO

    2.3.8 MI_FB_PanDisplay

    • 功能

      该API功能和FBIOPAN_DISPLAY相同。

    • 语法

      MI_S32 MI_FB_PanDisplay (MI_U32 u32FbId, MI_FB_VarScreenInfo_t *pstVarScreenInfo);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstVarScreenInfo 描述屏幕可变信息 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      FBIOPAN_DISPLAY

    2.3.9 MI_FB_WaitForVsync

    • 功能

      该API功能和FBIO_WAITFORVSYNC相同。

    • 语法

      MI_S32 MI_FB_WaitForVsync (MI_U32 u32FbId);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    2.3.10 MI_FB_GetScreenLocation

    • 功能

      该API功能和FBIOGET_SCREEN_LOCATION相同。

    • 语法

      MI_S32 MI_FB_GetScreenLocation (MI_U32 u32FbId, MI_FB_Rectangle_t *pstWinRect);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstWinRect 描述叠加层在屏幕上的显示区域 输出
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_SetScreenLocation

      FBIOGET_SCREEN_LOCATION

    2.3.11 MI_FB_SetScreenLocation

    • 功能

      该API功能和FBIOSET_SCREEN_LOCATION相同。

    • 语法

      MI_S32 MI_FB_SetScreenLocation (MI_U32 u32FbId, MI_FB_Rectangle_t *pstWinRect);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstWinRect 描述叠加层在屏幕上的显示区域 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_GetScreenLocation

      FBIOSET_SCREEN_LOCATION

    2.3.12 MI_FB_GetDisplayLayerAttr

    • 功能

      该API功能和FBIOGET_DISPLAYLAYER_ATTRIBUTES相同。

    • 语法

      MI_S32 MI_FB_GetDisplayLayerAttr (MI_U32 u32FbId, MI_FB_DisplayLayerAttr_t *pstDisplayLayerAttr);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstDisplayLayerAttr 描述图层信息 输出
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_SetDisplayLayerAttr

      FBIOGET_DISPLAYLAYER_ATTRIBUTES

    2.3.13 MI_FB_SetDisplayLayerAttr

    • 功能

      该API功能和FBIOSET_DISPLAYLAYER_ATTRIBUTES相同。

    • 语法

      MI_S32 MI_FB_SetDisplayLayerAttr (MI_U32 u32FbId, MI_FB_DisplayLayerAttr_t *pstDisplayLayerAttr);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstDisplayLayerAttr 描述图层信息 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_GetDisplayLayerAttr

      FBIOSET_DISPLAYLAYER_ATTRIBUTES

    2.3.14 MI_FB_GetCursorAttr

    • 功能

      该API功能和FBIOGET_CURSOR_ATTRIBUTE相同。

    • 语法

      MI_S32 MI_FB_GetCursorAttr (MI_U32 u32FbId, MI_FB_CursorAttr_t *pstCursorAttr);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstCursorAttr 描述鼠标图层信息 输出
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_SetCursorAttr

      FBIOGET_CURSOR_ATTRIBUTE

    2.3.15 MI_FB_SetCursorAttr

    • 功能

      该API功能和FBIOSET_CURSOR_ATTRIBUTE相同。

    • 语法

      MI_S32 MI_FB_SetCursorAttr (MI_U32 u32FbId, MI_FB_CursorAttr_t *pstCursorAttr);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstCursorAttr 描述鼠标图层信息 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_GetCursorAttr

      FBIOSET_CURSOR_ATTRIBUTE

    2.3.16 MI_FB_GetGlobalAlpha

    • 功能

      该API功能和FBIOGET_GLOBAL_ALPHA相同。

    • 语法

      MI_S32 MI_FB_GetGlobalAlpha (MI_U32 u32FbId, MI_FB_GlobalAlpha_t *pstAlpha);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstAlpha 描述叠加层的Alpha 输出
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_SetGlobalAlpha

      FBIOGET_GLOBAL_ALPHA

    2.3.17 MI_FB_SetGlobalAlpha

    • 功能

      该API功能和FBIOSET_GLOBAL_ALPHA相同。

    • 语法

      MI_S32 MI_FB_SetGlobalAlpha (MI_U32 u32FbId, MI_FB_GlobalAlpha_t *pstAlpha);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstAlpha 描述叠加层的Alpha 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_GetGlobalAlpha

      FBIOSET_GLOBAL_ALPHA

    2.3.18 MI_FB_GetColorKey

    • 功能

      该API功能和FBIOGET_COLORKEY相同。

    • 语法

      MI_S32 MI_FB_GetColorKey (MI_U32 u32FbId, MI_FB_ColorKey_t *pstClrKey);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstClrKey 描述叠加层的colorkey信息 输出
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_SetColorKey

      FBIOGET_COLORKEY

    2.3.19 MI_FB_SetColorKey

    • 功能

      该API功能和FBIOSET_COLORKEY相同。

    • 语法

      MI_S32 MI_FB_SetColorKey (MI_U32 u32FbId, MI_FB_ColorKey_t *pstClrKey);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstClrKey 描述叠加层的colorkey信息 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_GetColorKey

      FBIOSET_COLORKEY

    2.3.20 MI_FB_SetCmap

    • 功能

      该API功能和FBIOPUTCMAP相同。

    • 语法

      MI_S32 MI_FB_SetCmap (MI_U32 u32FbId, MI_FB_Cmap_t *pstCmap);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstCmap 描述颜色表信息 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_GetCmap

    2.3.21 MI_FB_GetCmap

    • 功能

      该API功能和FBIOGETCMAP相同。

    • 语法

      MI_S32 MI_FB_GetCmap (MI_U32 u32FbId, MI_FB_Cmap_t *pstCmap);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstCmap 描述颜色表信息 输出
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_SetCmap

    2.3.22 MI_FB_GetShow

    • 功能

      该API功能和FBIOGET_SHOW相同。

    • 语法

      MI_S32 MI_FB_GetShow (MI_U32 u32FbId, MI_BOOL *pbShown);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pbShown 叠加层显示状态 输出
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_SetShow

      FBIOGET_SHOW

    2.3.23 MI_FB_SetShow

    • 功能

      该API功能和FBIOSET_SHOW相同。

    • 语法

      MI_S32 MI_FB_SetShow (MI_U32 u32FbId, MI_BOOL bShown);
      
    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      bShown 1:显示 0:隐藏 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_GetShow

      FBIOSET_SHOW

    2.3.24 MI_FB_GetCompressionInfo

    • 功能

      该API功能和FBIOGET_COMPRESSIONINFO相同。

    • 语法

      MI_S32 MI_FB_GetCompressionInfo(MI_U8 u8FbId, MI_FB_Compression_t *pstCompression);
      
    • 说明

      此接口仅Opera芯片支持

    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstCompression 压缩信息 输出
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_SetCompressionInfo

      FBIOGET_COMPRESSIONINFO

    2.3.25 MI_FB_SetCompressionInfo

    • 功能

      该API功能和FBIOSET_COMPRESSIONINFO相同。

    • 语法

      MI_S32 MI_FB_SetCompressionInfo(MI_U8 u8FbId, MI_FB_Compression_t *pstCompression);
      
    • 说明

      此接口仅Opera芯片支持

    • 形参

      参数名称 描述 输入/输出
      u32FbId FB设备号 输入
      pstCompression 压缩信息 输入
    • 返回值

      • 0:成功。

      • 非0:失败,详情参照错误码

    • 依赖

      • 头文件:mi_fb.h mi_fb_datatype.h

      • 库文件:libmi_fb.a

    • 相关主题

      MI_FB_GetCompressionInfo

      FBIOSET_COMPRESSIONINFO


    3. 数据类型


    Linux Framebuff标准中定义的数据类型:

    数据类型 定义
    struct fb_bitfield 位域信息,用于设置像素格式
    struct fb_var_screeninfo 可变的屏幕信息
    struct fb_fix_screeninfo 固定的屏幕信息
    struct fb_cmap_user 描述颜色表信息

    MI_FB中定义的数据类型:

    数据类型 定义
    MI_FB_BitField_t 同标准定义
    MI_FB_VarScreenInfo_t 同标准定义
    MI_FB_FixScreenInfo_t 同标准定义
    MI_FB_ColorFmt_e FB支持的像素格式
    MI_FB_OuputColorSpace_e 叠加层输出的color space
    MI_FB_DstDisplayPlane_e FB叠加层输出到display chain的目的模组
    MI_FB_DisplayLayerAttrMaskBit_e 指定MI_FB_DisplayLayerAttr_t中需要更新的属性
    MI_FB_CursorAttrMaskBit_e 指定MI_FB_CursorAttr_t中需要更新的属性
    MI_FB_DisplayLayerAttr_t 描述叠加层的属性信息
    MI_FB_AlphaMode_e 定义Alpha模式
    MI_FB_GlobalAlpha_t Alpha信息结构体
    MI_FB_ColorKey_t Colorkey信息结构体
    MI_FB_CursorImage_t 描述鼠标图标数据信息
    MI_FB_CursorAttr_t 描述鼠标图层信息
    MI_FB_Rectangle_t 描述叠加层的显示区域
    MI_FB_Cmap_t 描述颜色表信息
    MI_FB_Compression_t 描述压缩信息

    注:本节已涵盖各重要的数据类型,部分未列出数据类型请参见 mi_fb_datatype.h

    3.1. 标准定义

    3.1.1 struct fb_bitfield

    • 说明

      位域信息,用于设置像素格式。

    • 定义

      struct fb_bitfield
      {
          __u32 offset;       /* beginning of bitfield */
          __u32 length;       /* length of bitfield */
          __u32 msb_right;    /* != 0: Most significant bit is right */
      };
      
    • 成员

      成员名称 描述 支持情况
      offset 颜色分量起始比特位。 支持。
      length 颜色分量所占比特长度。 支持。
      msb_right 右边的比特是否为最高有效位。 只支持该位为 0,即最左边的 bit 为最高有效位。

    3.1.2 struct fb_var_screeninfo

    • 说明

      可变的屏幕信息。

    • 定义

      struct fb_var_screeninfo
      {
          __u32 xres;    /* visible resolution */
          __u32 yres;
          __u32 xres_virtual;    /* virtual resolution */
          __u32 yres_virtual;
          __u32 xoffset;    /* offset from virtual to visible */
          __u32 yoffset;    /* resolution */
      
          __u32 bits_per_pixel;    /* guess what */
          __u32 grayscale;    /* != 0 Graylevels instead of colors */
          struct fb_bitfield red;    /* bitfield in fb mem if true color, */ struct fb_bitfield green;    /* else only length is significant */ struct fb_bitfield blue;
          struct fb_bitfield transp; /* transparency */
      
          __u32 nonstd;    /* != 0 Non standard pixel format */
      
          __u32 activate;    /* see FB_ACTIVATE_* */
      
          __u32 height;    /* height of picture in mm */
          __u32 width;    /* width of picture in mm */
      
          __u32 accel_flags;    /* (OBSOLETE) see fb_info.flags */
      
          /* Timing: All values in pixclocks, except pixclock (of course) */
          __u32 pixclock;    /* pixel clock in ps (pico seconds) */
          __u32 left_margin;    /* time from sync to picture */
          __u32 right_margin;    /* time from picture to sync */
          __u32 upper_margin;    /* time from sync to picture */
          __u32 lower_margin;
          __u32 hsync_len;    /* length of horizontal sync */
          __u32 vsync_len;    /* length of vertical sync */
          __u32 sync;    /* see FB_SYNC_* */
          __u32 vmode;    /* see FB_VMODE_* */
          __u32 rotate;    /* angle we rotate counter clockwise */
          __u32 reserved[5];    /* Reserved for future compatibility */
      };
      
    • 成员

      成员名称 描述 支持情况
      xres 可见屏幕宽度(像素数)。 支持。
      yres 可见屏幕高度(像素数)。 支持。
      xres_virtual 虚拟屏幕宽度(显存中图像宽 度),当该值小于 xres 时会修改xres,使 xres 值与该值相等。 支持。
      yres_virtual 虚拟屏幕高度(显存中图像高 度),当该值小于 yres 时会修改yres,使 yres 值与该值相等。结合xres_virtual,可以用来快速水平或垂直平移图像。 支持。
      xoffset 在 x 方向上的偏移像素数。 支持,默认为 0。
      yoffset 在 y 方向上的偏移像素数。 支持,默认为 0。
      bits_per_pixel 每个像素所占的比特数。 支持。
      grayscale 灰度级。 不支持,缺省值为 0,表示彩色。
      red 颜色分量中红色的位域信息。 支持。
      green 颜色分量中绿色的位域信息。 支持。
      blue 颜色分量中蓝色的位域信息。 支持。
      transp 颜色分量中 alpha 分量的位域信息。 支持。
      nonstd 是否为标准像素格式。 不支持,缺省值为 0,表示支持标准象素格式。
      activate 设置生效的时刻。 不支持,缺省值为 FB_ACTIVATE_NOW, 表示设置立刻生效。
      height 屏幕高,单位为 mm。 不支持,缺省值为–1。
      width 屏幕宽,单位为 mm。 不支持,缺省值为–1。
      accel_flags 加速标志。 不支持,缺省值为–1。
      pixclock 显示一个点需要的时间,单位为ns。 不支持,缺省值为–1。
      left_margin
      right_margin
      hsync_len
      分别是左消隐信号、右消隐信号、水平同步时长,这三个值之和等于水平回扫时间,单位为点时钟。 不支持,缺省值为64。
      upper_margin
      lower_margin
      vsync_len
      分别是上消隐信号、下消隐信号、垂直同步时长,这三个值之和等于垂直回扫时间,单位为点时钟。 不支持,缺省值为–1。
      sync 同步信号方式。 不支持,缺省值为–1。
      vmode 扫描模式。 不支持,缺省值为–1。
      rotate 顺时针旋转的角度。 不支持,缺省值为 0,表示无旋转。
    • 注意事项

      高清设备图形层默认的分辩率为1280x720;

      标清设备图形层默认的分辩率为720x576,

      鼠标层默认的分辩率为128x128。像素格式为 ARGB1555。

    • 相关数据类型及接口

      struct fb_bitfield

      FBIOGET_VSCREENINFO

      FBIOPUT_VSCREENINFO

    3.1.3 struct fb_fix_screeninfo

    • 说明

      固定的屏幕信息。

    • 定义

      struct fb_fix_screeninfo
      {
          char id[16];  /* identification string eg "TT Builtin" */
          unsigned long smem_start;    /* Start of frame buffer mem (physical address) */
          __u32 smem_len;    /* Length of frame buffer mem */
          __u32 type;    /* see FB_TYPE_* */
          __u32 type_aux;    /* Interleave for interleaved Planes */
          __u32 visual;    /* see FB_VISUAL_* */
          __u16 xpanstep;    /* zero if no hardware panning */
          __u16 ypanstep;    /* zero if no hardware panning */
          __u16 ywrapstep;    /* zero if no hardware ywrap */
          __u32 line_length;    /* length of a line in bytes */
          unsigned long mmio_start;    /* Start of Memory Mapped I/O (physical address) */
          __u32 mmio_len;    /* Length of Memory Mapped I/O */
          __u32 accel; /* Indicate to driver which specific chip/card we have */
          __u16 reserved[3];    /* Reserved for future compatibility */
      };
      
    • 成员

      成员名称 描述 支持情况
      id 设备驱动名称。 支持。
      smem_start 显存起始物理地址。 支持。
      smem_len 显存大小。 支持。
      type 显卡类型。 固定为FB_TYPE_PACKED_PIXELS,表示像素值紧密排列。
      type_aux 附加类型。 不支持,在FB_TYPE_PACKED_PIXELS 显卡类型下无含义。
      visual 色彩模式。 不支持,默认为FB_VISUAL_TRUECOLOR,真彩色。
      xpanstep 支持水平方向上的 PAN 显示:0:不支持。非 0:支持,此时该值用于表示在水平方向上每步进的像素值。 固定为 1。
      ypanstep 支持垂直方向上的 PAN 显示:0:不支持。非 0:支持,此时该值用于表示在垂直方向上每步进的像素值。 固定为 1。
      ywrapstep 该方式类似于 ypanstep,不同之处在于:当其显示到底部时,能回到显存的开始处进行显示。 不支持,默认为 0。
      line_length 每行字节数。 支持。
      mmio_start 显存映射 I/O 首地址。 不支持,默认为 0。
      mmio_len 显存映射 I/O 长度。 不支持,默认为 0。
      accel 显示所支持的硬件加速设备。 不支持,默认为FB_ACCEL_NONE,无
      reserved 保留。 不支持,缺省值为 0。
    • 相关数据类型及接口

      FBIOGET_FSCREENINFO

    3.1.4 struct fb_cmap_user

    • 说明

      描述颜色表信息。

    • 定义

      struct fb_cmap_user
      {
          __u32 start;            /* First entry */
          __u32 len;              /* Number of entries */
          __u32 __user *red;      /* Red values */
          __u32 __user *green;
          __u32 __user *blue;
          __u32 __user *transp;   /* transparency, can be NULL*/
      };
      
    • 成员

      成员名称 描述 支持情况
      start 第一个元素的入口 支持
      len 元素个数 支持
      red 红色分量起始位置 支持
      green 绿色分量起始位置 支持
      blue 蓝色分量起始位置 支持
      transp 透明度分量起始位置 支持

    3.2. MI_FB 数据类型定义

    3.2.1 MI_FB_BitField_t

    3.2.2 MI_FB_VarScreenInfo_t

    3.2.3 MI_FB_FixScreenInfo_t

    3.2.4 MI_FB_ColorFmt_e

    • 说明

      FB支持的像素格式集合

    • 定义

      typedef enum
      {
          E_MI_FB_COLOR_FMT_RGB565       = 1,
          E_MI_FB_COLOR_FMT_ARGB4444     = 2,
          E_MI_FB_COLOR_FMT_I8           = 4,
          E_MI_FB_COLOR_FMT_ARGB8888     = 5,
          E_MI_FB_COLOR_FMT_ARGB1555     = 6,
          E_MI_FB_COLOR_FMT_YUV422       = 9,
          E_MI_FB_COLOR_FMT_I4           = 13,
          E_MI_FB_COLOR_FMT_I2           = 14,
          // Invalid color format.
          E_MI_FB_COLOR_FMT_INVALID
      }MI_FB_ColorFmt_e;
      
    • 成员

      成员名称 描述
      E_MI_FB_COLOR_FMT_RGB565 RGB565 格式。
      E_MI_FB_COLOR_FMT_ARGB4444 ARGB444 格式。
      E_MI_FB_COLOR_FMT_I8 I8
      E_MI_FB_COLOR_FMT_ARGB8888 ARGB8888
      E_MI_FB_COLOR_FMT_ARGB1555 ARGB1555
      E_MI_FB_COLOR_FMT_YUV422 YUV422
      E_MI_FB_COLOR_FMT_I4 I4
      E_MI_FB_COLOR_FMT_I2 I2
      E_MI_FB_COLOR_FMT_INVALID 无效像素格式
    • 相关数据类型及接口

      MI_FB_DisplayLayerAttr_t

    3.2.5 MI_FB_OuputColorSpace_e

    • 说明

      FB叠加层输出的color space

    • 定义

      typedef enum
      {
          E_MI_FB_OUTPUT_RGB = 0,
          E_MI_FB_OUTPUT_YUV = 1
      }MI_FB_OutputClrSpace_e;
      
    • 成员

      成员名称 描述
      E_MI_FB_OUTPUT_RGB RGB ColorSpace
      E_MI_FB_OUTPUT_YUV YUV ColorSpace
    • 相关数据类型及接口

      MI_FB_DisplayLayerAttr_t

    3.2.6 MI_FB_DstDisplayPlane_e

    • 说明

      FB叠加层输出到display chain的目的模组,通过配置不同的display chain,可以选择叠加层参与的图像调整过程。

    • 定义

      typedef enum
      {
          E_MI_FB_DST_IP0 = 0,
          E_MI_FB_DST_IP0_SUB = 1,
          E_MI_FB_DST_MIXER2VE = 2,
          E_MI_FB_DST_OP0 = 3,
          E_MI_FB_DST_VOP = 4,
          E_MI_FB_DST_IP1 = 5,
          E_MI_FB_DST_IP1_SUB = 6,
          E_MI_FB_DST_MIXER2OP = 7,
          E_MI_FB_DST_VOP_SUB = 8,
          E_MI_FB_DST_FRC = 9,
          E_MI_FB_DST_VE = 10,
          E_MI_FB_DST_BYPASS = 11,
          E_MI_FB_DST_OP1 = 12,
          E_MI_FB_DST_MIXER2OP1 = 13,
          E_MI_FB_DST_DIP = 14,
          E_MI_FB_DST_COPScaling = 15,
          E_MI_FB_DST_OP_DUAL_RATE = 16,
          E_MI_FB_DST_INVALID = 17,
      }MI_FB_DstDisplayPlane_e
      
    • 成员

      成员名称 描述
      E_MI_FB_DST_OP0 OP0 path
      E_MI_FB_DST_OP1 OP1 path

      目前只支持E_MI_FB_DST_OP0/E_MI_FB_DST_OP1

    • 相关数据类型及接口

      MI_FB_DisplayLayerAttr_t

    3.2.7 MI_FB_DisplayLayerAttrMaskBit_e

    • 说明

      指定MI_FB_DisplayLayerAttr_t中需要更新的属性

    • 定义

      typedef enum
      {
          E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_POS = 0x1,
          E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_SIZE = 0x2,
          E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_BUFFER_SIZE = 0x4,
          E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_SCREEN_SIZE = 0x8,
          E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_PREMUL = 0x10,
          E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_COLOR_FMB = 0x20,
          E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_OUTPUT_COLORSPACE = 0x40,
          E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_DST_DISP = 0x80,
      }MI_FB_DisplayLayerAttrMaskBit_e
      
    • 成员

      成员名称 描述
      E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_POS 更新显示位置
      E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_SIZE 更新显示范围
      E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_BUFFER_SIZE 更新buff size
      E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_SCREEN_SIZE 更新屏幕分辨率
      E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_PREMUL 更新premultiply alpha
      E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_COLOR_FMB 更新pixel format
      E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_OUTPUT_COLORSPACE 更新输出颜色空间
      E_MI_FB_DISPLAYLAYER_ATTR_MASK_DISP_DST_DISP 更新叠加层输出到display chain的目的模组
    • 相关数据类型及接口

      MI_FB_DisplayLayerAttr_t

    3.2.8 MI_FB_CursorAttrMaskBit_e

    • 说明

      指定MI_FB_CursorAttr_t中需要更新的属性

    • 定义

      typedef enum
      {
          E_MI_FB_CURSOR_ATTR_MASK_ICON = 0x1,
          E_MI_FB_CURSOR_ATTR_MASK_POS = 0x2,
          E_MI_FB_CURSOR_ATTR_MASK_ALPHA = 0x4,
          E_MI_FB_CURSOR_ATTR_MASK_SHOW = 0x8,
          E_MI_FB_CURSOR_ATTR_MASK_HIDE = 0x10,
          E_MI_FB_CURSOR_ATTR_MASK_COLORKEY = 0x20,
          E_MI_FB_CURSOR_ATTR_MASK = 0x3F,
      }MI_FB_CursorAttrMaskBit_e
      
    • 成员

      成员名称 描述
      E_MI_FB_CURSOR_ATTR_MASK_ICON 鼠标图标发生变化
      E_MI_FB_CURSOR_ATTR_MASK_POS 鼠标位置发生变化
      E_MI_FB_CURSOR_ATTR_MASK_ALPHA Alpha发生变化
      E_MI_FB_CURSOR_ATTR_MASK_SHOW 显示鼠标
      E_MI_FB_CURSOR_ATTR_MASK_HIDE 隐藏鼠标
      E_MI_FB_CURSOR_ATTR_MASK_COLORKEY Color key发生变化
      E_MI_FB_CURSOR_ATTR_MASK 用于标识鼠标所有可设置属性
    • 相关数据类型及接口

      MI_FB_CursorAttr_t

    3.2.9 MI_FB_DisplayLayerAttr_t

    • 说明

      描述叠加层属性信息

    • 定义

      typedef struct
      {
          MI_U32 u32XPos;           /**the x pos of orign point in screen*/
          MI_U32 u32YPos;           /**the y pos of orign point in screen*/
          MI_U32 u32DstWidth;       /**display buffer dest with in screen*/
          MI_U32 u32DstHeight;      /**display buffer dest hight in screen*/
          MI_U32 u32DisplayWidth;   /**the width of display buf in fb */
          MI_U32 u32DisplayHeight;  /**the height of display buf in fb. */
          MI_U32 u32ScreenWidth;    /**the width of screen */
          MI_U32 u32ScreenHeight;   /** the height of screen */
          MI_BOOL bPreMul;          /**the data drawed in buffer whether is premultiply alpha or not*/
          MI_FB_ColorFmt_e eFbColorFmt;                   /**the color format of framebuffer*/
          MI_FB_OutputClrSpace_e  eFbOutputColorSpace;    /**output color space*/
          MI_FB_DstDisplayPlane_e  eFbDestDisplayPlane;   /**destination displayplane*/
          MI_U32 u32DisplayInfoMask;                      /** display attribute modify mask*/
      }MI_FB_DisplayLayerAttr_t;
      
    • 成员

      成员名称 描述 支持情况
      u32XPos 图层在屏幕上的原点横坐标。 支持
      u32YPos 图层在屏幕上的原点纵坐标。 支持
      u32DstWidth 图层在屏幕上的显示宽度 支持
      u32DstHeight 图层在屏幕上的显示高度 支持
      u32DisplayWidth 显存分辨率的宽。 支持
      u32DisplayHeight 显存分辨率的高。 支持
      u32ScreenWidth 屏幕显示分辩率的宽。 支持
      u32ScreenHeight 屏幕显示分辩率的高。 支持
      bPreMul FB 中的数据是否为预乘数据。 支持
      eFbColorFmt FB的像素格式。 支持
      u32SetAttrMask 设置图层信息时参数修改掩码位。 支持
      eFbOutputColorSpace 设置叠加层输出的Color space 支持
      eFbDestDisplayPlane 设置叠加层输出到display chain的目的模组。默认为E_MI_FB_DST_OP0。 支持
    • 相关数据类型及接口

      MI_FB_GetDisplayLayerAttr

      MI_FB_SetDisplayLayerAttr

    3.2.10 MI_FB_AlphaMode_e

    • 说明

      定义Alpha模式

    • 定义

      typedef enum
      {
          E_MI_FB_ALPHA_CHANNEL       = 0x01,
          E_MI_FB_ALPHA_INVERT        = 0x02,
          E_MI_FB_ALPHA_PREMULTIPLIED = 0x04,
          E_MI_FB_ALPHA_PLANE_ALPHA   = 0x08,
      } MI_FB_AlphaMode_e;
      
    • 成员

      成员名称 描述 支持情况
      E_MI_FB_ALPHA_CHANNEL 透明模式,该bit为0时透明模式为全局透明度;为1时为像素透明模式为像素模式。 支持
      E_MI_FB_ALPHA_INVERT 透明反转,该bit为1时全部画面的透明度反转,为0时不生效。 支持
      E_MI_FB_ALPHA_PREMULTIPLIED 透明预乘,该bit为1时alpha blending会按照预乘数据处理,为0时按照默认alpha blending数据处理。 支持
      E_MI_FB_ALPHA_PLANE_ALPHA 平面透明度,该bit为1时会引入平面透明度参与alpha blending,为0时不生效。 支持
    • 注意

      • 透明模式

        • 全局透明度:所有像素使用一样的透明值参与alpha blending,全局透明值需要用户通过MI_FB_GlobalAlpha_t中的成员[u8GlobalAlpha]指定。

        • 像素透明度:每个像素的透明度使用像素值之中的透明度分量参与alpha blending。比如ARGB8888格式时像素的bit[31:24]。

      • 透明反转:255 - 当前透明度,获得反转后的透明度

      • 透明预乘:用于用户数据是预乘数据的情况,alpha blending的时候会采用预乘专用的算法。

      • 平面透明度:alpha blending时引入用户指定的平面透明度MI_FB_GlobalAlpha_t中成员[u16PlaneAlpha]。

    • 相关数据类型及接口

      MI_FB_GetGlobalAlpha

      MI_FB_SetGlobalAlpha

    3.2.11 MI_FB_GlobalAlpha_t

    • 说明

      Alpha信息结构体

    • 定义

      typedef struct
      {
          MI_U16 u8AlphaMode;
          MI_U16 u16PlaneAlpha;
          MI_U8  u8Alpha0;
          MI_U8  u8Alpha1;
          MI_U8  u8GlobalAlpha;
      } MI_FB_GlobalAlpha_t;
      
    • 成员

      成员名称 描述 支持情况
      u8AlphaMode Alpha 的模式,bit[3:0]的定义参考MI_FB_AlphaMode_e 支持
      u16PlaneAlpha Plane Alpha 的值。 支持
      u8Alpha0 Alpha0 值,范围 0~255,默认为 255。在 RGB1:5:5:5 格式下,当最高位为 0 时,选择该值作为 Alpha 叠加的 Alpha 值。 支持
      u8Alpha1 Alpha1 值,范围 0~255,默认为 255。在 RGB1:5:5:5 格式下,当最高位为 1 时,选择该值作为 Alpha 叠加的 Alpha 值。 支持
      u8GlobalAlpha 全局 Alpha 值,范围为 0~255,默认为 255。在 Alpha 通道使能时起作用。 支持
    • 相关数据类型及接口

      MI_FB_GetGlobalAlpha

      MI_FB_SetGlobalAlpha

    3.2.12 MI_FB_ColorKey_t

    • 说明

      描述color key信息结构体

    • 定义

      typedef struct
      {
          MI_BOOL bKeyEnable;
          MI_U8 u8Red;
          MI_U8 u8Green;
          MI_U8 u8Blue;
      } MI_FB_ColorKey_t
      
    • 成员

      成员名称 描述 支持情况
      bKeyEnable Colorkey 是否使能标识。 TRUE:使能; FALSE:不使能。 支持
      u8Red Colorkey的R分量数值 支持
      u8Green Colorkey的G分量数值 支持
      u8Blue Colorkey的B分量数值 支持
    • 相关数据类型及接口

      MI_FB_GetColorKey

      MI_FB_SetColorKey

    3.2.13 MI_FB_CursorImage_t

    • 说明

      描述鼠标图标数据信息

    • 定义

      typedef struct
      {
          MI_U32 u32Width;             /**width, unit pixel*/
          MI_U32 u32Height;            /**Height, unit pixel*/
          MI_U32 u32Pitch;             /**Pitch, unit pixel*/
          MI_FB_ColorFmt_e eColorFmt;  /**Color format*/
          const char *pData;
      }MI_FB_CursorImage_t;
      
    • 成员

      成员名称 描述 支持情况
      u32Width 图标宽度 支持
      u32Height 图标高度 支持
      u32Pitch pitch 支持
      eColorFmt 图标数据像素格式 支持
      pData 图标数据 支持
    • 相关数据类型及接口

      MI_FB_CursorAttr_t

    3.2.14 MI_FB_CursorAttr_t

    • 说明

      描述鼠标图层信息

    • 定义

      typedef struct
      {
          MI_U32 u32XPos;
          MI_U32 u32YPos;
          MI_U32 u32HotSpotX;
          MI_U32 u32HotSpotY;
          MI_FB_GlobalAlpha_t stAlpha;
          MI_FB_ColorKey_t stClrKey;
          MI_BOOL bShown;
          MI_FB_CursorImage_t stCursorImageInfo;
          MI_U16 u16CursorInfoMask;
      }MI_FB_CursorAttr_t;
      
    • 成员

      成员名称 描述 支持情况
      u32XPos 鼠标位置横坐标 支持
      u32YPos 鼠标位置纵坐标 支持
      u32HotSpotX 鼠标热点横坐标 支持
      u32HotSpotY 鼠标热点纵坐标 支持
      stAlpha MI_FB_GlobalAlpha_t结构体,鼠标图层alpha信息 支持
      stColorKey MI_FB_ColorKey_t结构体,鼠标图层colorkey信息 支持
      bShown 鼠标是否可见 TRUE:表示可见 FALSE:表示不可见 支持
      MI_FB_CursorImage_t 图标数据信息。 支持
      u16CursorInfoMask 设置鼠标图层参数修改掩码位 支持
    • 相关数据类型及接口

      MI_FB_GetCursorAttr

      MI_FB_SetCursorAttr

    3.2.15 MI_FB_Rectangle_t

    • 说明

      描述叠加层的显示区域

    • 定义

      typedef struct
      {
          MI_U32 u32XPos;
          MI_U32 u32YPos;
          MI_U32 u32Width;
          MI_U32 u32Height;
      }MI_FB_Rectangle_t;
      
    • 成员

      成员名称 描述 支持情况
      u32XPos 左上角x坐标 支持
      u32YPos 左上角y坐标 支持
      u32Width 宽度 支持
      u32Height 高度 支持
    • 相关数据类型及接口

      MI_FB_GetScreenLocation

      MI_FB_SetScreenLocation

    3.2.16 MI_FB_Cmap_t

    3.2.17 MI_FB_Compression_t

    • 说明

      描述压缩信息结构体,仅 Opera 芯片支持

    • 定义

      typedef struct
      {
          MI_BOOL          bEnable;
          MI_BOOL          bBlockSplit;
          MI_BOOL          bColorTransform;
          MI_FB_ColorFmt_e eColorFmt;
          MI_U16           u16Width;
          MI_U16           u16Height;
      } MI_FB_Compression_t
      
    • 成员

      成员名称 描述 支持情况
      bEnable compression 使能标识。 TRUE:使能; FALSE:不使能。 支持
      bBlockSplit block split 使能标识。 TRUE:使能; FALSE:不使能。 支持
      bColorTransform color transform 使能标识。 TRUE:使能; FALSE:不使能。 支持
      eColorFmt 像素格式 支持
      u16Width 压缩宽度 支持
      u16Height 压缩高度 支持
    • 相关数据类型及接口

      MI_FB_GetCompressionInfo

      MI_FB_SetCompressionInfo


    4. 错误码


    FB API 错误码如表4-1所示:

    表4-1

    错误代码 宏定义 描述
    0x0 MI_SUCCESS 成功
    0xA00A2001 MI_ERR_FB_INVALID_DEVID 无效设备号
    0xA00A2003 MI_ERR_FB_INVALID_PARAM 非法参数
    0xA00A2004 MI_ERR_FB_EXIST 重复操作
    0xA00A2005 MI_ERR_FB_UNEXIST 目标不存在
    0xA00A2006 MI_ERR_FB_NULL_PTR 空指针异常
    0xA00A2007 MI_ERR_FB_NOT_CONFIG 该功能没有配置
    0xA00A2008 MI_ERR_FB_NOT_SUPPORT 不支持操作
    0xA00A200C MI_ERR_FB_NOMEM 内存不足
    0xA00A2011 MI_ERR_FB_BADADDR 错误地址
    0xA00A2013 MI_ERR_FB_BUSY 设备繁忙

    5. PROCFS介绍


    5.1. cat

    • 调试信息

      / # cat /proc/mi_modules/mi_fb/mi_fb0
      
      #####################################[ Start dump fb ]#####################################
      
      ==============================[ Start dump MI_FB module info ]==============================
      Frame buffer disp path: disable
      Frame buffer video path: disable
      
      default_reserved_mem_name: "fb"
      ===============================[ End dump MI_FB module info ]===============================
      
      ==========================================[ FB 0 ]==========================================
      Framebuffer id=SStar FB0
      open count:1
      fix.smem_start=0x1b600000    fix.smem_length=8519680
      fix.line_length=1024    colorFmt=ARGB1555
      xres=512    yres=300
      xres_virtual=512    yres_virtual=8320
      xoffset=0    yoffset=0
      Show=TRUE    Output Space=RGB
      ScreenLocation Info ==>    Pos=[512, 0]    Size=[512, 300]
      Alpha Info ==>    Channel=1    Invert=(null)    PreMultiplied=0    Plane=0
                        GlobalAlphaValue=0xff    Alpha0=0x0    Alpha1=0xff    PlaneAlpha=0x0
      ColorKey Info ==>    Enable=0    ColorKey Value=[0x0, 0x0, 0x0]
      -------------------------------------[ Dump Gop Info ]-------------------------------------
      Gop ID=2
      Gwin ID=0
      StretchWindow Info ==>    Pos=[0, 0]    Src=[1024, 600]    Dst=[1024, 600]
      Gwin Info ==>    Pos=[512, 0]    Size=[512, 300]    colorFmt=6    pitch=1024    phyAddr:0x1b600000
      Current timing=[1024, 600]
      
      -------------------------------------[ Dump Gop Info ]-------------------------------------
      Path=[34, 1, 0, 0]
      Gwin ID=7
      Canvas Info ==>    Pos=[0, 0]    Size=[960, 540]    colorFmt=0    Stride=1920    phyAddr=0x1a6fd200
      
      ++++++++++++++++++++++++++++++++++++++++[ CURSOR 0 ]++++++++++++++++++++++++++++++++++++++++
      Init=0    Show=FALSE
      Icon Size=[32, 32]
      Icon Pos=[128, 255]    Hotspot=[0, 0]
      Alpha Info ==>    Channel=1    Invert=(null)    PreMultiplied=0    Plane=0
                        GlobalAlphaValue=0x0    Alpha0=0x0    Alpha1=0xff    PlaneAlpha=0xff
      ColorKey Info ==>    Enable=0    ColorKey Value=[0x0, 0x0, 0x0]
      -------------------------------------[ Dump Gop Info ]-------------------------------------
      Gop ID=2
      Gwin ID=1
      StretchWindow Info ==>    Pos=[0, 0]    Src=[1024, 600]    Dst=[1024, 600]
      Gwin Info ==>    Pos=[128, 255]    Size=[32, 32]    colorFmt=0    pitch=64    phyAddr:0x1b700000
      
      ######################################[ End dump fb ]######################################
      
    • 调试信息分析

      记录当前Fbdev && Hwcursor的使用状况以及OSD图层属性、OSD device属性、Hwcursor属性,可以动态地获取到这些信息,方便调试和测试。

    • 参数说明

      参数 描述
      MI_FB module info Frame buffer disp path 是否支持叠加到视频预览路径
      Frame buffer video path 是否支持叠加到视频处理路径
      default_reserved_mem_name Bootlogo保留内存的名字
      MI_FB UI device info Framebuffer id Framebuffer设备ID
      open count 打开次数
      fix.smem_start Framebuffer物理地址
      fix.smem_length Framebuffer长度(unit: byte)
      fix.line_length Framebuffer行长(unit: byte)
      colorFmt Framebuffer颜色格式
      xres 可见分辨率宽度
      yres 可见分辨率高度
      xres_virtual 虚拟分辨率的宽度
      yres_virtual 虚拟分辨率的高度
      xoffset 可见分辨率到虚拟分辨率的x偏移量
      yoffset 可见分辨率到虚拟分辨率的y偏移量
      Show Framebuffer UI显示标志
      Output space 该图形层输出的颜色空间。取值:YUV表示输出YUV color space;RGB表示输出RGB color space。默认为YUV
      ScreenLocation Info Pos Framebuffer UI相对屏幕的起始位置
      Size Framebuffer UI宽高占屏幕的像素数
      Alpha Info Channel UI 透明度类型。取值:0表示全局透明度;1表示像素透明度
      Invert UI 透明度是否反转
      PreMultiplied UI 是否按照预乘数据alpha blending
      Plane UI 是否引入平面透明度
      GlobalAlphaValue 全局透明度
      Alpha0 ARGB1555格式下,当最高位为0时,像素实际的透明度
      Alpha1 ARGB1555格式下,当最高位为1时,像素实际的透明度
      PlaneAlpha 平面透明值
      ColorKey Info Enable Colorkey功能使能
      ColorKey value ColorKey 指定的颜色的RGB值
      MI_FB UI Gop info(叠加到视频预览单元) Gop ID 图层硬件ID
      Gwin ID 图层硬件显示窗口ID
      StretchWindow Info Pos Gop stretch窗口起始坐标
      Src Gop stretch窗口源尺寸
      Dst Gop stretch窗口目标尺寸
      Gwin Info Pos 图层硬件显示窗口起始坐标
      Size 图层硬件显示窗口尺寸
      colorFmt 图层硬件显示窗口颜色格式
      pitch 图层硬件显示窗口行长(unit: byte)
      phyAddr 图层硬件显示窗口首地址
      Current timing 屏幕分辨率
      MI_FB UI Rgn info(叠加到视频处理单元) Path 视频处理单元的[Modid, Devid, Chnid, OutPortid]
      Gwin ID 图层硬件显示窗口ID
      Canvas Info Pos UI相对屏幕的起始位置
      Size UI宽高占屏幕的像素数
      colorFmt UI颜色格式
      Stride UI行长(unit: byte)
      phyAddr UI起始地址
      MI_FB CURSOR device info Init 鼠标初始化标志
      Show 鼠标显示标志
      Icon Size 鼠标图标尺寸
      Icon Pos 鼠标图标起始位置
      Hotspot 鼠标热点位置,鼠标生效的位置相对鼠标图标的偏移位置
      Alpha Info Channel 鼠标透明度类型。取值:0表示全局透明度;1表示像素透明度
      Invert 鼠标透明度是否反转
      PreMultiplied 鼠标是否按照预乘数据alpha blending
      Plane 鼠标是否引入平面透明度
      GlobalAlphaValue 全局透明度
      Alpha0 ARGB1555格式下,当最高位为0时,像素实际的透明度
      Alpha1 ARGB1555格式下,当最高位为1时,像素实际的透明度
      PlaneAlpha 平面透明值
      ColorKey Info Enable Colorkey功能使能
      ColorKey value ColorKey 指定的颜色的RGB值
      MI_FB CURSOR Gop info Gop ID 鼠标图层硬件ID
      Cursor Gwin ID 鼠标图层硬件显示窗口ID
      StretchWindow Info Pos Gop stretch窗口起始坐标
      Src Gop stretch窗口源尺寸
      Dst Gop stretch窗口目标尺寸
      Gwin Info Pos 图层硬件显示窗口起始坐标
      Size 图层硬件显示窗口尺寸
      colorFmt 图层硬件显示窗口颜色格式
      pitch 图层硬件显示窗口行长(unit: byte)
      phyAddr 图层硬件显示窗口首地址


    5.2. echo

    功能
    打开或关闭 ui 层或 cursor 层
    命令 echo SHOW [Layer] [enable] > /proc/mi_modules/mi_fbx
    参数说明 [Layer] fb 层级 ,GUI:ui层;CURSOR:cursor 层
    [enable] on: 打开; off: 关闭
    举例 echo SHOW GUI on > /proc/mi_modules/mi_fb0
    显示 ui 层fb
    echo SHOW CURSOR off > /proc/mi_modules/mi_fb0
    关闭 cursor 层fb
    功能
    设置或取消PanDispley mask掩码
    命令 echo MASK_PAN [enable] > /proc/mi_modules/mi_fbx
    参数说明 [enable]] on: 设置; off: 取消
    举例 echo MASK_PAN on > /proc/mi_modules/mi_fb0
    设置 PanDispley mask掩码
    echo MASK_PAN off > /proc/mi_modules/mi_fb0
    取消 PanDispley mask掩码
    功能
    设置ui 层或 cursor 层Colorkey
    命令 echo COLORKEY [Layer] [enable] [R] [G] [B] > /proc/mi_modules/mi_fbx
    参数说明 [Layer] fb 层级 ,GUI:ui层;CURSOR:cursor 层
    [enable] 开启或关闭colorkey功能
    [Red] 红色分量 以16进制,ARGB888 格式表示
    [Green] 绿色分量 以16进制,ARGB888 格式表示
    [Blue] 蓝色分量 以16进制,ARGB888 格式表示
    举例 echo COLORKEY GUI on ff 00 00 > /proc/mi_modules/mi_fb0
    设置fb的ui 层Colorkey为红色
    功能
    Dump当前正在显示的鼠标图标
    命令 echo DUMP_CURSOR [filePath] > /proc/mi_modules/mi_fbx
    参数说明 filePath] dump 的路径
    举例 echo DUMP_CURSOR /mnt > /proc/mi_modules/mi_fb0
    dump cursor Icon到/mnt路径,文件名为CursorData.raw,用7yuv打开,宽高设置为128,128,格式按照cursor icon的格式设置即可显示Rawdata
    功能
    为ARGB1555格式的ui 层或 cursor 层设置pixel alpha
    命令 echo ALPHA01 [Layer] [alpha0] [alpha1] > /proc/mi_modules/mi_fbx
    参数说明 [Layer] fb 层级 ,GUI:ui层;CURSOR:cursor 层
    [Alpha0] alpha0 的数值
    [Alpha1] alpha1 的数值
    举例 echo ALPHA01 GUI 0xff 0 > /proc/mi_modules/mi_fb0
    设置ARGB1555 的 ui 层 alpha0 为0xff, alpha1 为0
    功能
    为ui 层或 cursor 层设置global alpha
    命令 echo GLOBAL_ALPHA [Layer] [GlobalAlpha] > /proc/mi_modules/mi_fbx
    参数说明 [Layer] fb 层级 ,GUI:ui层;CURSOR:cursor 层
    [GlobalAlpha] global alpha的数值
    举例 echo GLOBAL_ALPHA GUI 0xff > /proc/mi_modules/mi_fb0
    设置 ui 层 globle alpha为0xff