MI ISP API
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
裁剪,对输入图像进行裁剪。
1.4. insmod参数说明¶
使用insmod mi_isp.ko 后面可以带的参数使用情况如下所示:
参数 | 含义 | 取值 |
---|---|---|
g_u32DefaultDropNum | Drop MI_ISP_CreateChannel 之后buffer的张数 | 1. Default:10。由于 ISP 需要收敛,默认会drop掉10张。 2. 用户可以设定任意值。在快启的场景时,减少drop的张数,可以缩短启动时间。 |
2. API 参考¶
该功能模块提供以下API:
2.1. MI_ISP_CreateDevice¶
-
功能
创建一个 ISP 设备。
-
语法
MI_S32 MI_ISP_CreateDevice(MI_ISP_DEV DevId, MI_ISP_DevAttr_t *pstDevAttr);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 pstDevAttr ISP 设备属性指针。静态属性。 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非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) { #define ST_MAX_ISP_OUTPORT_NUM (2) 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); MI_ISP_ChannelAttr_t stIspChnAttr; memset(&stIspChnAttr, 0x0, sizeof(MI_ISP_ChannelAttr_t)); stIspChnAttr. u32SensorBindId = E_MI_ISP_SENSOR0; MI_ISP_CreateChannel(IspDevId, IspChnId, &stIspChnAttr); MI_SYS_WindowRect_t stInputCropInfo; stInputCropInfo.u16x=0; stInputCropInfo.u16y=0; stInputCropInfo.u16width=0; stInputCropInfo.u16height=0;//width/height==0 no use crop. MI_ISP_SetInputPortCrop(IspDevId, IspChnId, &stInputCropInfo); MI_ISP_ChnParam_t stChnParam; stChnParam.eHDRType = E_MI_ISP_HDR_TYPE_OFF; stChnParam.e3DNRLevel = E_MI_ISP_3DNR_LEVEL2; stChnParam.bMirror = FALSE; stChnParam.bFlip = FALSE; stChnParam.eRot = E_MI_SYS_ROTATE_NONE; //use rot or flip, 3dnr level must more than 0 stChnParam.bY2bEnable = FALSE; MI_ISP_SetChnParam(IspDevId, IspChnId, &stChnParam); 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)); stIspOutputParam.stCropRect.u16x=0; stIspOutputParam.stCropRect.u16y=0; stIspOutputParam.stCropRect.u16Width=0; stIspOutputParam.stCropRect.u16Height=0;//width/height use 0, not use crop stIspOutputParam.ePixelFormat = E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_YUV420; 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) { #define ST_MAX_ISP_OUTPORT_NUM (2) 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; }
-
相关主题
2.2. MI_ISP_DestoryDevice¶
-
功能
销毁一个 ISP 设备。
-
语法
MI_S32 MI_ISP_DestoryDevice(MI_ISP_DEV DevId);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
需要先禁用所有的输出端口,然后停下channel,销毁通道,才能销毁设备。
-
举例
参考MI_ISP_CreateDevice 举例。
-
相关主题
2.3. 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_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
需要先创建设备, 才能创建通道。
-
举例
参考MI_ISP_CreateDevice举例。
-
相关主题
2.4. MI_ISP_DestroyChannel¶
-
功能
销毁一个 ISP 通道。
-
语法
MI_S32 MI_ISP_DestroyChannel(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
需要先禁用所有的输出端口, 然后停下channel,才能销毁通道。
-
举例
参考MI_ISP_CreateDevice 举例。
-
相关主题
2.5. 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_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
-
只有input 是Dram buffer 时,才支持input crop。
-
Crop x、Crop y、width、height 都是2对齐。
-
Isp内部的3A 只会统计裁剪区域的信息,会影响到整个画面最终3A计算结果。
-
2.6. 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_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
2.7. 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_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
建议在通道停止的情况下切换通道参数,避免通道内缓存的buffer和后端参数不匹配,导致异常。
-
举例
参考MI_ISP_CreateDevice 举例。
-
相关主题
2.8. 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_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
相关主题
2.9. MI_ISP_StartChannel¶
-
功能
启动 ISP 通道。
-
语法
MI_S32 MI_ISP_StartChannel(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
举例
参考MI_ISP_CreateDevice 举例。
-
相关主题
2.10. MI_ISP_StopChannel¶
-
功能
停止 ISP 通道。
-
语法
MI_S32 MI_ISP_StopChannel(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
在通道创建的情况下,都可以停下通道,通道停下所有的输出端口都不会有数据输出。
-
举例
参考MI_ISP_CreateDevice举例。
2.11. 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_SUCCESS(0) 成功。
-
非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.12. 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_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
相关主题
2.13. 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_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
-
Output port1 必须要在设置了output port属性的前提下才可以使能该端口。
-
Output port2 只有在使用RGBIR sensor的时候才可以使能。
-
-
举例
参考MI_ISP_CreateDevice 举例。
-
相关主题
2.14. 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_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
2.15. MI_ISP_Alloc_IQDataBuf¶
-
描述
申请 IQ API数据缓存区。
-
语法
MI_S32 MI_ISP_Alloc_IQDataBuf(MI_U32 u32Size,void **pUserVirAddr);
-
形参
参数名称 描述 输入/输出 u32Size IQ 数据缓存区大小。 输入 pUserVirAddr IQ 数据缓存区指针地址 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非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_ColorToGrayType_t *pstColorToGray = (MI_ISP_IQ_ColorToGrayType_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_ContrastType_t *pstContrast = (MI_ISP_IQ_ContrastType_t *)pIspBuffer; MI_ISP_IQ_GetContrast( Channel, pstContrast); MI_ISP_IQ_SetContrast( Channel, pstContrast); MI_ISP_Free_IQDataBuf(pIspBuffer)
-
相关主题
2.16. MI_ISP_Free_IQDataBuf¶
-
描述
释放 IQ 数据缓存区。
-
语法
MI_S32 MI_ISP_Free_IQDataBuf(void *pUserBuf);
-
形参
参数名称 描述 输入/输出 pUserBuf IQ 申请的数据缓存区指针 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
举例
2.17. 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_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h, mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
-
该接口目前只支持kernel mode 调用
-
-
举例
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; }
-
相关主题
2.18. MI_ISP_CallBackTask_Unregister¶
-
描述
注销回调接口。
-
语法
MI_S32 MI_ISP_CallBackTask_Unregister(MI_ISP_DEV DevId, MI_ISP_CallBackParam_t *pstCallBackParam);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 pstCallBackParam ISP 回调参数 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
-
该接口目前只支持kernel mode 调用
-
-
举例
2.19. 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_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
2.20. 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_SUCCESS(0) 成功。
-
非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.21. 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_SUCCESS(0) 成功。
-
非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 上。
-
相关主题
2.22. MI_ISP_StopPortZoom¶
-
描述
停止 ISP端口Zoom。
-
语法
MI_S32 MI_ISP_StopPortZoom(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
和MI_ISP_StartPortZoom 成对调用。
2.23. 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_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
2.24. MI_ISP_SetCustSegAttr¶
-
功能
设置AI ISP属性。
-
语法
MI_S32 MI_ISP_SetCustSegAttr(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_CustSegAttr_t *pstCustSegAttr);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 pstCustSegAttr AI ISP属性 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
-
pstCustSegAttr→eMode的值为E_MI_ISP_CUST_SEG_MODE_INSERT或E_MI_ISP_CUST_SEG_MODE_INSERT时,会使能AI ISP。此时MI ISP内部会分成3个pass。pass0,pass1和pass2,功能由ISP的hdr、3dnr、wdr、rgb2yuv 4个组件组成。pass1是专门给app提供raw buffer。
-
使能AI ISP时,不支持isp rotation/mirror/flip。
-
Pass0和pass2有以下组合,使用MI_ISP_CustSegAttr_t表示。注意pass0模块序号不能比pass2大。
Pass0: HDR, HDR→3DNR, HDR→3DNR→WDR, HDR→3DNR→WDR→RGB2YUV
Pass2: RGB2YUV, WDR→RGB2YUV, 3DNR→WDR→RGB2YUV, HDR→3DNR→WDR→RGB2YUV
E_MI_ISP_SEG_HDR输出是before 3DNR。
E_MI_ISP_SEG_3DNR包含DNR Rotation/mirror/flip,输出是before WDR。
E_MI_ISP_SEG_WDR输出是before RGB2YUV。
-
pstCustSegAttr→eMode、pstCustSegAttr→eFrom和pstCustSegAttr→eTo,用于描述pass1的功能组成。
E_MI_ISP_CUST_SEG_MODE_INSERT表示在HDR→3DNR→WDR→RGB2YUV中间某个地方插入app的图像处理pass1。
E_MI_ISP_CUST_SEG_MODE_REPLACE,表示替换HDR、3DNR、WDR、RGB2YUV的功能。可以只替换3DNR,只替换WDR,或3DNR、WDR都替换掉。
例如:
-
eFrom= E_MI_ISP_SEG_3DNR, eTo= E_MI_ISP_SEG_WDR, eMode= E_MI_ISP_CUST_SEG_MODE_INSERT
-
eFrom= E_MI_ISP_SEG_3DNR, eTo= E_MI_ISP_SEG_WDR, eMode= E_MI_ISP_CUST_SEG_MODE_REPLACE
-
eFrom= E_MI_ISP_SEG_3DNR, eTo= E_MI_ISP_SEG_3DNR, eMode= E_MI_ISP_CUST_SEG_MODE_REPLACE
-
eFrom= E_MI_ISP_SEG_HDR, eTo= E_MI_ISP_SEG_HDR, eMode= E_MI_ISP_CUST_SEG_MODE_REPLACE
-
eFrom= E_MI_ISP_SEG_RGB2YUV, eTo= E_MI_ISP_SEG_RGB2YUV, eMode= E_MI_ISP_CUST_SEG_MODE_REPLACE
-
-
MI_ISP_SetCustSegAttr要在MI_ISP_CreateChannel后,在MI_ISP_StartChannel和MI_ISP_SetOutputPortParam前调用。
-
-
举例
MI_ISP 初始化:
MI_S32 ST_IspModuleInit(MI_ISP_DEV IspDevId) { MI_ISP_CHANNEL IspChnId = 0; MI_ISP_PORT IspOutPortId =1; 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); MI_ISP_ChannelAttr_t stIspChnAttr; memset(&stIspChnAttr, 0x0, sizeof(MI_ISP_ChannelAttr_t)); stIspChnAttr. u32SensorBindId = E_MI_ISP_SENSOR0; MI_ISP_CreateChannel(IspDevId, IspChnId, &stIspChnAttr); MI_SYS_WindowRect_t stInputCropInfo; stInputCropInfo.u16x=0; stInputCropInfo.u16y=0; stInputCropInfo.u16width=0; stInputCropInfo.u16height=0;//width/height==0 no use crop. MI_ISP_SetInputPortCrop(IspDevId, IspChnId, & stInputCropInfo); MI_ISP_ChnParam_t stChnParam; stChnParam.eHDRType = E_MI_ISP_HDR_TYPE_OFF; stChnParam.e3DNRLevel = E_MI_ISP_3DNR_LEVEL2; stChnParam.bMirror = FALSE; stChnParam.bFlip = FALSE; stChnParam.eRot = E_MI_SYS_ROTATE_NONE; stChnParam.bY2bEnable = FALSE; MI_ISP_SetChnParam(IspDevId, IspChnId, & stChnParam); MI_ISP_CustSegAttr_t stCustSegAttr; memset(&stCustSegAttr, 0x0, sizeof(MI_ISP_CustSegAttr_t)); stCustSegAttr.eMode = E_MI_ISP_CUST_SEG_MODE_INSERT; stCustSegAttr.eFrom = E_MI_ISP_SEG_3DNR; stCustSegAttr.eTo = E_MI_ISP_SEG_WDR; stCustSegAttr.stInputParam.ePixelFormat = RGB_BAYER_PIXEL(E_MI_SYS_DATA_PRECISION_12BPP, E_MI_SYS_PIXEL_BAYERID_GR); stCustSegAttr.stOutputParam.ePixelFormat = stCustSegAttr.stInputParam.ePixelFormat; MI_ISP_SetCustSegAttr(enDevId,enChnId, &stCustSegAttr); MI_ISP_StartChannel(IspDevId, IspChnId); MI_ISP_OutPortParam_t stIspOutputParam; memset(&stIspOutputParam, 0x0, sizeof(MI_ISP_OutPortParam_t)); stIspOutputParam.stCropRect.u16x=0; stIspOutputParam.stCropRect.u16y=0; stIspOutputParam.stCropRect.u16Width=0; stIspOutputParam.stCropRect.u16Height=0;//width/height use 0, not use crop stIspOutputParam.ePixelFormat = E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_YUV420; MI_ISP_SetOutputPortParam(IspDevId, IspChnId, IspOutPortId, &stIspOutputParam); MI_ISP_EnableOutputPort(IspDevId, IspChnId, IspOutPortId); return MI_SUCCESS; }
获取raw:
MI_SYS_BUF_HANDLE hBufHandle = NULL; MI_SYS_BufInfo_t stInputBufInfo; MI_SYS_BufInfo_t stOutputBufInfo; MI_U8 *pSrcData = NULL, *pDstData = NULL; memset(&stInputBufInfo, 0, sizeof(MI_SYS_BufInfo_t)); memset(&stOutputBufInfo, 0, sizeof(MI_SYS_BufInfo_t)); s32Ret = MI_ISP_GetCustSegBuf(stChnPort.u32DevId, stChnPort.u32ChnId, &hBufHandle, &stInputBufInfo, &stOutputBufInfo, 200); if(s32Ret == MI_SUCCESS) { pSrcData = stInputBufInfo.stFrameData->pVirAddr[0]; pDstData = stOutputBufInfo.stFrameData->pVirAddr[0]; memcpy(pDstData, pSrcData, stOutputBufInfo.stFrameData.u32BufSize); memset(pDstData, 0, stOutputBufInfo.stFrameData.u32BufSize/4); MI_ISP_PutCustSegBuf(stChnPort.u32DevId, stChnPort.u32ChnId, hBufHandle); }
2.25. MI_ISP_GetCustSegAttr¶
-
功能
获取AI ISP属性。
-
语法
MI_S32 MI_ISP_GetCustSegAttr(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_CustSegAttr_t *pstCustSegAttr);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 pstCustSegAttr AI ISP属性 输出 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
2.26. MI_ISP_GetCustSegBuf¶
-
功能
获取AI ISP buffer。
-
语法
MI_S32 MI_ISP_GetCustSegBuf(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId,MI_SYS_BUF_HANDLE *pBufHandle, MI_SYS_BufInfo_t *pstInputBufInfo, MI_SYS_BufInfo_t *pstOutputBufInfo, MI_S32 s32MilliSec);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 pBufHandle, Pass1 input/output Buf的handle句柄 输出 pstInputBufInfo Pass1 input buffer 输出 pstOutputBufInfo Pass1 output buffer 输出 s32MilliSec 超时时间 ms 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
和MI_ISP_PutCustSegBuf成对使用。
-
举例
2.27. MI_ISP_PutCustSegBuf¶
-
功能
释放AI ISP buffer。
-
语法
MI_S32 MI_ISP_PutCustSegBuf(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_SYS_BUF_HANDLE bufHandle);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 pBufHandle, Pass1 input/output Buf的handle句柄 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
-
和MI_ISP_GetCustSegBuf成对使用。
-
要按MI_ISP_GetCustSegBuf获取buffer的顺序,调用MI_ISP_PutCustSegBuf,不能乱序put buffer。
-
-
举例
2.28. MI_ISP_GetSubChnId¶
-
功能
获取ISP的子通道号。
-
语法
MI_S32 MI_ISP_GetSubChnId(MI_ISP_DEV DevId, MI_ISP_CHANNEL MainChnId, MI_ISP_BindSnrId_e eSensorBindId, MI_U32 *pu32SubChnId);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 MainChnId ISP 通道号 输入 eSensorBindId 子通道绑定的sensor号 输入 pu32SubChnId ISP 子通道号 输出 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
-
在Stitch场景下,一个MI_ISP Channel会绑定多个Sensor,当IQ要控制对应Sensor时,需要输入MI_ISP DevId,MI_ISP ChannelId 和 SensorId,获取对应的SubChannelId,也就是IQ所使用的通道。
-
其他情况下IQ所使用的通道和MI_ISP ChannelId一致。
-
3. ISP 数据类型¶
视频输入相关数据类型定义如下:
数据类型 | 描述 |
---|---|
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 属性 |
MI_ISP_CustSegAttr_t | 定义AI ISP属性 |
MI_ISP_CustSegInPortParam_t | Pass1 input port的属性 |
MI_ISP_CustSegOutPortParam_t | Pass1 output port的属性 |
MI_ISP_CustSegMode_e | AI ISP的模式 |
MI_ISP_InternalSeg_e | ISP的模块名称 |
3.1. MI_ISP_DEV¶
-
说明
定义 ISP 设备的类型。
-
定义
typedef MI_U32 MI_ISP_DEV;
3.2. MI_ISP_CHANNEL¶
-
说明
定义 ISP 通道的类型。
-
定义
typedef MI_U32 MI_ISP_CHANNEL;
3.3. MI_ISP_PORT¶
-
说明
定义 ISP 端口的类型。
-
定义
typedef MI_U32 MI_ISP_PORT;
3.4. 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使用。
-
相关数据类型及接口
3.5. 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。
-
相关数据类型及接口
3.6. 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类型。
-
相关数据类型及接口
3.7. 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也越多。
-
相关数据类型及接口
3.8. 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.9. 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.10. 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.11. MI_ISP_VersionPara_t¶
-
说明
定义ISP特殊参数版本。
-
定义
typedef struct MI_ISP_VersionPara_s { MI_U32 u32Revision; MI_U32 u32Size; MI_U8 u8Data[VERSIONPARA_DATA_SIZE]; }MI_ISP_VersionPara_t;
-
成员
成员名称 描述 u32Revision 和IQ team 协商定义对应版本号 u32Size 数据对应有效size u8Data[VERSIONPARA_DATA_SIZE] 存储数据,VERSIONPARA_DATA_SIZE的值是64 -
相关数据类型及接口
3.12. 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.13. 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效果同步, 避免两个图像之间效果差别过大。
-
-
相关数据类型及接口
3.14. 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。
-
相关数据类型及接口
3.15. 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.16. MI_ISP_CALLBK_FUNC¶
-
说明
定义回调函数类型。
-
定义
typedef MI_S32 (*MI_ISP_CALLBK_FUNC)(MI_U64 u64Data);
-
相关数据类型及接口
3.17. 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 回调模式。
-
相关数据类型及接口
3.18. 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 写出每一张结束的信号。
-
-
相关数据类型及接口
3.19. 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 回调接口参数 -
相关数据类型及接口
3.20. 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回调函数回传值对应。
-
相关数据类型及接口
3.21. 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 -
相关数据类型及接口
3.22. 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 位置的索引 -
相关数据类型及接口
3.23. MI_ISP_CustSegAttr_t¶
-
说明
定义AI ISP属性。
-
定义
typedef struct MI_ISP_CustSegAttr_s { MI_ISP_CustSegMode_e eMode; MI_ISP_InternalSeg_e eFrom; MI_ISP_InternalSeg_e eTo; MI_ISP_CustSegInPortParam_t stInputParam; MI_ISP_CustSegOutPortParam_t stOutputParam; } MI_ISP_CustSegAttr_t;
-
成员
成员名称 描述 eMode Pass1的模式 eFrom Pass1的起始模块 eTo Pass1的结束模块 stInputParam Pass1 input port的属性 stOutputParam Pass1 output port的属性 -
注意事项
参数具体作用,请参考MI_ISP_SetCustSegAttr的说明。
-
相关数据类型及接口
3.24. MI_ISP_CustSegInPortParam_t¶
-
说明
Pass1 input port的属性。
-
定义
typedef struct MI_ISP_CustSegInPortParam_s { MI_SYS_PixelFormat_e ePixelFormat; } MI_ISP_CustSegInPortParam_t;
-
成员
成员名称 描述 ePixelFormat 数据格式 -
注意事项
-
Before 3DNR只支持12bit bayer和16bit bayer的输入输出。
-
Before WDR只支持16bit bayer的输入输出。
-
Before RGB2YUV只支持E_MI_SYS_PIXEL_FRAME_ARGB8888和E_MI_SYS_PIXEL_FRAME_RGB101010的输入输出。
-
-
相关数据类型及接口
3.25. MI_ISP_CustSegOutPortParam_t¶
-
说明
Pass1 output port的属性。
-
定义
typedef struct MI_ISP_CustSegOutPortParam_s { MI_SYS_PixelFormat_e ePixelFormat; } MI_ISP_CustSegOutPortParam_t;
-
成员
成员名称 描述 ePixelFormat 数据格式 -
注意事项
-
Before 3DNR只支持12bit bayer和16bit bayer的输入输出。
-
Before WDR只支持16bit bayer的输入输出。
-
Before RGB2YUV只支持E_MI_SYS_PIXEL_FRAME_ARGB8888和E_MI_SYS_PIXEL_FRAME_RGB101010的输入输出。
-
-
相关数据类型及接口
3.26. MI_ISP_CustSegMode_e¶
-
说明
AI ISP的模式。
-
定义
typedef enum { E_MI_ISP_CUST_SEG_MODE_NONE = 0, E_MI_ISP_CUST_SEG_MODE_INSERT, E_MI_ISP_CUST_SEG_MODE_REPLACE, E_MI_ISP_CUST_SEG_MODE_MAX } MI_ISP_CustSegMode_e;
-
成员
成员名称 描述 E_MI_ISP_CUST_SEG_MODE_NONE 关闭AI ISP E_MI_ISP_CUST_SEG_MODE_INSERT 插入模式 E_MI_ISP_CUST_SEG_MODE_REPLACE 替换模式 E_MI_ISP_CUST_SEG_MODE_MAX 模式的最大值 -
相关数据类型及接口
3.27. MI_ISP_InternalSeg_e¶
-
说明
ISP的模块名称。
-
定义
typedef enum { E_MI_ISP_SEG_INVALID = 0, E_MI_ISP_SEG_HDR, // HDR E_MI_ISP_SEG_3DNR, // 3DNR E_MI_ISP_SEG_WDR, // WDR E_MI_ISP_SEG_RGB2YUV, // RGB2YUV E_MI_ISP_SEG_MAX } MI_ISP_InternalSeg_e;
-
成员
成员名称 描述 E_MI_ISP_SEG_INVALID 无效模块 E_MI_ISP_SEG_HDR HDR模块 E_MI_ISP_SEG_3DNR DNR,Rotation/mirror/flip模块 E_MI_ISP_SEG_WDR WDR模块 E_MI_ISP_SEG_RGB2YUV RGB2YUV模块 E_MI_ISP_SEG_MAX 模块的最大值 -
相关数据类型及接口
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 | 设备系统繁忙 |
5. PROCFS介绍¶
5.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_isp/mi_isp0
-
调试信息分析
记录当前ISP的使用状况以及相关属性、可以动态地获取到这些信息,方便调试和测试。
-
参数说明
参数 描述 ISP Dev info DevId Isp Dev Id CreChnNum 当前 Chn 数量 DevMask Stitch Dev Mask cmdq Cmdq 指针 En ISR 中断使能标志 Mode ISR 中断模式 num ISR ID VsyncCnt ISR ID FrameDoneCnt ISR Frame Done Cnt DropCnt ISR Frame Drop Cnt ISP Chn info DevId Isp Dev Id ChnId Isp Chn Id start Chn Start Flag SnrId Bind sensorId Sync3A Sync 3A type chnNum Muti chn Num Crop Input Crop Size InSize Input Size pixel Input pixel format Stride Input Buffer Stride Atom 底层拿住 buffer 数量 Atom0 释放 buffer 后底层没有 buffer 数量 Rot Rotation 角度 bMirror/Flip 水平/竖直 翻转 3DNRLevel 3DNR Level HdrMode HDR mode PreCnt/EnqCnt/BarCnt/ checkin/checkout/DeqC nt/DropCnt Callback 接口执行次数 EnqOTNull Enq 时 OutBuffer 为 Null 次数统计 ISP OutPut Port info DevId Dev Id ChnId Plane id PortID Port Id Bindtype 与后级绑定模式 Enable Port enable flag Pixel Port output pixel format PortCrop output Crop Size Stride Output Stride GetCnt 尝试获取 OutPut buffer 数量 Failcnt 获取 OutPut buffer 失败数量 FinishCnt 处理完 OutPut buffer 数量 fps Output port frame rate
5.2. echo¶
# echo help > /proc/mi_modules/mi_isp/mi_isp0
Echo help 查看可用命令
功能 | 打印所有 channel 锁的使用 function 和 line 和 time |
---|---|
命令 | echo debugmutex > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | 无 |
举例 | 无 |
功能 | Stop 指定 channel |
---|---|
命令 | echo stopchnl [ChnID] [ON/OFF] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | [ChnId] 通道号 [ON/OFF] ON: stop chn; OFF: start chn |
举例 | echo stopchnl 0 ON > /proc/mi_modules/mi_isp/mi_isp0 |
功能 | Dump选定channel的output数据,并保存在/path路径下 |
---|---|
命令 | echo dumptaskfile [chnid, Cnt, /path/, bOnlyDumpResChange, bdumpport] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id |
Cnt: dump 数量 | |
Path: 存放dump出来文件的路径 | |
bOnlyDumpResChange: 有时候有些花图在切分辨率时产生,敲 dump 命令和切分辨率操作不好配合,可以先设置该参数,然后再切分辨率,当程序识别到分辨率变化时就会将分辨率变化后的那张 buffer dump 出来。 (非必选参数) | |
Bdumpport: 只dump 某一个portid,默认是dump 所有在输出的port。 (非必选参数) | |
举例 | echo dumptaskfile 0 1 /mnt > /proc/mi_modules/mi_isp/mi_isp0 |
功能 | 设置Dev的atomvalue |
---|---|
命令 | echo setatom [AtomValue] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | AtomValue: input realtime mode下Driver 最大持有buffer 数量 |
举例 | echo setatom 3 > /proc/mi_modules/mi_isp/mi_isp0 注意:有时候底层卡住,可以尝试增大该atom,加塞一张buffer 给driver,重新trig,看是否可以恢复,或者掉帧的时候,加大是否可以满帧。 |
功能 | 清除指定channel port的input/output/done buffer |
---|---|
命令 | echo clearbuf [chnid, portid bClearInput, bclearoutput, bcleardonebuff] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id Portid: port id bClearInput: 清除input的buffer bclearoutput: 清除output的buffer bcleardonebuff: 清除done的buffer |
举例 | echo clearbuf 0 0 1 0 0 > /proc/mi_modules/mi_isp/mi_isp0 |
功能 | 设置debug level |
---|---|
命令 | echo debuglv [level] >/proc/mi_modules/mi_isp/mi_isp0 echo debuglv [chnid][level] >/proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id Level: 单个level参数时: 1:isp api,2:flow,4:check irq done 两个参数时: 1:check buffer,2:check loop,4:check frame pts,8:check fence done,16:check func time,32:check sidebandmsg,64:check zoominfo |
举例 | echo debuglv 4 > /proc/mi_modules/mi_isp/mi_isp0 //打开check irq done 相关的MI打印 echo debuglv 0 3 > /proc/mi_modules/mi_isp/mi_isp0 //打开channel0 level3的打印,打印buffer info和loop info |
功能 | 主动drop frame 数量 |
---|---|
命令 | echo skipframe [chnid, skipnum] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id skipnum: drop frame count |
举例 | echo skipframe 0 60 > /proc/mi_modules/mi_isp/mi_isp0 |
功能 | 保护outputport buffer |
---|---|
命令 | echo protectport [chnid portid clientid ben] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id Portid: port id Clientid: isp:0x23, LDC:0x0e, scl(0,1,2):0x19, 0x1c, 0x1d ben: 使能 |
举例 | echo protectport 0 0 0x23 1 > /proc/mi_modules/mi_isp/mi_isp0 //保护channel0 pass0 port0 的isp |
功能 | 将 Bind Q 中缓存的 buffer 消耗掉 |
---|---|
命令 | echo clearbindq [chnid bclear] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id bclear: 是否clear |
举例 | echo clearbindq 0 1 > /proc/mi_modules/mi_isp/mi_isp0 //clear channel0 bindQ 将 Bind Q 中缓存的 buffer 消耗掉。 有时候前端拿不到 buffer,发现是ISP BindQ塞满,判断 ISP 是否拿的不够快,将bindQ清空,看BindQ中是否还会累加上来,如果还累加则说明ISP拿的不够快,如果不再增加,说明是之前一次异常塞在里面一直没有消耗掉。 |
功能 | 设置打印帧率,低于该值打印出来 |
---|---|
命令 | echo fpsth [chnid portid fpsint fpsfloat] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id Portid: port id fpsint: 帧率整数位 fpsfloat: 帧率小数位 |
举例 | echo fpsth 0 0 30 30 > /proc/mi_modules/mi_isp/mi_isp0 // channel0 port0中小于30.30的fps打印出来 |
功能 | 设置port是否enable |
---|---|
命令 | echo enableport [chnid, portid, bEn] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id Portid: port id bEn: 1/0 |
举例 | echo enableport 0 0 1 > /proc/mi_modules/mi_isp/mi_isp0 |