MI LDC API
1. 概述¶
1.1. 模块说明¶
镜头畸变矫正(Lens distortion correction),通过bin档的设置将画面内容进行拉直或者融合。
1.2. 流程框图¶
图1-1
注:32X32 为宽高对齐限制。
注:
-
32X2,GridxGrid分别为输入图像,输出图像宽高对齐限制。
-
Grid为网格大小,如配置成16,表示图像将按照16个像素点取一个像素点进行处理。
1.3. 各平台特性¶
-
Pudding
Grid 取值范围:16,32
-
Tiramisu
Grid 取值范围:16,32
1.4. 关键字说明¶
-
device
Ldc 对应的硬件设备。
-
channel
Ldc 模块处理通道,各通道分时复用LDC硬件。
2. API 参考¶
2.1. 功能模块API¶
API名 | 功能 |
---|---|
MI_LDC_CreateDevice | 创建LDC device 设备 |
MI_LDC_DestroyDevice | 销毁LDC device 设备 |
MI_LDC_CreateChannel | 创建LDC channel 通道 |
MI_LDC_DestroyChannel | 销毁LDC channel 通道 |
MI_LDC_StartChannel | 启用LDC channel 通道 |
MI_LDC_StopChannel | 禁用LDC channel 通道 |
MI_LDC_GetOutputPortAttr | 获取LDC output 属性 |
MI_LDC_SetChnParam | 设置LDC 通道属性。 |
MI_LDC_DoLutDirectTask | 执行直接的查表任务,将buf直接送给ldc硬件处理 |
2.2. MI_LDC_CreateDevice¶
-
描述
创建一个LDC device设备。
-
语法
MI_S32 MI_LDC_CreateDevice(MI_LDC_DEV devId, MI_LDC_DevAttr_t *pstDevAttr);
-
参数
参数名称 描述 输入/输出 devId Device id号 输入 pstDevAttr Device 属性 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
注意
目前只支持devId = 0;
-
举例
LDC 初始化设置, 以及退出范例:
MI_LDC_DEV LdcDevid = 0; MI_LDC_CHN LdcChnId = 0; MI_LDC_DevAttr_t stDevAttr = {0}; MI_LDC_ChnAttr_t stChnAttr = {}; stChnAttr. eMode = MI_LDC_WORKMODE_LDC ; //配置其它channel属性 MI_LDC_CreateDevice(LdcDevid, & stDevAttr); MI_LDC_CreateChannel(LdcDevid, LdcChnId); MI_LDC_StartChannel(LdcDevid, LdcChnId); /*销毁通道*/ MI_LDC_StopChannel(LdcDevid, LdcChnId); MI_LDC_DestroyChannel(LdcDevid, LdcChnId); MI_LDC_DestroyDevice(LdcDevid);
-
相关主题
2.3. MI_LDC_DestroyDevice¶
-
描述
销毁LDC device 设备。
-
语法
MI_S32 MI_LDC_DestroyDevice(MI_LDC_DEV devId);
-
参数
参数名称 描述 输入/输出 devId Device id号 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
注意
目前只支持devId = 0;
-
举例
参见MI_LDC_CreateDevice 举例.
-
相关主题
2.4. MI_LDC_CreateChannel¶
-
描述
创建LDC channel 通道
-
语法
MI_S32 MI_LDC_CreateChannel(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_ChnAttr_t *pstChnAttr);
-
参数
参数名称 描述 输入/输出 devId Device id号 输入 chnId Ldc Channel 号 输入 pstChnAttr Channel 属性 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
注意
需在MI_LDC_CreateDevice之后调用。
-
举例
参见MI_LDC_CreateDevice 举例.
-
相关主题
2.5. MI_LDC_DestroyChannel¶
-
描述
销毁LDC channel 通道
-
语法
MI_S32 MI_LDC_DestroyChannel(MI_LDC_DEV devId, MI_LDC_CHN chnId);
-
参数
参数名称 描述 输入/输出 devId Device id号 输入 chnId Ldc Channel 号 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
举例
参见MI_LDC_CreateDevice 举例.
-
相关主题
2.6. MI_LDC_StartChannel¶
-
描述
启用LDC channel 通道。
-
语法
MI_S32 MI_LDC_StartChannel(MI_LDC_DEV devId, MI_LDC_CHN chnId);
-
参数
参数名称 描述 输入/输出 devId Device id号 输入 chnId Ldc Channel 号 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
注意
Device和Channel 创建之后调用。
-
举例
参见MI_LDC_CreateDevice举例.
-
相关主题
2.7. MI_LDC_StopChannel¶
-
描述
禁用LDC channel 通道。
-
语法
MI_S32 MI_LDC_StopChannel(MI_LDC_DEV devId, MI_LDC_CHN chnId);
-
参数
参数名称 描述 输入/输出 devId Device id号 输入 chnId Ldc Channel 号 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
举例
参见MI_LDC_CreateDevice举例.
-
相关主题
2.8. MI_LDC_GetOutputPortAttr¶
-
描述
获取LDC output 属性。
-
语法
MI_S32 MI_LDC_GetOutputPortAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_OutputPortAttr_t *pstOutputAttr);
-
参数
参数名称 描述 输入/输出 devId Device id号 输入 chnId Ldc Channel 号 输入 pstOutputAttr Output 属性 输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
注意
output信息是设置在bin档中,当后端需要知道input信息的时候,可以通过该接口获得。
-
举例
参见MI_LDC_CreateDevice 举例.
2.9. MI_LDC_SetChnParam¶
-
描述
设置LDC 通道属性。
-
语法
MI_S32 MI_LDC_SetChnParam (MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_ChnParam_t *pstChnParam);
-
参数
参数名称 描述 输入/输出 devId Device id号 输入 chnId Channel 号 输入 pstChnParam Channel 配置参数 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
注意
需要在MI_LDC_CreateChnaael之后使用
-
举例
-
初始化见MI_LDC_CreateDevice 举例.
-
更新channel 配置时使用,可以用于切换算法模式以及调节镜头参数
MI_LDC_DEV devId = 0; MI_LDC_CHN chnId = 0; MI_LDC_ChnParam_t stChnParam = {}; //stChnParam 参数配置 MI_LDC_SetChnParam(devId, chnId, & stChnParam);
-
2.10. MI_LDC_DoLutDirectTask¶
-
描述
执行直接的查表任务,将buf直接送给ldc硬件处理
-
语法
MI_S32 MI_LDC_DoLutDirectTask(MI_LDC_DEV devID, MI_LDC_CHN chnId, MI_LDC_LutTaskAttr_t *pstAttr);
-
参数
参数名称 描述 输入/输出 devID 设备初始化参数 输入 pstAttr 查表任务配置属性 -
返回值
-
MI_OK 成功。
-
非MI_OK 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:
-
-
举例
MI_LDC_DEV devId = 0; MI_LDC_CHN chnId = 0; MI_LDC_LutTaskAttr_t stLutTask = {}; // stLutTask 配置 MI_LDC_DoLutDirectTask (devId, chnId, & stLutTask);
3. 数据类型¶
3.1. 数据类型定义¶
数据类型 | 定义 |
---|---|
MI_LDC_DEV | 定义LDC device的类型 |
MI_LDC_CHN | 定义LDC channel的类型 |
MI_LDC_DevAttr_t | 定义LDC device 属性 |
MI_LDC_WorkMode_e | 定义LDC的工作模式 |
MI_LDC_MapInfoType_e | 定义LDC映射信息类型 |
MI_LDC_DisplacementMapInfo_t | 定义LDC 置换图 |
MI_LDC_SensorCalibInfo_t | 定义LDC sensor校准参数 |
MI_LDC_ChnAttr_t | 定义LDC channel 属性 |
MI_LDC_ChnParam_t | 定义LDC channel 动态参数 |
MI_LDC_OutputPortAttr_t | 定义LDC output 端口属性 |
MI_LDC_DirectBuf_t | 定义LDC输入buf 类型 |
MI_LDC_LutTaskAttr_t | 定义LDC图像查找表任务类型 |
3.2. MI_LDC_DEV¶
-
说明
定义LDC device的类型
-
语法
typedef MI_U32 MI_LDC_DEV;
3.3. MI_LDC_CHN¶
-
说明
定义LDC channel的类型
-
语法
typedef MI_U32 MI_LDC_CHN;
3.4. MI_LDC_DevAttr_t¶
-
说明
LDC设备初始化参数。
-
定义
typedef struct MI_LDC_DevAttr_s { MI_U32 u32Reserved; } MI_LDC_DevAttr_t;
-
成员
成员名称 描述 u32Reserved 保留数据 -
相关数据类型及接口
MI_LDC_CreateDevice
3.5. MI_LDC_WorkMode_e¶
-
说明
LDC工作模式。
-
定义
typedef enum { MI_LDC_WORKMODE_LDC = 0x01, MI_LDC_WORKMODE_LUT = 0x02, MI_LDC_WORKMODE_DIS_GYRO = 0x04, } MI_LDC_WorkMode_e;
-
成员
成员名称 描述 MI_LDC_WORKMODE_LDC LDC 模式 MI_LDC_WORKMODE_LUT LUT直接查表模式 MI_LDC_WORKMODE_DIS_GYRO 基于陀螺仪的DIS 防抖模式 -
相关数据类型及接口
3.6. MI_LDC_MapInfoType_e¶
-
说明
LDC映射信息类型。
-
定义
typedef enum { MI_LDC_MAPINFOTYPE_DISPMAP, MI_LDC_MAPINFOTYPE_SENSORCALIB, } MI_LDC_MapInfoType_e ;
-
成员
成员名称 描述 MI_LDC_MAPINFOTYPE_DISPMAP 置换图 MI_LDC_MAPINFOTYPE_SENSORCALIB sensor 校准信息 -
相关数据类型及接口
3.7. MI_LDC_DisplacementMapInfo_t¶
-
说明
LDC置换图信息。
-
定义
typedef struct MI_LDC_DisplacementMapInfo_s { void *pXmapAddr; void *pYmapAddr; MI_U32 u32XmapSize; MI_U32 u32YmapSize; } MI_LDC_DisplacementMapInfo_t;
-
成员
成员名称 描述 pXmapAddr x坐标映射表的起始地址 pYmapAddr y坐标映射表的起始地址 u32XmapSize x坐标的映射表大小 u32YmapSize y坐标的映射表大小 -
相关数据类型及接口
3.8. MI_LDC_SensorCalibInfo_t¶
-
说明
LDC Sensor 校准信息。
-
定义
typedef struct MI_LDC_SensorCalibInfo_s { void *pCalibPolyBinAddr; MI_U32 u32CalibPolyBinSize; } MI_LDC_SensorCalibInfo_t;
-
成员
成员名称 描述 pCalibPolyBinAddr 校准信息指针 u32CalibPolyBinSize 校准信息大小 -
相关数据类型及接口
3.9. MI_LDC_ChnAttr_t¶
-
说明
LDC设备Channel 属性。
-
定义
typedef struct MI_LDC_ChnAttr_s { MI_LDC_WorkMode_e eMode; MI_BOOL bUseProjection3x3Matrix; MI_S32 as32Projection3x3Matrix[LDC_MAXTRIX_NUM]; MI_U16 u16UserSliceNum; MI_U16 u16CropRatio; MI_U16 u16FocalLength; void *pConfigAddr; MI_U32 u32ConfigSize; MI_LDC_MapInfoType_e eInfoType; union { MI_LDC_DisplacementMapInfo_t stDispMapInfo; MI_LDC_SensorCalibInfo_t stCalibInfo; }; } MI_LDC_ChnAttr_t;
-
成员
成员名称 描述 eMode Channel 的工作模式 bUseProjection3x3Matrix DIS 用户设置的3x3 Matrix信息,会被叠加到内部法获得的3x3 Matrix上 as32Projection3x3Matrix DIS 3x3 Matrix信息 u16UserSliceNum DIS 垂直方向上切分数量,主要用于Rolling Shutter相机的运动场景,每个Slice会有单独的3x3 Matrix u16CropRatio DIS 输出图像的裁剪比例,例如:输入图像1920x1080,裁剪比例配置为80,那么输出图像将左右上下各裁剪(1-80%)/2 = 10%,输出图像为1536x864,输出图像为对齐之后的图像。 u16FocalLength DIS 焦距,单位mm pConfigAddr LDC 配置信息地址 u32ConfigSize LDC 配置信息大小 eInfoType LDC 映射信息类型 stDispMapInfo/stCalibInfo LDC 置换表/sensor校准信息,包含畸变参数 -
相关数据类型及接口
3.10. MI_LDC_ChnParam_t¶
-
说明
LDC设备初始化参数。
-
定义
typedef struct MI_LDC_ChnParam_s { MI_BOOL bUseProjection3x3Matrix; MI_S32 as32Projection3x3Matrix[LDC_MAXTRIX_NUM]; MI_U16 u16FocalLength; void *pConfigAddr; MI_U32 u32ConfigSize; union { MI_LDC_DisplacementMapInfo_t stDispMapInfo; MI_LDC_SensorCalibInfo_t stCalibInfo; }; } MI_LDC_ChnParam_t;
-
成员
成员名称 描述 bUseProjection3x3Matrix DIS 用户设置的3x3 Matrix信息,会被叠加到内部法获得的3x3 Matrix上 as32Projection3x3Matrix DIS 3x3Matrix信息 u16FocalLength DIS 焦距,单位mm pConfigAddr 配置信息地址 u32ConfigSize 配置信息大小 stDispMapInfo/ stCalibInfo LDC 置换表/sensor校准信息,包含畸变参数 -
相关数据类型及接口
3.11. MI_LDC_OutputPortAttr_t¶
-
说明
定义LDC output 端口属性。
-
语法
typedef struct MI_LDC_OutputPortAttr_s { MI_U16 u16Width; MI_U16 u16Height; MI_SYS_PixelFormat_e ePixelFmt; } MI_LDC_OutputPortAttr_t;
-
相关数据类型及接口
3.12. MI_LDC_DirectBuf_t¶
-
说明
LDC 输入buf类型。
-
定义
typedef struct MI_LDC_DirectBuf_s { MI_SYS_PixelFormat_e ePixelFormat; MI_U32 u32Width; MI_U32 u32Height; MI_U32 u32Stride[2]; MI_PHY phyAddr[2]; } MI_LDC_DirectBuf_t;
-
成员
成员名称 描述 ePixelFormat 图像格式 u32Width 图像宽度 u32Height 图像高度 u32Stride 图片每行所占字节数 phyAddr 图像存储物理地址 -
相关数据类型及接口
3.13. MI_LDC_LutTaskAttr_t¶
-
说明
LDC 图像查找表任务类型。
-
定义
typedef struct MI_LDC_LutTaskAttr_s { struct MI_LDC_LutSrcBuf_s { MI_LDC_DirectBuf_t stTableX; MI_LDC_DirectBuf_t stTableY; MI_LDC_DirectBuf_t stTableWeight; } stSrcBuf; MI_LDC_DirectBuf_t stDstBuf; } MI_LDC_LutTaskAttr_t;
-
成员
成员名称 描述 stSrcBuf 查找表的数据源以及权重表 stDstBuf 存放查表之后的数据buf -
相关数据类型及接口
4. 错误码¶
错误代码 | 宏定义 | 描述 |
---|---|---|
0xA0172003 | MI_ERR_LDC_ILLEGAL_PARAM | 输入参数非法 |
0xA0172006 | MI_ERR_LDC_NULL_PTR | 输入参数空指针错误 |
0xA0172012 | MI_ERR_LDC_BUSY | Chanel 系统忙 |
0xA017201F | MI_ERR_LDC_FAIL | 操作执行失败 |
0xA0172001 | MI_ERR_LDC_INVALID_DEVID | 无效device id |
0xA0172008 | MI_ERR_LDC_NOT_SUPPORT | 操作不支持 |
0xA0172016 | MI_ERR_LDC_MOD_INITED | Module 已经初始化 |
0xA0172015 | MI_ERR_LDC_MOD_NOT_INIT | Module 没有初始化 |
0xA0172300 | MI_ERR_LDC_DEV_CREATED | Device 已经创建 |
0xA0172301 | MI_ERR_LDC_DEV_NOT_CREATE | Device 还没有创建 |
0xA0172302 | MI_ERR_LDC_DEV_NOT_DESTROY | Device 没有被销毁 |
0xA0172303 | MI_ERR_LDC_CHN_CREATED | Channel 已经创建 |
0xA0172304 | MI_ERR_LDC_CHN_NOT_CREATE | Channel 还没有创建 |
0xA0172305 | MI_ERR_LDC_CHN_NOT_STOP | Channel 没有被禁用 |
0xA0172306 | MI_ERR_LDC_CHN_NOT_DESTROY | Channel 没有被销毁 |
0xA0172018 | MI_ERR_LDC_PORT_NOT_DISABLE | Port 没有失能 |
0xA0172307 | MI_ERR_LDC_PORT_NOT_UNBIND | Port 没有解绑 |