MI LDC API
1. 概述¶
1.1. 模块说明¶
镜头畸变矫正(Lens distortion correction),通过bin档的设置将画面内容进行拉直或者融合。
1.2. 流程框图¶
图1-1
注:32X32 为宽高对齐限制。
1.3. 关键字说明¶
-
bin档
在发布包中包含libeptz.a 算法库文件, app通过调用算法接口,生成对应的bin文件, 以指针buffer形式送给MI_LDC。
-
channel
Ldc 模块处理通道,各通道分时复用LDC硬件。
-
View/Block
LDC根据bin中的mode配置,将画面分割成view,每一个view对应一个bin文件,view画面是由若干个block组成,block为LDC处理的最小单元。
2. API 参考¶
2.1. 功能模块API¶
表2-1
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_SetConfig | 设置LDC config bin |
MI_LDC_InitDev | 初始化LDC设备 |
MI_LDC_DeInitDev | 初始化LDC设备 |
MI_LDC_SetBatchViewConfig | 设置一组LDC的配置 |
2.2. MI_LDC_CreateDevice¶
-
描述
创建一个LDC device设备。
-
语法
MI_S32 MI_LDC_CreateDevice(MI_LDC_DEV devId);
-
参数
表2-2
参数名称 描述 输入/输出 devId Device id号 输入 eWorkMdoe 工作模式 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
注意
目前只支持devId = 0;
-
举例
LDC 初始化设置, 以及退出范例:
MI_LDC_DEV LdcDevid = 0; MI_LDC_CHN LdcChnId = 0; MI_U32 u32ViewNum=1; MI_U32 i=0; MI_LDC_CreateDevice (LdcDevid,); MI_LDC_CreateChannel (LdcDevid, LdcChnId); for(i=0; i\< u32ViewNum; i++) { MI_LDC_SetConfig(LdcDevid, LdcChnId, pstLDCChnattr->ldcBinBuffer[i], pstLDCChnattr->u32LdcBinSize[i]); free(pstLDCChnattr->ldcBinBuffer); } 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);
-
参数
表2-3
参数名称 描述 输入/输出 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);
-
参数
表2-4
参数名称 描述 输入/输出 devId Device id号 输入 chnId Ldc 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);
-
参数
表2-5
参数名称 描述 输入/输出 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);
-
参数
表2-6
参数名称 描述 输入/输出 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);
-
参数
表2-7
参数名称 描述 输入/输出 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);
-
参数
表2-8
参数名称 描述 输入/输出 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_SetConfig¶
-
描述
设置LDC config bin。
-
语法
MI_S32 MI_LDC_SetConfig(MI_LDC_DEV devId, MI_LDC_CHN chnId, void *pConfigAddr, MI_U32 u32Size);
-
参数
表2-9
参数名称 描述 输入/输出 devId Device id号 输入 chnId Ldc Channel 号 输入 pConfigAddr Config bin buffer 指针 输入 u32Size Config bin buffer size 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
注意
-
api调用完之后才可以释放掉对应的bin buffer。
-
每一个view对应一个ldc bin buffer, 一个channel可能会有多个view 窗口组成。
-
-
举例
-
初始化见MI_LDC_CreateDevice 举例.
-
切换某一个view窗口的bin设置可以直接call 这个api设置
-
切换mode或者view num 需要变化时流程如下:
MI_LDC_StopChannel(LdcDevid, LdcChnId); for(i=0; i\< u32ViewNum; i++) { MI_LDC_SetConfig(LdcDevid, LdcChnId, pstLDCChnattr->ldcBinBuffer[i], pstLDCChnattr->u32LdcBinSize[i]); free(pstLDCChnattr->ldcBinBuffer); } MI_LDC_StartChannel(LdcDevid, LdcChnId);
-
2.10. MI_LDC_InitDev¶
-
描述
初始化LDC设备
-
语法
MI_S32 MI_LDC_InitDev(MI_LDC_InitParam_t *pstInitParam);
-
参数
表2-10
参数名称 描述 输入/输出 pstInitParam 设备初始化参数 输入 -
返回值
-
MI_OK 成功。
-
非MI_OK 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:
-
-
注意
本接口必须和MI_LDC_DeInitDev成对使用,不可单独重复调用,否则返回失败。
2.11. MI_LDC_DeInitDev¶
-
描述
反初始化LDC设备
-
语法
MI_S32 MI_LDC_DeInitDev(void);
-
返回值
-
MI_OK 成功。
-
非MI_OK 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:
-
-
注意
-
此函数必须在初始化设备后调用,否则返回失败。
-
本接口必须和MI_LDC_InitDev成对使用,不可单独重复调用,否则返回失败。
-
2.12.MI_LDC_SetBatchViewConfig¶
-
描述
LDC 的config bin的批量配置,可以用来动态切换LDC的模式。
-
语法
MI_S32 MI_LDC_SetBatchViewConfig(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_Config_t * pstCfg, MI_U32 u32CfgNum);
-
参数
参数名称 描述 输入/输出 devId Device ID号。 输入 chnId LDC Channel 号 输入 pstCfg LDC Config结构体指针 输入 u32CfgNum Config的数量 输入 -
返回值
-
MI_OK 成功。
-
非MI_OK 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
注意
-
api调用完之后才可以释放掉对应的bin buffer。
-
每一个view对应一个ldc bin buffer, 一个channel可能会有多个view 窗口组成。
-
-
举例
-
初始化见MI_LDC_CreateDevice 举例.
-
切换模式可参考如下程序直接调用此api进行设置
MI_LDC_Config_t * pstLdcConfig = (MI_LDC_Config_t *)malloc(u32ViewNum * sizeof(MI_LDC_Config_t)); for(i=0; i< u32ViewNum; i++) { pstLdcConfig[i]. pCfgAddr = pstLDCChnattr->ldcBinBuffer[i]; pstLdcConfig[i]. u32CfgSize = pstLDCChnattr->u32LdcBinSize[i]; } MI_LDC_SetBatchViewConfig(LdcDevid, LdcChnId, pstLdcConfig, u32ViewNum); free(pstLdcConfig);
-
3. ldc 数据类型¶
3.1. 数据类型定义¶
表3-1
数据类型 | 定义 |
---|---|
MI_LDC_DEV | 定义LDC device的类型 |
MI_LDC_CHN | 定义LDC channel的类型 |
MI_LDC_OutputPortAttr_t | 定义LDC output 端口属性 |
MI_LDC_InitParam_t | 定义LDC设备初始化参数 |
MI_LDC_Config_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_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.5. MI_LDC_InitParam_t¶
-
说明
LDC设备初始化参数。
-
定义
typedef struct MI_LDC_InitParam_s { MI_U32 u32DevId; MI_U8 *u8Data; } MI_LDC_InitParam_t;
-
成员
表3-2
成员名称 描述 u32DevId 设备ID u8Data 数据buffer指针 -
相关数据类型及接口
3.6. MI_LDC_Config_t¶
-
说明
LDC 配置的结构体。
-
定义
typedef struct MI_LDC_Config_s { void *pCfgAddr; MI_U32 u32CfgSize; } MI_LDC_Config_t;
-
成员
成员名称 描述 pCfgAddr 指向Ldc 配置的指针 u32CfgSize 当前配置的大小 -
相关数据类型及接口
4. 错误码¶
表4-1 LDC API错误码
错误代码 | 宏定义 | 描述 |
---|---|---|
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 没有解绑 |