MI SENSOR API


1. 概述


1.1. 概述

SNR(sensor)模块实现获取摄像头接口信息、调整分辨率和帧率等功能。


1.2. 流程框图

图1-1


1.3. 关键字说明

  • Pad

    Sensor 硬件插口位置。

  • Plane

    Pad 下的通道名称。

  • Res

    Resolution 分辨率简称。

  • Orien

    确定方向, 设置sensor 水平和竖直方向镜像。

  • VC

    Virtual Channel 虚拟通道。


2. API 参考


2.1. 功能模块API

API名 功能
MI_SNR_Enable 设置Sensor使能
MI_SNR_Disable 设置Sensor失能
MI_SNR_GetPadInfo 获取Sensor设备信息
MI_SNR_GetPlaneInfo 获取Sensor通道信息
MI_SNR_GetFps 获取Sensor当前帧率
MI_SNR_SetFps 设置Sensor帧率
MI_SNR_GetAnadecSrcAttr 获取模拟信号输入参数
MI_SNR_QueryResCount 获取Sensor支持分辨率的数量
MI_SNR_GetRes 获取索引对应的sensor分辨率
MI_SNR_GetCurRes 获取Sensor当前分辨率
MI_SNR_SetRes 设置Sensor分辨率
MI_SNR_SetOrien 设置Sensor翻转
MI_SNR_GetOrien 获取Sensor翻转属性
MI_SNR_SetPlaneMode 设置Sensor通道模式
MI_SNR_GetPlaneMode 获取设置的Sensor通道模式
MI_SNR_CustFunction 设置Sensor客制化功能
MI_SNR_InitDev 初始化Sensor设备
MI_SNR_DeInitDev 反初始化Sensor设备

2.2. MI_SNR_Enable

  • 功能

    设置SENSOR 对应设备的使能

  • 语法

    MI_S32 MI_SNR_Enable(MI_SNR_PAD_ID_e ePADId);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR 设备号。 取值范围:[0, MI_SNR_MAX_PADNUM]。 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor_datatype.h、mi_sensor.h

    • 库文件:libmi_sensor.a

  • 注意

    • 在调用前要保证 SENSOR设备处于未初始化状态。如果SENSOR设备已处于使能状态,可以使用MI_SNR_Disable 来去初始化设备。

    • enable 之前必须要设置 MI_SNR_SetPlaneModeMI_SNR_SetRes

    • 由于MI_SNR模块没有与Dram交互, 所以不需要与后端模块进行sys 间的bind, 数据流会自动流向MI_VIF。

  • 举例

    Sensor初始化运行和退出范例如下:

    图2-1

    MI_U32 u32ResCount =0;
    MI_U8 u8ResIndex =0;
    MI_U8 u8ChocieRes =0;
    MI_SNR_PAD_ID_e eSnrPad= E_MI_SNR_PAD_ID_0;
    MI_SNR_QueryResCount(eSnrPad, &u32ResCount);
    for(u8ResIndex=0; u8ResIndex < u32ResCount; u8ResIndex++)
    {
        MI_SNR_GetRes(E_MI_SNR_PAD_ID_0, u8ResIndex, &stRes);
        printf("index %d, Crop(%d,%d,%d,%d), outputsize(%d,%d), maxfps %d, minfps %d,               ResDesc %s\n",u8ResIndex, stRes.stCropRect.u16X, stRes.stCropRect.u16Y,     stRes.stCropRect.u16Width,stRes.stCropRect.u16Height,stRes.stOutputSize.u16Width,   stRes.stOutputSize.u16Height, stRes.u32MaxFps,stRes.u32MinFps, stRes.strResDesc);
    }
    
    printf("select res\n");
    scanf("%c", &select);
    
    if(E_MI_VIF_HDR_TYPE_OFF== eHdrType)
    {
        MI_SNR_SetPlaneMode(eSnrPad, FALSE);
    }
    else
    {
        MI_SNR_SetPlaneMode(eSnrPad, TRUE);
    }
    
    MI_SNR_SetRes(eSnrPad,u8ResIdx);
    MI_SNR_Enable(eSnrPad);
    
    /*****************************/
    /*  Exit call interface */
    /*****************************/
    MI_SNR_Disable(eSnrPad);
    
  • 相关主题

    MI_SNR_Disable


2.3. MI_SNR_Disable

  • 功能

    设置SENSOR 对应设备失能。

  • 语法

    MI_S32 MI_SNR_Disable(MI_SNR_PAD_ID_e      ePADId);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor_datatype.h、mi_sensor.h

    • 库文件:libmi_sensor.a

  • 举例

    参考MI_SNR_Enable举例。

  • 相关主题

    MI_SNR_Enable


2.4. MI_SNR_GetPadInfo

  • 功能

    获取SENSOR 设备信息。

  • 语法

    MI_S32 MI_SNR_GetPadInfo(MI_SNR_PAD_ID_e  ePADId, MI_SNR_PADInfo_t *pstPadInfo);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    pstPadInfo SENSOR设备属性指针 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor_datatype.h、mi_sensor.h

    • 库文件:libmi_sensor.a


