MI ISP API
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
3.0 | 12/04/2020 | |
3.1 | 07/25/2021 | |
08/25/2021 | ||
3.2 | 11/23/2021 | |
3.3 | 02/17/2022 | |
3.4 | 03/21/2022 | |
3.5 | 05/23/2022 | |
3.6 | 08/03/2022 | |
3.7 | 10/28/2022 | |
3.8 | 12/01/2022 | |
3.9 | 1/11/2023 | |
3.10 | 02/14/2023 | |
3.11 | 04/12/2024 |
1. 概述¶
1.1. 模块说明¶
图像信号处理(Image Signal Processing),实现HDR、3D/2D降噪、3A算法、WDR等相关功能。
1.2. 流程框图¶
1.2.1. Tiramisu框图¶
图1‑1:Tiramisu框图
注意:
-
Tiramisu 只有一个Device0,每个Device最多支持16个channel。
-
只支持YUV422_YUYV/UYVY 和bayer格式输入,只有bayer格式可以支持3DNR和3A功能。
1.2.2. Muffin框图¶
图1‑2:Muffin框图
注意:
-
Muffin 有两个Device。Device0和Device1, 每个Device最多支持16个channel。
-
只支持YUV422_YUYV/UYVY 和bayer格式输入。
-
通过MI_ISP_SetCustSegAttr接口,使能AI ISP后,支持app从before 3DNR/before WDR/before RGB2YUV取出buffer,并对buffer处理完成后,塞回给before 3DNR/before WDR/before RGB2YUV。
-
Before 3DNR,就是进入DNR模块之前的数据。
-
AI ISP功能,指的是app从MI ISP中取出buffer,使用算法对buffer进行图像优化处理后,塞回给MI ISP。
1.2.3. Mochi框图¶
图1-3:Mochi框图
注意:
-
Mochi只有一个Device0, 每个Device最多支持16个channel。
-
只支持YUV422_UYVY格式输入。
-
不支持 HDR/Rotation/Mirror/Flip 功能。
1.2.4. Maruko框图¶
图1-4:Maruko框图
注意:
-
Maruko 只有一个Device0,每个Device最多支持16个channel。
-
只支持YUV422_YUYV/YUV422_UYVY 和bayer格式输入,只有bayer格式可以支持3DNR/3A/Rot功能。
1.2.5. Opera框图¶
图1-5:Opera框图
注意:
-
Opera 只有一个Device0,每个Device最多支持5个channel。
-
只支持YUV422_UYVY 和bayer格式输入,只有bayer格式可以支持3DNR/3A/Rot功能。
1.2.6. Souffle框图¶
图1-6:Souffle框图
注意:
- Souffle 只有一个Device0,每个Device最多支持4个channel。
- 只支持YUV422_UYVY / YUV422_YUYV 和 bayer 格式输入,只有 bayer 格式可以支持 3DNR/3A/Rot功能。
1.2.7. Ifado框图¶
图1-7:Ifado框图
注意:
- Ifado 只有一个Device0,每个Device最多支持3个channel。
- 只支持 YUV422_UYVY / YUV422_YUYV 和 bayer 格式输入,只有 bayer 格式可以支持 3DNR/3A/Rot 功能。
- Rot只支持90度。
- 不支持 HDR/Mirror/Flip 功能。
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
裁剪,对图像进行裁剪。
-
seg
分段模块,segment的缩写。
-
Compress
压缩模式,对数据进行压缩传输,节省带宽。
-
IR
RGBIR sensor的IR 数据。
1.4. 规格说明¶
‘\’ 与 ‘N’ 均为不支持该功能。
-
模块功能规格
Function Tiramisu Mochi Muffin Maruko Opera Souffle Ifado Dev Number 1 1 2 1 1 1 1 Chn Number 32 32 32 4 5 4 3 Port Number 3 2 3 3 3 4 2 DNR Range 0-2 0-7 0-2 0-6 0-2 0-5 0-7 InputCrop Y Y Y Y Y Y Y 3A Y N Y Y Y Y Y 2F HDR Y N Y Y Y Y N 3F HDR N N N N N Y N Rotation Y N Y Y Y Y Y mirror Y N Y Y Y Y N flip Y N Y Y Y Y N WDR Y Y Y Y Y Y Y OutPutCrop Y Y Y Y Y Y Y IR Y N Y Y Y Y N Compress Y Y Y Y Y Y Y Seg N N Y N N N N Max Pixel Rate 4K30 4K60 4K60 4K30 6M30 16M30 4M30 -
输入规格
Input Tiramisu Mochi Muffin Maruko Opera Souffle Ifado Pixel yuv422 YUYV Y N Y Y N Y Y yuv422 UYVY Y Y Y Y Y Y Y Bayer Y N Y Y Y Y Y Compress NONE Y Y Y Y Y Y Y TO_8BIT Y N Y Y Y Y Y TO_6BIT N Y N N N N N SFBC0 N Y N N N N N Crop Y Y Y Y Y Y Y resolution MAX 4208 3840 4068 3840 2688 4680 2560 MIN 320x256(开AE)
16x16(不开AE)16x16 320x256(开AE)
16x16(不开AE)320x256(开AE)
16x16(不开AE)320x256(开AE)
16x16(不开AE)128x120(开AE)
16x16(不开AE)320x256(开AE)
16x16(不开AE)Pixel Alignment (WxH) 2x2 2x2 2x2 2x2 2x2 2x2 2x2 2x2 -
输出规格
Output Tiramisu Mochi Muffin Maruko Opera Souffle Ifado Pixel ARGB8888 N Y N Y Y Y Y ABGR8888 N N N Y Y Y Y BGRA8888 N N N Y Y Y Y yuv420SP NV12 Y Y Y Y Y Y Y yuv420SP NV21 N Y N Y Y Y Y yuv420 Planer N Y N Y Y Y Y yuv422 YUYV Y Y Y Y Y Y Y yuv422 YVYU Y Y Y Y Y Y Y yuv422 VYUY Y Y Y Y Y Y Y yuv422 UYVY Y Y Y Y Y Y Y yuv422 SP N Y N Y Y Y Y yuv422 Planer N Y N Y Y Y Y Compress NONE Y Y Y Y Y Y Y 10TO6 N Y N Y Y Y Y Crop Y Y Y Y Y Y Y IR Y N Y Y Y Y N Pixel Alignment (WxH) 2x2 2x2 2x2 2x2 2x2 2x2 2x2
1.5. JSON参数说明¶
使用json 文件可以调整的参数使用情况如下所示:
参数 | 含义 | 取值 |
---|---|---|
u32DefaultDropNum | drop MI_ISP_CreateChannel 之后buffer的张数 | 1.default:10。由于 ISP 需要收敛,默认会drop掉10张 2.用户可以设定任意值。在快启的场景时,减少drop的张数,可以缩短启动时间 |
Json 使用方法详情见 MI SYS API。
2. API参考¶
该功能模块提供以下API:
表 2‑1: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_DestroyDevice来禁用设备。
-
MI_ISP_CreateDevice 中,参数DevId = MI_ISP_CREATE_MULTI_DEV(MI_ISP_DEV0)时,表示multi device模式,Isp device 0, isp device 1同时工作。
-
只有Muffin支持multi device模式。
-
Multi device模式时,调用除MI_ISP_DestroyDevice外的其他接口,参数DevId = MI_ISP_DEV0。
-
-
举例
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_DestroyDevice(IspDevId); return MI_SUCCESS; }
-
相关主题
2.2. MI_ISP_DestroyDevice¶
-
功能
销毁一个 ISP 设备。
-
语法
MI_S32 MI_ISP_DestroyDevice(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计算结果。
-
当输入数据压缩模式不为E_MI_SYS_COMPRESS_MODE_NONE 时,输入数据不支持裁剪。
-
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设置。
-
Output port3 只支持和MI_LDC realtime 绑定,输出区域和input 相同, 可以不调用此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。
-
MI_ISP_SetCustSegAttr要在MI_ISP_CreateChannel后,在MI_ISP_StartChannel和MI_ISP_SetOutputPortParam前调用。
-
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 初始化:
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一致。
-
2.29. MI_ISP_SetSubChnParam¶
-
描述
设置ISP的子通道参数。
-
语法
MI_S32 MI_ISP_SetSubChnParam(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_SUB_CHANNEL SubChnId, MI_ISP_ChnParam_t *pstChnParam);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 SubChnId ISP 子通道号 输入 pstChnParam ISP 子通道参数指针 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
-
建议在通道停止的情况下切换子通道参数,避免通道内缓存的buffer和后端参数不匹配,导致异常。
-
设置eRot时,需要保证子通道之间输入输出宽高一致。E_MI_SYS_ROTATE_90/ E_MI_SYS_ROTATE_270,或E_MI_SYS_ROTATE_NONE/ E_MI_SYS_ROTATE_180。
-
2.30. MI_ISP_GetSubChnParam¶
-
描述
获取ISP的子通道参数。
-
语法
MI_S32 MI_ISP_GetSubChnParam(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_SUB_CHANNEL SubChnId, MI_ISP_ChnParam_t *pstChnParam);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 SubChnId ISP 子通道号 输入 pstChnParam ISP 子通道参数指针 输出 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
2.31. MI_ISP_SetChnOverlapAttr¶
-
描述
设置ISP重叠属性。
-
语法
MI_S32 MI_ISP_SetChnOverlapAttr(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_Overlap_e eOverlap);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 eOverlap 重叠大小 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
-
注意
-
Overlap的效果,是使左右拼合的两边图像过度平滑。
-
只有调用MI_ISP_CreateDevice,参数DevId = MI_ISP_CREATE_MULTI_DEV(MI_ISP_DEV0),且MI_ISP_CreateChannel中参数pstChAttr-> u32SensorBindId,只设置一个sensor id时,Overlay才会生效。
-
E_MI_ISP_OVERLAP_128是多读128列pixel,E_MI_ISP_OVERLAP_256是多读256列pixel。
-
eOverlap = E_MI_ISP_OVERLAP_256时,效果如下图。
-
2.32. MI_ISP_GetChnOverlapAttr¶
-
描述
获取ISP重叠属性。
-
语法
MI_S32 MI_ISP_GetChnOverlapAttr(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_Overlap_e *peOverlap);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 peOverlap 重叠大小 输出 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
2.33. MI_ISP_SetLdcAttr¶
-
描述
设置ISP 1D-LDC 属性。(注:参数如何获取请参考 project\tools\cvtool\doc 下的文档)
-
语法
MI_S32 MI_ISP_GetChnOverlapAttr(MI_ISP_DEV DevId, MI_ISP_CHANNEL ChnId, MI_ISP_LdcAttr_t *pstLdcAttr);
-
形参
参数名称 描述 输入/输出 DevId ISP 设备号。 输入 ChnId ISP 通道号 输入 pstLdcAttr 1D-LDC 属性 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_isp_datatype.h、mi_isp.h
-
库文件:libmi_isp.a
-
3. ISP数据类型¶
视频输入相关数据类型定义如下:
表 3‑1: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 / Mochi / Maruko / Souffle / Ifado 系列芯片只有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_DevAtt_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_COMP, E_MI_ISP_HDR_TYPE_LI, E_MI_ISP_HDR_TYPE_COMPVS, E_MI_ISP_HDR_TYPE_DCG, 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_COMP sensor融合长曝和短曝,isp控制两张frame的gain值 E_MI_ISP_HDR_TYPE_LI Line interlace HDR E_MI_ISP_HDR_TYPE_COMPVS compressed HDR + Very short E_MI_ISP_HDR_TYPE_DCG Dual conversion gain HDR E_MI_ISP_HDR_TYPE_MAX HDR 边界值 -
注意事项
-
具体使用的HDR Type 可以通过MI_SNR_GetPadInfo 接口获取。
-
HDR功能需要MI_VIF 和MI_ISP 模块配合完成,需要两边设置相同的HDR类型。
-
E_MI_ISP_HDR_TYPE_DCG 和 E_MI_ISP_HDR_TYPE_COMPVS暂不支持。
-
E_MI_ISP_HDR_TYPE_COMP opera系列芯片支持。
-
-
相关数据类型及接口
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;
-
注意事项
3DNR level 越高,降噪效果越好,消耗的buffer也越多。
芯片 3DNR支持的最大等级 Tiramisu E_MI_ISP_3DNR_LEVEL2 Muffin E_MI_ISP_3DNR_LEVEL2 Mochi E_MI_ISP_3DNR_LEVEL7 Maruko E_MI_ISP_3DNR_LEVEL7 Souffle E_MI_ISP_3DNR_LEVEL5 Ifado E_MI_ISP_3DNR_LEVEL7 -
相关数据类型及接口
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_BOOL bY2bEnable; MI_BOOL bLdcEnable; MI_ISP_HDRFusionType_e eHDRFusionType; MI_U16 u16HDRExposureMask; } MI_ISP_ChnParam_t;
-
成员
成员名称 描述 eHDRType HDR 类型 e3DNRLevel 3dnr 量级参数 bMirror 使能通道Mirror bFlip 使能通道Flip eRot 通道rotation参数 bY2bEnable 使能yuv to bayer的转换功能 bLdcEnable 使能1D-LDC eHDRFusionType HDR 融合类型 u16HDRExposureMask HDR 曝光融合掩码,由MI_ISP_HDRExposureType_e 组成 -
注意事项
- 非Maruko / Souffle 的chip,eRot>0或者bFlip=True时,e3DNRLevel 必须大于0。
- bY2bEnable只有Muffin支持,且只有input port是Frame Mode时支持。
- Mochi 不支持HDR/Mirror/Flip/Rot/Y2bEnable 功能。
- ISP eHDRType 跟随 Sensor eHDRType, 支持最多 3frame HDR sensor,对此 ISP 又可通过 eHDRFusionType + u16HDRExposureMask 的组合,达到控制不同曝光帧融合或者直接输出的效果。
-
举例
场景1:SENSOR 2frame HDR,ISP 2frame HDR
Sensor VIF ISP eHDRFusionType eHDRFusionType u16HDRExposureMask eHDRFusionType u16HDRExposureMask xx_FUSION_TYPE_2TO1 xx_FUSION_TYPE_2TO1 LS xx_FUSION_TYPE_2TO1 LS 场景2:SENSOR 3frame HDR,ISP 2frame HDR
Sensor VIF ISP eHDRFusionType eHDRFusionType u16HDRExposureMask eHDRFusionType u16HDRExposureMask xx_FUSION_TYPE_3TO1 xx_FUSION_TYPE_3TO1 LS / LM / MS xx_FUSION_TYPE_2TO1 LS / LM / MS 场景3:SENSOR 3frame HDR,ISP 3frame HDR
Sensor VIF ISP eHDRFusionType eHDRFusionType u16HDRExposureMask eHDRFusionType u16HDRExposureMask xx_FUSION_TYPE_3TO1 xx_FUSION_TYPE_3TO1 LMS xx_FUSION_TYPE_3TO1 LMS 场景4:SENSOR 2frame HDR,ISP 分2chn 出2frame
Sensor VIF ISP eHDRFusionType eHDRFusionType u16HDRExposureMask eHDRFusionType u16HDRExposureMask xx_FUSION_TYPE_2TO1 xx_FUSION_TYPE_2TO1 LS Chn0 xx_FUSION_TYPE_2TO1 Chn0 L / S Chn1 xx_FUSION_TYPE_2TO1 Chn1 S / L 场景5:SENSOR 3frame HDR,ISP 分2chn 出2frame
Sensor VIF ISP eHDRFusionType eHDRFusionType u16HDRExposureMask eHDRFusionType u16HDRExposureMask xx_FUSION_TYPE_3TO1 xx_FUSION_TYPE_3TO1 LS / LM / MS Chn0 xx_FUSION_TYPE_2TO1 Chn0 L / M / S Chn1 xx_FUSION_TYPE_2TO1 Chn1 S / L / M 场景6:SENSOR 3frame HDR,ISP 分3chn 出3frame
Sensor VIF ISP eHDRFusionType eHDRFusionType u16HDRExposureMask eHDRFusionType u16HDRExposureMask xx_FUSION_TYPE_3TO1 xx_FUSION_TYPE_3TO1 LMS Chn0 xx_FUSION_TYPE_3TO1 Chn0 L / M / S Chn1 xx_FUSION_TYPE_3TO1 Chn1 M / S / L Chn2 xx_FUSION_TYPE_3TO1 Chn2 S / L / M 场景7:SENSOR 3frame HDR,ISP 分2chn 出 2frame HDR + 1frame
Sensor VIF ISP eHDRFusionType eHDRFusionType u16HDRExposureMask eHDRFusionType u16HDRExposureMask xx_FUSION_TYPE_3TO1 xx_FUSION_TYPE_3TO1 LMS Chn0 xx_FUSION_TYPE_3TO1 Chn0 LS / LM / MS Chn0 xx_FUSION_TYPE_3TO1 Chn0 M / S / L -
相关数据类型及接口
3.15. MI_ISP_OutPortParam_t¶
-
说明
定义 ISP 输出端口的参数。
-
定义
typedef struct MI_ISP_OutPortParam_s { MI_SYS_WindowRect_t stCropRect; MI_SYS_PixelFormat_e ePixelFormat; MI_SYS_CompressMode_e eCompressMode; MI_ISP_BufferLayout_e eBufLayout; }MI_ISP_OutPortParam_t;
-
成员
成员名称 描述 stCropRect 输出裁剪区域 ePixelFormat 像素格式 eCompressMode 输出像素压缩模式 eBufLayout 输出图像内存布局 -
注意事项
-
eCompressMode 支持范围:
芯片 支持的输出像素压缩模式 Tiramisu E_MI_SYS_COMPRESS_MODE_NONE Muffin E_MI_SYS_COMPRESS_MODE_NONE Mochi E_MI_SYS_COMPRESS_MODE_NONE
E_MI_SYS_COMPRESS_MODE_TO_6BITMaruko E_MI_SYS_COMPRESS_MODE_TO_6BIT Soufffle E_MI_SYS_COMPRESS_MODE_NONE
E_MI_SYS_COMPRESS_MODE_TO_6BITIfado E_MI_SYS_COMPRESS_MODE_NONE -
E_MI_SYS_COMPRESS_MODE_10TO6限制
Output_Compress_10TO6 Mochi Maruko Soufffle Pixel yuv420SP NV12 Y Y Y yuv422 YUYV Y Y Y Pixel Alignment (WxH) yuv420SP NV12 2x2 2x2 2x2 yuv422 YUYV 2x2 2x2 2x2
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 模块的最大值 -
相关数据类型及接口
3.28. MI_ISP_BufferLayout_e¶
-
说明
buffer布局。
-
定义
typedef enum { E_MI_ISP_BUFFER_LAYOUT_ONE_FRAME, E_MI_ISP_BUFFER_LAYOUT_MULTI_PLANE, E_MI_ISP_BUFFER_LAYOUT_MAX, } MI_ISP_BufferLayout_e;
-
成员
成员名称 描述 E_MI_ISP_BUFFER_LAYOUT_ONE_FRAME 布局在一个buffer E_MI_ISP_BUFFER_LAYOUT_MULTI_PLANE 布局在多个buffer E_MI_ISP_BUFFER_LAYOUT_MAX 布局的最大值 -
注意事项
-
只有stitch时,eBufLayout才能设置成E_MI_ISP_BUFFER_LAYOUT_MULTI_PLANE,此时output port输出E_MI_SYS_BUFDATA_MULTIPLANE类型的数据。否则输出E_MI_SYS_BUFDATA_FRAME 类型的数据。
-
只有output port 1支持eBufLayout = E_MI_ISP_BUFFER_LAYOUT_MULTI_PLANE。
-
E_MI_SYS_BUFDATA_MULTIPLANE和E_MI_SYS_BUFDATA_FRAME的含义,请到 MI SYS API 中查看。
-
-
相关数据类型及接口
3.29. MI_ISP_Overlap_e¶
-
说明
重叠属性。
-
定义
typedef enum { E_MI_ISP_OVERLAP_NONE, E_MI_ISP_OVERLAP_128, E_MI_ISP_OVERLAP_256, E_MI_ISP_OVERLAP_MAX } MI_ISP_Overlap_e;
-
成员
成员名称 描述 E_MI_ISP_OVERLAP_NONE 关闭overlap E_MI_ISP_OVERLAP_128 多读128列pixel E_MI_ISP_OVERLAP_256 多读256列pixel E_MI_ISP_OVERLAP_MAX Overlap最大值 -
相关数据类型及接口
3.30. MI_ISP_HDRExposureType_e¶
-
说明
定义 HDR 曝光模式。
-
定义
typedef enum { E_MI_ISP_HDR_EXPOSURE_TYPE_NONE, E_MI_ISP_HDR_EXPOSURE_TYPE_SHORT = 0x1, E_MI_ISP_HDR_EXPOSURE_TYPE_MEDIUM = 0x2, E_MI_ISP_HDR_EXPOSURE_TYPE_LONG = 0x4, E_MI_ISP_HDR_EXPOSURE_TYPE_MAX } MI_ISP_HDRExposureType_e;
-
成员
成员名称 描述 E_MI_ISP_HDR_EXPOSURE_TYPE_NONE 关闭曝光模式 E_MI_ISP_HDR_EXPOSURE_TYPE_SHORT HDR 中的短曝 E_MI_ISP_HDR_EXPOSURE_TYPE_MEDIUM HDR 中的中曝 E_MI_ISP_HDR_EXPOSURE_TYPE_LONG HDR 中的长曝 E_MI_ISP_HDR_EXPOSURE_TYPE_MAX 曝光模式的最大值 -
相关数据类型及接口
3.31. MI_ISP_HDRFusionType_e¶
-
说明
定义 HDR 融合模式。
-
定义
typedef enum { E_MI_ISP_HDR_FUSION_TYPE_NONE, E_MI_ISP_HDR_FUSION_TYPE_2TO1, E_MI_ISP_HDR_FUSION_TYPE_3TO1, E_MI_ISP_HDR_FUSION_TYPE_MAX } MI_ISP_HDRFusionType_e;
-
成员
成员名称 描述 E_MI_ISP_HDR_FUSION_TYPE_NONE 关闭融合模式 E_MI_ISP_HDR_FUSION_TYPE_2TO1 2帧融合 HDR E_MI_ISP_HDR_FUSION_TYPE_3TO1 3帧融合 HDR E_MI_ISP_HDR_FUSION_TYPE_MAX 融合模式最大值 -
相关数据类型及接口
3.32. MI_ISP_LdcAttr_t¶
-
说明
1D-LDC的属性。
-
定义
typedef struct MI_ISP_LdcAttr_s { MI_U32 u32CenterXOffset; MI_U32 u32CenterYOffset; MI_U32 u32Alpha; MI_U32 u32Beta; MI_U32 u32CropLeft; MI_U32 u32CropRight; } MI_ISP_LdcAttr_t;
-
成员
成员名称 描述 u32CenterXOffset 光心坐标u0 u32CenterYOffset 光心坐标v0 u32Alpha 曲线参数 alpha u32Beta 曲线参数 beta u32CropLeft 左边裁切 u32CropRight 右边裁切 -
相关数据类型及接口
4. ISP错误码¶
API 错误码如下表所示。
表 4‑1: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 crcfailcnt input crc校验失败次数 RdmaVfcFailCnt input VFC 解压fail cnt 3dnrVfcFailCnt 3dnr VFC 解压fail cnt fifofullcnt 发生fifo full cnt rstcnt 发生reset hw 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 compress Input compress type Stride Input Buffer Stride Atom 底层拿住 buffer 数量 Atom0 释放 buffer 后底层没有 buffer 数量 Rot Rotation 角度 bMirror/Flip 水平/竖直 翻转 3DNRLevel 3DNR Level HdrMode HDR mode CustMode AI ISP Cust Seg mode CustFrom AI ISP From Cust seg CustTo AI ISP to Cust PTMax/Cur 硬件处理所花最长时间/当前帧硬件处理所花时间 PreCnt/EnqCnt/BarCnt/ checkin/checkout/DeqCnt Callback 接口执行次数 MaxIv/MinIv callback 执行的间隔时间 DropCnt drop task cnt 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 compress Port output compress type 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 查看可用命令 | | 功能 |
[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 [chnid AtomValue] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | chnid: chnel id AtomValue: input realtime mode下Driver 最大持有buffer 数量 |
举例 | echo setatom 0 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 |
功能 | 将 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打印出来 |
功能 | 设置打印pts,超过区间值打印出来 |
---|---|
命令 | echo ptsth [chnid portid minptsinterval maxptsinterval] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id Portid: port id minptsinterval: pts间隔的最小值 maxptsinterval: pts间隔的最大值 |
举例 | echo ptsth 0 0 30000 40000 > /proc/mi_modules/mi_isp/mi_isp0 // channel0 port0中pts间隔小于30ms大于40ms的值打印出来 |
功能 | 设置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 |
功能 | 设置 output port 参数 |
---|---|
命令 | echo outputparam pixel [chnid, portid pixelmode] > /proc/mi_modules/mi _isp/mi_isp0 echo outputparam compress [chnid, portid compressmode] > /proc/mi_modules/mi_isp/mi_isp0 echo outputparam crop [chnid, portid cropX cropY cropW cropH] > /proc/mi_modules/mi_isp/mi_isp0 echo outputparam all [chnid, portid pixelmode compressmode cropX cropY cropW cropH] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id Portid: port id Pixelmode: 输出的pixel类型,填入MI_SYS_PixelFormat_e 中对应的数值 Compressmode:输出的压缩模式,填入MI_SYS_CompressMode_e中对应的数值 cropX:输出的端口裁剪X坐标 cropY:输出的端口裁剪Y坐标 cropW:输出的端口裁剪宽度 cropH:输出的端口裁剪高度 |
举例 | echo outputparam pixel 0 1 11 > /proc/mi_modules/mi_isp/mi_isp0 echo outputparam compress 0 1 5 > /proc/mi_modules/mi_isp/mi_isp0 echo outputparam crop 0 1 0 0 1920 1080 > /proc/mi_modules/mi_isp/mi_isp0 echo outputparam all 0 1 11 5 0 0 1920 1080 > /proc/mi_modules/mi_isp/mi_isp0 |
功能 | 设置始终送同一张画面 |
---|---|
命令 | echo sendoneframe [chnid, bEn] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id bEn: 1/0 |
举例 | echo sendoneframe 0 1 > /proc/mi_modules/mi_isp/mi_isp0 |
功能 | 设置3dnr level |
---|---|
命令 | echo dnrlevel [chnid, level] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id level: 3dnr level, 值同MI_ISP_3DNR_Level_e |
举例 | echo dnrlevel 0 1 > /proc/mi_modules/mi_isp/mi_isp0 |
功能 | reset 整个isp 硬件 |
---|---|
命令 | echo resethw > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | 无 |
举例 | echo resethw > /proc/mi_modules/mi_isp/mi_isp0 |
功能 | 设置output crc 校验 |
---|---|
命令 | echo crcmode [chnid, bEn] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id bEn: 1/0 |
举例 | echo crcmode 0 1 > /proc/mi_modules/mi_isp/mi_isp0 |
功能 | 设置DataGen |
---|---|
命令 | echo datagen [chnid, bEn] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | Chnid: channel id bEn: 1/0 |
举例 | echo datagen 0 1 > /proc/mi_modules/mi_isp/mi_isp0 |
功能 | 设置发生cmdq timeout之后执行的命令抓取信息 |
---|---|
命令 | echo cmdqtimeout [bEn, keyword, cmdline, path] > /proc/mi_modules/mi_isp/mi_isp0 |
参数说明 | bEn: 1/0 keyword: 执行的命令 cmdline: 执行的字符串 path: 信息保存路径 |
举例 | echo 1 cat /proc/mi_modules/mi_isp/mi_isp0 /mnt/cmdqerr.txt > /proc/mi_modules/mi_isp/mi_isp0 |
6. MODPARAM.json介绍¶
6.1. json文件内容¶
{ "E_MI_MODULE_ID_ISP" : { "bSeg1Hdrout": "FALSE", "u32DefaultDropNum": "10", "s32ForceOverlap": "-1", "s32RotExtraBuf": "-1", "s32BufLayout": "-1", "bDefaultDropFifoBuffer": "TRUE", "bFlushBuffer": "TRUE", "s32ModuleTotalPlanenum": "-1", "bUseHwResetArray": "FALSE", "bCmdqTimeOutDbgArray": "FALSE", "u16CpuMaskAffinityArray": "0", "u32threadPriorityArray": "98", "u32ChnMaxNumArray": "4", "u64PmTimeoutLatencyNS": "1000000000", "u32DevDbgLv": "0", "u32ChnDbgLv": "0", "bCrcEnableArray": "0", "u32BaseFrameIdxArray": "0" } }
modparam.json 文件在/config 目录下,该文件在ISP 初始化阶段会加载进去。
6.2. ISP 常用参数以及参数解析¶
参数名 | 默认值 | 支持chip | 是否客户配置 | 作用 |
---|---|---|---|---|
bSeg1Hdro | FALSE | Maruko, Opera, Souffle, Ifado以及后续的chip | Y | 设置 isp seg1 的输出位置,0: 3dnr 之前,1: hdr 之后 |
u32DefaultDropNum | 10 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp 默认丢弃的帧数,设置范围[0-U32MAX] |
s32ForceOverlap | -1 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp 强制重叠的范围, -1: 自适应,或者0/128/256/... |
s32RotExtraBuf | -1 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp rot 是否使用额外的buffer,-1:自适应,0(关闭),1(开启) |
s32BufLayout | -1 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp 数据存放方式,-1:自适应,0(一张),1(左右拼接),2(上下拼接),3(多张) |
bDefaultDropFifoBuffer | TRUE | Maruko, Opera, Souffle, Ifado以及后续的chip | Y | 设置 isp 是否默认丢弃缓存里的,0(关闭),1(开启) |
bFlushBuffer | TRUE | Maruko, Opera, Souffle, Ifado以及后续的chip | Y | 设置 isp 是否快速刷新buffer,0(关闭),1(开启) |
s32ModuleTotalPlanenum | -1 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp 最大平面数量,-1: 自适应, [0-U32MAX] |
bUseHwResetArray | FALSE | Maruko, Opera, Souffle, Ifado以及后续的chip | Y | 设置 isp dev 是否开启复位机制,0(关闭),1(开启) |
bCmdqTimeOutDbgArray | FALSE | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp dev 是否开启复位调式机制,0(关闭),1(开启) |
u16CpuMaskAffinityArray | 0 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp dev CPU 亲和力,0(全部cpu),bit[0,3]对应 cpu[0,3] |
u32threadPriorityArray | 98 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp dev 线程优先级,[0-U32MAX] |
u32ChnMaxNumArray | 4 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp dev 最大 channel 数量,[0-U32MAX] |
u64PmTimeoutLatencyNS | 1000000000 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp dev 休眠最大等待时间,[0-U64MAX] |
u32DevDbgLv | 0 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp dev 日志调式等级,[0-U32MAX] |
u32ChnDbgLv | 0 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp dev channel 日志调式等级,[0-U32MAX] |
bCrcEnableArray | 0 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp port crc 校验是否开启,0(关闭),1(开启) |
u32BaseFrameIdxArray | 0 | Maruko, Opera, Souffle, Ifado以及后续的chip | N | 设置 isp port 基础帧ID, [0-U32MAX] |