MI ISP API

Version 3.0


1. 概述


1.1. 模块说明

图像信号处理(Image Signal Processing),实现HDR,3D/2D降噪,3A算法,WDR等相关功能。


1.2. 流程框图

图 1‑1:Tiramisu框图


1.3. 关键字说明

  • Device

    硬件设备。

  • channel

    Device上的分时复用通道。

  • DNR

    Digital Noise Reduction,数字降噪技术。

    2D降噪:将一个像素与其周围像素平均,平均后噪声降低,缺点是会造成画面模糊;

    3D降噪:增添了时域处理,2D降噪只考虑一帧图像,而3D降噪进一步考虑帧与帧之间的时域关系,对每个像素进行时域上的平均。

  • 3A算法

    AE (Auto Exposure,自动曝光)、AWB(Auto White Balance,自动白平衡)和AF(Auto Focus,自动对焦)。

  • HDR

    High-Dynamic Range,高动态范围图像。

    据不同的曝光时间的LDR(Low-Dynamic Range,低动态范围图像),并利用每个曝光时间相对应最佳细节的LDR图像来合成最终HDR图像。能够更好的反映出真实环境中的视觉效果。

  • WDR

    Wide Dynamic Range,宽动态范围。

    开启后场景中特别亮和特别暗的部位都能看得清楚。宽动态范围是图像能分辨的最亮的亮度信号值与最暗的亮光信号值的比值。

  • Rotation

    旋转,将原始图像绕中心点旋转0°/90°/180°/270°。

  • mirror

    水平镜像翻转。

  • Flip

    上下镜像翻转。

  • Crop

    裁剪,对输入图像进行裁剪。


2. API 参考


2.1. 功能模块API

API名 功能
MI_ISP_CreateDevice 创建一个 ISP 设备
MI_ISP_DestoryDevice 销毁一个 ISP 设备
MI_ISP_CreateChannel 创建一个 ISP 通道
MI_ISP_DestroyChannel 销毁一个 ISP 通道
MI_ISP_SetInputPortCrop 设定 ISP 输入端口裁剪参数
MI_ISP_GetInputPortCrop 获取 ISP 输入端口裁剪参数
MI_ISP_SetChnParam 设定 ISP 通道参数
MI_ISP_GetChnParam 获取 ISP 通道参数
MI_ISP_StartChannel 启动 ISP 通道
MI_ISP_StopChannel 停止 ISP 通道
MI_ISP_SetOutputPortParam 设定 ISP 输出端口参数
MI_ISP_GetOutputPortParam 获取 ISP 输出端口参数
MI_ISP_EnableOutputPort 启用 ISP 输出端口
MI_ISP_DisableOutputPort 禁用 ISP 输出端口
MI_ISP_Alloc_IQDataBuf 申请 IQ 数据缓存区
MI_ISP_Free_IQDataBuf 释放 IQ 数据缓存区
MI_ISP_CallBackTask_Register 注册 ISP 回调接口
MI_ISP_CallBackTask_Unregister 注销 ISP 回调接口
MI_ISP_SkipFrame 设定跳过 Frame count
MI_ISP_LoadPortZoomTable 载入 ISP 端口 Zoom Table
MI_ISP_StartPortZoom 启动 ISP 端口 Zoom
MI_ISP_StopPortZoom 停止 ISP 端口 Zoom
MI_ISP_GetPortCurZoomAttr 获取 ISP 端口实时的 Zoom 属性