2.5. MI_SNR_GetPlaneInfo

  • 功能

    获取SENSOR 通道信息。

  • 语法

    MI_S32 MI_SNR_GetPlaneInfo(MI_SNR_PAD_ID_e ePADId, MI_U32  u32PlaneID, MI_SNR_PlaneInfo_t *pstPlaneInfo);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    u32PlaneID SENSOR通道号。 取值范围:[0, MI_SNR_MAX_PLANENUM)。 输入
    pstPlaneInfo SENSOR通道信息。 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor_datatype.h、mi_sensor.h

    • 库文件:libmi_sensor.a


2.6. MI_SNR_GetFps

  • 功能

    获取SENSOR 帧率

  • 语法

    MI_S32 MI_SNR_GetFps(MI_SNR_PAD_ID_e  ePADId, MI_U32 *pFps);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    pFps 帧率指针 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor_datatype.h、mi_sensor.h

    • 库文件:libmi_sensor.a

  • 注意

    获取到的fps范围为:

    min*1000 < fps < max*1000 : 精确到小数点后3位。

  • 相关主题

    MI_SNR_SetFps


2.7. MI_SNR_SetFps

  • 功能

    设置SENSOR 帧率。

  • 语法

    MI_S32 MI_SNR_SetFps(MI_SNR_PAD_ID_e ePADId, MI_U32 u32Fps);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    u32Fps 帧率 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor_datatype.h、mi_sensor.h

    • 库文件:libmi_sensor.a

  • 注意

    • fps有两个取值区间:

      min< fps < max : 精确到个位数

      min*1000 < fps < max*1000 : 精确到小数点后3位。

    • Fps 的最大/最小值为MI_SNR_SetRes时设置分辨率Index所对应的max/min fps。

  • 相关主题

    MI_SNR_GetFps


2.8. MI_SNR_GetAnadecSrcAttr

  • 功能

    获取模拟信号输入参数。

  • 语法

    MI_S32 MI_SNR_GetAnadecSrcAttr(MI_SNR_PAD_ID_e  ePADId, 
    MI_U32 u32PlaneID, MI_SNR_Anadec_SrcAttr_t *pstSrcAttr);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    u32PlaneID SENSOR通道号。 取值范围:[0, MI_SNR_MAX_PLANENUM)。 输入
    pstSrcAttr 源输入参数 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor_datatype.h、mi_sensor.h

    • 库文件:libmi_sensor.a

  • 注意

    在输出为模拟信号的sensor上才可以用。

  • 相关主题

    MI_SNR_Anadec_SrcAttr_t


2.9. MI_SNR_QueryResCount

  • 功能

    获取SENSOR支持分辨率的数量。

  • 语法

    MI_S32 MI_SNR_QueryResCount(MI_SNR_PAD_ID_e ePADId,
    
    MI_U32 *pu32ResCount);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    *pu32ResCount SENSOR设备支持的resolution 数量 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor_datatype.h、mi_sensor.h

    • 库文件:libmi_sensor.a

  • 举例

    参考MI_SNR_GetRes 举例

  • 相关主题

    MI_SNR_GetRes


2.10. MI_SNR_GetRes

  • 功能

    获取resolution 映射表中索引对应的分辨率。

  • 语法

    MI_S32 MI_SNR_GetRes(MI_SNR_PAD_ID_e ePADId, MI_U8 u8ResIdx,
    MI_SNR_Res_t *pstRes);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    u8ResIdx 分辨率映射表中的索引 输入
    *pstRes 序号所对应的分辨率 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor_datatype.h、mi_sensor.h

    • 库文件:libmi_sensor.a

  • 举例

    获取resolution列表,以及选择对应分辨率设置范例如下:

    MI_U32 u32ResCount =0;
    MI_U8 u8ResIndex =0;
    MI_U8 u8ChocieRes =0;
    MI_SNR_QueryResCount(E_MI_SNR_PAD_ID_0, &u32ResCount);
    for(u8ResIndex=0; u8ResIndex < u32ResCount; u8ResIndex++)
    {
        MI_SNR_GetRes(E_MI_SNR_PAD_ID_0, u8ResIndex, &stRes);
        printf("index %d, Crop(%d,%d,%d,%d), outputsize(%d,%d), maxfps %d, minfps %d,               ResDesc %s\n",u8ResIndex, stRes.stCropRect.u16X, stRes.stCropRect.u16Y,     stRes.stCropRect.u16Width,stRes.stCropRect.u16Height,stRes.stOutputSize.u16Width, stRes.stOutputSize.u16Height,stRes.u32MaxFps,stRes.u32MinFps,stRes.strResDesc);
    }
    
    printf("select res\n");
    scanf("%c", &select);
    MI_SNR_SetRes(E_MI_SNR_PAD_ID_0,u8ResIdx);
    MI_SNR_GetCurRes(E_MI_SNR_PAD_ID_0, &u8ResIndex, &stRes);
    
  • 相关主题

    MI_SNR_QueryResCount

    MI_SNR_Res_t


