MI RGN API


REVISION HISTORY

Revision No.
Description
Date
3.0
  • Initial release
  • 12/04/2020
  • Added PROCFS introduction
  • 08/25/2021
  • Added chip information of Mochi
  • 02/16/2022
  • Added chip information of Maruko
  • 03/21/2022
  • Added chip information of Souffle
  • 02/13/2023
  • Refined procfs & Added error code description
  • 11/10/2023
  • Added chip information of Iford
  • 11/13/2023

    1. 概 述

    1.1. 模块说明

    区域管理模块参与SCL模块的内部流处理的一个环节。底层硬件模块支持是GOP(Graphic output path), 区域管理模块是利用 GOP 的特性抽象出来的一套软件接口,利用分时复用的原理使OSD(On-screen display)或者Cover贴到各个通道上。

    区域管理模块提供区域资源的控制管理功能,包括区域的创建、销毁、获取与设置区域属性、获取与设置区域的通道属性等。

    区域属性分为三种:

    1. cover

      • cover有两种模式

        1. 颜色模式,按照设定给一块区域做纯色遮挡,底层驱动只要知道显示的位置、大小和颜色即可,部分芯片只支持该模式;
        2. 马赛克模式,按照设定给一块区域打马赛克,底层驱动只要知道显示的位置、大小和马赛克块大小即可;
      • Cover根据区域类型可以分为矩形Cover和多边形Cover(最少3边形,最多6边形,只支持凸多边形),其中矩形Cover不额外消耗内存。

    2. osd,有些地方亦称为overlay,它同样可以贴在video显示的区域,这块区域用内存来描述显示的内容,所以这块内容可以做点对点画图操作,显示内存支持argb、位图两种格式,使用者可以根据实际的场景来选择所需要的格式。

    3. frame,按照设定在video的指定区域画上矩形框,底层驱动只要知道矩形框的位置大小、颜色以及线宽即可,不额外消耗内存。

    目前OSD可以支持的格式有ARGB1555、ARGB4444、ARGB8888、RGB565、I2、I4、I8,每个芯片支持的情况会有差异,下文会详细说明。暂不支持YUV格式。I2、I4、I8格式为位图格式,一个pixel的内存数据当作一个索引,通过索引能找到调色盘中的颜色数据,当前pixel显示的就是此颜色。

    通过实验,当设定了region显示之后,把SCL模块的输出dump成文件,通过工具就可以看到region的内容。

    OSD可以显示一张图片,COVER仅仅可以设定颜色,在同一通道上OSD的内容永远在FRAME之上,FRAME的内容永远在COVER之上。

    1.2. 流程框图

    1.3. 关键字说明

    • I2

      4色位图格式,用2个bit表示一个索引,因而有4种颜色,在调色盘中通过索引找到对应的颜色。

    • I4

      16色位图格式,与I2格式类似,不同的是用4个bit表示一个索引,因而有16种颜色。

    • I8

      256色位图格式,与I2格式类似,不同的是用8个bit表示一个索引,因而有256种颜色。

    • Palette

      位图的调色盘,由Alpha、Red、Green、Blue四个8bit变量表示一个pixel的颜色,一共有256个颜色,对应0-255的索引序号。

    • OSD

      On-screen display的简称,用来显示一些文字、图片、以及人机交互的菜单等内容。

    • GOP

      Graphic output path的简称,可以理解为在video层之上的一个图形层。

    • MFF

      Cover + Frame 的统称

    1.4. RGN模块内存使用说明

    1.4.1. OSD内存使用说明

    为确保OSD能稳定输出在video上,RGN根据硬件/用户的使用情况为每个OSD分配一到多张buffer, 中心思想为防止对正在用于硬件显示的buffer做写操作,从而造成OSD闪烁或撕裂的现象。

    可能会增加RGN内存占用的情况主要有以下3种:

    1. 上层刷新OSD(调用MI_RGN_SetBitMap/MI_RGN_GetCanvasInfo/MI_RGN_UpdateCanvas)的速度变快;
    2. 一个OSD被同时叠加到的通道数增多;
    3. 一个通道同时叠加的OSD数超过硬件最大layer(每个芯片支持的硬件最大layer数见 表2-1:Tiramisu芯片信息表2-2:Muffin芯片信息表2-3:Mochi芯片信息表2-4:Maruko芯片信息表2-5:Opera芯片信息表2-6:Souffle芯片信息)。

    下表列出了几种常见的场景下buffer使用情况:

    场景描述 OSD个数 OSD刷新速度 t/次 通道个数 buffer使用
    1个OSD贴到1个通道,只贴一次不刷新 1 NA 1 1
    1个OSD贴到1个通道,慢速刷新 1 1s 1 2
    1个OSD贴到1个通道,快速刷新 1 30ms 1 3
    1个OSD贴到n个通道,只贴一次不刷新 1 NA n 1
    1个OSD贴到n个通道,慢速刷新 1 1s n 2
    1个OSD贴到n个通道,快速刷新 1 30ms n [3, 2n+1]
    m个OSD贴到1个通道,只贴一次不刷新 m <= L NA 1 m
    m个OSD贴到1个通道,慢速刷新 m <= L 1s 1 2m
    m个OSD贴到1个通道,快速刷新 m <= L 30ms 1 3m
    m个OSD贴到n个通道,只贴一次不刷新 m <= L NA n m
    m个OSD贴到n个通道,慢速刷新 m <= L 1s n 2m
    m个OSD贴到n个通道,快速刷新 m <= L 30ms n [3m, m(2n+1)]
    m个OSD贴到n个通道,只贴一次不刷新 m > L NA n L + n(m - L)
    m个OSD贴到n个通道,慢速刷新 m > L 1s n 2L + 2n(m - L)
    m个OSD贴到n个通道,快速刷新 m > L 30ms n [3L, L(2n+1)] + 3n(m–L)

    注:

    • L 表示硬件最大 layer 数;
    • 形如[3, 2n+1]表示闭区间,buffer个数为此区间内的某个值(受系统调度影响,通常不会到达最大值)。
    • 以上buffer使用情况仅适用于用户不限定OSD buffer数量的情形,若通过MI_RGN_Create 设定最大OSD buffer数量,则最大OSD buffer数量以用户设定为准。

    1.4.2. Cover内存使用说明

    Cover按照区域类型,分为矩形Cover和多边形Cover,其中多边形Cover需要最少1张buffer,buffer长度=屏幕宽(向上16对齐)* 屏幕高 / 8(byte)。

    1.4.3. 反色内存使用说明

    反色AUTO模式下最少需要1张buffer,MANUAL模式下最少需要2张buffer,buffer长度=(屏幕宽/反色横向block长度)(向上16对齐)*(屏幕高/反色纵向block长度)(byte)。

    2. API 参考

    API名 功能
    MI_RGN_Init 初始化
    MI_RGN_DeInit 反初始化
    MI_RGN_Create 创建区域
    MI_RGN_Destroy 销毁区域
    MI_RGN_GetAttr 获取区域属性
    MI_RGN_SetBitMap 设置区域位图
    MI_RGN_AttachToChn 将区域叠加到通道上
    MI_RGN_DetachFromChn 将区域从通道中撤出
    MI_RGN_SetDisplayAttr 设置区域的通道显示属性
    MI_RGN_GetDisplayAttr 获取区域的通道显示属性
    MI_RGN_GetCanvasInfo 获取区域画布信息
    MI_RGN_UpdateCanvas 更新区域画布信息
    MI_RGN_SetColorInvertAttr 设置通道反色属性
    MI_RGN_GetColorInvertAttr 获取通道反色属性
    MI_RGN_GetLuma 获取通道亮度信息
    MI_RGN_InitDev 初始化rgn设备
    MI_RGN_DeInitDev 反初始化rgn设备

    2.1. MI_RGN_Init

    • 功能

      初始化。

    • 语法

      MI_S32 MI_RGN_Init(MI_U16 u16SocId, MI_RGN_PaletteTable_t *pstPaletteTable);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      pstPaletteTable 调色板指针。 输入
    • 返回值

      • MI_RGN_OK 成功。
      • MI_ERR_RGN_BUSY 已初始化。在支持多进程的分支中,该错误原因是多次调用API的参数不一致。
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件
    • 注意

      • I2 / I4 / I8 的图像格式是共用一份palette table,palette table只能在初始化时做一次,不可再次设置。
      • RGB 格式不会参考 palette。
      • Palette 的第 0 号成员为透明色,上层无法指定。
      • MI_RGN_Init 需要在其他使用到 RGN 的模块 Init 之前进行(如SCL)。
    • 举例

      MI_S32 s32Result = 0;
      MI_RGN_PaletteTable_t stPaletteTable;
      memset(&stPaletteTable, 0, sizeof(MI_RGN_PaletteTable_t));
      stPaletteTable.astElement[1].u8Alpha = 255;
      stPaletteTable.astElement[1].u8Red = 255;
      stPaletteTable.astElement[1].u8Green = 0;
      stPaletteTable.astElement[1].u8Blue = 0;
      stPaletteTable.astElement[2].u8Alpha = 255;
      stPaletteTable.astElement[2].u8Red = 0;
      stPaletteTable.astElement[2].u8Green = 255;
      stPaletteTable.astElement[2].u8Blue = 0;
      stPaletteTable.astElement[3].u8Alpha = 255;
      stPaletteTable.astElement[3].u8Red = 0;
      stPaletteTable.astElement[3].u8Green = 0;
      stPaletteTable.astElement[3].u8Blue = 255;
      ... ...
      stPaletteTable.astElement[255].u8Alpha = 255;
      stPaletteTable.astElement[255].u8Red = 128;
      stPaletteTable.astElement[255].u8Green = 128;
      stPaletteTable.astElement[255].u8Blue = 128;
      s32Result = MI_RGN_Init(0, &stPaletteTable);
      s32Result = MI_RGN_DeInit(0);
      
    • 相关主题

      MI_RGN_DeInit

    2.2. MI_RGN_DeInit

    • 功能

      反初始化。

    • 语法

      MI_S32 MI_RGN_DeInit(MI_U16 u16SocId);
      
    • 返回值

      • MI_RGN_OK 成功。
      • MI_ERR_RGN_BUSY 未初始化。
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件:libmi_rgn.so
    • 注意

      MI_RGN_DeInit需要在其他使用到RGN的模块Deinit之后进行(如SCL)。

    • 举例

      参见MI_RGN_Init 举例。

    • 相关主题

      MI_RGN_Init

    2.3. MI_RGN_Create

    • 功能

      创建区域。

    • 语法

      MI_S32 MI_RGN_Create(MI_U16 u16SocId, MI_RGN_HANDLE hHandle, MI_RGN_Attr_t *pstRegion);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      hHandle 区域句柄号。 必须是未使用的hHandle号
      取值范围:[0, MI_RGN_MAX_HANDLE]。
      输入
      pstRegion 区域属性指针。 输入
    • 返回值

      • MI_RGN_OK成功。
      • 非MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件
    • 注意

      • 该句柄由用户指定,意义等同于 ID 号。
      • 不支持重复创建。
      • 区域属性必须合法,具体约束参见MI_RGN_Attr_t
      • MI_RGN_Attr_t中指定Cover、Frame还是OSD
      • 区域属性指针不能为空。
      • 创建 Cover或Frame时,只需指定区域类型即可。其它的属性,如区域位置,层次等信息在调用 MI_RGN_AttachToChn 接口时指定。
      • 创建区域时,本接口只进行基本的参数的检查,例如:最小宽高,最大宽高等;当区域 attach 到通道上时, 根据各通道模块支持类型的约束条件进行更加有针对性的参数检查,譬如支持的像素格式等;
      • 本接口可以设置每个osd占用的buffer最大数量,在结构体MI_RGN_Attr_t中对 u16MaxCanvasNum 进行赋值操作。
      • 若 u16MaxCanvasNum 设置为 1, 表明允许并接受画面 tearing, 并且不会打印任何错误信息。
    • 举例

      MI_S32 s32Result = 0;
      MI_RGN_HANDLE hHandle = 0;
      MI_RGN_Attr_t stRegion;
      stRegion.eType = E_MI_RGN_TYPE_OSD;
      stRegion.stOsdInitParam.ePixelFmt = E_MI_RGN_PIXEL_FORMAT_RGB1555;
      stRegion.stOsdInitParam.stSize.u32Width = 40;
      stRegion.stOsdInitParam.stSize.u32Height = 40;
      stRegion.stOsdInitParam.u16MaxCanvasNum = 3;
      
      s32Result = MI_RGN_Create(0, hHandle, &stRegion);
      if (s32Result != MI_RGN_OK)
      {
          return s32Result;
      }
      
      s32Result = MI_RGN_GetAttr(0, hHandle, &stRegion);
      if (s32Result != MI_RGN_OK)
      {
          return s32Result;
      }
      
      s32Result = MI_RGN_Destroy(0, hHandle);
      if (s32Result != MI_RGN_OK)
      {
          return s32Result;
      }
      
    • 相关主题

      MI_RGN_Destroy MI_RGN_GetAttr

    2.4. MI_RGN_Destroy

    • 功能

      销毁区域。

    • 语法

      MI_S32 MI_REG_Destroy (MI_U16 u16SocId, MI_RGN_HANDLE hHandle);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      hHandle 区域句柄号。 取值范围:[0, MI_RGN_MAX_HANDLE) 输入
    • 返回值

      • MI_RGN_OK成功。
      • 非MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件:
    • 注意

      • 区域必须已创建。
    • 举例

      参见 MI_RGN_Create 举例。

    • 相关主题

      MI_RGN_Create

    2.5. MI_RGN_GetAttr

    • 功能

      获取区域属性。

    • 语法

      MI_S32 MI_RGN_GetAttr(MI_U16 u16SocId, MI_RGN_HANDLE hHandle, MI_RGN_Attr_t *pstRegion);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      hHandle 区域句柄号。 取值范围:[0, MI_RGN_MAX_HANDLE) 输入
      pstRegion 区域属性指针。 输出
    • 返回值

      • MI_RGN_OK成功。
      • 非 MI_RGN_OK失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件:
    • 注意

      • 区域必须已创建。
      • 区域属性指针不能为空。
    • 举例

      参见 MI_RGN_Create举例。

    2.6. MI_RGN_SetBitMap

    • 功能

      设置区域位图,即对区域进行位图填充。

    • 语法

      MI_S32 MI_RGN_SetBitMap(MI_U16 u16SocId, MI_RGN_HANDLE hHandle, MI_RGN_Bitmap_t *pstBitmap);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      hHandle 区域句柄号。 取值范围:[0, MI_RGN_MAX_HANDLE) 输入
      pstBitmap 位图属性指针。 输入
    • 返回值

      • MI_RGN_OK 成功。
      • MI_ERR_RGN_BUSY 失败,OSD的buffer已达最大值且当前所有buffer都正繁忙,请重复调用此API直到有buffer空闲。
      • 非 MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件:
    • 注意

      • 区域必须已创建。
      • 支持位图的大小和区域的大小可以不一致。
      • 位图从区域的(0,0)点开始加载。当位图比区域大时,将会自动将图像剪裁成区域大小。
      • 位图的像素格式必须和区域的像素格式一致。
      • 位图属性指针不能为空。
      • 支持多次调用。
      • 此接口只对 Overlay有效。
      • 调用了MI_RGN_GetCanvasInfo之后调用本接口无效, 除非MI_RGN_UpdateCanvas 更新画布生效后。
    • 举例

      MI_S32 s32Result = 0;
      MI_HANDLE hHandle = 0;
      MI_RGN_Bitmap_t stBitmap;
      MI_U32 u32FileSize = 200 * 200 * 2;
      MI_U8 *pu8FileBuffer = NULL;
      FILE *pFile = fopen("200X200.argb1555", "rb");
      if (pFile == NULL)
      {
          printf("open file failed \n");
          return -1;
      }
      pu8FileBuffer = (MI_U8*)malloc(u32FileSize);
      if (pu8FileBuffer == NULL)
      {
          printf("malloc failed fileSize=%d\n", u32FileSize);
          fclose(pFile);
          return -1;
      }
      memset(pu8FileBuffer, 0, u32FileSize);
      fread(pu8FileBuffer, 1,  u32FileSize, pFile);
      fclose(pFile);
      stBitmap.stSize.u32Width = 200;
      stBitmap.stSize.u32Height = 200;
      stBitmap.ePixelFormat = E_MI_RGN_PIXEL_FORMAT_RGB1555;
      stBitmap.pData = pu8FileBuffer;
      free(pu8FileBuffer);
      s32Result = MI_RGN_SetBitMap(0, hHandle, &stBitmap);
      

    2.7. MI_RGN_AttachToChn

    • 功能

      将区域叠加到通道上。

    • 语法

      MI_S32 MI_RGN_AttachToChn(MI_U16 u16SocId, MI_RGN_HANDLE hHandle,
                                  MI_RGN_ChnPort_t* pstChnPort,
                                  MI_RGN_ChnPortParam_t *pstChnAttr);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      hHandle 区域句柄号。 取值范围:[0,MI_RGN_MAX_HANDLE) 输入
      pstChnPort 通道端口结构体指针。 输入
      pstChnAttr 区域通道显示属性指针。 输入
    • 返回值

      • MI_RGN_OK 成功。
      • 非MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件:
    • 注意

      • 区域必须已创建。
      • 通道结构体指针不能为空。
      • 区域通道显示属性指针不能为空。
      • 多个osd区域类叠加到同一个通道上,每个osd必须是同一个图像格式。
      • 并不是所有的通道上都有叠加region的能力,下表列出芯片差异。
      • COVER只有硬件layer. OSD支持软件layer,底层会用软件拼图实现。
      • OSD、Frame和COVER叠加到通道上对channel id不会有要求。
      • SCL进行rotate时不支持叠加OSD和COVER。
      • 叠加到通道上的OSD小于或等于硬件layer个数,则全部使用硬件layer,反之则会用软件拼图。

      以下表格中所列出的通道位置反映了芯片内部硬件上是否包含GOP、COVER、FRAME的硬件模块,并没有具体指明模块的设备id、通道id以及port id,软件API使用者需要结合各模块实际情况来确定实际的属性值,然后通过MI_RGN_ChnPort_t* pstChnPort设定给底层。

      • SCL对应MI_SCL模块,通常在初始化时绑定硬件SCL和软件的设备Id和output port id,具体要参考MI SCL API文档。
      • DISP对应MI_DISP模块,表格中的DISPx与MI_DISP模块的设备id绑定,只能指定设备Id,通道Id和port id需填0(bInputPort无效)。
      • JPE和VENC对应MI_VENC模块的不同Device(具体需参考MI VENC API文档),通道Id根据实际情况填写,port id需填0(bInputPort无效)。
      • Tiramisu

        Tiramisu

        • 该芯片的DISP_GOP用与给MI_FB模块显示UI,RGN只能在SCL上贴OSD。

        表2-1:Tiramisu芯片信息

        通道类型 OSD硬件Layer数 OSD反色 Frame数 Cover数 Mosaic模式 多边形Cover ARGB1555/ARGB4444/I2/I4/I8 ARGB8888/RGB565
        SCL_OUTPUT_PORT 8 NA NA 4 NA NA Y NA
      • Muffin

        Muffin

        • 该芯片DISP的GOP_CUR0用于给RGN显示OSD,其它用于给MI_FB模块显示UI和鼠标,层级关系如上图所示。

        表2-2:Muffin芯片信息

        通道类型 OSD硬件Layer数 OSD反色 Frame数 Cover数 Mosaic模式 多边形Cover ARGB1555/ARGB4444/I2/I4/I8 ARGB8888/RGB565
        SCL_OUTPUT_PORT 8 NA NA 4 NA NA Y NA
        VENC 8 NA NA NA NA NA Y NA
        JPE 8 NA NA NA NA NA Y NA
        DISP 1 NA NA NA NA NA Y NA
      • Mochi

        Mochi

        表2-3:Mochi芯片信息

        通道类型 OSD硬件Layer数 OSD反色 Frame数 Cover数 Mosaic模式 多边形Cover ARGB1555/ARGB4444/I2/I4/I8 ARGB8888/RGB565
        SCL_OUTPUT_PORT 8 NA NA 4 NA NA Y NA
        VENC 8 NA NA NA NA NA Y NA
        JPE 8 NA NA NA NA NA Y NA
        DISP 1 NA NA NA NA NA Y NA
      • Maruko

        Maruko

        表2-4:Maruko芯片信息

        通道类型 OSD硬件Layer数 OSD反色 Frame数 Cover数 Mosaic模式 多边形Cover ARGB1555/ARGB4444/I2/I4/I8 ARGB8888/RGB565
        SCL_OUTPUT_PORT 8 NA NA 4 NA NA Y Y
        VENC 8 NA NA NA NA NA Y NA
        JPE 8 NA NA NA NA NA Y NA
        DISP 1 NA NA NA NA NA Y Y
      • Opera

        Opera

        表2-5:Opera芯片信息

        通道类型 OSD硬件Layer数 OSD反色 Frame数 Cover数 Mosaic模式 多边形Cover ARGB1555/ARGB4444/I2/I4/I8 ARGB8888/RGB565
        SCL_OUTPUT_PORT 8 NA NA 4 NA NA Y Y
        VENC 8 NA NA NA NA NA Y NA
        JPE 8 NA NA NA NA NA Y NA
        DISP 1 NA NA NA NA NA Y NA
      • Souffle

        Souffle

        • 同一个通道颜色模式Cover和Frame的颜色最多只能各有16种,同一种颜色可以重复使用;
        • SCL Cover和Frame只能在同时attach到同一个SCL通道上;
        • 矩形Cover的Layer属性和多边形Cover的Layer属性分别计算,矩形Cover在多边形Cover之上;
        • 同一个通道的所有多边形Cover都必须是同一种类型,颜色模式Cover的颜色一致,马赛克模式Cover的block size一致。

        表2-6:Souffle芯片信息

        通道类型 OSD硬件Layer数 OSD反色 Frame数 Cover数 Mosaic模式 多边形Cover ARGB1555/ARGB4444/I2/I4/I8 ARGB8888/RGB565
        SCL_INPUT_PORT NA NA 32 32 Y Y NA NA
        SCL_OUTPUT_PORT 8 Y 32 32 Y Y Y Y
        VENC 8 Y 32 64 Y NA Y NA
        JPE 8 Y 32 64 Y NA Y NA
        DISP 8 NA NA NA NA NA Y Y

        表2-7:Mosaic 模式 block size 支持情况

        通道类型 block size 4 block size 8 block size 16 block size 32 block size 64 block size 128 block size 256
        SCL_INPUT_PORT N Y Y Y Y Y Y
        SCL_OUTPUT_PORT N Y Y Y Y Y Y
        VENC Y Y Y Y N N N
        JPE Y Y Y Y N N N
      • Iford

        Iford

        • 同一个通道颜色模式Cover和Frame的颜色最多只能各有16种,同一种颜色可以重复使用;
        • 该芯片中DISP 实现OSD的GOP硬件和MI_FB中显示UI的硬件是同一个,同时只能使用其中一个。

        表2-8:Iford芯片信息

        通道类型 OSD硬件Layer数 OSD反色 Frame数 Cover数 Mosaic模式 多边形Cover ARGB1555/ARGB4444/I2/I4/I8 ARGB8888/RGB565
        SCL_OUTPUT_PORT NA NA NA 4 NA NA NA NA
        VENC 4 NA 32 NA NA NA Y NA
        JPE 4 NA 32 NA NA NA Y NA
        DISP 4 NA NA NA NA NA Y Y
    • 举例

      MI_S32 s32Result = 0;
      MI_RGN_HANDLE hHandle = 0;
      MI_RGN_ChnPort_t stChnPort;
      MI_RGN_ChnPortParam_t stChnAttr;
      
      memset(stChnPort, 0, sizeof(MI_RGN_ChnPort_t));
      memset(stChnAttr, 0, sizeof(MI_RGN_ChnPortParam_t));
      stChnPort.eModId = E_MI_MODULE_ID_SCL;
      stChnPort.s32DevId = 0;
      stChnPort.s32ChnId = 0;
      stChnPort.s32PortId = 0;
      stChnPort.bInputPort = FALSE;
      stChnAttr.bShow = TRUE;
      stChnAttr.u32Layer = 0;
      stChnAttr.stCoverChnPort.eAreaType = E_MI_RGN_AREA_TYPE_RECT;
      stChnAttr.stCoverChnPort.stRect.s32X = 0;
      stChnAttr.stCoverChnPort.stRect.s32Y = 0;
      stChnAttr.stCoverChnPort.stRect.u32Width = 1024;
      stChnAttr.stCoverChnPort.stRect.u32Height = 1024;
      stChnAttr.stCoverChnPort.eMode = E_MI_RGN_COVER_MODE_COLOR;
      stChnAttr.stCoverChnPort.u32Color = 0xffff00;
      
      s32Result = MI_RGN_AttachToChn(0, hHandle, &stChnPort, &stChnAttr);
      if (s32Result != MI_RGN_OK)
      {
          return s32Result;
      }
      
      s32Result = MI_RGN_DetachFromChn(0, hHandle, &stChnPort);
      if (s32Result != MI_RGN_OK)
      {
          return s32Result;
      }
      
    • 相关主题

      MI_RGN_DetachFromChn

    2.8. MI_RGN_DetachFromChn

    • 功能

      将区域从通道中撤出。

    • 语法

      MI_S32 MI_RGN_DetachFromChn(MI_U16 u16SocId, MI_RGN_HANDLE hHandle, MI_RGN_ChnPort_t *pstChnPort);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      hHandle 区域句柄号。 取值范围:[0, MI_RGN_MAX_HANDLE) 输入
      pstChnPort 通道端口结构体指针。 输入
    • 返回值

      • MI_RGN_OK成功。
      • 非MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件:
    • 注意

      • 区域必须已创建。
      • 通道结构体指针不能为空。
      • 被叠加区域的通道或组(如 VENC,SCL 等)销毁前,需要调用本接口将区域
      • 从通道或组中撤出。
    • 举例

      参见 MI_RGN_AttachToChn举例。

    • 相关主题

      MI_RGN_AttachToChn

    2.9. MI_RGN_SetDisplayAttr

    • 功能

      设置区域的通道显示属性。

    • 语法

      MI_S32 MI_RGN_SetDisplayAttr(MI_U16 u16SocId, MI_RGN_HANDLE hHandle,
                                      MI_RGN_ChnPort_t *pstChnPort,
                                      MI_RGN_ChnPortParam_t *pstChnPortAttr);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      hHandle 区域句柄号。 取值范围:[0, MI_RGN_MAX_HANDLE) 输入
      pstChnPort 通道端口结构体指针。 输入
      pstChnPortAttr 区域通道端口显示属性指针。 输入
    • 返回值

      • MI_RGN_OK成功。
      • 非MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件:
    • 注意

      • 区域必须已创建。
      • 建议先获取属性,再设置。
      • 通道结构体指针不能为空。
      • 区域通道显示属性指针不能为空。
      • 区域必须先叠加到通道上。
    • 举例

      MI_S32 s32Result = 0;
      MI_RGN_HANDLE hHandle = 0;
      MI_RGN_ChnPort_t stChnPort;
      MI_RGN_ChnPortParam_t stChnAttr;
      
      stChnPort.eModId = E_MI_MODULE_ID_SCL;
      stChnPort.s32DevId = 0;
      stChnPort.s32ChnId = 0;
      stChnPort.s32PortId = 0;
      stChnPort.bInputPort = FALSE;
      s32Result = MI_RGN_GetDisplayAttr(0, hHandle, &stChnPort, &stChnAttr);
      if (s32Result != MI_RGN_OK)
      {
          return s32Result;
      }
      
      stChnAttr.bShow = TRUE;
      stChnAttr.stCoverPara.u32Layer = 0;
      stChnAttr.stCoverChnPort.eAreaType = E_MI_RGN_AREA_TYPE_RECT;
      stChnAttr.stCoverChnPort.stRect.s32X = 0;
      stChnAttr.stCoverChnPort.stRect.s32Y = 0;
      stChnAttr.stCoverChnPort.stRect.u32Width = 1024;
      stChnAttr.stCoverChnPort.stRect.u32Height = 1024;
      stChnAttr.stCoverChnPort.eMode = E_MI_RGN_COVER_MODE_COLOR;
      stChnAttr.stCoverChnPort.u32Color = 0xffff00;
      
      s32Result = MI_RGN_SetDisplayAttr(0, hHandle, &stChnPort, &stChnAttr);
      if (s32Result != MI_RGN_OK)
      {
          return s32Result;
      }
      
    • 相关主题

      MI_RGN_GetDisplayAttr

    2.10. MI_RGN_GetDisplayAttr

    • 功能

      获取区域的通道显示属性。

    • 语法

      MI_S32 MI_RGN_GetDisplayAttr(MI_U16 u16SocId, MI_RGN_HANDLE hHandle,
                                      MI_RGN_ChnPort_t *pstChnPort,
                                      MI_RGN_ChnPortParam_t *pstChnPortAttr);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      hHandle 区域句柄号。 取值范围:[0, MI_RGN_MAX_HANDLE) 输入
      pstChnPort 通道端口结构体指针。 输入
      pstChnPortAttr 区域通道端口显示属性指针。 输出
    • 返回值

      • MI_RGN_OK成功。
      • 非MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件:
    • 注意

      • 区域必须已创建。
      • 通道结构体指针不能为空。
      • 区域通道显示属性指针不能为空。
    • 举例

      请参见MI_RGN_SetDisplayAttr 的举例。

    • 相关主题

      MI_RGN_SetDisplayAttr

    2.11. MI_RGN_GetCanvasInfo

    • 功能

      获取区域的显示画布信息。

    • 语法

      MI_S32 MI_RGN_GetCanvasInfo(MI_U16 u16SocId, MI_RGN_HANDLE hHandle,
                                  MI_RGN_CanvasInfo_t* pstCanvasInfo);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      hHandle 区域句柄号。 取值范围:[0, MI_RGN_MAX_HANDLE) 输入
      pstCanvasInfo 区域显示画布信息。 输出
    • 返回值

      • MI_RGN_OK 成功。
      • MI_ERR_RGN_BUSY 失败,说明在MI_RGN_Create接口中设置 canvas 最大 buffer 数量较小,此时所有 canvas buffer 都已经被硬件占用,为防止画面 tearing,MI_RGN不允许此时更新OSD buffer直到有buffer空闲,可以选择重复调用此接口,等待硬件放弃占用 buffer;或者在调用MI_RGN_Create接口处将设定参数 u16MaxCanvasNum 调大一些。
      • MI_ERR_RGN_EXIST 失败,说明此OSD贴的通道中存在OSD拼图情况且其它OSD已经获取了画布。
      • 非 MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件:
    • 注意

      • 区域必须已创建。
      • 本接口与MI_RGN_SetBitMap功能类似,主要用于overlay类型导入位图数据。本接口相对于MI_RGN_SetBitMap接口,用户可以直接更新显示内部画布数据,节省一次内存拷贝和一张画布内存。
      • 本接口用于获取区域对应的画布信息,在得到画布地址之后,用户可直接对画布进行操作,譬如:将bmp数据直接填写到该画布中。然后通过调用MI_RGN_UpdateCanvas接口,更新显示画布数据。
      • 本接口与MI_RGN_SetBitMap接口互斥。如果已经使用了本接口,那么在调用MI_RGN_UpdateCanvas 前,调用MI_RGN_SetBitMap不生效。
      • 在同一个通道上,如果存在OSD拼图的情况,同时只允许有一个OSD拿到画布,直到该OSD调用MI_RGN_UpdateCanvas,其它OSD调用MI_RGN_SetBitMapMI_RGN_GetCanvas都会失败。不拼图时不存在该限制。
    • 举例

      MI_RGN_HANDLE hHandle;
      MI_RGN_Attr_t stRegion;
      MI_RGN_CanvasInfo_t stCanvasInfo;
      
      hHandle = 10;
      stRegion.eType = E_MI_RGN_TYPE_OSD;
      stRegion.stOsdInitParam.ePixelFmt = E_MI_RGN_PIXEL_FORMAT_ARGB1555;
      stRegion.stOsdInitParam.stSize.u32Width = 100;
      stRegion.stOsdInitParam.stSize.u32Height = 100;
      stRegion.stOsdInitParam.u16MaxCanvasNum = 3;
      if (MI_RGN_OK != MI_RGN_Create(0, hHandle, &stRegion))
      {
          printf("Create handle error!\n");
          return -1;
      }
      FILE *pFile = fopen("100X100.argb1555", "rb");
      if (pFile == NULL)
      {
          printf("open file failed \n");
          MI_RGN_Destroy(0, hHandle);
          return -1;
      }
      if (MI_RGN_GetCanvas(0, hHandle, &stCanvasInfo) != MI_RGN_OK)
      {
          return s32Result;
      }
      
      for (int i = 0; i < 100; i++)
      {
          fread((MI_U8*)stCanvasInfo.virtAddr + i * stCanvasInfo.u32Stride, 1, 100 * 2, pFile);
      }
      fclose(pFile);
      if (MI_RGN_UpdateCanvas(0, hHandle) != MI_RGN_OK)
      {
          return s32Result;
      }
      
    • 相关主题

      MI_RGN_UpdateCanvas

    2.12. MI_RGN_UpdateCanvas

    • 功能

      更新显示画布,若画布有叠加到通道上则更新显示画布,若没有叠加到通道,则在执行叠加操作后才会在通道上显示出画布的内容。

    • 语法

      MI_S32 MI_RGN_UpdateCanvas(MI_U16 u16SocId, MI_RGN_HANDLE hHandle);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      hHandle 区域句柄号。 取值范围:[0, MI_RGN_MAX_HANDLE) 输入
    • 返回值

      • MI_RGN_OK 成功。
      • MI_ERR_RGN_NOT_PERM 失败,使用该handle调用该接口之前没有调用MI_RGN_GetCanvasInfo
      • 非 MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件:
    • 注意

      • 区域必须已创建。
      • 本接口配合MI_RGN_GetCanvasInfo使用。主要用于画布内存数据更新之后,进行画布切换显示。
      • 本接口必须与MI_RGN_GetCanvasInfo成对调用, 同一个handle先执行MI_RGN_GetCanvasInfo获取画布的内存指针,待绘图操作完成后执行本接口。
      • 如果通道上存在OSD拼图,那么同时只能允许一个OSD获取画布。当多个handle叠加到同一个通道上显示,并且都会使用MI_RGN_GetCanvasInfo及本接口进行绘图操作,在这个通道上的所有绘图操作可以在同一个线程上执行;若在不同线程上,必须使用锁保护起来,否则有可能出现osd不刷新的问题。
      • 以上多线程的情况下锁的使用详细说明如下:

        rgn 的 handle 假设有 handle0 和 handle1 都贴到同一个通道上

        分别两个线程

        handle0 T0_0 = getcanvas T0_1 = update handle1 T1_0 = getcanvas T1_1 = update

        按照时间T的顺序执行

        有问题的情况:T0_0 -> T1_0 -> T0_1 -> T1_1,并伴随底层error的打印:“Front buf state error!!!”。

        加mutex后,能够正常。调整后的时序:lock-> T0_0 -> T0_1 -> unlock -> lock -> T1_0 -> T1_1 -> unlock

    • 举例

      请参见MI_RGN_GetCanvasInfo的举例。

    • 相关主题

      MI_RGN_GetCanvasInfo

    2.13. MI_RGN_SetColorInvertAttr

    • 功能

      设置区域的通道反色属性。

    • 语法

      MI_S32 MI_RGN_SetColorInvertAttr(MI_U16 u16SocId, MI_RGN_ChnPort_t *pstChnPort, MI_RGN_ColorInvertAttr_t *pstColorInvertAttr);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      pstChnPort 通道端口结构体指针。 输入
      pstColorInvertAttr 通道反色属性 输入
    • 返回值

      • MI_RGN_OK 成功。
      • 非MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h
      • 库文件
    • 注意

      • 反色作用区域是整个通道,整个屏幕按照宽为eBlkSizeHori、高为eBlkSizeVert的矩形为单位分成块,屏幕右侧和下侧不足块宽和高的像素不参与反色,同一个块内反色属性一致;
      • 反色作用的区域仅包括OSD的区域。
      • 反色有两种工作模式:
        • “AUTO”模式,硬件直接通过块算出的亮度信息和用户设置的阈值对比决定是否反色。
        • “MANUAL”模式,用户修改通过API MI_RGN_GetLuma获取的buffer对应块的值,手动选择需要反色的块。
      • 在“AUTO”模式下,用户可以通过阈值参数来控制反色的灵敏度:
        • 当前帧屏幕亮度大于(u8ThresholdHigh / 2)时,该块反色;
        • 当前帧屏幕亮度小于(u8ThresholdLow / 2)时,该块不反色;
        • 否则,上一帧该块反色则当前帧也反色,上一帧该块不反色则当前帧也不反色。
      • 在“MANUAL”模式下,亮度信息buffer中每一个byte代表一个块。

        • 其中bit[6:0]是该block中所有的像素亮度的平均值左移一位得到的;bit[7]是这个块的反色结果,1代表有反色,0代表没有反色。
        • 获取亮度信息buffer后,用户可以选择修改指定块对应byte的值。byte值等于0xff时代表需要反色,否则代表不需要反色。
      • Souffle

        Souffle_ci

        通道类型 block size 4 block size 8 block size16 block size 32 block size 64 block size 128 block size 256
        SCL_OUTPORT NA NA NA Y Y Y Y
        VENC NA NA NA Y Y Y Y
        JPE NA NA NA Y Y Y Y
    • 举例

      MI_S32 s32Result = MI_RGN_OK;
      MI_RGN_ChnPort_t stChnPort;
      MI_RGN_ColorInvertAttr_t stColorInvertAttr;
      memset(&stChnPort, 0, sizeof(MI_RGN_ChnPort_t));
      memset(&stColorInvertAttr, 0, sizeof(MI_RGN_ColorInvertAttr_t));
      stChnPort.eModId = E_MI_MODULE_ID_SCL;
      stChnPort.s32DevId = 1;
      stChnPort.s32ChnId = 0;
      stChnPort.s32PortId = 0;
      stChnPort.bInputPort = FALSE;
      stColorInvertAttr.bEnable = TRUE;
      stColorInvertAttr.eWorkMode = E_MI_RGN_COLOR_INVERT_WORK_MODE_AUTO;
      stColorInvertAttr.eBlkSizeHori = E_MI_RGN_BLOCK_SIZE_32;
      stColorInvertAttr.eBlkSizeVert = E_MI_RGN_BLOCK_SIZE_32;
      stColorInvertAttr.u8ThresholdHigh = 0x0;
      stColorInvertAttr.u8ThresholdLow = 0x0;
      s32Result = MI_RGN_SetColorInvertAttr(0, &stChnPort, &stColorInvertAttr);
      if (MI_RGN_OK != s32Result)
      {
          return s32Result;
      }
      s32Result = MI_RGN_GetColorInvertAttr(0, &stChnPort, &stColorInvertAttr);
      if (MI_RGN_OK != s32Result)
      {
          return s32Result;
      }
      
    • 相关主题

      MI_RGN_GetColorInvertAttr

    2.14. MI_RGN_GetColorInvertAttr

    • 功能

      获取区域的通道反色属性。

    • 语法

      MI_S32 MI_RGN_GetColorInvertAttr(MI_U16 u16SocId, MI_RGN_ChnPort_t *pstChnPort, MI_RGN_ColorInvertAttr_t *pstColorInvertAttr);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      pstChnPort 通道端口结构体指针。 输入
      pstColorInvertAttr 通道反色属性 输出
    • 返回值

      • MI_RGN_OK 成功。
      • 非MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h
      • 库文件
    • 注意

      • 通道结构体指针不能为空。
      • 区域通道反色属性指针不能为空。
    • 举例

      请参见MI_RGN_SetColorInvertAttr 的举例。

    • 相关主题

      MI_RGN_SetColorInvertAttr

    2.15. MI_RGN_GetLuma

    • 功能

      获取区域的通道的屏幕亮度信息。

    • 语法

      MI_S32 MI_RGN_GetLuma(MI_U16 u16SocId, MI_RGN_ChnPort_t *pstChnPort, MI_RGN_LumaInfo_t *pstLuma);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      pstChnPort 通道端口结构体指针。 输入
      pstLuma 通道屏幕亮度信息 输出
    • 返回值

      • MI_RGN_OK 成功。
      • MI_ERR_RGN_NOBUF 失败,当前通道无有效的亮度信息。
      • 非MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h
      • 库文件
    • 注意

      • 反色功能必须已经打开而且工作模式必须是“MANUAL”模式。可以重复调用,每次调用能够获取当前屏幕最新的亮度信息。
      • 通道结构体指针不能为空。
      • 区域通道屏幕亮度信息不能为空。
    • 举例

      // 该通道反色属性为Manual mode
      MI_S32 s32Result = MI_RGN_OK;
      MI_RGN_ChnPort_t stChnPort;
      MI_RGN_LumaInfo_t stLuma;
      MI_RGN_ColorInvertAttr_t stColorInvertAttr;
      memset(&stChnPort, 0, sizeof(MI_RGN_ChnPort_t));
      memset(&stColorInvertAttr, 0, sizeof(MI_RGN_ColorInvertAttr_t));
      stChnPort.eModId = E_MI_MODULE_ID_SCL;
      stChnPort.s32DevId = 1;
      stChnPort.s32ChnId = 0;
      stChnPort.s32PortId = 0;
      stChnPort.bInputPort = FALSE;
      s32Result = MI_RGN_GetLuma(0, &stChnPort, &stLuma);
      if (MI_RGN_OK != s32Result)
      {
          return s32Result;
      }
      char *pAddr = stLuma.virtAddr;
      for (int y = 0; y < stLuma.stSize.u32Height; y++)
      {
          for (int x = 0; x < stLuma.stSize.u32Width; x++)
          {
              if (pAddr[y * stLuma.u32Stride + x] > 0x128)
              {
                  pAddr[y * stLuma.u32Stride + x] = 0xff;
              }
          }
      }
      s32Result = MI_RGN_GetColorInvertAttr(0, &stChnPort, &stColorInvertAttr);
      if (MI_RGN_OK != s32Result)
      {
          return s32Result;
      }
      stColorInvertAttr.bApplyMap = TRUE;
      s32Result = MI_RGN_SetColorInvertAttr(0, &stChnPort, &stColorInvertAttr);
      if (MI_RGN_OK != s32Result)
      {
          return s32Result;
      }
      
    • 相关主题

      MI_RGN_SetColorInvertAttr

    2.16. MI_RGN_InitDev

    • 功能

      初始化RGN设备。

    • 语法

      MI_S32 MI_RGN_InitDev(MI_U16 u16SocId, MI_RGN_InitParam_t *pstInitParam);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
      pstInitParam 设备初始化参数 输入
    • 返回值

      • MI_RGN_OK 成功。
      • 非MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件
    • 注意

      • 此接口在Version 2.08以上版本推荐使用,用于替换原有MI_RGN_Init接口。

    2.17. MI_RGN_DeInitDev

    • 功能

      反初始化RGN设备。

    • 语法

      MI_S32 MI_RGN_DeInitDev(MI_U16 u16SocId);
      
    • 形参

      参数名称 参数含义 输入/输出
      s32SocId 芯片ID,用于级联场景。 输入
    • 返回值

      • MI_RGN_OK 成功。
      • 非MI_RGN_OK 失败,参照返回值
    • 依赖

      • 头文件:mi_sys.h、mi_rgn.h。
      • 库文件
    • 注意

      • 此接口在Version 2.08以上版本推荐使用,用于替换原有MI_RGN_DeInit接口。

    3. RGN 数据类型

    视频前处理相关数据类型、数据结构定义如下:

    数据类型 定义
    MI_RGN_MAX_HANDLE 定义区域的最大句柄数
    MI_RGN_MAX_PALETTE_TABLE_NUM 颜色表最大元素个数
    MI_RGN_MAX_PALETTE_TABLE_NUM 颜色表最大元素个数
    MI_RGN_I2_PALETTE_INDEX_MAX 定义像素格式为I2时palette index的最大值
    MI_RGN_I4_PALETTE_INDEX_MAX 定义像素格式为I4时palette index的最大值
    MI_RGN_POLY_VERTEX_MIN 定义多边形顶点最小值
    MI_RGN_POLY_VERTEX_MAX 定义多边形顶点最大值
    MI_RGN_HANDLE 定义区域句柄
    MI_RGN_Type_e 定义区域类型
    MI_RGN_PixelFormat_e RGB or Index格式
    MI_RGN_AlphaMode_e 设定Osd Alpha显示模式
    MI_RGN_BlockSize_e 定义Mosaic或者反色的块大小
    MI_RGN_CoverMode_e 定义Cover的模式
    MI_RGN_AreaType_e 定义区域的类型
    MI_RGN_ColorInvertWorkMode_e 定义反色的工作模式
    MI_RGN_Size_t 大小信息
    MI_RGN_OsdAlphaAttr_t 定义Osd Alpha属性的结构体
    MI_RGN_OsdInitParam_t 定义Osd区域属性结构体
    MI_RGN_PaletteElememt_t 定义颜色元素
    MI_RGN_PaletteTable_t 定义颜色表
    MI_RGN_Attr_t 定义区域类型结构体
    MI_RGN_Bitmap_t 定义位图图像信息结构
    MI_RGN_ChnPort_t 定义模块设备通道结构体
    MI_RGN_Point_t 定义坐标信息结构体
    MI_RGN_Rect_t 定义矩形区域结构体
    MI_RGN_Poly_t 定义多边形区域结构体
    MI_RGN_CoverColorAttr_t 定义颜色模式Cover的属性
    MI_RGN_CoverMosaicAttr_t 定义马赛克模式Cover的属性
    MI_RGN_CoverChnPortParam_t 定义遮挡区域的通道显示属性
    MI_RGN_FrameChnPortParam_t 定义矩形框区域的通道显示属性
    MI_RGN_OsdChnPortParam_t 定义OSD区域的通道显示属性
    MI_RGN_OsdArgb1555Alpha_t Argb1555格式的前景、背景Alpha设定
    MI_RGN_AlphaModePara_u 定义OSD Alpha Mode参数联合体
    MI_RGN_ChnPortParam_t 定义区域通道显示属性结构体
    MI_RGN_CanvasInfo_t 定义画布信息结构体
    MI_RGN_InitParam_t 定义RGN设备初始化参数
    MI_RGN_ColorInvertAttr_t 定义RGN反色属性参数
    MI_RGN_LumaInfo_t 定义获取的亮度信息

    3.1. MI_RGN_MAX_HANDLE

    • 说明

      定义区域的最大句柄。

    • 定义

      #define MI_RGN_MAX_HANDLE 1024
      

    3.2. MI_RGN_MAX_PALETTE_TABLE_NUM

    • 说明

      颜色表最大元素个数。

    • 定义

      #define MI_RGN_MAX_PALETTE_TABLE_NUM 256
      

    3.3. MI_RGN_I2_PALETTE_INDEX_MAX

    • 说明

      定义像素格式为I2时palette index的最大值。

    • 定义

      #define MI_RGN_I2_PALETTE_INDEX_MAX  63
      

    3.4. MI_RGN_I4_PALETTE_INDEX_MAX

    • 说明

      定义像素格式为I4时palette index的最大值。

    • 定义

      #define MI_RGN_I4_PALETTE_INDEX_MAX  15
      

    3.5. MI_RGN_POLY_VERTEX_MIN

    • 说明

      定义多边形顶点最小值。

    • 定义

      #define MI_RGN_POLY_VERTEX_MIN 3
      

    3.6. MI_RGN_POLY_VERTEX_MAX

    • 说明

      定义多边形顶点最大值。

    • 定义

      #define MI_RGN_POLY_VERTEX_MAX 6
      

    3.7. MI_RGN_HANDLE

    • 说明

      定义区域句柄。

    • 定义

      typedef MI_U32 MI_RGN_HANDLE;
      
    • 成员

      成员名称 描述
      MI_RGN_HANDLE 区域句柄。

    3.8. MI_RGN_Type_e

    • 说明

      定义区域类型。

    • 定义

      typedef enum
      {
          E_MI_RGN_TYPE_OSD = 0,
          E_MI_RGN_TYPE_COVER,
          E_MI_RGN_TYPE_FRAME,
          E_MI_RGN_TYPE_MAX
      } MI_RGN_Type_e;
      
    • 成员

      成员名称 描述
      E_MI_RNG_OSD 视频叠加区域。
      E_MI_RNG_COVER 视频遮挡区域。
      E_MI_RNG_FRAME 视频矩形框区域。

    3.9. MI_RGN_PixelFormat_e

    • 说明

      定义叠加区域属性结构体。

    • 定义

      typedef enum
      {
          E_MI_RGN_PIXEL_FORMAT_ARGB1555 = 0,
          E_MI_RGN_PIXEL_FORMAT_ARGB4444,
          E_MI_RGN_PIXEL_FORMAT_I2,
          E_MI_RGN_PIXEL_FORMAT_I4,
          E_MI_RGN_PIXEL_FORMAT_I8,
          E_MI_RGN_PIXEL_FORMAT_RGB565,
          E_MI_RGN_PIXEL_FORMAT_ARGB8888,
          E_MI_RGN_PIXEL_FORMAT_MAX
      } MI_RGN_PixelFormat_e;
      
    • 成员

      成员名称 描述
      E_MI_RGN_PIXEL_FORMAT_ARGB1555 ARGB1555格式
      E_MI_RGN_PIXEL_FORMAT_ARGB4444 ARGB4444格式
      E_MI_RGN_PIXEL_FORMAT_RGBI2 I2格式(两个bit表示,支援4种颜色,调色板查色)
      E_MI_RGN_PIXEL_FORMAT_RGBI4 I4格式(4个bit表示,支援16种颜色,调色板查色)
      E_MI_RGN_PIXEL_FORMAT_I8 I4格式(8个bit表示,支援256种颜色,调色板查色)
      E_MI_RGN_PIXEL_FORMAT_RGB565 RGB565
      E_MI_RGN_PIXEL_FORMAT_ARGB8888 ARGB8888格式
    • 注意事项

      • 每个chip支持的图像格式不一样,API中极大化地罗列出了所有的图像格式,但是有些格式存在API不支援的情况, 如果使用者需要chip支援的情况,请查看region procfs。使用命令: echo getmodcap [modid] > /proc/mi_modules/mi_rgn/mi_rgn0
      • 使用者无法设定index 0的调色盘,I2/I4/I8这些格式的index0被底层driver用作color key,表示这种颜色不被硬件识别, 所以当全0的数据叠加到通道上时,是不显示任何颜色的。
      • Colorkey的数值可以在procfs的getcap中查看,colorkey的数值是一个16bit整型,它的高8位和低8位是一样的值, 当使用Index类型的colorformat时,对内存数据进行memset 0即可让硬件不识别, 当使用RGB或者ARGB格式时无论使用的是何种排列,对内存数据进行memset(colorkey & 0xFF)数值即可。

    3.10. MI_RGN_AlphaMode_e

    • 说明

      设定Osd Alpha显示模式。

    • 定义

      typedef enum
      {
          E_MI_RGN_PIXEL_ALPHA = 0,
          E_MI_RGN_CONSTANT_ALPHA
      }MI_RGN_AlphaMode_e;
      
    • 成员

      成员名称 描述
      E_MI_RGN_PIXEL_ALPHA Osd显示每个pixel对应的alpha效果,例如argb1555/argb4444/arbg8888/i2/i4/i8这些格式都能支持pixel alpha,rgb565则不会生效。
      E_MI_RGN_CONSTANT_ALPHA Osd硬件会忽略图像格式中的alpha位,使用统一的值设定alpha值。例如rgb565能设定其透明度 。

    3.11. MI_RGN_BlockSize_e

    • 说明

      定义Mosaic或者反色的块大小。

    • 定义

      typedef enum
      {
          E_MI_RGN_BLOCK_SIZE_4 = 0,
          E_MI_RGN_BLOCK_SIZE_8,
          E_MI_RGN_BLOCK_SIZE_16,
          E_MI_RGN_BLOCK_SIZE_32,
          E_MI_RGN_BLOCK_SIZE_64,
          E_MI_RGN_BLOCK_SIZE_128,
          E_MI_RGN_BLOCK_SIZE_256,
          E_MI_RGN_BLOCK_SIZE_MAX
      } MI_RGN_BlockSize_e;
      
    • 成员

      成员名称 描述
      E_MI_RGN_BLOCK_SIZE_4 Mosaic block size为4x4或者反色block size为4。
      E_MI_RGN_BLOCK_SIZE_8 Mosaic block size为8x8或者反色block size为8。
      E_MI_RGN_BLOCK_SIZE_16 Mosaic block size为16x16或者反色block size为16。
      E_MI_RGN_BLOCK_SIZE_32 Mosaic block size为32x32或者反色block size为32。
      E_MI_RGN_BLOCK_SIZE_64 Mosaic block size为64x64或者反色block size为64。
      E_MI_RGN_BLOCK_SIZE_128 Mosaic block size为128x128或者反色block size为128。
      E_MI_RGN_BLOCK_SIZE_256 Mosaic block size为256x256或者反色block size为256。

    3.12. MI_RGN_CoverMode_e

    • 说明

      定义Cover的模式。

    • 定义

      typedef enum
      {
          E_MI_RGN_COVER_MODE_COLOR = 0,
          E_MI_RGN_COVER_MODE_MOSAIC,
          E_MI_RGN_COVER_MODE_MAX
      } MI_RGN_CoverMode_e;
      
    • 成员

      成员名称 描述
      E_MI_RGN_COVER_MODE_COLOR Cover 模式为颜色模式,表示Cover区域填充纯色块。
      E_MI_RGN_COVER_MODE_MOSAIC Cover 模式为马赛克模式,表示Cover区域填充马赛克。

    3.13. MI_RGN_AreaType_e

    • 说明

      定义区域的类型。

    • 定义

      typedef enum
      {
          E_MI_RGN_AREA_TYPE_RECT = 0,
          E_MI_RGN_AREA_TYPE_POLY,
          E_MI_RGN_AREA_TYPE_MAX
      } MI_RGN_AreaType_e;
      
    • 成员

      成员名称 描述
      E_MI_RGN_AREA_TYPE_RECT 区域类型为矩形,描述一个矩形的位置及大小。
      E_MI_RGN_AREA_TYPE_POLY 区域类型为多边形,描述一个多边形的顶点坐标。

    3.14. MI_RGN_ColorInvertWorkMode_e

    • 说明

      定义反色的工作模式。

    • 定义

      typedef enum
      {
          E_MI_RGN_COLOR_INVERT_WORK_MODE_AUTO = 0,
          E_MI_RGN_COLOR_INVERT_WORK_MODE_MANUAL,
          E_MI_RGN_COLOR_INVERT_WORK_MODE_MAX
      } MI_RGN_ColorInvertWorkMode_e;
      
    • 成员

      成员名称 描述
      E_MI_RGN_COLOR_INVERT_WORK_MODE_AUTO 反色工作模式为AUTO模式,根据用户设置的亮度阈值,自动对亮度满足条件的block的OSD做反色处理。
      E_MI_RGN_COLOR_INVERT_WORK_MODE_MANUAL 反色工作模式为MANUAL模式,用户可以手动获取屏幕每个block的亮度信息,手动更改反色map或者更新OSD canvas。

    3.15. MI_RGN_Size_t

    • 说明

      定义大小信息结构体。

    • 定义

      typedef struct MI_RGN_Size_s
      {
          MI_U32 u32Width;
          MI_U32 u32Height;
      } MI_RGN_Size_t;
      
    • 成员

      成员名称 描述
      u32Width 宽度
      u32Height 高度

    3.16. MI_RGN_OsdAlphaAttr_t

    • 说明

      定义Osd Alpha属性的结构体。

    • 定义

      typedef struct MI_RGN_OsdAlphaAttr_s
      {
          MI_RGN_AlphaMode_e eAlphaMode;
          MI_RGN_AlphaModePara_u stAlphaPara;
      }MI_RGN_OsdAlphaAttr_t;
      
    • 成员

      成员名称 描述
      eAlphaMode Osd Alpha的使用模式。
      stAlphaPara 模式对应的参数。

    3.17. MI_RGN_OsdInitParam_t

    • 说明

      定义叠加区域属性结构体。

    • 定义

      typedef struct MI_RGN_OsdInitParam_s
      {
          MI_RGN_PixelFormat_e ePixelFmt;
          MI_RGN_Size_t stSize;
          MI_U16 u16MaxCanvasNum;
      }MI_RGN_OsdInitParam_t;
      
    • 成员

      成员名称 描述
      ePixelFmt 像素格式。
      stSize 区域的宽高。 宽最大不超过3840 高最大不超过2160。
      u16MaxCanvasNum 每个osd占用的buffer最大数量。
    • 注意事项

      • ePixelFmt、stSize 只在调用MI_RGN_AttachToChn后, MI_RGN_DetachFromChn之前为静态变量。

      • 如果用户在调用MI_RGN_Create接口时,没有给u16MaxCanvasNum赋值, 此时u16MaxCanvasNum的值会为0,表明默认不限制 osd canvas 的数量,实际对应为最大值0xffff。

    3.18. MI_RGN_PaletteElement_t

    • 说明

      定义颜色元素

    • 定义

      typedef struct MI_RGN_PaletteElement_s
      {
          MI_U8 u8Alpha;
          MI_U8 u8Red;
          MI_U8 u8Green;
          MI_U8 u8Blue;
      }MI_RGN_PaletteElement_t;
      
    • 成员

      成员名称 描述
      u8Alpha 透明度
      u8Red 红色
      u8Green 绿色
      u8Blue 蓝色

    3.19. MI_RGN_PaletteTable_t

    • 说明

      定义颜色表。

    • 定义

      typedef struct MI_RGN_PaletteTable_s
      {
          MI_RGN_PaletteElement_t astElement[MI_RGN_MAX_PALETTE_TABLE_NUM];
      }MI_RGN_PaletteTable_t;
      
    • 成员

      成员名称 描述
      astElement 颜色元素

    3.20. MI_RGN_Attr_t

    • 说明

      定义区域属性结构体。

    • 定义

      typedef struct MI_RGN_Attr_s
      {
          MI_RGN_Type_e eType;
          MI_RGN_OsdInitParam_t stOsdInitParam;
      }MI_RGN_Attr_t;
      
    • 成员

      成员名称 描述
      eType 区域类型。
      stOsdInitParam osd区域属性。

    3.21. MI_RGN_Bitmap_t

    • 说明

      定义位图图像信息结构。

    • 定义

      typedef struct MI_RGN_Bitmap_s
      {
          MI_RGN_PixelFormat_e ePixelFormat;
          MI_RGN_Size_t stSize;
          union
          {
              MI_PTR   pData;
              MI_PTR64 _Reserved;
          };
      } MI_RGN_Bitmap_t;
      
    • 成员

      成员名称 描述
      ePixelFormat 位图像素格式
      stSize 位图宽度,高度,stride
      pData 位图数据
      _Reserved 为兼容 32 位与 64 位环境增加的保留数据,用户可忽略此字段。

    3.22. MI_RGN_ChnPort_t

    • 说明

      定义模块设备通道结构体。

    • 定义

      typedef struct MI_RGN_ChnPort_s
      {
          MI_ModuleId_e  eModId;
          MI_S32 s32DevId;
          MI_S32 s32ChnId;
          MI_S32 s32PortId;
          MI_S32 bInputPort;
      }MI_RGN_ChnPort_t;
      
    • 成员

      成员名称 描述
      eModId 模块号
      s32DevId 设备号
      s32ChnId 通道号
      s32PortId 输出端口id
      bInputPort 端口id是否为输入端口

    3.23. MI_RGN_Point_t

    • 说明

      定义坐标信息结构体。

    • 定义

      typedef struct MI_RGN_Point_s
      {
          MI_U32 u32X;
          MI_U32 u32Y;
      }MI_RGN_Point_t;
      
    • 成员

      成员名称 描述
      u32X 横坐标
      u32Y 纵坐标

    3.24. MI_RGN_Rect_t

    • 说明

      定义矩形区域结构体。

    • 定义

      typedef struct MI_RGN_Rect_s
      {
          MI_S32         s32X;
          MI_S32         s32Y;
          MI_U32         u32Width;
          MI_U32         u32Height;
      } MI_RGN_Rect_t;
      
    • 成员

      成员名称 描述
      s32X X坐标
      s32Y Y坐标
      u32Width 矩形宽
      u32Height 矩形高

    3.25. MI_RGN_Poly_t

    • 说明

      定义多边形区域结构体。

    • 定义

      typedef struct MI_RGN_Poly_s
      {
          MI_U8          u8VertexNum;
          MI_RGN_Point_t astCoord[MI_RGN_POLY_VERTEX_MAX];
      } MI_RGN_Poly_t;
      
    • 成员

      成员名称 描述
      u8VertexNum 多边形顶点数
      astCoord 多边形顶点坐标数组

    3.26. MI_RGN_CoverColorAttr_t

    • 说明

      定义颜色模式Cover的属性。

    • 定义

      typedef struct MI_RGN_CoverColorAttr_s
      {
          MI_U32 u32Color;
      } MI_RGN_CoverColorAttr_t;
      
    • 成员

      成员名称 描述
      u32Color Cover颜色值
    • 注意事项

      • u32Color代表Cover的显示颜色,其中bit[23:16]代表V分量,bit[15:8]代表Y分量,bit[7:0]代表U分量。

    3.27. MI_RGN_CoverMosaicAttr_t

    • 说明

      定义马赛克模式Cover的属性。

    • 定义

      typedef struct MI_RGN_CoverMosaicAttr_s
      {
          MI_RGN_BlockSize_e eBlkSize;
      } MI_RGN_CoverMosaicAttr_t;
      
    • 成员

      成员名称 描述
      eBlkSize 马赛克块大小

    3.28. MI_RGN_CoverChnPortParam_t

    • 说明

      定义遮挡区域的通道显示属性。

    • 定义

      typedef struct MI_RGN_CoverChnPortParam_s
      {
          MI_RGN_AreaType_e eAreaType;
          union
          {
              MI_RGN_Rect_t stRect;
              MI_RGN_Poly_t stPoly;
          };
          MI_RGN_CoverMode_e eMode;
          union
          {
              MI_RGN_CoverColorAttr_t  stColorAttr;
              MI_RGN_CoverMosaicAttr_t stMosaicAttr;
          };
      } MI_RGN_CoverChnPortParam_t;
      
    • 成员

      成员名称 描述
      eAreaTyp 区域类型
      stRect 矩形Cover位置及宽高信息,区域类型为E_MI_RGN_AREA_TYPE_RECT时有效
      stPoly 多边形Cover顶点数和顶点坐标信息,区域类型为E_MI_RGN_AREA_TYPE_POLY时有效
      eMode Cover模式
      stColorAttr 颜色模式Cover属性,Cover模式为E_MI_RGN_COVER_MODE_COLOR时有效
      stMosaicAttr 马赛克模式Cover属性,Cover模式为E_MI_RGN_COVER_MODE_MOSAIC时有效
    • 注意事项

      • Cover的坐标或者宽高信息都不是绝对值,而是基于最大值为8192的相对值。

        如:矩形Cover叠加到的目标通道宽高为1920x1080,要设定位置为[960,540]宽高为960x540的Cover,此处的stRect要设定为(4096,4096, 4096, 4096)。

    3.29. MI_RGN_FrameChnPortParam_t

    • 说明

      定义矩形框区域的通道显示属性。

    • 定义

      typedef struct MI_RGN_FrameChnPortParam_s
      {
          MI_RGN_Rect_t stRect;
          MI_U32        u32Color;
          MI_U8         u8Thickness;
      } MI_RGN_FrameChnPortParam_t;
      
    • 成员

      成员名称 描述
      stRect Frame位置及宽高信息
      u32Color 颜色,VYU444
      u8Thickness 框线宽度
    • 注意事项

      • Frame的坐标和宽高不是绝对值,而是基于最大值为8192的相对值。

        如:Frame叠加到的目标通道宽高为1920x1080,要设定位置为[960,540]宽高为960x540的Frame,此处的stRect要设定为(4096,4096, 4096, 4096)。

      • u32Color代表Cover的显示颜色,其中bit[23:16]位代表V分量,bit[15:8]位代表Y分量,bit[7:0]代表U分量。

      • 框线宽度是绝对值,指线宽占的pixel数。

    3.30. MI_RGN_OsdChnPortParam_t

    • 说明

      定义OSD区域的通道显示属性。

    • 定义

      typedef struct MI_RGN_OsdChnPortParam_s
      {
          MI_RGN_Point_t stPoint;
          MI_RGN_OsdAlphaAttr_t stOsdAlphaAttr;
          MI_U8 u8PaletteIdx;
      }MI_RGN_OsdChnPortParam_t;
      
    • 成员

      成员名称 描述
      stPoint Osd 在该通道上的起始坐标
      stOsdAlphaAttr Osd Alpha 属性
      u8PaletteIdx palette index值,定义该OSD使用的palette相对与rgn init时设定的总palette的偏移量
    • 注意事项

      • u8PaletteIdx功能仅支持I2,I4两种pixel format,且目前只有芯片Souffle支持,否则设置无效。

      • palette实际偏移量计算方式:

        pixel format 计算方式
        I2 偏移量 = u8PaletteIdx * 4(I2格式颜色总数)
        I4 偏移量 = u8PaletteIdx * 16(I4格式颜色总数)
        其它 不支持
      • MI_RGN默认将palette[0]的颜色用作显示透明,在使用palette index功能时,OSD透明的显示需要用户将palette对应偏移的颜色改成colorkey的颜色。

      • 参与软件拼图的OSD palette index功能无效。

    3.31. MI_RGN_OsdArgb1555Alpha_t

    • 说明

      Argb1555格式的前景、背景Alpha设定。

    • 定义

      typedef struct MI_RGN_OsdArgb1555Alpha_s
      {
          MI_U8 u8BgAlpha;
          MI_U8 u8FgAlpha;
      }MI_RGN_OsdArgb1555Alpha_t;
      
    • 成员

      成员名称 描述
      u8BgAlpha 背景Alpha,Alpha bit为0时对应的Alpha值,取值范围0~0xFF。
      u8FgAlpha 前景Alpha, Alpha bit为1时对应的Alpha值,取值范围0~0xFF。

    3.32. MI_RGN_AlphaModePara_u

    • 说明

      定义Osd Alpha Mode参数联合体。

    • 定义

      typedef union
      {
          MI_RGN_OsdArgb1555Alpha_t stArgb1555Alpha;
          MI_U8 u8ConstantAlpha;
      } MI_RGN_AlphaModePara_u;
      
    • 成员

      成员名称 描述
      stArgb1555Alpha Pixel alpha时Argb1555格式的前景Alpha及背景Alpha设定。
      u8ConstantAlpha Constant Alpha时Alpha值设定,取值范围0~0xFF。

    3.33. MI_RGN_ChnPortParam_t

    • 说明

      定义区域通道显示属性结构体。

    • 定义

      typedef struct MI_RGN_ChnPortParam_s
      {
          MI_BOOL bShow;
          MI_U32 u32Layer;
          union
          {
              MI_RGN_CoverChnPortParam_t stCoverChnPort;
              MI_RGN_OsdChnPortParam_t   stOsdChnPort;
              MI_RGN_FrameChnPortParam_t stFrameChnPort;
          };
      } MI_RGN_ChnPortParam_t;
      
    • 成员

      成员名称 描述
      bShow 区域是否显示。 取值范围:MI_TRUE 或者 MI_FALSE。 动态属性。
      u32Layer 区域层级
      stCoverChnPort Cover通道显示属性。
      stOsdChnPort Osd通道显示属性。
      stFrameChnPort Frame通道显示属性。

    3.34. MI_RGN_CanvasInfo_t

    • 说明

      定义画布信息结构体。

    • 定义

      typedef struct MI_RGN_CanvasInfo_s
      {
          MI_PHY phyAddr;
          union
          {
              MI_VIRT  virtAddr;
              MI_PTR64 _Reserved;
          };
          MI_RGN_Size_t stSize;
          MI_U32 u32Stride;
          MI_RGN_PixelFormat_e ePixelFmt;
      } MI_RGN_CanvasInfo_t;
      
    • 成员

      成员名称 描述
      phyAddr 画布物理地址。
      virtAddr 画布虚拟地址
      _Reserved 为兼容 32 位与 64 位环境增加的保留数据,用户可忽略此字段。
      stSize 画布尺寸
      u32Stride 画布的 stride
      ePixelFmt 画布的像素格式

    3.35. MI_RGN_InitParam_t

    • 说明

      定义RGN设备初始化参数。

    • 定义

      typedef struct MI_RGN_InitParam_s
      {
          MI_RGN_PaletteTable_t *pstPaletteTable;
      } MI_RGN_InitParam_t;
      
    • 成员

      成员名称 描述
      pstPaletteTable 颜色表指针
    • 相关数据类型及接口

      MI_RGN_InitDev

    3.36. MI_RGN_ColorInvertAttr_t

    • 说明

      定义RGN反色属性参数。

    • 定义

      typedef struct MI_RGN_ColorInvertAttr_s
      {
          MI_BOOL bEnable;
          MI_BOOL bApplyMap;
          MI_RGN_ColorInvertWorkMode_e eWorkMode;
          MI_U8 u8ThresholdLow;
          MI_U8 u8ThresholdHigh;
          MI_RGN_BlockSize_e eBlkSizeHori;
          MI_RGN_BlockSize_e eBlkSizeVert;
      } MI_RGN_ColorInvertAttr_t;
      
    • 成员

      成员名称 描述
      bEnable 使能反色功能
      bApplyMap 标志位,为TRUE时代表会更新用户的map
      eWorkMode 工作模式
      u8ThresholdLow 阈值低
      u8ThresholdHigh 阈值高(必须大于等于u8ThresholdLow)
      eBlkSizeHori 反色横向block size
      eBlkSizeVert 反色纵向block size

    3.37. MI_RGN_LumaInfo_t

    • 说明

      定义获取的亮度信息。

    • 定义

      typedef struct MI_RGN_LumaInfo_s
      {
          MI_PHY        phyAddr;
          MI_VIRT       virtAddr;
          MI_RGN_Size_t stSize;
          MI_U32        u32Stride;
      } MI_RGN_LumaInfo_t;
      
    • 成员

      成员名称 描述
      phyAddr 物理地址
      virtAddr 虚拟地址
      stSize 描述亮度信息的尺寸
      u32Stride buffer的stride

    4. 返回值

    区域管理 API 返回值如表所示。

    表4-1 区域管理 API返回值

    错误码 宏定义 描述
    0 MI_RGN_OK 成功
    0xA0030000 MI_NOTICE_RGN_BUFFER_CHANGE Buffer发生改变。当设置属性时会发生,需要重新remap.
    0xA0032001 MI_ERR_RGN_INVALID_HANDLE 非法的句柄
    0xA0032001 MI_ERR_RGN_INVALID_DEVID 设备ID超出合法范围
    0xA0032002 MI_ERR_RGN_INVALID_CHNID 通道组号错误或无效区域句柄
    0xA0032003 MI_ERR_RGN_ILLEGAL_PARAM 参数超出合法范围
    0xA0032004 MI_ERR_RGN_EXIST 重复创建已存在的设备、通道或资源
    0xA0032005 MI_ERR_RGN_UNEXIST 试图使用或者销毁不存在的设备、通道或者资源
    0xA0032006 MI_ERR_RGN_NULL_PTR 函数参数中有空指针
    0xA0032007 MI_ERR_RGN_NOT_CONFIG 模块没有配置
    0xA0032008 MI_ERR_RGN_NOT_SUPPORT 不支持的参数或者功能
    0xA0032009 MI_ERR_RGN_NOT_PERM 该操作不允许,如试图修改静态配置参数
    0xA003200C MI_ERR_RGN_NOMEM 分配内存失败,如系统内存不足
    0xA003200D MI_ERR_RGN_NOBUF 分配缓存失败,如申请的数据缓冲区太大
    0xA003200E MI_ERR_RGN_BUF_EMPTY 缓冲区中无数据
    0xA003200F MI_ERR_RGN_BUF_FULL 缓冲区中数据满
    0xA0032010 MI_ERR_RGN_NOTREADY 系统没有初始化或没有加载相应模块
    0xA0032011 MI_ERR_RGN_BADADDR 地址非法
    0xA0032012 MI_ERR_RGN_BUSY 系统忙

    5. PROCFS介绍

    由于 RGN 通常会 attach 到其他模块,因此下文中的 ModId是指被RGN attach的其他模块,比如SCL/VENC等。

    5.1. cat

    • 调试信息

      cat /proc/mi_modules/mi_rgn/mi_rgn0
      

    • 调试信息分析

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

    • 参数说明

      • Region capability

        • Region handle: 创建region的最大数量为1024个,句柄取值为[0~1023]
        • channel: 最大通道数量为64个,通道取值为[0~63]
        • Osd attach: 每个输出端口每个通道能绑定的Osd数量上限为128个
        • Osd Support:

          • Width: Osd宽取值范围为1 ~ 16384
          • Height: Osd高取值范围为1~ 8192
          • Color key value: 系统默认的colorkey的值,除了index的格式,不管osd的format是多少,只要内存中的值是此就表示colorkey
        • Mff(Cover/Mosaic/Frame) support:

          • Width: Mff宽取值范围为1 ~ 8192
          • Height: Mff高取值范围为1 ~ 8192
          • Overlap: Mff是否支持重叠
      • Region attr:

        • Handle: 句柄
        • Type: 类型,Osd、Cover或者Frame
        • User: Osd专属参数,是否已经获取Canvas
        • CvsCnt: Osd专属参数,当前Canvas使用的buffer数量
        • MaxCnt: Osd专属参数,Canvas允许申请的buffer最大数量
        • RefCnt: Osd专属参数,Canvas直接用于HW显示的数量(OSD参与拼图时不直接通过HW显示)
        • Width: Osd专属参数,宽
        • Height: Osd专属参数,高
        • Stride: Osd专属参数,宽补齐
        • Format: Osd专属参数,颜色格式[0-6]:ARGB1555,ARGB4444,I2,I4,I8,RGB565,ARGB8888
        • PhyAddr: Osd专属参数,Canvas的物理地址
        • VirAddr: Osd专属参数,Canvas的虚拟地址
        • UsingCnt: Osd专属参数,使用当前Canvas的HW数量
      • Operate count:

      • Channel Port Info:

        • ChnPort Info
          • ScreenWidth: 该通道的分辨率宽
          • ScreenHeight: 该通道的分辨率高
          • EqOutRangeCnt: NA
          • RealtimeFlip: Osd realtime更新模式使能状态
        • ColorInvert Info:
          • Enable: 反色使能
          • WorkMode: 反色工作模式
          • BlkSzHori: 反色块水平方向占像素数
          • BlkSzVert: 反色块垂直方向占像素数
          • ThreshHigh: 反色亮度高阈值
          • ThreshLow: 反色亮度低阈值
          • ReadPhyAddr: 反色最新读buffer物理地址
          • WritePhyAddr: 反色最新写buffer物理地址
          • StorageMode: 反色存储模式(默认值即可)
          • eCalMode: 反色亮度计算模式(默认值即可)
        • Frontbuffer info:
          • Index: Frontbuffer索引
          • bShow: 是否显示
          • OffsetX: X偏移
          • OffsetY: Y偏移
          • Width: 宽
          • Height: 高
          • Stride: 宽补齐
          • Format: 颜色格式
          • PhyAddr: 物理地址
          • AlphaMode: Alpha模式,指pixel alpha还是constant alpha
          • AlphaVal: 如果是constant alpha,alpha的值
          • BgAlpha: 如果是pixel alpha,argb1555的背景alpha值
          • FgAlpha: 如果是pixel alpha,argb1555的前景alpha值
          • paletteIdx: 调色板索引值
          • BufCnt: 通道上front buffer的个数
          • OsdCnt: 通道上一个front buffer由多少个back buffer拼接而成
        • Region info:
          • Handle: 绑定Region句柄
          • Type: 绑定Region类型
          • bShow: 是否显示
          • Layer: 绑定Region的层级
          • areaType: 区域类型
          • PosX: X偏移
          • PosY: Y偏移
          • Width: 宽
          • Height: 高
          • Color: 绑定Cover或者Frame的颜色值
          • BlkSize: 绑定Mosaic的块尺寸
          • thickness: 绑定Frame的线宽(pixel)
          • Format: 绑定Osd的颜色格式
          • AlphaMode: Alpha模式,指pixel alpha还是constant alpha
          • AlphaVal: 如果是constant alpha,alpha的值
          • BgAlpha: 如果是pixel alpha,argb1555的背景alpha值
          • FgAlpha: 如果是pixel alpha,argb1555的前景alpha值
          • paletteIdx: 调色板索引值
      • Buffer info:
        • kmalloc: Region模块内部申请内存字节数。
        • mma malloc: Region模块通过Sys模块申请内存字节数。

    5.2. dumpRgnBuf

    • 功能

      Dump 指定 Region 的 buffer

    • 命令

      echo dumpRgnBuf [Handle] [Path]  > /proc/mi_modules/mi_rgn/mi_rgn0
      
    • 参数说明

      • [Handle]: region 句柄
      • [Path]: 保存 dump 数据的路径。保存内容为 region 的 canvas 内容。
    • 举例

      echo dumpRgnBuf 0 /mnt >  /proc/mi_modules/mi_rgn/mi_rgn0
      

      /mnt 下产生文件 Rgn0_canvasInfo_fmt0_64X48, 表示 dump 句柄为 0,颜色格式为 ARGB1555,Stride 为 64,高为 48 的 region 的 canvas 数据。

      文件格式为:Rgn[Handle]_canvasInfo_fmt[Format]_[Stride]X[Height]

      • [Handle] region句柄;
      • [Format] 颜色格式;ARGB1555为0,ARGB4444为1,I2为2,I4为3,I8为4;
      • [Stride] 宽补齐
      • [Height]

    5.3. dumpFrontBuf

    • 功能

      Dump 指定 channel 和 port 的 frontbuffer

    • 命令

      echo dumpFrontBuf [ModId] [DevId] [ChnID] [PortID] [bInputPort] [Path] >  /proc/mi_modules/mi_rgn/mi_rgn0
      
    • 参数说明

      • [ModId]: 模块号,参考mi_common_datatype.h中的模块定义枚举值。
      • [DevId]: 模块的设备号。
      • [ChnID]: 通道号 [0 ~ 63].
      • [PortID]: 端口号 [0 ~ 3].
      • [bInputPort]: 端口类型是否为输入端口 [0 / 1].
      • [Path]: 保存dump数据的路径。会根据当前实际使用的frontbuffer数量生成0 ~ 8个文件。
    • 举例

      echo dumpFrontBuf 34 1 0 0 0 /mnt > /proc/mi_modules/mi_rgn/mi_rgn0
      

      /mnt 下产生 Mod34_Dev1_Chn0_InPort0_frontbuf0_fmt0_64X48, 表示 dump 模块号为 34,设备号为 1,通道为 0,端口为 0 号输入端口,索引为 0 的 frontbuffer 的数据。 颜色格式为 ARGB1555,Stride 为 64,高为 48。

      文件格式为:`Mod[ModId]Dev[DevId]_Chn[Channel][In/Out]Port[Port]frontbuf[Index]_fmt[Format][Stride]X[Height]

      • [ModId]: 输出模块号
      • [DevId]: 输出模块的设备号
      • [Channel]: 通道号
      • [In/Out]: 端口类型
      • [Port]: 端口号
      • [Index]: frontbuffer索引号
      • [Format]: 颜色格式,ARGB1555为0,ARGB4444为1,I2为2,I4为3, I8为4
      • [Stride]: 宽补齐
      • [Height]: 高

    5.4. getcap

    • 功能

      获取 region 能力集信息

    • 命令

      echo getcap > /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.5. dumprgn

    • 功能

      获取已创建 region 信息

    • 命令

      echo dumprgn > /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.6. dumpchport

    • 功能

      获取已创建 channel 和 port 的信息

    • 命令

      echo dumpchport > /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.7. bufcnt

    • 功能

      获取内存使用信息

    • 命令

      echo bufcnt > /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.8. dumpPalette

    • 功能

      获取 Palette 信息

    • 命令

      echo dumpPalette > /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.9. setDispOnOff

    • 功能

      开关某个gwin.

    • 命令

      echo setDispOnOff [ModId] [DevId] [ChnID] [PortID] [bInputPort] [Idx] [OnOff] >  /proc/mi_modules/mi_rgn/mi_rgn0
      
    • 参数说明

      • [ModId]: 模块号,参考mi_common_datatype.h中的模块定义枚举值。
      • [DevId]: 模块的设备号
      • [ChnID]: 通道号 [0 ~ 63]
      • [PortID]: 端口号 [0~3]
      • [bInputPort]: 端口类型是否为输入端口 [0 / 1].
      • [Idx]: 当前通道上osd显示gwin的序号。
      • [OnOff]: 是否开关,0表示关、1表示开。
    • 举例

      echo setDispOnOff 34 1 0 0 0 0 0 > /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.10. forceUpdate

    • 功能

      强制更新osd的back buffer.

    • 命令

      echo forceUpdate [handle] > /proc/mi_modules/mi_rgn/mi_rgn0
      
    • 参数说明

      • [handle]: Osd handle
    • 举例

      echo forceUpdate 0 > /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.11. setRealtimeFlip

    • 功能

      使能OSD实时显示模式,确保在用户操作后的下一帧视频画面即可显示OSD

    • 命令

      echo setRealtimeFlip [ModId] [DevId] [ChnID] [PortID] [bInputPort] [OnOff] >  /proc/mi_modules/mi_rgn/mi_rgn0
      
    • 参数说明

      • [ModId]: 模块号,参考mi_common_datatype.h中的模块定义枚举值。
      • [DevId]: 模块的设备号
      • [ChnID]: 通道号 [0 ~ 63]
      • [PortID]: 端口号 [0~3]
      • [bInputPort]: 端口类型是否为输入端口 [0 / 1].
      • [OnOff]: RealtimeFlip使能状态
    • 举例

      echo setRealtimeFlip 34 1 0 0 0 1  >/proc/mi_modules/mi_rgn/mi_rgn0
      

    5.13. setMaxCanvasForPath

    • 功能

      限制指定channel和port的最大使用buffer数。

    • 命令

      echo setMaxCanvasForPath [ModId] [DevId] [ChnID] [PortID] [bInputPort] [LimitNum] >  /proc/mi_modules/mi_rgn/mi_rgn0
      
    • 参数说明

      • [ModId] 模块号,参考mi_common_datatype.h中的模块定义枚举值。
      • [DevId] 模块的设备号
      • [ChnID] 通道号 [0 ~ 63]
      • [PortID] 端口号 [0~3]
      • [bInputPort]: 端口类型是否为输入端口 [0 / 1].
      • [LimitNum] 设定的最大buffer数。
    • 举例

      echo setMaxCanvasForPath 34 1 0 0 0 2  > /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.14. getmodcap

    • 功能

      获取其他modules 对于RGN的支持能力。

    • 命令

      echo getmodcap [ModId] >  /proc/mi_modules/mi_rgn/mi_rgn0
      
    • 参数说明

      • [ModId]:模块号,参考mi_common_datatype.h中的模块定义枚举值。
    • 举例

      echo getmodcap 2 >  /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.15. dumpOperateCnt

    • 功能

      获取 handle 操作的引用计数信息

    • 命令

      echo dumpOperateCnt >  /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.16. setcolorkeymask

    • 功能

      设置 colorkey 的 mask 掩码

    • 命令

      echo setcolorkeymask [Mask] >  /proc/mi_modules/mi_rgn/mi_rgn0
      
    • 参数说明

      • [Mask]:colorkeymask值,16进制数 rgb。
    • 举例

      echo setcolorkeymask 0xff0000 >  /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.17. debugRgnWin

    • 功能

      debug rgn 通道

    • 命令

      echo debugRgnWin [ModId] [DevId] [ChnID] [PortID] [bInputPort] [Mask] [bSetCnt] [Count] >  /proc/mi_modules/mi_rgn/mi_rgn0
      
    • 参数说明

      • [ModId] 模块号,参考mi_common_datatype.h中的模块定义枚举值。
      • [DevId] 模块的设备号
      • [ChnID] 通道号 [0 ~ 63]
      • [PortID] 端口号 [0~3]
      • [bInputPort]: 端口类型是否为输入端口 [0 / 1].
      • [Mask]: Debug类型掩码
      • [bSetCnt]:是否计数[0 / 1],为1时采用计数,打印[count]条log后停止打印;为0时不采用计数,log会一直打印
      • [Count]:计数
    • 举例

      echo debugRgnWin 34 1 0 0 0 0xff 1 100 > /proc/mi_modules/mi_rgn/mi_rgn0
      

    5.18. maskOperate

    • 功能

      屏蔽指定操作的功能

    • 命令

      echo maskOperate [Operate] [enable] >  /proc/mi_modules/mi_rgn/mi_rgn0
      
    • 参数说明

      • [Operate] 具体操作,可取"attach", "detach", "bitmap", "setattr", "getcanvas", "updatecanvas"
      • [enable] mask 使能,on/off
    • 举例

      echo maskOperate attach on >  /proc/mi_modules/mi_rgn/mi_rgn0