2.2. MI_ISP_CreateDevice

  • 功能

    创建一个 ISP 设备。

  • 语法

    MI_S32 MI_ISP_CreateDevice(MI_ISP_DEV DevId, MI_ISP_DevAttr_t *pstDevAttr);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    pstDevAttr ISP 设备属性指针。静态属性。 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    在调用前要保证 ISP 设备处于禁用状态。如果 ISP设备已处于使能状态,可以使用MI_ISP_DestoryDevice来禁用设备。

  • 举例

    MI_ISP 初始化:

    MI_S32 ST_IspModuleInit(MI_ISP_DEV IspDevId)
    {
        ST_IspDevAttr_t *pstIspDevAttr= &gstIspModule.stIspDevAttr[IspDevId];
        MI_ISP_CHANNEL IspChnId = 0;
        MI_ISP_PORT  IspOutPortId =0;
    
        MI_ISP_DevAttr_t stCreateDevAttr;
        memset(&stCreateDevAttr, 0x0, sizeof(MI_ISP_DevAttr_t));
        stCreateDevAttr.u32DevStitchMask = E_MI_ISP_DEVICE_ID0;
    
        MI_ISP_CreateDevice(IspDevId, &stCreateDevAttr);
    
        ST_IspChannelAttr_t  *pstIspChnAttr = &pstIspDevAttr->stIspChnlAttr[IspChnId];
        MI_ISP_ChannelAttr_t  stIspChnAttr;
        memset(&stIspChnAttr, 0x0, sizeof(MI_ISP_ChannelAttr_t));
    
        MI_ISP_CreateChannel(IspDevId, IspChnId, &stIspChnAttr);
    
        if(pstIspChnAttr->stIspInPortAttr[0].stInputCropWin.u16Width !=0
            && pstIspChnAttr->stIspInPortAttr[0].stInputCropWin.u16Height !=0)
        {
            MI_ISP_SetInputPortCrop(IspDevId, IspChnId, &pstIspChnAttr->stIspInPortAttr[0].stInputCropWin);
        }
    
        MI_ISP_SetChnParam(IspDevId, IspChnId, &pstIspChnAttr->stIspChnParam);
        MI_ISP_StartChannel(IspDevId, IspChnId);
    
        for(IspOutPortId=0; IspOutPortId<ST_MAX_ISP_OUTPORT_NUM; IspOutPortId++)
        {
            MI_ISP_OutPortParam_t  stIspOutputParam;
            memset(&stIspOutputParam, 0x0, sizeof(MI_ISP_OutPortParam_t));
            memcpy(&stIspOutputParam.stCropRect, &pstIspOutputAttr->stOrigPortCrop, sizeof(MI_SYS_WindowRect_t));
            stIspOutputParam.ePixelFormat = pstIspOutputAttr->ePixelFormat;
    
            MI_ISP_SetOutputPortParam(IspDevId, IspChnId, IspOutPortId, &stIspOutputParam);
            MI_ISP_EnableOutputPort(IspDevId, IspChnId, IspOutPortId);
        }
    
        return MI_SUCCESS;
    }
    

    MI_ISP 去初始化:

    MI_S32 ST_IspModuleUnInit(MI_ISP_DEV IspDevId)
    {
        MI_ISP_CHANNEL IspChnId = 0;
        MI_ISP_PORT  IspOutPortId =0;
    
        for(IspOutPortId=0; IspOutPortId<ST_MAX_ISP_OUTPORT_NUM; IspOutPortId++)
        {
            MI_ISP_DisableOutputPort(IspDevId, IspChnId, IspOutPortId);
        }
    
        MI_ISP_StopChannel(IspDevId, IspChnId);
        MI_ISP_DestroyChannel(IspDevId, IspChnId);
    
        MI_ISP_DestoryDevice(IspDevId);
    
    return MI_SUCCESS;
    }
    
  • 相关主题

    MI_ISP_DestoryDevice


2.3. MI_ISP_DestoryDevice

  • 功能

    销毁一个 ISP 设备。

  • 语法

    MI_S32 MI_ISP_DestoryDevice(MI_ISP_DEV DevId);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    需要先禁用所有的输出端口,然后停下channel,销毁通道,才能销毁设备。

  • 举例

    参考MI_ISP_CreateDevice 举例。

  • 相关主题

    MI_ISP_CreateDevice


2.4. MI_ISP_CreateChannel

  • 功能

    创建一个 ISP 通道。

  • 语法

    MI_S32 MI_ISP_CreateChannel(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_ChannelAttr_t *pstChAttr);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
    pstChAttr ISP 通道属性指针 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    需要先创建设备, 才能创建通道。

  • 举例

    参考MI_ISP_CreateDevice举例。

  • 相关主题

    MI_ISP_DestroyChannel