2.11. MI_SNR_GetCurRes

  • 功能

    获取sensor当前分辨率和在分辨率映射表中的位置。

  • 语法

    MI_S32 MI_SNR_GetCurRes(MI_SNR_PAD_ID_e   ePADId, MI_U8 *pu8CurResIdx,                  MI_SNR_Res_t  *pstCurRes);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    *pu8CurResIdx 当前分辨率的索引 输出
    *pstCurRes 当前分辨率信息 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor_datatype.h、mi_sensor.h

    • 库文件:libmi_sensor.a

  • 举例

    参考MI_SNR_GetRes举例

  • 相关主题

    MI_SNR_Res_t


2.12. MI_SNR_SetRes

  • 功能

    设置sensor 设备输出分辨率

  • 语法

    MI_S32 MI_SNR_SetRes(MI_SNR_PAD_ID_e ePADId, MI_U8
    u8ResIdx);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    u8ResIdx Dev Num 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor_datatype.h、mi_sensor.h

    • 库文件:libmi_sensor.a

  • 注意

    MI_SNR_Enable之后不能单独call此API, 要用切换Sensor resolution 的流程切换Sensor 分辨率。

  • 举例

    参考MI_SNR_GetRes举例

  • 相关主题

    MI_SNR_GetRes

    MI_SNR_Res_t


2.13. MI_SNR_SetOrien

  • 功能

    设置sensor 图象翻转属性

  • 语法

    MI_S32 MI_SNR_SetOrien(MI_SNR_PAD_ID_e ePADId, MI_BOOL
    bMirror, MI_BOOL bFlip);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    bMirror 使能竖直镜像翻转 输入
    bFlip 使能水平镜像翻转 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor.h

    • 库文件:libmi_sensor.a

  • 举例

    该API可以单独使用。

  • 相关主题

    MI_SNR_GetOrien


2.14. MI_SNR_GetOrien

  • 功能

    获取sensor 图象翻转属性

  • 语法

    MI_S32 MI_SNR_GetOrien(MI_SNR_PAD_ID_e  ePADId, MI_BOOL *pbMirror,              MI_BOOL *pbFlip);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    *pbMirror 使能竖直镜像翻转 输出
    *pbFlip 使能水平镜像翻转 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor.h

    • 库文件:libmi_sensor.a

  • 相关主题

    MI_SNR_SetOrien


2.15. MI_SNR_SetPlaneMode

  • 功能

    设置sensor Plane模式。

  • 语法

    MI_S32 MI_SNR_SetPlaneMode(MI_SNR_PAD_ID_e ePADId, MI_BOOL
    bEnable);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    bEnable 开HDR 需要置为TRUE, 否则为FALSE 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor.h

    • 库文件:libmi_sensor.a

  • 注意

    plane和SensorPad之间有两种关系, 当PlaneMode为False时,SensorPad和Plane之间是一对一的关系;当PlaneMode为True时,SensorPad 一个对应多个Plane。由于Hdr Mode时需要用到两个Plane 分别接收长曝和短曝, 所以Plane mode应该设置为True.

  • 举例

    if(E_MI_VIF_HDR_TYPE_OFF== eHdrType)
    {
        MI_SNR_SetPlaneMode(eSnrPad, FALSE);
    }
    else
    {
        MI_SNR_SetPlaneMode(eSnrPad, TRUE);
    }
    
  • 相关主题

    MI_SNR_GetPlaneMode


2.16. MI_SNR_GetPlaneMode

  • 功能

    获取上层设置的Sensor Plane模式。

  • 语法

    MI_S32 MI_SNR_GetPlaneMode(MI_SNR_PAD_ID_e  ePADId, MI_BOOL  *pbEnable);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    *pbEnable 开HDR 需要置为TRUE, 否则为FALSE 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor.h

    • 库文件:libmi_sensor.a

  • 相关主题

    MI_SNR_SetPlaneMode


