MI NIR API


REVISION HISTORY

Revision No.
Description
Date
0.1
  • Initial release
  • 08/20/2021
    0.2
  • Remove vis/contrast/satration level
  • 01/04/2022

    1. API 参考

    1.1. 概述

    NIR是SStar 通过VIS 和 NIR 采集的图像融合成新的图像,在黑暗环境下,既可以输出高质量彩色画面,又可以减少光污染。

    1.2. 流程图

    输入图像在dram中的格式见下面关键字的说明。

    1.3. 关键说明

    Input dram layout:

    VIS: Visible可见光谱

    NIR: near-infrared 近红外

    Device: NIR硬件设备

    Channel: NIR设备的通道,各个通道分时复用NIR 硬件

    输入图像格式: YUV420SP

    输出图像格式: YUV420SP

    输入分辨率:

    Muffin:最大支持 2688 x 1520。支持输入图像宽度8Pixel对齐,Stride 16 对齐。

    输出分辨率: 跟输入分辨率一致


    2. 功能模块API

    如下是MI NIR模块的用户接口。

    API名 功能
    系统功能类
    MI_NIR_CreateDevice 创建NIR Device 设备
    MI_NIR_DestroyDevice 销毁NIR Device 设备
    MI_NIR_CreateChannel 创建 NIR Channel 通道
    MI_NIR_DestroyChannel 销毁NIR Channel 通道
    MI_NIR_SetChnParam 配置NIR Channel 通道属性
    MI_NIR_GetChnParam 获取NIR Channel 通道属性
    MI_NIR_StartChannel 启用NIR Channel 通道
    MI_NIR_StopChannel 禁用NIR Channel 通道

    2.1. MI_NIR_CreateDevice

    • 功能

      创建NIR 设备。

    • 语法

      MI_S32 MI_NIR_CreateDevice(MI_NIR_DEV DevId, MI_NIR_DevAttr_t *pstDevAttr);
      
    • 形参

      参数名称 描述 输入/输出
      DevId Device ID, 对应NIR Device ID 输入
      pstDevAttr Device 设备属性,静态参数 输入
    • 返回值

      • MI_SUCCESS(0):成功。

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

    • 依赖

      • 头文件:mi_nir.h

      • 库文件:libmi_nir.a / libmi_nir.so

    • 注意

      • 目前只支持DevId =0。
    • 举例

      NIR初始化设置,以及退出范例

      MI_NIR_DEV   NIRDevId =0;
      MI_NIR_CHANNEL   NIRChnId =0;
      MI_NIR_DevAttr_t   stDevAttr = {0};
      MI_NIR_ChnAttr_t  stChnAttr = {};
      
      stChnAttr.eMode= E_MI_NIR_MODE_NORMAL ; //设置CHN 动态参数
      
      MI_NIR_CreateDevice(NIRDevId, &stDevAttr);
      MI_NIR_CreateChannel(NIRDevId, NIRChnId, &stChnAttr);
      MI_NIR_StartChannel(NIRDevId, NIRChnId);
      
      /*销毁通道*/
      MI_NIR_StopChannel(NIRDevId, NIRChnId);
      MI_NIR_DestroyChannel(NIRDevId,NIRChnId);
      MI_NIR_DestroyDevice(NIRDevId)
      
    • 相关主题

      MI_NIR_DestroyDevice

    2.2. MI_NIR_DestroyDevice

    • 功能

      销毁NIR 设备。

    • 语法

      MI_S32 MI_NIR_DestroyDevice(MI_NIR_DEV DevId );
      
    • 形参

      参数名称 描述 输入/输出
      DevId Device ID 输入
    • 返回值

      • MI_SUCCESS(0):成功。

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

    • 依赖

      • 头文件:mi_nir.h

      • 库文件:libmi_nir.a / libmi_nir.so

    • 注意

      • 目前只支持DevId =0。
    • 举例

      MI_NIR_CreateDevice举例。

    • 相关主题

      MI_NIR_CreateDevice

    2.3. MI_NIR_CreateChannel

    • 功能

      创建NIR Channel 通道。

    • 语法

      MI_S32 MI_NIR_CreateChannel(MI_NIR_DEV DevId , MI_NIR_CHANNEL ChnId, MI_NIR_ChannelAttr_t *pstChAttr);
      
    • 形参

      参数名称 描述 输入/输出
      DevId Device ID 输入
      ChnId Channel ID 输入
      pstChAttr Channel 属性 输入
    • 返回值

      • MI_SUCCESS(0):成功。

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

    • 依赖

      • 头文件:mi_nir.h

      • 库文件:libmi_nir.a / libmi_nir.so

    • 注意

      • 目前只支持ChnId =0。

      • 需要在MI_NIR_CreateDevice之后调用。

    • 举例

      MI_NIR_CreateDevice举例。

    • 相关主题

      MI_NIR_DestroyChannel

    2.4. MI_NIR_DestroyChannel

    • 功能

      销毁NIR Channel 通道。

    • 语法

      MI_S32 MI_NIR_DestroyChannel(MI_NIR_DEV DevId, MI_NIR_CHANNEL ChnId);
      
    • 形参

      参数名称 描述 输入/输出
      DevId Device ID 输入
      ChnId Channel ID 输入
    • 返回值

      • MI_SUCCESS(0):成功。

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

    • 依赖

      • 头文件:mi_nir.h

      • 库文件:libmi_nir.a / libmi_nir.so

    • 注意

      • 目前只支持ChnId =0。

      • 需要在MI_NIR_CreateDevice之后调用。

    • 举例

      MI_NIR_CreateDevice举例。

    • 相关主题

      MI_NIR_CreateChannel

    2.5. MI_NIR_SetChnParam

    • 功能

      设置NIR Channel 动态参数

    • 语法

      MI_S32 MI_NIR_SetChnParam(MI_NIR_DEV DevId, MI_NIR_CHANNEL ChnId, MI_NIR_ChnParam _t *pstChnParam);
      
    • 形参

      参数名称 描述 输入/输出
      DevId Device ID 输入
      ChnId Channel ID 输入
      pstChnParam Channel 动态参数 输入
    • 返回值

      • MI_SUCCESS(0):成功。

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

    • 依赖

      • 头文件:mi_nir.h

      • 库文件:libmi_nir.a / libmi_nir.so

    • 注意

      • 目前只支持ChnId =0。

      • Device 和 channel 创建之后调用。

    • 举例

      MI_NIR_DEV   NIRDevId =0;
      MI_NIR_CHANNEL   NIRChnId =0;
      
      MI_NIR_ChnParam_t  stChnParam = {};
      
      MI_NIR_GetChnParam(NIRDevId , NIRChnId,& stChnParam);
      
      stChnParam.eMode=  E_MI_NIR_MODE_NORMAL; //设置CHN 动态参数
      
      MI_NIR_SetChnParam(NIRDevId , NIRChnId, & stChnParam);
      
    • 相关主题

      MI_NIR_GetChnParam

    2.6. MI_NIR_GetChnParam

    • 功能

      获取NIR Channel 动态参数

    • 语法

      MI_S32 MI_NIR_GetChnParam(MI_NIR_DEV DevId, MI_NIR_CHANNEL ChnId, MI_NIR_ChnParam *pstChnParam);
      
    • 形参

      参数名称 描述 输入/输出
      DevId Device ID 输入
      ChnId Channel ID 输入
      pstChnParam Channel 动态参数 输出
    • 返回值

      • MI_SUCCESS(0):成功。

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

    • 依赖

      • 头文件:mi_nir.h

      • 库文件:libmi_nir.a / libmi_nir.so

    • 举例

      MI_NIR_SetChnParam举例。

    • 相关主题

      MI_NIR_SetChnParam

    2.7. MI_NIR_StartChannel

    • 功能

      启动NIR Channel。

    • 语法

      MI_S32 MI_NIR_StartChannel(MI_NIR_DEV DevId, MI_NIR_CHANNEL ChnId);
      
    • 形参

      参数名称 描述 输入/输出
      DevId Device ID 输入
      ChnId Channel ID 输入
    • 返回值

      • MI_SUCCESS(0):成功。

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

    • 依赖

      • 头文件:mi_nir.h

      • 库文件:libmi_nir.a / libmi_nir.so

    • 注意

      • 目前只支持ChnId =0。

      • Device 和 channel 创建之后调用。

    • 举例

      MI_NIR_CreateDevice举例。

    • 相关主题

      MI_NIR_StopChannel

    2.8. MI_NIR_StopChannel

    • 功能

      禁用NIR Channel 通道。

    • 语法

      ​ MI_S32 MI_NIR_StopChannel(MI_NIR_DEV DevId, MI_NIR_CHANNEL ChnId);

    • 形参

      参数名称 描述 输入/输出
      DevId Device ID 输入
      ChnId Channel ID 输入
    • 返回值

      • MI_SUCCESS(0):成功。

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

    • 依赖

      • 头文件:mi_nir.h

      • 库文件:libmi_nir.a / libmi_nir.so

    • 举例

      MI_NIR_CreateDevice举例。

    • 相关主题

      MI_NIR_StartChannel


    3. 数据类型

    相关数据类型、数据结构定义如下:

    数据类型 定义
    MI_NIR_DEV 定义NIR Device的类型
    MI_NIR_CHANNEL 定义NIR Channel的类型
    MI_NIR_DevAttr_t 定义NIR Device属性
    MI_NIR_Mode_e 定义NIR 模式设定
    MI_NIR_ChnAttr_t 定义NIR Channel的属性。
    MI_NIR_ChnParam_t 定义NIR Channel的动态参数

    3.1. MI_NIR_DEV

    • 说明

      定义NIR Device的类型。

    • 定义

      typedef MI_U32 MI_NIR_DEV
      

    3.2. MI_NIR_CAHNNEL

    • 说明

      定义NIR channel的类型。

    • 定义

      typedef MI_U32 MI_NIR_CHANNEL
      

    3.3. MI_NIR_DevAttr_t

    • 说明

      定义设备Device的属性。

    • 定义

      typedef struct MI_NIR_DevAttr_s
      
      {
      
      ​    MI_U32 u32Reserved;
      
      } MI_NIR_DevAttr_t;
      
    • 成员

      成员名称 描述
      u32Reserved 保留数据

    3.4. MI_NIR_Mode_e

    • 说明

      定义NIR模式, 表示NIR数据处理方式。

    • 定义

      typedef enum
      
      {
      
          E_MI_NIR_MODE_NORMAL,     //normal
      
          E_MI_NIR_MODE_BYPASS_VIS,   //bypass visible data
      
          E_MI_NIR_MODE_BYPASS_NIR,   // bypass near-infrared data
      
          E_MI_NIR_MODE_INVALID,
      
      } MI_NIR_Mode_e;
      
    • 相关数据类型及接口

      MI_NIR_ChnParam_t

    3.5. MI_NIR_ChnAttr_t

    • 说明

      定义NIR Channel的属性。

    • 定义

      typedef struct MI_NIR_ChnAttr_s
      
      {
      
          MI_NIR_Mode_e eMode;
      
      } MI_NIR_ChnAttr_t;
      
    • 成员

      成员名称 描述
      eMode 模式设定

    3.6. MI_NIR_ChnParam_t

    • 说明

      定义NIR Channel的动态参数。

    • 定义

      typedef struct MI_NIR_ChnParam_s
      
      {
      
          MI_NIR_Mode_e eMode;
      
      } MI_NIR_ChnParam_t;
      
    • 成员

      成员名称 描述
      eMode 模式设定

    4. 错误码

    MI NIR模块错误码如下表所示:

    错误码 宏定义 描述
    0 MI_NIR_RET_SUCCESS 成功
    0xA0272001 MI_ERR_NIR_MOD_NOT_INIT 模块未完成初始化
    0xA0272002 MI_ERR_NIR_DEV_ INVALID Device超出合法范围
    0xA0272003 MI_ERR_NIR_NORESOURCE NIR没有足够资源
    0xA0272004 MI_ERR_NIR_CHN_INVALID Channel超出合法范围
    0xA0272005 MI_ERR_NIR_TIMEOUT NIR 设备运行超时
    0xA0272006 MI_ERR_NIR_NOMEM 分配内存失败
    0xA0272007 MI_ERR_NIR_NOTSUPPORT 操作不支持
    0xA0272008 MI_ERR_NIR_BUSY Channel 系统忙
    0xA0272009 MI_ERR_NIR_NOTREADY 设备未完成初始化
    0xA027200A MI_ERR_NIR_NULL_PTR 输入参数空指针错误