MI LDC API
1. 概述¶
1.1. 模块说明¶
镜头畸变矫正(Lens distortion correction),目前模块支持功能包括镜头畸变矫正、图像拼接与融合、电子防抖,查找表功能。
1.2. 流程框图¶
图1-1
注:32X2,16X2分别为输入图像,输出图像宽高对齐限制。
1.3. 平台特性¶
Tiramisu平台支持的功能:
功能 平台 | 镜头畸变矫正 | 图像拼接与融合 | 电子防抖 | 查找表 |
---|---|---|---|---|
Tiramisu | Y | Y | Y | N |
功能介绍:
-
镜头畸变矫正
根据镜头标定参数,对输入图像进行畸变矫正处理,然后按照用户配置的投影模式以及感兴趣区域进行输出。
-
图像拼接与融合
针对多sensor 输入的图像进行畸变矫正处理,然后将多个图像拼接在一起,最后将图像重叠区域进行融合处理。
-
数字图像防抖
目前支持陀螺仪算法防抖,即根据陀螺仪产生的数据计算当前帧的图像的运动偏移情况,然后根据运动偏移情况对当前图像进行平移、旋转等变换,从而起到防抖的效果。
-
查找表
提供二维查找表功能,x,y方向上索引和表的数据位宽都是8bit,可以用于图像融合算法权重表的快速查找。
1.4. 关键字说明¶
-
device
Ldc 对应的硬件设备。
-
channel
Ldc 模块处理通道,各通道分时复用LDC硬件,目前仅支持单通道。
2. 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_GetChnParam | 获取LDC通道属性 |
MI_LDC_SetChnParam | 设置LDC 通道属性 |
MI_LDC_DoLutDirectTask | 执行直接的查表任务,将buf直接送给ldc硬件处理 |
MI_LDC_SetOutputPortAttr | 配置LDC output 属性 |
2.1. 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
-
-
举例
LDC 初始化设置, 以及退出范例:
MI_S32 s32Ret = MI_SUCCESS; MI_LDC_DEV LdcDevid = 0; MI_LDC_CHN LdcChnId = 0; MI_LDC_DevAttr_t stDevAttr = {0}; MI_LDC_ChnAttr_t stChnAttr = {}; MI_LDC_SensorCalibInfo_t * pstCalibInfo = &stChnAttr.stCalibInfo; stChnAttr. eMode = MI_LDC_WORKMODE_LDC ; s32Ret = ReadBufFromFile(“ldc.json”, stChnAttr. pConfigAddr, stChnAttr.u32ConfigSize); if (s32Ret) { return s32Ret; } stChnAttr.eInfoType = MI_LDC_MAPINFOTYPE_SENSORCALIB; s32Ret = ReadBufFromFile(“CalibPoly.bin”, pstCalibInfo.pCalibPolyBinAddr, pstCalibInfo.u32CalibPolyBinSize); if (s32Ret) { return s32Ret; } MI_LDC_CreateDevice(LdcDevid, & stDevAttr); MI_LDC_CreateChannel(LdcDevid, LdcChnId, &stChnAttr); MI_LDC_StartChannel(LdcDevid, LdcChnId); ReleaseBuf(stChnAttr. pConfigAddr); ReleaseBuf(pstCalibInfo.pCalibPolyBinAddr); /*销毁通道*/ MI_LDC_StopChannel(LdcDevid, LdcChnId); MI_LDC_DestroyChannel(LdcDevid, LdcChnId); MI_LDC_DestroyDevice(LdcDevid);
-
相关主题
2.2. 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
-
-
举例
参见MI_LDC_CreateDevice 举例.
-
相关主题
2.3. 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.4. 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.5. 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.6. 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.7. 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
-
-
注意
创建通道之后可以通过该接口获取输出信息。
-
举例
参见MI_LDC_CreateDevice 举例.
2.8. MI_LDC_GetChnParam¶
-
描述
获取LDC 通道属性。
-
语法
MI_S32 MI_LDC_GetChnParam (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_CreateChannel之后使用。
-
对于buff相关的成员变量不支持获取:pConfigAddr u32ConfigSize stDispMapInfo stCalibInfo, 设置时设为NULL/0即可。
-
-
举例
更新channel 配置前使用,可用于确保期望设置的参数不会干扰现有的其他运行参数。
MI_LDC_DEV devId = 0; MI_LDC_CHN chnId = 0; MI_LDC_ChnParam_t stChnParam = {}; MI_LDC_GetChnParam(devid, chnid, &stChnParam); stChnParam.bBypass =TRUE;//跳过LDC DIS的处理 MI_LDC_SetChnParam(devId, chnId, & stChnParam);
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_CreateChannel之后使用。
-
举例
更新channel 配置时使用,可以用于切换算法模式以及调节镜头参数。
MI_LDC_DEV devId = 0; MI_LDC_CHN chnId = 0; MI_LDC_ChnParam_t stChnParam = {}; MI_LDC_SensorCalibInfo_t *pCalibInfo = &stChnParam.stCalibInfo; s32Ret = ReadBufFromFile(“ldc.json”, &stChnParam. pConfigAddr, &stChnParam.u32ConfigSize); if (s32Ret) { return s32Ret; } s32Ret = ReadBufFromFile(“CalibPoly.bin”, &pstCalibInfo.pCalibPolyBinAddr, &pstCalibInfo.u32CalibPolyBinSize); if (s32Ret) { return s32Ret; } MI_LDC_SetChnParam(devId, chnId, & stChnParam); ReleaseBuf(stChnParam. pConfigAddr); ReleaseBuf(pstCalibInfo.pCalibPolyBinAddr);
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 查表任务配置属性 输入/输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
举例
MI_S32 s32Ret = MI_SUCCESS; MI_LDC_DEV devId = 0; MI_LDC_CHN chnId = 0; MI_LDC_LutTaskAttr_t stLutTask = {}; MI_LDC_DirectBuf_t stTableX = {}, stTableY = {}, stTableWeight = {}; void *pVirTableX = NULL, *pVirTableY=NULL, *pVirTableWeight = NULL; #define LUT_TABLE_Init(path, table, ppVir, w, h, __exit_func__) do { \ table.ePixelFormat = E_MI_SYS_PIXEL_FRAME_I8; \ table.u32Width = w; \ table.u32Height = h; \ table.u32Stride[0] = w; \ s32Ret = MI_SYS_MMa_Alloc(0, NULL, w*h, &table.phyAddr[0]); \ if (s32Ret) { printf(“failed to malloc buf\n”); goto __exit_func__; } s32Ret = MI_SYS_Mmap(table.phyAddr[0], w*h, ppVir, false); \ if (s32Ret) { printf(“failed to Mmap buf\n”); goto __exit_func__; } s32Ret = ReadBufFromFile(path, ppVir, w*h); if (s32Ret) { goto __exit_func__; } } while(0) #define LUT_TABLE_Deinit(table, pVir) do { \ if (pVir) { MI_SYS_Munmap(pVir, table.u32Width * table.u32Height); } if (table.phyAddr[0]) { MI_SYS_MMA_Free(0, table.phyAddr[0]); } } while(0) LUT_TABLE_Init(“1080p_tableX”, stTableX, & pVirTableX, 1920, 1080, __exit); LUT_TABLE_Init(“1080p_tableY”, stTableY, & pVirTableY, 1920, 1080, __exit); LUT_TABLE_Init(“1080p_tableWeight”, stTableWeight, &pVirTableWeight, 1920, 1080, __exit); MI_LDC_DoLutDirectTask (devId, chnId, & stLutTask); __exit: LUT_TABLE_Deinit(stTableX, pVirTableX); LUT_TABLE_Deinit(stTableY, pVirTableY); LUT_TABLE_Deinit(stTableWeight, pVirTableWeight);
2.11. MI_LDC_SetOutputPortAttr¶
-
描述
配置LDC output 属性。
-
语法
MI_S32 MI_LDC_SetOutputPortAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_OutputPortAttr_t *pstOutputAttr);
-
参数
参数名称 描述 输入/输出 devId Device id 输入 chnId Ldc Channel id 输入 pstOutputAttr Output 属性 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
需求
-
头文件:mi_ldc.h
-
库文件:libmi_ldc.a
-
-
注意
-
该接口需要在创建通道之后使用(MI_LDC_CreateChannel)。
-
该接口目前仅支持配置LDC输出的格式,支持的格式有: NV12, ARGB8888, BGRA8888。
-
Tiramisu 平台不支持修改格式。
-
-
举例
MI_LDC_DEV devId = 0; MI_LDC_CHN chnId = 0; MI_LDC_OutputPortAttr_t stLdcPortAttr = {}; MI_LDC_GetOutputPortAttr(devId, chnId, &stLdcPortAttr); stLdcPortAttr.ePixelFmt = E_MI_SYS_PIXEL_FRAME_ARGB8888; MI_LDC_SetOutputPortAttr(devId, chnId, &stLdcPortAttr);
3. 数据类型¶
模块相关数据类型定义如下:
数据类型 | 定义 |
---|---|
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.1. MI_LDC_DEV¶
-
说明
定义LDC device的类型
-
语法
typedef MI_U32 MI_LDC_DEV;
3.2. MI_LDC_CHN¶
-
说明
定义LDC channel的类型
-
语法
typedef MI_U32 MI_LDC_CHN;
3.3. MI_LDC_DevAttr_t¶
-
说明
LDC设备初始化参数。
-
定义
typedef struct MI_LDC_DevAttr_s { MI_U32 u32Reserved; } MI_LDC_DevAttr_t;
-
成员
成员名称 描述 u32Reserved 保留数据 -
相关数据类型及接口
MI_LDC_CreateDevice
3.4. 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.5. 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.6. 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.7. MI_LDC_SensorCalibInfo_t¶
-
说明
LDC Sensor 校准信息。
-
定义
typedef struct MI_LDC_SensorCalibInfo_s { void *pCalibPolyBinAddr; MI_U32 u32CalibPolyBinSize; } MI_LDC_SensorCalibInfo_t;
-
成员
成员名称 描述 pCalibPolyBinAddr 校准信息指针 u32CalibPolyBinSize 校准信息大小 -
相关数据类型及接口
3.8. MI_LDC_ChnAttr_t¶
-
说明
LDC设备Channel 属性。
-
定义
-
定义
typedef struct MI_LDC_ChnAttr_s { MI_LDC_WorkMode_e eMode; MI_BOOL bBypass; MI_BOOL bUseProjection3x3Matrix; MI_S32 as32Projection3x3Matrix[LDC_MAXTRIX_NUM]; MI_U16 u16UserSliceNum; MI_U32 u32FocalLengthX; MI_U32 u32FocalLengthY; 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 的工作模式 bBypass 设置LDC为bypass模式:
DIS模式: 跳过DIS的处理
其他模式: 暂不支持bUseProjection3x3Matrix 表明是否使用as32Projection3x3Matrix as32Projection3x3Matrix 表明陀螺仪摆放的方向(用于DIS模式) u16UserSliceNum DIS 垂直方向上切分数量,主要用于Rolling Shutter相机的运动场景,每个Slice会有单独的3x3 Matrix u32FocalLengthX X轴焦距,单位pixel(用于DIS模式) u32FocalLengthY Y轴焦距,单位pixel(用于DIS模式) pConfigAddr LDC 配置信息地址 u32ConfigSize LDC 配置信息大小 eInfoType LDC 映射信息类型 stDispMapInfo/stCalibInfo LDC 置换表/sensor校准信息,包含畸变参数 -
相关数据类型及接口
3.9. MI_LDC_ChnParam_t¶
-
说明
LDC设备初始化参数。
-
定义
typedef struct MI_LDC_ChnParam_s { MI_BOOL bBypass; MI_BOOL bUseProjection3x3Matrix; MI_S32 as32Projection3x3Matrix[LDC_MAXTRIX_NUM]; MI_U32 u32FocalLengthX; MI_U32 u32FocalLengthY; void *pConfigAddr; MI_U32 u32ConfigSize; union { MI_LDC_DisplacementMapInfo_t stDispMapInfo; MI_LDC_SensorCalibInfo_t stCalibInfo; }; } MI_LDC_ChnParam_t;
-
成员
成员名称 描述 bBypass 设置LDC为bypass模式:
DIS模式: 跳过DIS的处理
其他模式: 暂不支持bUseProjection3x3Matrix 表明是否使用as32Projection3x3Matrix as32Projection3x3Matrix 表明陀螺仪摆放的方向(用于DIS模式) u32FocalLengthX 焦距X轴,单位pixel(用于DIS模式) u32FocalLengthY 焦距Y轴,单位pixel(用于DIS模式) pConfigAddr 配置信息地址 u32ConfigSize 配置信息大小 stDispMapInfo/ stCalibInfo LDC 置换表/sensor校准信息,包含畸变参数 -
相关数据类型及接口
3.10. 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.11. 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.12. 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 存放查表之后的输出数据 -
相关数据类型及接口
4. 错误码¶
错误代码 | 宏定义 | 描述 |
---|---|---|
0xA0172001 | MI_ERR_LDC_INVALID_DEVID | 无效device id |
0xA0172002 | MI_ERR_LDC_INVALID_CHNID | 无效channel id |
0xA0172003 | MI_ERR_LDC_ILLEGAL_PARAM | 输入参数非法 |
0xA0172006 | MI_ERR_LDC_NULL_PTR | 输入参数空指针错误 |
0xA0172008 | MI_ERR_LDC_NOT_SUPPORT | 操作不支持 |
0xA017200C | MI_ERR_LDC_NOT_NOMEM | 内存不足 |
0xA0172012 | MI_ERR_LDC_BUSY | Channel 系统忙 |
0xA0172015 | MI_ERR_LDC_MOD_NOT_INIT | Module 没有初始化 |
0xA0172016 | MI_ERR_LDC_MOD_INITED | Module 已经初始化 |
0xA0172018 | MI_ERR_LDC_PORT_NOT_DISABLE | Port 没有失能 |
0xA017201F | MI_ERR_LDC_FAIL | 操作执行失败 |
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 没有被销毁 |
0xA0172307 | MI_ERR_LDC_PORT_NOT_UNBIND | Port 没有解绑 |
5. PROCFS介绍¶
5.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_ldc/mi_ldc0
-
调试信息分析
记录当前 LDC 的使用状况以及相关属性、可以动态地获取到这些信息,方便调试和测试。
-
参数说明
参数 描述 Device Info DevID 设备 ID IRQ_Enable IRQ使能状况 IsrCnt 中断发生的次数,在cmdq mode下没有参考意义 IsrNum 中断号 TotBlkNum 总共需要处理的ldc块的数量 FramDonCnt 处理完帧的数量 cmdqif cmdq 接口地址 HalInFrmCnt 输入到Hal 的帧总数 HalDoneFrmCnt Hal 处理完的帧总数
HalDoneBlkCnt Hal 当前帧处理完的块总数 HalIsrDoneCnt Hal done中断发生的次数 HalIsrErrCnt Hal Err 中断发生的次数 参数 描述 Channel Info ChnId Channel ID workmode 当前channel的工作模式 status 当前channel的状态:0:init 1:start 2:stop 3:destroyed InputWH 输入帧的分辨率 Pixel 输入帧的格式 Stride 输入帧的stride[0] InBufCnt 前级输入的帧总数量 IntodoCnt 待处理帧的标号(递增) Atom 底层拿住 buffer 数量 EptzInit 初始化算法所用时间 OneBinSz 计算最新view 的buffer size 所用时间 OneBin 计算最新view所用时间 TotalBin LDC 算法计算所有view的时间 LdcDone LDC 硬件处理时间 EnqTDeq 拿到前级buf到处理完的总时间 BlendT alpha blending 所用时间 参数 描述 ChnId Channel ID ViewId ldc 对应窗口的Id mode ldc使用的场景模式 NumRuns ldc 当前场景需要处理的总区块数 ImgFmt ldc 处理的图像格式 OpMode 当前bbox的模式:
0:2048x16 1:1024x32 2:512x64 3:256x128 4: 128x256flip ldc的镜像模式 InSize 当前view的输入区域 ViewSize 当前view的输出区域 OutSize 当前场景的输出区域 ViewTime 当前view的处理时间 Inblk 当前blk的输入区域 OutBlk 当前blk的算法输出区域 SclBlk 当前blk的输出区域 DeltaXY 当前blk对应delta 表的坐标 BlkTime 对应blk的处理时间
5.2. echo¶
Echo help 查看可用命令
# echo help > /proc/mi_modules/mi_ldc/mi_ldc0
功能 | dump LDC 输出文件 |
---|---|
命令 | echo writeoutfile [chnid cnt path] > /proc/mi_modules/mi_ldc/mi_ldc0 |
参数说明 | chnid: channel Id |
cnt:dump的数量 | |
path:dump的路径 | |
举例 | echo writeoutfile 0 2 /mnt/ > /proc/mi_modules/mi_ldc/mi_ldc0 |
功能 | dump LDC map文件 |
---|---|
命令 | echo dumptablebin [chnid view/all path] > /proc/mi_modules/mi_ldc/mi_ldc0 |
参数说明 | chnid: channel id |
view/all: 下载的方式, view:具体的viewid, all:当前场景所有的view | |
path:dump的路径 | |
举例 | echo dumptablebin 0 all /mnt/ > /proc/mi_modules/mi_ldc/mi_ldc0 |
功能 | 配置输出属性 |
---|---|
命令 | echo setout[chnid width height pixel] > /proc/mi_modules/mi_ldc/mi_ldc0 |
参数说明 | chnid: channel id |
width: 输出图像的width | |
height:输出图像的height | |
举例 | echo setout 0 1920 1080 11 > /proc/mi_modules/mi_ldc/mi_ldc0 |
功能 | 循环播放前帧 |
---|---|
命令 | echo loopbuf [chnid cnt] > /proc/mi_modules/mi_ldc/mi_ldc0 |
参数说明 | chnid: channel id |
cnt:循环播放前帧的次数 | |
举例 | echo loopbuf 0 11 > /proc/mi_modules/mi_ldc/mi_ldc0 |
功能 | 配置ldc 内部debug trace |
---|---|
命令 | echo debug [chnid str] > /proc/mi_modules/mi_ldc/mi_ldc0 |
参数说明 | chnid: channel id |
str:debug的方式,off: 关闭,ViewRes, ViewLock,ChnRdLock,ChnWrLock,DisGyro, Eptz | |
举例 | echo debug 0 ChnRdLock > /proc/mi_modules/mi_ldc/mi_ldc0 |
功能 | 配置单个ldc map |
---|---|
命令 | echo setbin [chnid path] > /proc/mi_modules/mi_ldc/mi_ldc0 |
参数说明 | chnid: channel id |
path:map的路径 | |
举例 | echo setbin /mnt/ldc.bin > /proc/mi_modules/mi_ldc/mi_ldc0 |