2.17. MI_SNR_CustFunction

  • 功能

    设置Sensor 客制化功能。例如需要对sensor寄存器需要进行读写,或者某些特殊sensor有传感器功能通过该api 获取数据等。

  • 语法

    MI_S32 MI_SNR_CustFunction(MI_SNR_PAD_ID_e ePADId, MI_U32 u32CmdId, MI_U32 u32DataSize, void *pCustData, MI_SNR_CUST_DIR_e eDir);
    
  • 形参

    参数名称 描述 输入/输出
    ePADId SENSOR设备号。 取值范围:[0, MI_SNR_MAX_PADNUM)。 输入
    u32CmdId 客制化功能ID 输入
    u32DataSize 客制化功能数据 buffer size 输入
    pCustData 客制化功能数据 buffer 输入
    eDir 客制化数据类型 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_sensor.h

    • 库文件:libmi_sensor.a

  • 注意

    和sensor driver中的pCus_sensor_CustDefineFunction api 接口对应

  • 举例

    对sensor register 读写范例如下:

    APP中实现如下:

    #define I2C_READ  (0x01)
    #define I2C_WRITE  (0x02)
    
    typedef struct stI2CRegData_s
    {
        MI_U16 u16Reg;
        MI_U16 u16Data;
    }stI2CRegData_t;
    
    stI2CRegData_t stReadReg;
    stI2CRegData_t stWriteReg;
    MI_U16 u16DataSize=sizeof(stI2CRegData_t);
    memset(&stReadReg, 0x0, sizeof(stI2CRegData_t));
    memset(&stWriteReg, 0x0, sizeof(stI2CRegData_t));
    
    stReadReg.u16Reg = 0x3007;
    MI_SNR_CustFunction(E_MI_SNR_PAD_ID_0, I2C_READ, u16DataSize, &stReadReg, E_MI_SNR_CUSTDATA_TO_USER);
    
    stWriteReg.u16Reg = 0x3007;
    stWriteReg.u16Data = 0x03;
    MI_SNR_CustFunction(E_MI_SNR_PAD_ID_0, I2C_WRITE, u16DataSize, &stWriteReg, E_MI_SNR_CUSTDATA_TO_DRIVER);
    
    sensor driver 中实现如下函数:
    #define I2C_READ  (0x01)
    #define I2C_WRITE  (0x02)
    
    typedef struct stI2CRegData_s
    {
        MI_U16 u16Reg;
        MI_U16 u16Data;
    }stI2CRegData_t;
    
    static int pCus_sensor_CustDefineFunction(ms_cus_sensor *handle, u32 cmd_id, void *param)
    {
        switch(cmd_id)
        {
            case I2C_READ:
                {
                    stI2CRegData_t *pRegData = (stI2CRegData_t *)param;
                    SensorReg_Read(pRegData->u16Reg, pRegData->u16Data);
                }
                break;
            case I2C_WRITE:
                {
                    stI2CRegData_t *pRegData = (stI2CRegData_t *)param;
                    SensorReg_Write(pRegData->u16Reg, pRegData->u16Data);
                }
                break;
            default:
                printk("cmdid %d, unknow \n");
                break
        }
    
        return SUCCESS;
    }
    
  • 相关主题

    MI_SNR_CUST_DIR_e


2.18. MI_SNR_InitDev

  • 描述

    初始化Sensor设备。

  • 语法

    MI_S32 MI_SNR_InitDev(MI_SNR_InitParam_t *pstInitParam);
    
  • 参数

    参数名称 描述 输入/输出
    pstInitParam 设备初始化参数 输入
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_sensor.h

    • 库文件:libmi_sensor.a


2.19. MI_SNR_DeInitDev

  • 描述

    反初始化sensor设备。

  • 语法

    MI_S32 MI_SNR_DeInitDev(void);
    
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码。

  • 依赖

    • 头文件:mi_common.h、mi_sensor.h

    • 库文件:libmi_sensor.a


3. SENSOR数据类型


3.1. 数据类型定义

视频输入相关数据类型定义如下:

数据类型 定义
MI_SNR_MAX_PADNUM 定义支持Sensor最大数量。
MI_SNR_MAX_PLANENUM 定义每一个Sensor Pad 支持通道数量
MI_SNR_PAD_ID_e 定义Sensor Pad枚举类型
MI_SNR_HDRSrc_e 定义Sensor HDR 通道序号
MI_SNR_HDRHWMode_e 定义 HDR 硬件设置模式
MI_SNR_Res_t 定义 Sensor分辨率属性
MI_SNR_AttrParallel_t 定义 Parallel Sensor属性
MI_SNR_MipiAttr_t 定义Mipi Sensor属性
MI_SNR_AttrBt656_t 定义Bt656 Sensor属性
MI_SNR_IntfAttr_u 定义Sensor接口联合体
MI_SNR_PADInfo_t 定义Sensor Pad信息
MI_SNR_PlaneInfo_t 定义Sensor 通道信息
MI_SNR_CUST_DIR_e 定义Sensor 客制化功能数据类型
MI_SNR_InitParam_t 定义Sensor 设备初始化参数
MI_SNR_Anadec_SrcAttr_t 定义模拟信号输入参数
MI_SNR_Anadec_Status_e 定义模拟信号状态参数
MI_SNR_Anadec_TransferMode_e 定义模拟信号传输模式
MI_SNR_Anadec_Format_e 定义模拟信号传输制式

3.2. MI_SNR_MAX_PADNUM

  • 说明

    定义支持Sensor接口最大数量。

  • 定义

    #define MI_SNR_MAX_PADNUM 4
    

3.3. MI_SNR_MAX_PLANENUM

  • 说明

    定义每一个Sensor Pad 支持通道数量。

  • 定义

    #define MI_SNR_MAX_PLANENUM 3
    

3.4. MI_SNR_PAD_ID_e

  • 说明

    Sensor Pad Id 枚举。

  • 定义

    typedef enum
    
    {
    
        E_MI_SNR_PAD_ID_0 = 0,
    
        E_MI_SNR_PAD_ID_1 = 1,
    
        E_MI_SNR_PAD_ID_2 = 2,
    
        E_MI_SNR_PAD_ID_3 = 3,
    
        E_MI_SNR_PAD_ID_MAX = 3,
    
        E_MI_SNR_PAD_ID_NA = 0xFF,
    
    } MI_SNR_PAD_ID_e;
    
  • 注意事项

    和硬件上Sensor Pad接口相对应。