2.5. MI_ISP_DestroyChannel

  • 功能

    销毁一个 ISP 通道。

  • 语法

    MI_S32 MI_ISP_DestroyChannel(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    需要先禁用所有的输出端口, 然后停下channel,才能销毁通道。

  • 举例

    参考MI_ISP_CreateDevice 举例。

  • 相关主题

    MI_ISP_CreateChannel


2.6. MI_ISP_SetInputPortCrop

  • 功能

    设定 ISP 输入端口裁剪参数。

  • 语法

    MI_S32 MI_ISP_SetInputPortCrop(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_SYS_WindowRect_t *pstCropInfo);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
    pstCropInfo ISP 输入端口裁剪参数指针 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    • 只有input 是Dram buffer 时,才支持input crop。

    • Crop x和width 都是16对齐, y和height 都是2对齐。

    • Isp内部的3A 只会统计裁剪区域的信息,会影响到整个画面最终3A计算结果。


2.7. MI_ISP_GetInputPortCrop

  • 功能

    获取 ISP 输入端口裁剪参数。

  • 语法

    MI_S32 MI_ISP_GetInputPortCrop(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId,MI_SYS_WindowRect_t *pstCropInfo);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号 输入
    ChnId ISP 通道号 输入
    pstCropInfo ISP 输入端口裁剪参数指针 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a


2.8. MI_ISP_SetChnParam

  • 功能

    设定 ISP 通道参数。

  • 语法

    MI_S32 MI_ISP_SetChnParam(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_ChnParam_t *pstChnParam);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
    pstChnParam ISP 通道参数指针 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    建议在通道停止的情况下切换通道参数,避免通道内缓存的buffer和后端参数不匹配,导致异常。

  • 举例

    参考MI_ISP_CreateDevice 举例。

  • 相关主题

    MI_ISP_GetChnParam


2.9. MI_ISP_GetChnParam

  • 功能

    获取 ISP 通道参数。

  • 语法

    MI_S32 MI_ISP_GetChnParam(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_ChnParam_t *pstChnParam);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号 输入
    ChnId ISP 通道号 输入
    pstChnParam ISP 通道参数指针 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 相关主题

    MI_ISP_SetChnParam


2.10. MI_ISP_StartChannel

  • 功能

    启动 ISP 通道。

  • 语法

    MI_S32 MI_ISP_StartChannel(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 举例

    参考MI_ISP_CreateDevice 举例。

  • 相关主题

    MI_ISP_SetChnParam


2.11. MI_ISP_StopChannel

  • 功能

    停止 ISP 通道。

  • 语法

    MI_S32 MI_ISP_StopChannel(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    在通道创建的情况下,都可以停下通道,通道停下所有的输出端口都不会有数据输出。

  • 举例

    参考MI_ISP_CreateDevice举例。


2.12. MI_ISP_SetOutputPortParam

  • 描述

    设定 ISP 输出端口参数。

  • 语法

    MI_S32 MI_ISP_SetOutputPortParam(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_PORT PortId, MI_ISP_OutPortParam_t *pstOutPortParam);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
    PortId ISP 端口号 输入
    pstOutPortParam ISP 输出端口参数指针 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    • Output port0 只支持和MI_SCL realtime 绑定,输出区域和input 相同, 可以不调用此api设置。

    • Output port1 支持crop,需要指定size 输出。

    • Output port2 只支持输出RGBIR sensor的IR 数据,Output W/H固定为input W/H的各一半,可以不调用此api设置。

  • 举例

    参考MI_ISP_CreateDevice 举例。


2.13. MI_ISP_GetOutputPortParam

  • 描述

    获取 ISP 输出端口参数。

  • 语法

    MI_S32 MI_ISP_GetOutputPortParam(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_PORT PortId, MI_ISP_OutPortParam_t *pstOutPortParam);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
    PortId ISP 端口号 输入
    pstOutPortParam ISP 输出端口参数指针 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 相关主题

    MI_ISP_SetOutputPortParam


2.14. MI_ISP_EnableOutputPort

  • 描述

    启用 ISP 输出端口。

  • 语法

    MI_S32 MI_ISP_EnableOutputPort(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_PORT PortId);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
    PortId ISP 端口号 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    • Output port1 必须要在设置了output port属性的前提下才可以使能该端口。

    • Output port2 只有在使用RGBIR sensor的时候才可以使能。

  • 举例

    参考MI_ISP_CreateDevice 举例。

  • 相关主题

    MI_ISP_DisableOutputPort


2.15. MI_ISP_DisableOutputPort

  • 描述

    禁用 ISP 输出端口。

  • 语法

    MI_S32 MI_ISP_DisableOutputPort(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_PORT PortId);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
    PortId ISP 端口号 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a


2.16. MI_ISP_Alloc_IQDataBuf

  • 描述

    申请 IQ API数据缓存区。

  • 语法

    MI_S32 MI_ISP_Alloc_IQDataBuf(MI_U32 u32Size,void **pUserVirAddr);
    
  • 形参

    参数名称 描述 输入/输出
    u32Size IQ 数据缓存区大小。 输入
    pUserVirAddr IQ 数据缓存区指针地址 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    • 建议使用该api申请IQ api 数据,避免高频率调用造成cpu loading较高风险。

    • 一个线程申请一块isp data buffer,避免线程间buffer共用,导致线程之间buffer 互踩。

  • 举例

    #define  MI_ISP_MAX_DATA_SIZE  (80*1024)
    MI_ISP_Alloc_IQDataBuf(MI_ISP_MAX_DATA_SIZE, &pIspBuffer);
    MI_ISP_IQ_COLORTOGRAY_TYPE_t *pstColorToGray = (MI_ISP_IQ_COLORTOGRAY_TYPE_t *)pIspBuffer;
    MI_ISP_IQ_GetColorToGray( Channel, pstColorToGray);
    if(pstColorToGray->bEnable == SS_TRUE)
        pstColorToGray->bEnable = SS_FALSE;
    else
        pstColorToGray->bEnable = SS_TRUE;
    MI_ISP_IQ_SetColorToGray( Channel, pstColorToGray);
    
    MI_ISP_IQ_CONTRAST_TYPE_t  *pstContrast = (MI_ISP_IQ_CONTRAST_TYPE_t *)pIspBuffer;
    MI_ISP_IQ_GetContrast( Channel, pstContrast);
    MI_ISP_IQ_SetContrast( Channel, pstContrast);
    
    MI_ISP_Free_IQDataBuf(pIspBuffer)
    
  • 相关主题

    MI_ISP_Free_IQDataBuf


2.17. MI_ISP_Free_IQDataBuf

  • 描述

    释放 IQ 数据缓存区。

  • 语法

    MI_S32 MI_ISP_Free_IQDataBuf(void *pUserBuf);
    
  • 形参

    参数名称 描述 输入/输出
    pUserBuf IQ 申请的数据缓存区指针 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 举例

    参考MI_ISP_Alloc_IQDataBuf举例。


2.18. MI_ISP_CallBackTask_Register

  • 描述

    注册 ISP 回调接口。

  • 语法

    MI_S32 MI_ISP_CallBackTask_Register(MI_ISP_DEV DevId, MI_ISP_CallBackParam_t *pstCallBackParam);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    pstCallBackParam ISP 回调参数 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h, mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

  • 举例

    MI_S32 _MI_ISP_vsync1(MI_U64 u64Data)
    {
        DBG_ERR("DATA %llu \n", u64Data);
        return 0;
    }
    
    MI_S32 _MI_ISP_vsync2(MI_U64 u64Data)
    {
        DBG_ERR("DATA %llu \n", u64Data);
        return 0;
    }
    
    static MS_S32 _MI_ISP_testRegCallback(void)
    {
        MI_ISP_CallBackParam_t stCallBackParam1;
        MI_ISP_CallBackParam_t stCallBackParam2;
        memset(&stCallBackParam1, 0x0, sizeof(MI_ISP_CallBackParam_t));
        memset(&stCallBackParam2, 0x0, sizeof(MI_ISP_CallBackParam_t));
        stCallBackParam1.eCallBackMode = E_MI_ISP _CALLBACK_ISR;
        stCallBackParam1. eIrqType = E_MI_ISP_IRQ_ISPVSYNC;
        stCallBackParam1.pfnCallBackFunc = _mi_ISP_vsync1;
        stCallBackParam1.u64Data = 12;
        MI_ISP_CallBackTask_Register(&stCallBackParam1);
        stCallBackParam2.eCallBackMode = E_MI_ISP_CALLBACK_ISR;
        stCallBackParam2. eIrqType = E_MI_ISP_IRQ_ISPVSYNC;
        stCallBackParam2.pfnCallBackFunc = _mi_ISP_vsync2;
        stCallBackParam2.u64Data = 23;
        MI_ISP_CallBackTask_Register(&stCallBackParam2);
        return 0;
    }
    
    static MS_S32 _MI_ISP_testUnRegCallback(void)
    {
        MI_ISP_CallBackParam_t stCallBackParam1;
        MI_ISP_CallBackParam_t stCallBackParam2;
        memset(&stCallBackParam1, 0x0, sizeof(MI_ISP_CallBackParam_t));
        memset(&stCallBackParam2, 0x0, sizeof(MI_ISP_CallBackParam_t));
        stCallBackParam1.eCallBackMode = E_MI_ISP_CALLBACK_ISR;
        stCallBackParam1.eIrqType = E_MI_ISP_IRQ_ISPVSYNC;
        stCallBackParam1.pfnCallBackFunc = _mi_ISP_vsync1;
        stCallBackParam1.u64Data = 12;
        MI_ISP_CallBackTask_Unregister(&stCallBackParam1);
        stCallBackParam2.eCallBackMode = E_MI_ISP_CALLBACK_ISR;
        stCallBackParam2.eIrqType = E_MI_ISP_IRQ_ISPVSYNC;
        stCallBackParam2.pfnCallBackFunc = _mi_ISP_vsync2;
        stCallBackParam2.u64Data = 23;
        MI_ISP_CallBackTask_Unregister(&stCallBackParam2);
        return 0;
    }
    
  • 相关主题

    MI_ISP_CallBackTask_Unregister


2.19. MI_ISP_CallBackTask_Unregister

  • 描述

    注销回调接口。

  • 语法

    MI_S32 MI_ISP_CallBackTask_Unregister(MI_ISP_DEV DevId, MI_ISP_CallBackParam_t *pstCallBackParam);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    pstCallBackParam ISP 回调参数 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

  • 举例

    MI_ISP_CallBackTask_Register举例。


2.20. MI_ISP_SkipFrame

  • 描述

    设定从调用该API开始跳过Frame count。

  • 语法

    MI_S32 MI_ISP_SkipFrame(MI_ISP_DEV DevId,MI_ISP_CHANNEL ChnId, MI_U32 u32FrameNum);
    
  • 形参

    参数名称 描述 输入/输出
    ChnId ISP 通道号 输入
    u32FrameNum Frame 数量 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a


2.21. MI_ISP_LoadPortZoomTable

  • 描述

    载入 ISP 端口 Zoom Table。

  • 语法

    MI_S32 MI_ISP_LoadPortZoomTable(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId,  MI_ISP_ZoomTable_t *pZoomTable);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
    pZoomTable Zoom Table参数 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    • 通过该接口提前加载好zoom table, 可以每一帧frame依次应用table中的zoom参数,保证zoom效果平滑,对比应用循环call MI_ISP_SetOutputPortParam 设置crop,没有办法保证每一帧frame 生效设置, 无法做到平滑效果。

      X0 Y0 W0 H0 SensorId=0
      X1 Y1 W1 H1 SensorId=0
      X2 Y2 W2 H2 SensorId=1
      X3 Y3 W3 H3 SensorId=1

      表中包含crop位置和对应sensorid 信息,sensorid信息以支持长短焦切换场景。

    • Zoom 功能由MI_ISP 和MI_SCL 配合完成,MI_ISP 负责zoom过程中3A效果和长短焦切换场景时通知sensor driver切换sensor。

    • MI_SCL 负责crop 和scaling up, 所以在zoom场景中,MI_SCL不能再使用crop 功能。

    • Zoom运行过程中, 不可以重复load table,需要先MI_ISP_StopPortZoom,再load table。


2.22. MI_ISP_StartPortZoom

  • 描述

    启动 ISP端口Zoom。

  • 语法

    MI_S32 MI_ISP_StartPortZoom(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_ZoomAttr_t *pstZoomAttr);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
    pstZoomAttr Zoom Table参数 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    X0 Y0 W0 H0 SensorId=0
    X1 Y1 W1 H1 SensorId=0
    X2 Y2 W2 H2 SensorId=1
    X3 Y3 W3 H3 SensorId=1

    u32FromEntryIndex 和 u32ToEntryIndex 为table中index0~3 任意一个。

    当u32FromEntryIndex != u32ToEntryIndex, 逐帧应用从u32FromEntryIndex到u32ToEntryIndex的crop 参数。

    当u32FromEntryIndex == u32ToEntryIndex, 会停在当前u32FromEntryIndex参数。

    当MI内部检测到下一个entry的sensorid 和当前sensor id 不一致时,当前帧做完后会将sensirid通知给sensor driver, 切换到对应sensor 上。

  • 相关主题

    MI_ISP_StopPortZoom


2.23. MI_ISP_StopPortZoom

  • 描述

    停止 ISP端口Zoom。

  • 语法

    MI_S32 MI_ISP_StopPortZoom(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a

  • 注意

    MI_ISP_StartPortZoom 成对调用。


2.24. MI_ISP_GetPortCurZoomAttr

  • 描述

    获取 ISP 端口实时的 Zoom 属性。

  • 语法

    MI_S32 MI_ISP_GetPortCurZoomAttr(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_ZoomAttr_t *pstZoomAttr);
    
  • 形参

    参数名称 描述 输入/输出
    DevId ISP 设备号。 输入
    ChnId ISP 通道号 输入
    pstZoomAttr Zoom 属性状态 输出
  • 返回值

    • MI_OK 成功。

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

  • 依赖

    • 头文件:mi_isp_datatype.h、mi_isp.h

    • 库文件:libmi_isp.a


3. ISP 数据类型


3.1. 数据类型定义

数据类型 描述
MI_ISP_DEV 定义 ISP 设备的类型
MI_ISP_CHANNEL 定义 ISP 通道的类型
MI_ISP_PORT 定义 ISP 端口的类型
MI_ISP_DevMaskId_e 定义 ISP 设备需要mask使用的设备ID
MI_ISP_DevAttr_t 定义 ISP 设备属性参数
MI_ISP_HDRType_e 定义 HDR 开关模式
MI_ISP_3DNR_Level_e 定义 3DNR 设置等级
MI_ISP_BindSnrId_e 定义 ISP 绑定sensor的ID
MI_ISP_SYNC3A_e 定义同步各通道 3A 参数
MI_ISP_IQApiHeader_t 定义IQ api 数据类型
MI_ISP_VersionPara_t 定义ISP特殊参数版本
MI_ISP_CustIQParam_t 定义ISP初始化参数
MI_ISP_ChannelAttr_t 定义 ISP 通道静态属性参数
MI_ISP_ChnParam_t 定义 ISP 通道动态属性参数
MI_ISP_OutPortParam_t 定义 ISP 输出端口的参数
MI_ISP_CALLBK_FUNC 定义回调函数类型
MI_ISP_CallBackMode_e 定义回调模式
MI_ISP_IrqType_e 定义硬件中断类型
MI_ISP_CallBackParam_t 定义回调参数
MI_ISP_ZoomEntry_t 定义 Zoom 单元条目类型
MI_ISP_ZoomTable_t 定义 Zoom Table 类型
MI_ISP_ZoomAttr_t 定义 Zoom 属性

3.2. MI_ISP_DEV

  • 说明

    定义 ISP 设备的类型。

  • 定义

    typedef MI_U32 MI_ISP_DEV;
    

3.3. MI_ISP_CHANNEL

  • 说明

    定义 ISP 通道的类型。

  • 定义

    typedef MI_U32 MI_ISP_CHANNEL;
    

3.4. MI_ISP_PORT

  • 说明

    定义 ISP 端口的类型。

  • 定义

    typedef MI_U32 MI_ISP_PORT;
    

3.5. MI_ISP_DevMaskId_e

  • 说明

    定义 ISP 设备需要mask使用的设备ID。

  • 定义

    typedef enum
    
    {
    
        E_MI_ISP_DEVICEMASK_ID0 = 0x0001,
    
        E_MI_ISP_DEVICEMASK_ID1 = 0x0002,
    
        E_MI_ISP_DEVICEMASK_ID_MAX = 0xffff
    
    } MI_ISP_DevMaskId_e;
    
  • 注意事项

    Tiramisu 系列芯片只有ISP E_MI_ISP_DEVICEMASK_ID0使用。

  • 相关数据类型及接口

    MI_ISP_CreateDevice


3.6. MI_ISP_DevAttr_t

  • 说明

    定义 ISP 设备属性参数。

  • 定义

    typedef struct MI_ISP_DevAttr_s
    
    {
    
        MI_U32 u32DevStitchMask; //multi ISP dev bitmask by MI_ISP_DevMaskId_e
    
    }MI_ISP_DevAttr_t;
    
  • 成员

    成员名称 描述
    u32DevStitchMask ISP DEV ID 掩码。
  • 注意事项

    u32DevStitchMask由MI_ISP_DevMaskId_e,bitmask组成。如果通道上的数据量一个isp device处理速度无法达到要求,可以通过该参数复用另外一个Device。复用之后不可以再创建另外一个Device。

  • 相关数据类型及接口

    MI_ISP_CreateDevice


3.7. MI_ISP_HDRType_e

  • 说明

    定义 HDR 开关模式

  • 定义

    typedef enum
    
    {
    
        E_MI_ISP_HDR_TYPE_OFF,
    
        E_MI_ISP_HDR_TYPE_VC,
    
        E_MI_ISP_HDR_TYPE_DOL,
    
        E_MI_ISP_HDR_TYPE_EMBEDDED,
    
        E_MI_ISP_HDR_TYPE_LI,
    
        E_MI_ISP_HDR_TYPE_MAX
    
    } MI_ISP_HDRType_e;
    
  • 成员

    成员名称 描述
    E_MI_ISP_HDR_TYPE_OFF 不开HDR
    E_MI_ISP_HDR_TYPE_VC virtual channel mode HDR, vc0->long,vc1->short
    E_MI_ISP_HDR_TYPE_DOL Digital Overlap High Dynamic Range
    E_MI_ISP_HDR_TYPE_EMBEDDED compressed HDR mode
    E_MI_ISP_HDR_TYPE_LI Line interlace HDR
    E_MI_ISP_HDR_TYPE_MAX HDR 边界值
  • 注意事项

    具体使用的HDR Type 可以通过MI_SNR_GetPadInfo 接口获取。

    HDR功能需要MI_VIF 和MI_ISP 模块配合完成,需要两边设置相同的HDR类型。

  • 相关数据类型及接口

    MI_ISP_ChnParam_t


3.8. MI_ISP_3DNR_Level_e

  • 说明

    定义 3DNR 设置等级。

  • 定义

    typedef enum
    
    {
    
        E_MI_ISP_3DNR_LEVEL_OFF,
    
        E_MI_ISP_3DNR_LEVEL1,
    
        E_MI_ISP_3DNR_LEVEL2,
    
        E_MI_ISP_3DNR_LEVEL3,
    
        E_MI_ISP_3DNR_LEVEL4,
    
        E_MI_ISP_3DNR_LEVEL5,
    
        E_MI_ISP_3DNR_LEVEL6,
    
        E_MI_ISP_3DNR_LEVEL7,
    
        E_MI_ISP_3DNR_LEVEL_NUM
    
    }MI_ISP_3DNR_Level_e;
    
  • 注意事项

    Tiramisu系列芯片3DNR level最大为2,level 越高,降噪效果越好,消耗的buffer也越多。

  • 相关数据类型及接口

    MI_ISP_ChnParam_t


3.9. MI_ISP_BindSnrId_e

  • 说明

    定义 ISP 绑定sensor的ID。

  • 定义

    typedef enum
    
    {
    
        E_MI_ISP_SENSOR_INVALID = 0,
    
        E_MI_ISP_SENSOR0 = 0x1,
    
        E_MI_ISP_SENSOR1 = 0x2,
    
        E_MI_ISP_SENSOR2 = 0x4,
    
        E_MI_ISP_SENSOR3 = 0x8,
    
        E_MI_ISP_SENSOR4 = 0x10,
    
        E_MI_ISP_SENSOR5 = 0x20,
    
        E_MI_ISP_SENSOR6 = 0x40,
    
        E_MI_ISP_SENSOR7 = 0x80,
    
        E_MI_ISP_SENSOR_MAX = 8
    
    }MI_ISP_BindSnrId_e;
    

3.10. MI_ISP_SYNC3A_e

  • 说明

    定义同步各通道 3A 参数。

  • 定义

    typedef enum
    
    {
    
        E_MI_ISP_SYNC3A_NONE = 0x00,
    
        E_MI_ISP_SYNC3A_AE = 0x01,
    
        E_MI_ISP_SYNC3A_AWB = 0x02,
    
        E_MI_ISP_SYNC3A_IQ = 0x04
    
    }MI_ISP_SYNC3A_e;
    
  • 成员

    成员名称 描述
    E_MI_ISP_SYNC3A_NONE 不同步3A
    E_MI_ISP_SYNC3A_AE 同步自动曝光
    E_MI_ISP_SYNC3A_AWB 同步自动白平衡
    E_MI_ISP_SYNC3A_IQ 同步图像质量参数设置

3.11. MI_ISP_IQApiHeader_t

  • 说明

    定义设定IQ api 数据属性。

  • 定义

    typedef struct MI_ISP_IQApiHeader_s
    
    {
    
        MI_U32 u32HeadSize; //Size of MIIspApiHeader_t
    
        MI_U32 u32DataLen; //Data length;
    
        MI_U32 u32CtrlID; //Function ID
    
        MI_U32 u32Channel; //Isp channel number
    
        MI_U32 u32DevId; //Isp Device Id
    
        MI_S32 s32Ret; //Isp api retuen value
    
    } MI_ISP_IQApiHeader_t;
    
  • 成员

    成员名称 描述
    u32HeadSize MI_ISP_IQApiHeader_t struct占用空间
    u32DataLen 数据size
    u32CtrlID 功能对应control Id
    u32Channel Isp 通道Id
    u32DevId Isp 设备Id
    s32Ret 接口返回值

3.12. MI_ISP_VersionPara_t

  • 说明

    定义ISP特殊参数版本。

  • 定义

    typedef struct MI_ISP_VersionPara_s
    
    {
    
        MI_U32 u32Revision;
    
        MI_U32 u32Size;
    
        MI_U8 u8Data[64];
    
    }MI_ISP_VersionPara_t;
    
  • 成员

    成员名称 描述
    u32Revision 和IQ team 协商定义对应版本号
    u32Size 数据对应有效size
    u8Data[64] 存储数据
  • 相关数据类型及接口

    MI_ISP_CustIQParam_t


3.13. MI_ISP_CustIQParam_t

  • 说明

    定义ISP IQ初始化参数。

  • 定义

    typedef struct MI_ISP_CustIQParam_s
    
    {
    
        MI_ISP_VersionPara_t stVersion;
    
    }MI_ISP_CustIQParam_t;
    
  • 成员

    成员名称 描述
    stVersion 版本参数
  • 注意事项

    需要ISP 客制化处理的一些IQ初始化参数,可以通过该参数设置,如果没有需求,可以都设置0。


3.14. MI_ISP_ChannelAttr_t

  • 说明

    定义 ISP 通道静态属性参数。

  • 定义

    typedef struct MI_ISP_ChannelAttr_s
    
    {
    
        MI_U32 u32SensorBindId; //bitmask by MI_ISP_BindSnrId_e
    
        MI_ISP_CustIQParam_t stIspCustIqParam;
    
        MI_U32 u32Sync3AType; //sync 3a bitmask by MI_ISP_SYNC3A_e
    
    }MI_ISP_ChannelAttr_t;
    
  • 成员

    成员名称 描述
    u32SensorBindId 通道绑定对应的sensor Id
    stIspCustIqParam Isp IQ初始化参数
    u32Sync3AType 同步通道内多组图像之间的3A/IQ 参数
  • 注意事项

    • 当多sensor拼接场景一个ISP channel 需要处理多个sensor 图像,需要通过u32SensorBindId 将多个sensor Id bitmask 起来设置,否则只设置对应sensor Id接口,如果不需要ISP做IQ/3A,或者前端数据源不是sensor,可以设置0。

    • 当多sensor拼接场景一个ISP channel 需要处理多个sensor 图像,通过u32Sync3AType 设置多个图像之间3A/IQ效果同步, 避免两个图像之间效果差别过大。

  • 相关数据类型及接口

    MI_ISP_CreateChannel


3.15. MI_ISP_ChnParam_t

  • 说明

    定义 ISP 通道动态属性参数。

  • 定义

    typedef struct MI_ISP_ChnParam_s
    
    {
    
        MI_ISP_HDRType_e eHDRType;
    
        MI_ISP_3DNR_Level_e e3DNRLevel;
    
        MI_BOOL bMirror;
    
        MI_BOOL bFlip;
    
        MI_SYS_Rotate_e eRot;
    
    } MI_ISP_ChnParam_t;
    
  • 成员

    成员名称 描述
    eHDRType HDR 开关参数
    e3DNRLevel 3dnr 量级参数
    bMirror 使能通道Mirror
    bFlip 使能通道Flip
    eRot 通道rotation参数
  • 注意事项

    eRot>0或者bFlip=True时,e3DNRLevel 必须大于0。

  • 相关数据类型及接口

    MI_ISP_SetChnParam


3.16. MI_ISP_OutPortParam_t

  • 说明

    定义 ISP 输出端口的参数。

  • 定义

    typedef struct MI_ISP_OutPortParam_s
    
    {
    
        MI_SYS_WindowRect_t stCropRect;
    
        MI_SYS_PixelFormat_e ePixelFormat;
    
    }MI_ISP_OutPortParam_t;
    
  • 成员

    成员名称 描述
    stCropRect 输出裁剪区域
    ePixelFormat 像素格式

3.17. MI_ISP_CALLBK_FUNC

  • 说明

    定义回调函数类型。

  • 定义

    typedef MI_S32 (*MI_ISP_CALLBK_FUNC)(MI_U64 u64Data);
    
  • 相关数据类型及接口

    MI_ISP_CallBackParam_t


3.18. MI_ISP_CallBackMode_e

  • 说明

    定义回调模式。

  • 定义

    typedef enum
    
    {
    
        E_MI_ISP_CALLBACK_ISR,
    
        E_MI_ISP_CALLBACK_MAX,
    
    } MI_ISP_CallBackMode_e;
    
  • 成员

    成员名称 描述
    E_MI_ISP_CALLBACK_ISR 硬件中断模式回调
    E_MI_ISP_CALLBACK_MAX 回调模式最大值
  • 注意事项

    目前只支持ISR 回调模式。

  • 相关数据类型及接口

    MI_ISP_CallBackParam_t


3.19. MI_ISP_IrqType_e

  • 说明

    定义硬件中断类型。

  • 定义

    typedef enum
    
    {
    
        E_MI_ISP_IRQ_ISPVSYNC,
    
        E_MI_ISP_IRQ_ISPFRAMEDONE,
    
        E_MI_ISP_IRQ_MAX,
    
    } MI_ISP_IrqType_e;
    
  • 成员

    成员名称 描述
    E_MI_ISP_IRQ_ISPVSYNC ISP Vsync 中断类型
    E_MI_ISP_IRQ_ISPFRAMEDONE ISP Frame done 中断类型
    E_MI_ISP_IRQ_MAX ISP 硬件中断类型最大值
  • 注意事项

    • E_MI_VPE_IRQ_ISPVSYNC: 每一帧第一个pixel的信号

    • E_MI_VPE_IRQ_ISPFRAMEDONE:isp 写出每一张结束的信号。

  • 相关数据类型及接口

    MI_ISP_CallBackParam_t


3.20. MI_ISP_CallBackParam_t

  • 说明

    定义回调参数。

  • 定义

    typedef struct MI_ISP_CallBackParam_s
    
    {
    
        MI_ISP_CallBackMode_e eCallBackMode;
    
        MI_ISP_IrqType_e eIrqType;
    
        MI_ISP_CALLBK_FUNC pfnCallBackFunc;
    
        MI_U64 u64Data;
    
    } MI_ISP_CallBackParam_t;
    
  • 成员

    成员名称 描述
    eCallBackMode 回调模式
    eIrqType 硬件中断模式类型
    pfnCallBackFunc 回调接口指针
    u64Data 回调接口参数
  • 相关数据类型及接口

    MI_ISP_CallBackTask_Register

    MI_ISP_CallBackTask_Unregister


3.21. MI_ISP_ZoomEntry_t

  • 说明

    定义 Zoom 单元条目类型。

  • 定义

    typedef struct MI_ISP_ZoomEntry_s
    
    {
    
        MI_SYS_WindowRect_t stCropWin;
    
        MI_U8 u8ZoomSensorId;
    
    } MI_ISP_ZoomEntry_t;
    
  • 成员

    成员名称 描述
    stCropWin Crop位置参数
    u8ZoomSensorId Crop 参数对应的sensor Id
  • 注意事项

    u8ZoomSensorId和sensor driver中pCus_sensor_GetCurSwtichSensorId回调函数回传值对应。

  • 相关数据类型及接口

    MI_ISP_ZoomTable_t


3.22. MI_ISP_ZoomTable_t

  • 说明

    定义 Zoom Table 类型。

  • 定义

    typedef struct MI_ISP_ZoomTable_s
    
    {
    
        MI_U32 u32EntryNum;
    
        MI_ISP_ZoomEntry_t *pVirTableAddr;
    
    } MI_ISP_ZoomTable_t;
    
  • 成员

    成员名称 描述
    u32EntryNum Zoom Table 中包含条目数量
    pVirTableAddr Zoom Table Buffer Pointer
  • 相关数据类型及接口

    MI_ISP_LoadPortZoomTable


3.23. MI_ISP_ZoomAttr_t

  • 说明

    定义 Zoom 属性。

  • 定义

    typedef struct MI_ISP_ZoomAttr_s
    
    {
    
        MI_U32 u32FromEntryIndex;
    
        MI_U32 u32ToEntryIndex;
    
        MI_U32 u32CurEntryIndex;
    
    } MI_ISP_ZoomAttr_t;
    
  • 成员

    成员名称 描述
    u32FromEntryIndex 开始运行Zoom的条目索引
    u32ToEntryIndex 结束运行Zoom 的条目索引
    u32CurEntryIndex 当前Zoom 位置的索引
  • 相关数据类型及接口

    MI_ISP_StartPortZoom

    MI_ISP_GetPortCurZoomAttr


4. ISP 错误码

API 错误码如下表所示。

错误代码 宏定义 描述
0xA0078001 MI_ERR_ISP_INVALID_CHNID 设备通道号无效
0xA0078002 MI_ERR_ISP_INVALID_PORTID 设备端口号无效
0xA0078003 MI_ERR_ISP_ILLEGAL_PARAM 非法参数
0xA0078004 MI_ERR_ISP_EXIST 设备已经退出
0xA0078005 MI_ERR_ISP_UNEXIST 设备还没有退出
0xA0078006 MI_ERR_ISP_NULL_PTR 空指针参数
0xA0078008 MI_ERR_ISP_NOT_SUPPORT 不支持
0xA0078009 MI_ERR_ISP_NOT_PERM 操作不允许
0xA007800C MI_ERR_ISP_NOMEM 分配内存失败
0xA007800D MI_ERR_ISP_NOBUF 内存已经使用完
0xA007800E MI_ERR_ISP_BUF_EMPTY 视频输入缓存为空
0xA0078010 MI_ERR_ISP_NOTREADY 设备未初始化完成
0xA0078012 MI_ERR_ISP_BUSY 设备系统繁忙