3.5. MI_SNR_HDRSrc_e

  • 说明

    在HdrMode时,Plane通道对应的Virtual channel。

  • 定义

    typedef enum
    
    {
    
        E_MI_SNR_HDR_SOURCE_VC0,
    
        E_MI_SNR_HDR_SOURCE_VC1,
    
        E_MI_SNR_HDR_SOURCE_VC2,
    
        E_MI_SNR_HDR_SOURCE_VC3,
    
        E_MI_SNR_HDR_SOURCE_MAX
    
    } MI_SNR_HDRSrc_e;
    
  • 相关数据类型及接口

    MI_SNR_PlaneInfo_t


3.6. MI_SNR_HDRHWMode_e

  • 说明

    定义 Sensor 硬件设置HDR模式。

  • 定义

    typedef enum
    
    {
    
        E_MI_SNR_HDR_HW_MODE_NONE = 0,
    
        E_MI_SNR_HDR_HW_MODE_SONY_DOL = 1,
    
        E_MI_SNR_HDR_HW_MODE_DCG = 2,
    
        E_MI_SNR_HDR_HW_MODE_EMBEDDED_RAW8 = 3,
    
        E_MI_SNR_HDR_HW_MODE_EMBEDDED_RAW10 = 4,
    
        E_MI_SNR_HDR_HW_MODE_EMBEDDED_RAW12 = 5,
    
        E_MI_SNR_HDR_HW_MODE_EMBEDDED_RAW14 = 6,
    
        E_MI_SNR_HDR_HW_MODE_EMBEDDED_RAW16 = 7,
    
    } MI_SNR_HDRHWMode_e;
    
  • 成员

    成员名称 描述
    E_MI_SNR_HDR_HW_MODE_NONE 没有开HDR模式
    E_MI_SNR_HDR_HW_MODE_SONY_DOL Digital Overlap High Dynamic Range
    E_MI_SNR_HDR_HW_MODE_DCG 双转换增益模式
    E_MI_SNR_HDR_HW_MODE_EMBEDDED_RAW8 8bit 压缩模式
    E_MI_SNR_HDR_HW_MODE_EMBEDDED_RAW10 10bit 压缩模式
    E_MI_SNR_HDR_HW_MODE_EMBEDDED_RAW12 12bit 压缩模式
    E_MI_SNR_HDR_HW_MODE_EMBEDDED_RAW14 14bit 压缩模式
    E_MI_SNR_HDR_HW_MODE_EMBEDDED_RAW16 16bit 压缩模式
  • 相关数据类型及接口

    MI_SNR_MipiAttr_t


3.7. MI_SNR_Res_t

  • 说明

    定义 Sensor分辨率属性

  • 定义

    typedef struct MI_SNR_Res_s
    
    {
    
        MI_SYS_WindowRect_t  stCropRect;
    
        MI_SYS_WindowSize_t  stOutputSize;  /**< Sensor actual output size */
    
        MI_U32 u32MaxFps;    /**< Max fps in this resolution */
    
        MI_U32 u32MinFps;    /**< Min fps in this resolution*/
    
        MI_S8 strResDesc[32];   // Need to put HDR here if the resolution is for HDR
    
    } __attribute__((packed, aligned(4))) MI_SNR_Res_t;
    
  • 成员

    成员名称 描述
    stCropRect 在output size上裁剪的区域
    stOutputSize Sensor 输出大小范围
    u32MaxFps 当前分辨率下最大帧率
    u32MinFps 当前分辨率下最小帧率
    strResDesc Resolution string
  • 注意事项

    stOutputSize为Sensor的原始宽高,stCropRect为在原始图像上裁剪的大小,所以stCropRect为Sensor的实际输出区域。

    图3-1

  • 相关数据类型及接口

    MI_SNR_GetRes

    MI_SNR_GetCurRes

    MI_SNR_SetRes


3.8. MI_SNR_AttrParallel_t

  • 说明

    定义parallel sensor 属性。

  • 定义

    typedef struct MI_SNR_AttrParallel_s
    
    {
    
        MI_VIF_SyncAttr_t stSyncAttr;
    
    } MI_SNR_AttrParallel_t;
    
  • 成员

    成员名称 描述
    stSyncAttr 同步信号属性
  • 相关数据类型及接口

    MI_SNR_IntfAttr_u


3.9. MI_SNR_MipiAttr_t

  • 说明

    定义Mipi sensor 属性。

  • 定义

    typedef struct MI_SNR_MipiAttr_s
    
    {
    
        MI_U32 u32LaneNum; // 几条信号同时传
    
        MI_U32 u32DataFormat; //0: YUV 422 format. 1: RGB pattern.
    
        MI_VIF_DataYuvSeq_e eDataYUVOrder;
    
        MI_U32 u32HsyncMode;
    
        MI_U32 u32Sampling_delay;
    
        /** < MIPI start sampling delay */ /*bit 0~7: clk_skip_ns. bit 8~15: data_skip_ns*/
    
        MI_SNR_HDRHWMode_e  eHdrHWmode;
    
        MI_U32 u32Hdr_Virchn_num;
    
        MI_U32 u32Long_packet_type[2];
    
    }MI_SNR_MipiAttr_t;
    
  • 成员

    成员名称 描述
    u32LaneNum 支持同时传输数据的信号线数量
    u32DataFormat 0: YUV 422 format. 1: RGB pattern
    eDataYUVOrder YUV 排列顺序
    u32HsyncMode 0:同步前一条 1:同步后一条line的hsync 信号
    u32Sampling_delay 延时跳过数据头部分
    eHdrHWmode Sensor支持的HDR mode
    u32Hdr_Virchn_num Sensor支持的HDR 虚拟通道数量
    u32Long_packet_type[2] Sensor支持的数据打包格式
  • 相关数据类型及接口

    MI_SNR_IntfAttr_u


3.10. MI_SNR_AttrBt656_t

  • 说明

    定义BT656 sensor 属性。

  • 定义

    typedef struct MI_SNR_AttrBt656_s
    
    {
    
        MI_U32 u32Multiplex_num;
    
        MI_VIF_SyncAttr_t stSyncAttr;
    
        MI_VIF_ClkEdge_e eClkEdge;
    
        MI_VIF_BitOrder_e eBitSwap;
    
    } MI_SNR_AttrBt656_t;
    
  • 成员

    成员名称 描述
    u32Multiplex_num 复合模式的路数
    stSyncAttr 同步信号属性
    eClkEdge 采样时钟模式
    eBitSwap 数据排列方向
  • 相关数据类型及接口

    MI_SNR_IntfAttr_u


3.11. MI_SNR_IntfAttr_u

  • 说明

    定义sensor 接口类型联合体。

  • 定义

    typedef union {
    
        MI_SNR_AttrParallel_t stParallelAttr;
    
        MI_SNR_MipiAttr_t stMipiAttr;
    
        MI_SNR_AttrBt656_t stBt656Attr;
    
    } MI_SNR_IntfAttr_u;
    
  • 成员

    成员名称 描述
    stParallelAttr Parallel sensor 属性
    stMipiAttr Mipi sensor属性
    stBt656Attr Bt656 sensor属性
  • 相关数据类型及接口

    MI_SNR_PADInfo_t


3.12. MI_SNR_PADInfo_t

  • 说明

    定义sensor Pad 信息属性。

  • 定义

    typedef struct MI_SNR_PADInfo_s
    
    {
    
        MI_U32        u32PlaneCount;
    
        //It is different expo number for HDR. It is mux number for BT656. //??
    
        MI_VIF_IntfMode_e    eIntfMode;
    
        MI_VIF_HDRType_e     eHDRMode;
    
        MI_SNR_IntfAttr_u    unIntfAttr;
    
        MI_BOOL            bEarlyInit;
    
    } MI_SNR_PADInfo_t;
    
  • 成员

    成员名称 描述
    u32PlaneCount BT656 sensor 代表最大复合路数 Mipi sensor 代表长短曝数量
    eIntfMode Sensor 接口枚举
    eHDRMode Hdr 模式
    unIntfAttr Sensor 接口属性联合体
    bEarlyInit Sensor 是否已经提前初始化
  • 注意事项

    在dualos系统中bEarlyInit为True, Pure Linux下位False。

  • 相关数据类型及接口

    MI_SNR_GetPadInfo


3.13. MI_SNR_PlaneInfo_t

  • 说明

    定义sensor 通道 信息属性。

  • 定义

    typedef struct MI_SNR_PlaneInfo_s
    
    {
    
        MI_U32                  u32PlaneID;// For HDR long/short exposure or BT656 channel 0~3
    
        MI_S8                   s8SensorName[32];
    
        MI_SYS_WindowRect_t     stCapRect;
    
        MI_SYS_BayerId_e        eBayerId;
    
        MI_SYS_DataPrecision_e  ePixPrecision;
    
        MI_SNR_HDRSrc_e         eHdrSrc;
    
        MI_U32                  u32ShutterUs;
    
        MI_U32                  u32SensorGainX1024;
    
        MI_U32                  u32CompGain;
    
    } MI_SNR_PlaneInfo_t;
    
  • 成员

    成员名称 描述
    u32PlaneID 通道代号
    s8SensorName Sensor name字符串
    stCapRect 在sensor 数据上裁剪的位置
    eBayerId RGB 排列顺序
    ePixPrecision RGB 压缩模式
    eHdrSrc HDR 通道号
    u32ShutterUs Sensor Shutter
    u32SensorGainX1024 Sensor Gain
    u32CompGain Sensor Compensate Gain
  • 注意事项

    • 当mipi接口 不开Hdr时u32PlaneID = 0xff;开HDR时 u32PlaneID =0代表长曝光,u32PlaneID =1代表短曝光。

    • 当BT656接口时,代表当前Plane在复合路数中的通道id。

    • #define RGB_BAYER_PIXEL(BitMode, PixelID) (E_MI_SYS_PIXEL_FRAME_RGB_BAYER_BASE+ BitMode*E_MI_SYS_PIXEL_BAYERID_MAX+ PixelID)。

    • 通过sys 接口将sensor的eBayerId和ePixPrecision 转换成sys的pixel format,设置给后端MI_VIF output和MI_VPE input。

    • MI_SYS_PixelFormat_e ePixel = RGB_BAYER_PIXEL(ePixPrecision, eBayerId);

  • 相关数据类型及接口

    MI_SNR_GetPadInfo


3.14. MI_SNR_CUST_DIR_e

  • 说明

    定义Sensor 客制化功能数据类型。

  • 定义

    typedef enum
    
    {
    
        E_MI_SNR_CUSTDATA_TO_DRIVER,
    
        E_MI_SNR_CUSTDATA_TO_USER,
    
        E_MI_SNR_CUSTDATA_MAX = E_MI_SNR_CUSTDATA_TO_USER,
    
    } MI_SNR_CUST_DIR_e;
    
  • 成员

    成员名称 描述
    E_MI_SNR_CUSTDATA_TO_DRIVER 客制化buffer 数据设置给Sensor Driver
    E_MI_SNR_CUSTDATA_TO_USER 客制化buffer 数据从sensor 获取
    E_MI_SNR_CUSTDATA_MAX 数据类型MAX 选项
  • 相关数据类型及接口

    MI_SNR_CustFunction


3.15. MI_SNR_InitParam_t

  • 说明

    sensor设备初始化参数。

  • 定义

    typedef struct MI_SNR_InitParam_s
    
    {
    
        MI_U32 u32DevId;
    
        MI_U8 *u8Data;
    
    } MI_SNR_InitParam_t;
    
  • 成员

    成员名称 描述
    u32DevId 设备ID
    u8Data 数据指针buffer
  • 相关数据类型及接口

    MI_SNR_InitDev


3.16. MI_SNR_Anadec_SrcAttr_t

  • 说明

定义模拟信号输入参数。

  • 定义

    typedef struct MI_SNR_Anadec_SrcAttr_s
    
    {
    
        MI_SNR_Anadec_Status_e eStatus;
    
        MI_SNR_Anadec_TransferMode_e eTransferMode;
    
        MI_SNR_Anadec_Format_e eFormat;
    
        MI_SYS_WindowSize_t stRes;
    
        MI_U32 u32Fps;
    
    }MI_SNR_Anadec_SrcAttr_t;
    
  • 成员

    成员名称 描述
    eStatus 输入源状态枚举
    eTransferMode 输入源传输模式枚举
    eFormat 输入源传输制式枚举
    stRes 输入源分辨率
    u32Fps 输入源帧率
  • 相关数据类型及接口

    MI_SNR_GetAnadecSrcAttr


3.17. MI_SNR_Anadec_Status_e

  • 说明

    定义模拟信号输入源状态。

  • 定义

    typedef enum
    
    {
    
        E_MI_SNR_ANADEC_STATUS_NO_READY = 0,
    
        E_MI_SNR_ANADEC_STATUS_DISCNT,
    
        E_MI_SNR_ANADEC_STATUS_CONNECT,
    
        E_MI_SNR_ANADEC_STATUS_NUM
    
    }MI_SNR_Anadec_Status_e;
    
  • 成员

    成员名称 描述
    E_MI_SNR_ANADEC_STATUS_NO_READY 输入源未准备就绪
    E_MI_SNR_ANADEC_STATUS_DISCNT 输入源状态未连接
    E_MI_SNR_ANADEC_STATUS_CONNECT 输入源状态已连接
    E_MI_SNR_ANADEC_STATUS_NUM 输入源状态NUM选项
  • 相关数据类型及接口

    MI_SNR_Anadec_SrcAttr_t

    MI_SNR_GetAnadecSrcAttr


3.18. MI_SNR_Anadec_TransferMode_e

  • 说明

    定义模拟信号输入源传输模式。

  • 定义

    typedef enum
    
    {
    
        E_MI_SNR_ANADEC_TRANSFERMODE_CVBS = 0,
    
        E_MI_SNR_ANADEC_TRANSFERMODE_CVI,
    
        E_MI_SNR_ANADEC_TRANSFERMODE_TVI,
    
        E_MI_SNR_ANADEC_TRANSFERMODE_AHD,
    
        E_MI_SNR_ANADEC_TRANSFERMODE_NUM,
    
    }MI_SNR_Anadec_TransferMode_e;
    
  • 成员

    成员名称 描述
    E_MI_SNR_ANADEC_TRANSFERMODE_CVBS CVBS传输模式
    E_MI_SNR_ANADEC_TRANSFERMODE_CVI CVI传输模式
    E_MI_SNR_ANADEC_TRANSFERMODE_TVI TVI传输模式
    E_MI_SNR_ANADEC_TRANSFERMODE_AHD AHD传输模式
    E_MI_SNR_ANADEC_TRANSFERMODE_NUM 传输模式NUM选项
  • 相关数据类型及接口

    MI_SNR_Anadec_SrcAttr_t

    MI_SNR_GetAnadecSrcAttr


3.19. MI_SNR_Anadec_Format_e

  • 说明

    定义模拟信号输入源制式。

  • 定义

    typedef enum
    
    {
    
        E_MI_SNR_ANADEC_FORMAT_NTSC = 0,
    
        E_MI_SNR_ANADEC_FORMAT_PAL,
    
        E_MI_SNR_ANADEC_FORMAT_NUM,
    
    }MI_SNR_Anadec_Format_e;
    
  • 成员

    |成员名称 描述 |-----|------| |E_MI_SNR_ANADEC_FORMAT_NTSC|NTSC制式| |E_MI_SNR_ANADEC_FORMAT_PAL|PAL制式| |E_MI_SNR_ANADEC_FORMAT_NUM|传输制式NUM选项|

  • 相关数据类型及接口

    MI_SNR_Anadec_SrcAttr_t

    MI_SNR_GetAnadecSrcAttr


4. 错误码

视频输入 API错误码如下表所示。

表4-1 Sensor API 错误码

错误代码 宏定义 描述
0xA01B2001 MI_ERR_SNR_INVALID_DEVID 设备号无效
0xA01B2002 MI_ERR_SNR_INVALID_CHNID 通道号无效
0xA01B2003 MI_ERR_SNR_INVALID_PARA 参数设置无效
0xA01B2006 MI_ERR_SNR_INVALID_NULL_PTR 输入参数空指针错误
0xA01B2007 MI_ERR_SNR_FAILED_NOTCONFIG 设备或通道属性未配置
0xA01B2008 MI_ERR_SNR_NOT_SUPPORT 操作不支持
0xA01B2009 MI_ERR_SNR_NOT_PERM 操作不允许
0xA01B200C MI_ERR_SNR_NOMEM 分配内存失败
0xA01B200E MI_ERR_SNR_BUF_EMPTY Buffer空
0xA01B200F MI_ERR_SNR_BUF_FULL Buffer满
0xA01B2010 MI_ERR_SNR_SYS_NOTREADY 系统未初始化
0xA01B2012 MI_ERR_SNR_BUSY 系统忙
0xA01B201F MI_ERR_SNR_FAIL 端口无效

5. PROCFS介绍


5.1. cat

  • 调试信息

    # cat /proc/mi_modules/mi_sensor/mi_sensor0
    

  • 调试信息分析

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

  • 参数说明

    参数 描述
    Pad info Padid Sensor pad id
    Planemode Planemode 开关
    bEnable Sensor enable
    bmirror 水平翻转
    bflip 垂直翻转
    fps 帧率
    ResCnt Sensor 支持分辨率的数量
    Intfmode 接口协议
    Hdrmode Hdr hw mode
    Planecnt Plane 通道数量
    Mipiattr Yuvorder Yuv 数据排列
    Hdrhwmode Hdr hw mode
    Datafmt 数据格式,yuv/rgb
    HdrVchNum Sensor支持的HDR 虚拟通道数量
    HsyncMode 0:同步前一条
    1:同步后一条line的hsync 信号
    LaneNum 支持同时传输数据的信号线数量
    LPackType0 数据打包格式 0
    LPackType1 数据打包格式 1
    samDelay 延时跳过数据头部分
    BT656Attr BitSwap 数据排列方向
    ClkEdge 采样时钟模式
    Multinum 复合模式的路数
    HPol H sync 极性
    PcPol Pclk 极性
    VPol V sync 极性
    HDelay H sync delay
    VDelay V sync delay
    PcDelay Pclk delay
    ParallelAttr HPol H sync 极性
    PcPol Pclk 极性
    VPol V sync 极性
    HDelay H sync delay
    VDelay V sync delay
    PcDelay Pclk delay
    Res Sensor 支持的分辨率信息
    strResDesc 分辨率
    CropX/CropY/CropW/CropH Crop 参数
    OutW/OutH 输出的宽高
    MaxFps/MinFps 最大最小帧率
    Cur 当前使用的分辨率信息
    Padid pad id
    Planeid Plane id
    SnrName Sensor name
    BayerId Bayer id
    ePixPrec Pixel 精确度 (12bpp,10bpp ….)
    eHdrSrc HDR 通道号
    CropX/CropY/CropW/CropH Crop 参数


5.2. echo

# echo help > /proc/mi_modules/mi_sensor/mi_sensor0

Echo help 查看可用命令

功能
设置sensor的翻转
命令 echo setmirrorflip [PadId, bMirror, bFlip] > /proc/mi_modules/mi_sensor/mi_sensor0
参数说明 PadId: pad id
bMirror: 水平翻转
bFlip: 上下翻转
举例 echo setmirrorflip 0 1 0 > /proc/mi_modules/mi_sensor/mi_sensor0
功能
设置sensor的帧率
命令 echo setfps [Padid, fps] > /proc/mi_modules/mi_sensor/mi_sensor0
参数说明 PadId: pad id
fps: 帧率
举例 echo setfps 0 15 > /proc/mi_modules/mi_sensor/mi_sensor0