跳转至

MI LDC API


REVISION HISTORY

Revision No.
Description
Date
3.0
  • Initial release
  • 12/04/2020
    3.1
  • 添加MI_LDC_SetOutputPortAttr接口
  • 07/04/2021
  • 新增PROCFS介绍
  • 08/25/2021
    3.2
  • 添加对于 LDC bypass的支持
  • MI_LDC_ChnAttr_t,MI_LDC_ChnParam_t修改焦距设置为可变焦距,单位变为pixel
  • 添加新接口: MI_LDC_GetChnParam
  • 05/10/2022
    4.0
  • 按功能拆分为LDC、DIS、PMF、STITCH、DPU、NIR接口。
  • 添加新接口:MI_LDC_AttachToChn, MI_LDC_DetachFromChn, MI_LDC_SetChnLDCAttr, MI_LDC_GetChnLDCAttr, MI_LDC_SetChnDISAttr, MI_LDC_GetChnDISAttr, MI_LDC_SetChnPMFAttr, MI_LDC_GetChnPMFAttr, MI_LDC_SetChnLDCHorAttr, MI_LDC_GetChnLDCHorAttr, MI_LDC_SetChnStitchAttr, MI_LDC_GetChnStitchAttr, MI_LDC_SetChnDPUAttr, MI_LDC_GetChnDPUAttr, MI_LDC_SetChnNIRAttr, MI_LDC_GetChnNIRAttr, MI_LDC_SetInputPortAttr, MI_LDC_GetInputPortAttr
  • 删除接口和数据结构:MI_LDC_SetChnParam, MI_LDC_GetChnParam, MI_LDC_ChnParam_t
  • 06/13/2022
  • 增加rotate参数
  • 11/15/2022
    4.1
  • 添加Souffle平台下DIS的框图说明
  • 添加MI_LDC_ChnDISAttr_t结构体参数并补充说明
  • 01/12/2023
  • 添加Souffle平台下STITCH的框图说明
  • 增加eInputBindType参数
  • 02/16/2023
  • 添加Souffle平台下DIS GME与GYRO模式的框图说明
  • 增加GME与GYRO模式下需具体设定的MI_LDC_ChnDISAttr_t参数说明
  • 添加DIS procfs说明
  • 03/15/2023
  • MI_LDC_ChnStitchAttr_t 增加DisparityMap相关参数
  • 增加数据结构: MI_LDC_StitchDisparity_t
  • 06/29/2023
  • 添加新接口: MI_LDC_GetRegionBorderMappedPointCnt, MI_LDC_GetRegionBorderMappedPoints
  • 增加数据结构: MI_LDC_Point_t
  • 08/09/2023
  • 添加新接口:MI_LDC_GetDisplacementMapSize, MI_LDC_GenerateDisplacementMap, MI_LDC_QueryMappingPoint
  • 添加数据结构:MI_LDC_DispMapSize_t, MI_LDC_DispMapConf_t, MI_LDC_DispMapType_e
  • 08/10/2023
  • 添加每种工作模式最大通道个数的限制
  • 09/05/2023
  • 添加MI_LDC_DIS_GYRO模式下相关参数设定说明
  • 添加MI_LDC_WORKMODE_DIS_LDC枚举成员,并添加MI_LDC_DIS_GYRO模式叠加LDC畸变矫正功能使用说明
  • 09/26/2023
  • 新增iFord芯片信息
  • 更新PROCFS部分
  • 11/21/2023
  • 添加新接口:MI_LDC_CalibIMUBaseDrift,MI_LDC_SetIMUDriftPara,MI_LDC_GetIMUDriftPara
  • 添加数据结构:MI_LDC_BaseDrift_t,MI_LDC_Drift_t,MI_LDC_IMUDrift_t,MI_LDC_IMUPart_e
  • 07/03/2024
  • 新增枚举值:MI_LDC_REGION_DOORBELL
  • 添加数据结构:MI_LDC_RegionDoorbell_t
  • 08/22/2024
  • 适配新EIS算法的as32RotationMatrix参数配置
  • 03/26/2024
  • MI_LDC_ChnDISAttr_t结构体添加bBypass成员
  • 04/09/2024
  • DIS GME模式下,支持动态调整u8CropRatio,并且在bBypass=1时,可动态修改u8CropRatio来调整视场角
  • 05/09/2024
  • 添加DIS客制化函数的支持。
  • 新增数据结构:MI_LDC_IsMatrixInParam_t, MI_LDC_IsMatrixOutParam_t, MI_LDC_CalIsMatrixCb_t。
  • 添加DIS Channel的debugfs描述
  • 06/19/2024
    4.2
  • 在DIS GYRO模式下,添加MI_LDC_ImgDirection_t结构体,支援前级Sensor的Mirror与Flip操作,ISP的Rotate操作,且上述三种操作可任意组合。
  • 08/21/2024
  • 在DIS GYRO模式下,新增动态变焦功能
  • 在MI_LDC_WORKMODE_DIS_LDC模式下,支持通过s32DistortionRatio参数来调整畸变矫正的强度
  • 10/15/2024
    4.3
  • 添加MI_LDC_REGION_BIN枚举成员
  • 添加数据结构MI_LDC_RegionBin_t
  • 02/24/2025
    4.4
  • 添加新接口:MI_LDC_GetDisAuxiliaryInfo
  • 添加数据结构:MI_LDC_DisAuxiliaryInfo_t
  • 04/03/2025
  • 在DIS GYRO模式下, 新增u8BackwardRefFrameCnt参数用于指定向后参考的帧数
  • 06/03/2025
    4.5
  • 添加新接口:MI_LDC_QueryMappingPoints
  • 添加数据结构:MI_LDC_QueryPointsConfig_t
  • 09/02/2025
  • 在LDC模式下,支持调整u32FocalLengthX,u32FocalLengthY实现变焦
  • 在LDC模式下,添加MI_LDC_ImgDirection_t结构体,支援前级Sensor的Mirror与Flip操作,ISP的Rotate操作,且上述三种操作可任意组合
  • 10/23/2025
    4.6
  • 删除LDC Hor相关接口和Maruko芯片说明
  • 11/13/2025
  • 优化目录结构,修订部分内容
  • 11/13/2025

    1. 概述


    1.1. 模块说明

    MI_LDC是一个计算机视觉模块,目前支持镜头畸变矫正、透视变换函数、图像拼接、图像拼接区域融合、防抖以及查找表功能。

    关键字说明

    • device

      MI_LDC对应硬件设备。

    • channel

      MI_LDC模块处理通道,各通道分时复用硬件。


    1.2. 基本结构

    MI_LDC根据使用的功能,对图像进行不同的处理。

    • LDC构建输出图像。

    • DIS计算抖动。

    • BLEND处理图像融合。

    防抖功能,需要先由DIS完成抖动计算,再由LDC完成输出图像构建; 图像拼接区域融合功能,需要先由LDC完成图像拼接,再由BLEND完成图像融合; 其他功能,将由LDC独自完成输出图像构建。

    MI_LDC硬件工作框图

    通常,MI_LDC前级绑定模块是ISP,后级绑定模块是SCL,如果不需要缩放,后级可绑定VENC。

    MI_LDC常规串流示意图

    1.3. 功能介绍

    MI_LDC支持以下功能:

    • LDC

      镜头畸变矫正,根据镜头标定参数,对输入图像进行畸变矫正处理,然后按照用户配置的投影模式以及感兴趣区域进行输出。

    • PMF

      投影变换函数,主要是根据用户输入的3x3 Matrix 进行投影变换。

    • STITCH

      图像拼接与融合,针对多sensor 输入的图像进行畸变矫正处理,然后将多个图像拼接在一起,最后将图像重叠区域进行融合处理。

    • DIS

      数字图像防抖,目前支持陀螺仪算法、GME算法防抖和客制化算法防抖。其中,陀螺仪算法根据陀螺仪产生的数据计算当前帧的图像的运动偏移情况,而GME算法会参考前一帧信息计算当前帧的图像的运动偏移情况,然后根据运动偏移情况对当前图像进行平移、旋转等变换,从而起到防抖的效果。

    • NIR

      用于双光融合的拼接预处理,输出图像需传递至NIR模块进一步处理。

    • DPU

      用于双sensor 深度处理的拼接预处理,输出图像需传递至DPU模块进一步处理。

    • LUT

      提供二维查找表功能,x,y方向上索引和表的数据位宽都是8bit,可以用于图像融合算法权重表的快速查找。


    1.4. 应用场景

    MI_LDC可应用于以下场景,部分功能仅支持特定场景:

    • Pure linux场景

      在linux环境下,支持基于MI_LDC API开发应用程序。

    • Pure rtos场景

      在rtos环境下,支持基于MI_LDC API开发应用程序。

      注意:不支持图像拼接、图像拼接区域融合、防抖功能

    • Dualos场景

      在dualos环境下,在linux端运行的应用程序和在rtos端运行的应用程序都可以基于MI_LDC API开发。

      注意:不支持图像拼接、图像拼接区域融合、防抖功能


    1.5. 芯片差异

    • 注意:当前文档请参考Iford 相关说明。

    ‘/’与‘N’均为不支持。

    注意:iFord和Jaguar1平台支持水平畸变矫正(一维畸变矫正),其是ISP的一项功能,具体使用方式请参考MI ISP API说明。

    • framemode绑定时,各平台不同功能的最大通道数量:

      功能
      平台
      LDC PMF DIS STITCH NIR DPU LUT
      Souffle 16 16 4 1 16 16 16
      iFord 16 16 4 / / / /
      iFackel 16 16 4 1 / 16 /
      Jaguar1 16 16 4 / / / /

      注意:MI_LDC以非framemode绑定时,仅支持1通道。

    不同芯片在硬件和功能上有差异:

    • E_MI_SYS_BIND_TYPE_REALTIME对应直连绑定方式,ISP-LDC之间能以此方式绑定,仅支持STITCH功能。

    • E_MI_SYS_BIND_TYPE_HW_AUTOSYNC对应低时延绑定方式,ISP-LDC-SCL三者需同时以此方式绑定,仅支持LDC和PMF功能。

    • Pixel Alignment (WxH)是硬件的对齐要求。


    1.5.1. Souffle

    功能 输入格式 输出格式 绑定方式
    LDC PMF DIS STITCH NIR DPU LUT yuv420SP NV12 ARGB系列 Pixel Alignment (WxH) yuv420SP NV12 YUYV ARGB系列 Pixel Alignment (WxH) E_MI_SYS_BIND_TYPE_FRAME_BASE E_MI_SYS_BIND_TYPE_REALTIME E_MI_SYS_BIND_TYPE_HW_AUTOSYNC
    DIS-GME DIS-GYRO DIS-CUST
    Y Y Y Y Y Y Y Y Y Y Y 16x2 Y N Y 16x2 Y Y Y

    注意:DIS功能不支持ARGB系列输入格式,STITCH功能不支持YUYV和ARGB系列输出格式。


    DIS-GME:

    注:

    • DIS-GME模式做防抖处理时需要参考前帧信息,故DIS Process需要如上图四个图片信息(分辨率为1080P与120x68的前帧与当前帧);
    • 当LDC启用DIS-GME模式时,前级只能绑定SCL模块,让其3个Output port输出上图中要求的分辨率图片并送给LDC 的3个Input port;
    • 目前支持的最大原始图片分辨率为4K;
    • 对齐限制:由于DIS属于LDC的子模块,故输入图和输出图宽需16 pixel对齐,高需2 pixel对齐,例子如下:
      • 若前级绑SCL时,三个输入图的尺寸如:Origin Pictrue按上述要求对齐,1080P Pictrue默认符合上述要求,120x68 Pictrue的宽由于MI_LDC内部有强制对齐,内部会自动Stride到128x68。
      • 若以MI_SYS_ChnInputPortPutBuf送流给DIS时,三个输入图尺寸如:Origin Pictrue按上述要求对齐,1080P Pictrue默认符合上述要求,120x68 Pictrue需在送流前,将其Stride到128x68后才可送入Input port2。

    DIS-GYRO:

    注:

    • DIS-GYRO模式做防抖处理时需要当前帧数据与内部的陀螺仪数据,故DIS Process需要如上图一个图片信息(当前帧);
    • 当LDC启用DIS-GYRO模式时,前级模块无特定限制,图片尺寸可参考LDC限制。
    • 当LDC启用DIS-GYRO模式时,由于需要实时从Sensor端获取部分信息帮助算法进行运算,故需在串入pipeline的情况下才可正常工作。

    DIS-CUST:

    • DIS-CUST模式做防抖处理时需要调用在用户态回调函数——pCalIsMatrixCb,故DIS Process需要如上图一个图片信息(当前帧);
    • 当LDC启用DIS-CUST模式时,前级模块无特定限制,图片尺寸可参考LDC限制。

    STITCH:

    注:

    • 融合区域 宽度最大支持1648,高度最大支持4224。
    • 融合后默认只输出融合后图像,不会含有重叠区的图像。
    • 对齐限制:输入图和输出图宽需16 pixel对齐,高需2 pixel对齐,若有配置采样精度大于16则对齐要求和采样精度匹配,例如设置grid_size=32则要求输入图32pixel对齐。

    1.5.2. iFord

    功能 输入格式 输出格式 绑定方式
    LDC PMF DIS STITCH NIR DPU LUT yuv420SP NV12 ARGB系列 Pixel Alignment (WxH) yuv420SP NV12 YUYV ARGB系列 Pixel Alignment (WxH) E_MI_SYS_BIND_TYPE_FRAME_BASE E_MI_SYS_BIND_TYPE_REALTIME E_MI_SYS_BIND_TYPE_HW_AUTOSYNC
    DIS-GME DIS-GYRO DIS-CUST
    Y Y N Y N N N N N Y N 16x2 Y Y N 16x2 Y N Y

    1.5.3. iFackel

    功能 输入格式 输出格式 绑定方式
    LDC PMF DIS STITCH NIR DPU LUT yuv420SP NV12 ARGB系列 Pixel Alignment (WxH) yuv420SP NV12 YUYV ARGB系列 Pixel Alignment (WxH) E_MI_SYS_BIND_TYPE_FRAME_BASE E_MI_SYS_BIND_TYPE_REALTIME E_MI_SYS_BIND_TYPE_HW_AUTOSYNC
    DIS-GME DIS-GYRO DIS-CUST
    Y Y Y Y Y Y N Y N Y N 16x2 Y Y N 16x2 Y N Y

    注意:DIS功能不支持ARGB系列输入格式,STITCH功能不支持YUYV和ARGB系列输出格式。


    DIS-GME:

    注:

    • DIS-GME模式做防抖处理时需要参考前帧信息,故DIS Process需要如上图四个图片信息(分辨率为1080P与120x68的前帧与当前帧);
    • 当LDC启用DIS-GME模式时,前级只能绑定SCL模块,让其3个Output port输出上图中要求的分辨率图片并送给LDC 的3个Input port;
    • 目前支持的最大原始图片分辨率为4K;
    • 对齐限制:由于DIS属于LDC的子模块,故输入图和输出图宽需16 pixel对齐,高需2 pixel对齐,例子如下:
      • 若前级绑SCL时,三个输入图的尺寸如:Origin Pictrue按上述要求对齐,1080P Pictrue默认符合上述要求,120x68 Pictrue的宽由于MI_LDC内部有强制对齐,内部会自动Stride到128x68。
      • 若以MI_SYS_ChnInputPortPutBuf送流给DIS时,三个输入图尺寸如:Origin Pictrue按上述要求对齐,1080P Pictrue默认符合上述要求,120x68 Pictrue需在送流前,将其Stride到128x68后才可送入Input port2。

    DIS-GYRO:

    注:

    • DIS-GYRO模式做防抖处理时需要当前帧数据与内部的陀螺仪数据,故DIS Process需要如上图一个图片信息(当前帧);
    • 当LDC启用DIS-GYRO模式时,前级模块无特定限制,图片尺寸可参考LDC限制。
    • 当LDC启用DIS-GYRO模式时,由于需要实时从Sensor端获取部分信息帮助算法进行运算,故需在串入pipeline的情况下才可正常工作。

    DIS-CUST:

    • DIS-CUST模式做防抖处理时需要调用在用户态回调函数——pCalIsMatrixCb,故DIS Process需要如上图一个图片信息(当前帧);
    • 当LDC启用DIS-CUST模式时,前级模块无特定限制,图片尺寸可参考LDC限制。

    STITCH:

    注:

    • 融合区域 宽度最大支持1648,高度最大支持4224。
    • 融合后默认只输出融合后图像,不会含有重叠区的图像。
    • 对齐限制:输入图和输出图宽需16 pixel对齐,高需2 pixel对齐,若有配置采样精度大于16则对齐要求和采样精度匹配,例如设置grid_size=32则要求输入图32pixel对齐。

    1.5.4. Jaguar1

    功能 输入格式 输出格式 绑定方式
    LDC PMF DIS STITCH NIR DPU LUT yuv420SP NV12 ARGB系列 Pixel Alignment (WxH) yuv420SP NV12 YUYV ARGB系列 Pixel Alignment (WxH) E_MI_SYS_BIND_TYPE_FRAME_BASE E_MI_SYS_BIND_TYPE_REALTIME E_MI_SYS_BIND_TYPE_HW_AUTOSYNC
    DIS-GME DIS-GYRO DIS-CUST
    Y Y N Y N N N N N Y N 16x2 Y Y N 16x2 Y N Y

    1.6. 工作原理

    NA


    1.7. 开发流程

    1.7.1. 编译配置

    1. 进入alkaid project根目录,make menuconfig

    2. 回车键进入Generic Options子选项

    3. 回车键进入Interface Compile Config子选项

    4. 空格键选中ldc模块,并重新编译project


    1.7.2. 配置MI_LDC启动参数

    modparam.json文件在/config目录下,该文件在MI_LDC初始化阶段加载,其常用字段及解析参考章节6


    1.7.3 接口调用

    使用不同功能,接口调用的整体流程相似,在设置参数时,会有差异,如下图所示:

    MI_LDC通用串流接口调用分为以下几步:

    1. MI_SYS初始化

    2. 创建MI_LDC设备

    3. 创建MI_LDC通道

    4. 设置MI_LDC输入端口参数

    5. 设置MI_LDC输出端口参数

    6. 根据使用功能,调用对应的通道参数配置接口

    7. 根据场景,可调用MI_SYS_BindChnPort2接口绑定前后级模块

    8. 启动MI_LDC通道

    9. 可调用MI_SYS_UnBindChnPort接口解绑前后级模块

    10. 停止MI_LDC通道

    11. 销毁MI_LDC通道

    12. 销毁MI_LDC设备

    13. MI_SYS去初始化


    1.8. 实例介绍

    • 畸变矫正实例
        MI_U32                  LdcDevId = 0, LdcChnId = 0;
        MI_LDC_DevAttr_t        stCreateDevAttr     = {};
        MI_LDC_ChnAttr_t        stLdcChnAttr        = {};
        MI_LDC_OutputPortAttr_t stLdcOutputPortAttr = {};
        MI_LDC_InputPortAttr_t  stLdcInputPortAttr  = {};
        MI_LDC_ChnLDCAttr_t     stAttr              = {};
    
        MI_SYS_Init(0);
        MI_LDC_CreateDevice(LdcDevId, &stCreateDevAttr);
    
        stLdcChnAttr.eInputBindType = E_MI_SYS_BIND_TYPE_FRAME_BASE;
        stLdcChnAttr.eWorkMode      = MI_LDC_WORKMODE_LDC;
        MI_LDC_CreateChannel(LdcDevId, LdcChnId, &stLdcChnAttr);
    
        stLdcInputPortAttr.u16Width  = 1920;
        stLdcInputPortAttr.u16Height = 1080;
        MI_LDC_SetInputPortAttr(LdcDevId, LdcChnId, &stLdcInputPortAttr);
    
        stLdcOutputPortAttr.ePixelFmt = E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420;
        stLdcOutputPortAttr.u16Width  = 1920;
        stLdcOutputPortAttr.u16Height = 1080;
        MI_LDC_SetOutputPortAttr(LdcDevId, LdcChnId, &stLdcOutputPortAttr);
    
        stAttr.u32RegionNum                        = 1;
        stAttr.eMountMode                          = MI_LDC_WALL_MOUNT;
        stAttr.stRegionAttr[0].eRegionMode         = MI_LDC_REGION_NO_TRANSFORMATION; // 此模式没有矫正效果,输出原图
        stAttr.stRegionAttr[0].stOutRect.u16X      = 0;
        stAttr.stRegionAttr[0].stOutRect.u16Y      = 0;
        stAttr.stRegionAttr[0].stOutRect.u16Width  = 1920;
        stAttr.stRegionAttr[0].stOutRect.u16Height = 1080;
        stAttr.stCalibInfo.pCalibPolyBinAddr       = NULL; // 替换成镜头标定产物CalibPoly_new.bin的地址
        stAttr.stCalibInfo.u32CalibPolyBinSize     = 0;    // 替换成镜头标定产物CalibPoly_new.bin的字节数
        MI_LDC_SetChnLDCAttr(LdcDevId, LdcChnId, &stAttr);
    
        // 绑定前后级,请自行补充
    
        MI_LDC_StartChannel(LdcDevId, LdcChnId);
    
        // 解绑前后级,请自行补充
    
        MI_LDC_StopChannel(LdcDevId, LdcChnId);
        MI_LDC_DestroyChannel(LdcDevId, LdcChnId);
        MI_LDC_DestroyDevice(LdcDevId);
        MI_SYS_Exit(0);
    
    • 图像拼接与融合实例
        MI_U32                  LdcDevId = 0, LdcChnId = 0;
        MI_LDC_DevAttr_t        stCreateDevAttr     = {};
        MI_LDC_ChnAttr_t        stLdcChnAttr        = {};
        MI_LDC_OutputPortAttr_t stLdcOutputPortAttr = {};
        MI_LDC_InputPortAttr_t  stLdcInputPortAttr  = {};
        MI_LDC_ChnStitchAttr_t  stAttr              = {};
    
        MI_SYS_Init(0);
        MI_LDC_CreateDevice(LdcDevId, &stCreateDevAttr);
    
        stLdcChnAttr.eInputBindType = E_MI_SYS_BIND_TYPE_FRAME_BASE;
        stLdcChnAttr.eWorkMode      = MI_LDC_WORKMODE_LDC;
        MI_LDC_CreateChannel(LdcDevId, LdcChnId, &stLdcChnAttr);
    
        stLdcInputPortAttr.u16Width  = 3840; // 单个sensor输出的宽
        stLdcInputPortAttr.u16Height = 2160; // 单个sensor输出的高
        MI_LDC_SetInputPortAttr(LdcDevId, LdcChnId, &stLdcInputPortAttr);
    
        stLdcOutputPortAttr.ePixelFmt = E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420;
        stLdcOutputPortAttr.u16Width  = 6160; // 拼接融合后的图像宽
        stLdcOutputPortAttr.u16Height = 1984; // 拼接融合后的图像高
        MI_LDC_SetOutputPortAttr(LdcDevId, LdcChnId, &stLdcOutputPortAttr);
    
        stAttr.eProjType                = MI_LDC_PROJECTION_SPHERICAL;
        stAttr.s32Distance              = 5000;
        stAttr.stCalCfg.pCalibCfgAddr   = NULL; // 替换成标定产物calib_out.json的地址
        stAttr.stCalCfg.u32CalibCfgSize = 0; // 替换成标定产物calib_out.json的字节数
        MI_LDC_SetChnStitchAttr(LdcDevId, LdcChnId, &stAttr);
    
        // 绑定前后级,请自行补充
    
        MI_LDC_StartChannel(LdcDevId, LdcChnId);
    
        // 解绑前后级,请自行补充
    
        MI_LDC_StopChannel(LdcDevId, LdcChnId);
        MI_LDC_DestroyChannel(LdcDevId, LdcChnId);
        MI_LDC_DestroyDevice(LdcDevId);
        MI_SYS_Exit(0);
    

    2. API 参考


    本模块提供以下API:

    API名 功能
    MI_LDC_CreateDevice 创建LDC 设备
    MI_LDC_DestroyDevice 销毁LDC 设备
    MI_LDC_CreateChannel 创建LDC 通道
    MI_LDC_DestroyChannel 销毁LDC 通道
    MI_LDC_StartChannel 启用LDC 通道
    MI_LDC_StopChannel 禁用LDC 通道
    MI_LDC_SetChnLDCAttr 配置LDC模式的通道属性
    MI_LDC_GetChnLDCAttr 获取LDC模式的通道属性
    MI_LDC_SetChnDISAttr 配置DIS模式的通道属性
    MI_LDC_GetChnDISAttr 获取DIS模式的通道属性
    MI_LDC_SetChnPMFAttr 配置PMF模式的通道属性
    MI_LDC_GetChnPMFAttr 获取PMF模式的通道属性
    MI_LDC_SetChnStitchAttr 配置Stitch模式的通道属性
    MI_LDC_GetChnStitchAttr 获取Stitch模式的通道属性
    MI_LDC_SetChnDPUAttr 配置DPU模式的通道属性
    MI_LDC_GetChnDPUAttr 获取DPU模式的通道属性
    MI_LDC_SetChnNIRAttr 配置NIR模式的通道属性
    MI_LDC_GetChnNIRAttr 获取NIR模式的通道属性
    MI_LDC_SetInputPortAttr 配置LDC input port属性
    MI_LDC_GetInputPortAttr 获取LDC input port属性
    MI_LDC_SetOutputPortAttr 配置LDC output port属性
    MI_LDC_GetOutputPortAttr 获取LDC output port属性
    MI_LDC_DoLutDirectTask 执行直接的查表任务,将buf直接送给ldc硬件处理
    MI_LDC_GetRegionBorderMappedPointCnt 获取框线映射到目标区域后的点迹个数
    MI_LDC_GetRegionBorderMappedPoints 获取框线映射的坐标点迹
    MI_LDC_GetDisplacementMapSize 获取坐标查询功能中映射表尺寸
    MI_LDC_GenerateDisplacementMap 生成坐标查询功能中的映射表
    MI_LDC_QueryMappingPoint 查询映射坐标
    MI_LDC_QueryMappingPoints 同时查询多个映射坐标
    MI_LDC_CalibIMUBaseDrift 校准传感器
    MI_LDC_SetIMUDriftPara 设置校准数据,校准传感器
    MI_LDC_GetIMUDriftPara 获取传感器校准数据
    MI_LDC_GetDisAuxiliaryInfo 获取DIS相关的辅助数据

    2.1. MI_LDC_CreateDevice

    • 描述

      创建一个LDC 设备。

    • 语法

      MI_S32 MI_LDC_CreateDevice(MI_LDC_DEV devId, MI_LDC_DevAttr_t *pstDevAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      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 = {};
      MI_LDC_ChnAttr_t stChnAttr = {};
      MI_LDC_ChnLDCAttr_t stChnLDCAttr = {};
      
      stChnAttr.eMode = MI_LDC_WORKMODE_LDC ;
      stChnAttr.eInputBindType = E_MI_SYS_BIND_TYPE_FRAME_BASE;
      
      MI_LDC_CreateDevice(LdcDevid, & stDevAttr);
      MI_LDC_CreateChannel(LdcDevid, LdcChnId, &stChnAttr);
      
      // 这里忽略具体配置细节,详细参数参见接口说明
      // 需要根据通道模式使用对应的接口进行配置,以下接口调用不分先后
      // 1. MI_LDC_SetInputPortAttr
      // 2. MI_LDC_SetChnLDCAttr
      // 3. MI_LDC_SetOutputPortAttr
      
      MI_LDC_StartChannel(LdcDevid, LdcChnId);
      
      /* 退出流程 */
      MI_LDC_StopChannel(LdcDevid, LdcChnId);
      MI_LDC_DestroyChannel(LdcDevid, LdcChnId);
      MI_LDC_DestroyDevice(LdcDevid);
      
    • 相关主题

      MI_LDC_DestroyDevice


    2.2. MI_LDC_DestroyDevice

    • 描述

      销毁LDC 设备。

    • 语法

      MI_S32 MI_LDC_DestroyDevice(MI_LDC_DEV devId);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      参见MI_LDC_CreateDevice 举例。

    • 相关主题

      MI_LDC_CreateDevice


    2.3. MI_LDC_CreateChannel

    • 描述

      创建LDC 通道。

    • 语法

      MI_S32 MI_LDC_CreateChannel(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_ChnAttr_t *pstChnAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId 通道号 输入
      pstChnAttr 通道属性 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      • 需在MI_LDC_CreateDevice之后调用。

      • 当前设置通道的模式之后,需要搭配对应的接口进行配置,例如配置通道模式为LDC 模式之后,只能使用LDC 模式接口进行配置;如果需要使用其它模式,需要先销毁当前通道,并重新创建对应模式的通道。

    • 举例

      参见MI_LDC_CreateDevice 举例。

    • 相关主题

      MI_LDC_DestroyChannel

      MI_LDC_ChnAttr_t


    2.4. MI_LDC_DestroyChannel

    • 描述

      销毁LDC 通道。

    • 语法

      MI_S32 MI_LDC_DestroyChannel(MI_LDC_DEV devId, MI_LDC_CHN chnId);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId 通道号 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      参见MI_LDC_CreateDevice 举例。

    • 相关主题

      MI_LDC_CreateDevice


    2.5. MI_LDC_StartChannel

    • 描述

      启用LDC 通道。

    • 语法

      MI_S32 MI_LDC_StartChannel(MI_LDC_DEV devId, MI_LDC_CHN chnId);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId 通道号 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      Device和通道 创建之后调用。

    • 举例

      参见MI_LDC_CreateDevice举例。

    • 相关主题

      MI_LDC_StopChannel


    2.6. MI_LDC_StopChannel

    • 描述

      停用LDC 通道。

    • 语法

      MI_S32 MI_LDC_StopChannel(MI_LDC_DEV devId, MI_LDC_CHN chnId);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId 通道号 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      参见MI_LDC_CreateDevice举例。

    • 相关主题

      MI_LDC_StartChannel


    2.7. MI_LDC_SetChnLDCAttr

    • 描述

      配置LDC模式的通道属性。

    • 语法

      MI_S32 MI_LDC_SetChnLDCAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnLDCAttr_t *pstChnLDCAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstChnLDCAttr LDC模式的通道属性 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.8. MI_LDC_GetChnLDCAttr

    • 描述

      获取LDC模式的通道属性。

    • 语法

      MI_S32 MI_LDC_GetChnLDCAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnLDCAttr_t *pstChnLDCAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstChnLDCAttr LDC模式的通道属性 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.9. MI_LDC_SetChnDISAttr

    • 描述

      配置DIS模式的通道属性。

    • 语法

      MI_S32 MI_LDC_SetChnDISAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnDISAttr_t *pstChnDISAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstChnDISAttr DIS模式的通道属性 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      LDC 初始化设置, DIS设置,以及退出范例:

      Iford 平台:

      MI_S32 s32Ret = MI_SUCCESS;
      MI_LDC_DEV LdcDevid = 0;
      MI_LDC_CHN LdcChnId = 0;
      MI_LDC_DevAttr_t stDevAttr = {};
      MI_LDC_ChnAttr_t stChnAttr = {};
      MI_LDC_ChnDISAttr_t stChnDISAttr = {};
      MI_LDC_IMUDrift_t   stIMUDrift = {};
      MI_LDC_DisAuxiliaryInfo_t stAuxInfo = {};
      
      #if defined(__USE_DIS_GYRO_MODE__)
      
      stChnAttr.eMode = MI_LDC_WORKMODE_DIS ;
      stChnAttr.eInputBindType = E_MI_SYS_BIND_TYPE_FRAME_BASE;
      
      MI_LDC_CreateDevice(LdcDevid, & stDevAttr);
      MI_LDC_CreateChannel(LdcDevid, LdcChnId, &stChnAttr);
      
      stChnDISAttr.eMode = MI_LDC_DIS_GYRO;
      stChnDISAttr.as32RotationMatrix[LDC_MAXTRIX_NUM] = {-1, 0, 0, 0, -1, 0, 0, 0, -1};
      stChnDISAttr.u32UserSliceNum = 6;
      
      /*!
       * set FocalLengh (pixel) = FocalLength(mm) / SensorUnitCellSize(μm) * 1000 * 100
       *  eg IMX307: 5.92(pixel) / 2.9(μm) * 1000 * 100 = 204137
       *  eg IMX317: 6(pixel) / 1.62(μm) * 1000*100 = 370370
       */
      stChnDISAttr.u32FocalLengthX = 370370;
      stChnDISAttr.u32FocalLengthY = 370370;
      
      // 这里忽略具体配置细节,详细参数参见接口说明
      // 需要根据通道模式使用对应的接口进行配置,以下接口调用不分先后
      // 1. MI_LDC_SetChnDISAttr
      // 2. MI_LDC_GetChnDISAttr
      // 3. MI_LDC_SetOutputPortAttr
      // 由于跑MI_LDC_DIS_GYRO模式需要实时从Sensor端获取部分信息帮助算法进行运算,故需在串起pipeline的情况下才可正常工作
      
      #elif defined(__USE_DIS_GYRO_AND_LDC_MODE__)
      
      stChnAttr.eMode = MI_LDC_WORKMODE_DIS_LDC;
      stChnAttr.eInputBindType = E_MI_SYS_BIND_TYPE_FRAME_BASE;
      
      MI_LDC_CreateDevice(LdcDevid, & stDevAttr);
      MI_LDC_CreateChannel(LdcDevid, LdcChnId, &stChnAttr);
      
      stChnDISAttr.eMode = MI_LDC_DIS_GYRO;
      stChnDISAttr.as32RotationMatrix[LDC_MAXTRIX_NUM] = {0, 1, 0, -1, 0, 0, 0, 0, 1};
      stChnDISAttr.u32UserSliceNum = 6;
      
      /*!
       * set FocalLengh (pixel) = FocalLength(mm) / SensorUnitCellSize(um) * 1000 * 100
       *  eg IMX307: 5.92(pixel) / 2.9(um) * 1000 * 100 = 204137
       *  eg IMX317: 6(pixel) / 1.62(um) * 1000*100 = 370370
       */
      stChnDISAttr.u32FocalLengthX = 370370;
      stChnDISAttr.u32FocalLengthY = 370370;
      
      /*!
       * 只填入sensor校准参数MI_LDC_SensorCalibInfo_t以及
       * 第一个stRegionAttr的s32DistortionRatio,其他参数不需要填写
       */
      MI_LDC_ChnLDCAttr_t stChnLDCAttr = {};
      stChnLDCAttr.stCalibInfo.s32CenterXOffset = 0;
      stChnLDCAttr.stCalibInfo.s32CenterYOffset = 0;
      stChnLDCAttr.stCalibInfo.s32FisheyeRadius =2203;
      stChnLDCAttr.stCalibInfo.pCalibPolyBinAddr = 0x400080000;
      stChnLDCAttr.stCalibInfo.u32CalibPolyBinSize = 0x4000;
      stChnLDCAttr.u32RegionNum = 1;
      stChnLDCAttr.stRegionAttr[0].stRegionPara.s32DistortionRatio = 0;
      
      // 这里忽略具体配置细节,详细参数参见接口说明
      // 需要根据通道模式使用对应的接口进行配置
      // 以下接口调用需强制先调用MI_LDC_SetChnLDCAttr设定镜头标定产物,后调用MI_LDC_SetChnDISAttr设定防抖相关参数
      // 1. MI_LDC_SetChnLDCAttr
      // 2. MI_LDC_GetChnLDCAttr
      // 3. MI_LDC_SetChnDISAttr
      // 4. MI_LDC_GetChnDISAttr
      // 由于跑MI_LDC_DIS_GYRO模式需要实时从Sensor端获取部分信息帮助算法进行运算,故需在串起pipeline的情况下才可正常工作
      
      #elif defined(__USE_DIS_CUST_MODE__)
      
      stChnAttr.eMode = MI_LDC_WORKMODE_DIS ;
      stChnAttr.eInputBindType = E_MI_SYS_BIND_TYPE_FRAME_BASE;
      
      MI_LDC_CreateDevice(LdcDevid, & stDevAttr);
      MI_LDC_CreateChannel(LdcDevid, LdcChnId, &stChnAttr);
      
      /*
          MI_S32 CustCalIsMatrix(const MI_LDC_IsMatrixInParam_t * const pstInParam,  MI_LDC_IsMatrixOutParam_t * const pstOutParam)
          {
              MI_S32 s32Matrix[LDC_MAXTRIX_NUM] = {0x4000, 0, 0, 0, 0x4000, 0, 0, 0, 0x1};
      
              if (pstInParam == NULL || pstOutParam == NULL)
              {
                  ldc_err("attr is null, pstInParam[%px], pstOutParam[%px]", pstInParam,pstOutParam);
                  return -1;
              }
      
              memcpy(pstOutParam->as32Matrix, s32Matrix, sizeof(s32Matrix));
      
              return MI_SUCCESS;
          }
      */
      stChnDISAttr.eMode = MI_LDC_DIS_CUST;
      stChnDISAttr.pCalIsMatrixCb = CustCalIsMatrix;
      
      // 这里忽略具体配置细节,详细参数参见接口说明
      // 需要根据通道模式使用对应的接口进行配置,以下接口调用不分先后
      // 1. MI_LDC_SetChnDISAttr
      // 2. MI_LDC_GetChnDISAttr
      // 3. MI_LDC_SetOutputPortAttr
      
      #endif
      
      MI_LDC_StartChannel(LdcDevid, LdcChnId);
      
      // 以下接口仅在MI_LDC_DIS_GYRO模式有效,且需要先调用MI_LDC_StartChannel
      // 1.MI_LDC_CalibIMUBaseDrift
      // 2.MI_LDC_SetIMUDriftPara
      // 3.MI_LDC_GetIMUDriftPara
      // 4.MI_LDC_GetDisAuxiliaryInfo
      MI_LDC_CalibIMUBaseDrift(LdcDevid, LdcChnId, E_MI_LDC_IMU_PART_GYRO, 10*1000);
      // 等待10*1000ms后校准完成
      sleep(10);
      MI_LDC_GetIMUDriftPara(LdcDevid, LdcChnId, &stIMUDrift);
      MI_LDC_SetIMUDriftPara(LdcDevid, LdcChnId, &stIMUDrift);
      MI_LDC_GetDisAuxiliaryInfo(LdcDevid, LdcChnId, &stAuxInfo);
      
      /* 退出流程 */
      MI_LDC_StopChannel(LdcDevid, LdcChnId);
      MI_LDC_DestroyChannel(LdcDevid, LdcChnId);
      MI_LDC_DestroyDevice(LdcDevid);
      

    2.10. MI_LDC_GetChnDISAttr

    • 描述

      获取DIS模式的通道属性。

    • 语法

      MI_S32 MI_LDC_GetChnDISAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnDISAttr_t *pstChnDISAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstChnDISAttr DIS模式的通道属性 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_SetChnDISAttr 举例


    2.11. MI_LDC_SetChnPMFAttr

    • 描述

      配置PMF模式的通道属性。

    • 语法

      MI_S32 MI_LDC_SetChnPMFAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnPMFAttr_t *pstChnPMFAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstChnPMFAttr PMF模式的通道属性 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.12. MI_LDC_GetChnPMFAttr

    • 描述

      获取PMF模式的通道属性。

    • 语法

      MI_S32 MI_LDC_GetChnPMFAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnPMFAttr_t *pstChnPMFAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstChnPMFAttr PMF模式的通道属性 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.13. MI_LDC_SetChnStitchAttr

    • 描述

      配置Stitch模式的通道属性。

    • 语法

      MI_S32 MI_LDC_SetChnStitchAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnStitchAttr_t *pstChnStitchAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstChnStitchAttr Stitch模式的通道属性 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.14. MI_LDC_GetChnStitchAttr

    • 描述

      获取Stitch模式的通道属性。

    • 语法

      MI_S32 MI_LDC_GetChnStitchAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnStitchAttr_t *pstChnStitchAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstChnStitchAttr Stitch模式的通道属性 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.15. MI_LDC_SetChnDPUAttr

    • 描述

      配置DPU模式的通道属性。

    • 语法

      MI_S32 MI_LDC_SetChnDPUAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnDPUAttr_t *pstChnDPUAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstChnDPUAttr DPU模式的通道属性 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.16. MI_LDC_GetChnDPUAttr

    • 描述

      获取DPU模式的通道属性。

    • 语法

      MI_S32 MI_LDC_GetChnDPUAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnDPUAttr_t *pstChnDPUAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstChnDPUAttr DPU模式的通道属性 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.17. MI_LDC_SetChnNIRAttr

    • 描述

      配置NIR模式的通道属性。

    • 语法

      MI_S32 MI_LDC_SetChnNIRAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnNIRAttr_t *pstChnNIRAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC 通道号 输入
      pstChnNIRAttr NIR模式的通道属性 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.18. MI_LDC_GetChnNIRAttr

    • 描述

      获取NIR模式的通道属性。

    • 语法

      MI_S32 MI_LDC_GetChnNIRAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_ChnNIRAttr_t *pstChnNIRAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstChnNIRAttr NIR模式的通道属性 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例

    2.19. MI_LDC_SetInputPortAttr

    • 描述

      配置LDC输入端口的属性。

    • 语法

      MI_S32 MI_LDC_SetInputPortAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_InputPortAttr_t *pstInputAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstInputAttr 输入端口的属性 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      • 该接口需要在创建通道之后使用(MI_LDC_CreateChannel)。

      • 首次成功调用此接口后,参数pstInputAttr被锁定,后续调用需使用相同的参数值,若使用其它参数值,将返回错误码并打印错误日志。若需修改参数值,请重新创建通道后再调用此接口。

    • 举例

      MI_LDC_CreateDevice 举例。


    2.20. MI_LDC_GetInputPortAttr

    • 描述

      获取LDC 输入端口的属性。

    • 语法

      MI_S32 MI_LDC_GetInputPortAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_InputPortAttr_t *pstInputAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstInputAttr 输入端口的属性 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      该接口需要在创建通道之后使用(MI_LDC_CreateChannel)。

    • 举例

      MI_LDC_CreateDevice 举例。


    2.21. MI_LDC_SetOutputPortAttr

    • 描述

      配置LDC 输出端口的属性。

    • 语法

      MI_S32 MI_LDC_SetOutputPortAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_OutputPortAttr_t *pstOutputAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstOutputAttr 输出端口的属性 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      • 该接口需要在创建通道之后使用(MI_LDC_CreateChannel)。

      • 该接口支持的格式有: NV12, ARGB8888, BGRA8888。

      • 首次成功调用此接口后,参数pstOutputAttr被锁定,后续调用需使用相同的参数值,若使用其它参数值,将返回错误码并打印错误日志。若需修改参数值,请重新创建通道后再调用此接口。

    • 举例

      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);
      

    2.22. MI_LDC_GetOutputPortAttr

    • 描述

      获取LDC 输出端口的属性。

    • 语法

      MI_S32 MI_LDC_GetOutputPortAttr(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_LDC_OutputPortAttr_t *pstOutputAttr);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      pstOutputAttr 输出端口的属性 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      该接口需要在创建通道之后使用(MI_LDC_CreateChannel)。

    • 举例

      MI_LDC_CreateDevice 举例。


    2.23. 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.24. MI_LDC_GetRegionBorderMappedPointCnt

    • 描述

      获取框线映射到目标区域后的点迹个数。

    • 语法

      MI_S32 MI_LDC_GetRegionBorderMappedPointCnt(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_U32 u32RegionId, MI_U32 * pu32PointCnt);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      u32RegionId 移动的区域号 输入
      pu32PointCnt 映射框线坐标点的个数 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      该接口需要在设置区域属性、输入输出端口属性之后使用(MI_LDC_SetChnLDCAttr、MI_LDC_SetInputPortAttr、MI_LDC_SetOutputPortAttr)。

    • 举例

      MI_LDC_CreateDevice 举例。


    2.25. MI_LDC_GetRegionBorderMappedPoints

    • 描述

      获取框线映射的坐标点迹。

    • 语法

      MI_S32 MI_LDC_GetRegionBorderMappedPoints(MI_LDC_DEV devId, MI_LDC_CHN chnId,
      MI_U32 u32RegionId, MI_LDC_Point_t *pstPoints);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC通道号 输入
      u32RegionId 移动的区域号 输入
      pstPoints 映射框线的坐标 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      该接口需要在获取框线坐标点个数之后使用(MI_LDC_GetRegionBorderMappedPointCnt)。

    • 举例

      MI_LDC_CreateDevice 举例。


    2.26. MI_LDC_GetDisplacementMapSize

    • 描述

      获取坐标查询功能中映射表尺寸。

    • 语法

      MI_S32 MI_LDC_GetDisplacementMapSize(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_DispMapConf_t *pstDispMapConf, MI_LDC_DispMapSize_t *pstDispMapSize);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC 通道号 输入
      pstDispMapConf 坐标查询功能中映射表配置 输入
      pstDispMapSize 坐标查询功能中映射表尺寸 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.27. MI_LDC_GenerateDisplacementMap

    • 描述

      生成坐标查询功能中映射表。

    • 语法

      MI_S32 MI_LDC_GenerateDisplacementMap(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_DispMapConf_t *pstDispMapConf, MI_LDC_DispMapInfo_t *pstDispMapInfo);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC 通道号 输入
      pstDispMapConf 坐标查询功能中映射表配置 输入
      pstDispMapInfo 坐标查询功能中映射表信息 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.28. MI_LDC_QueryMappingPoint

    • 描述

      查询映射坐标。(该接口计划逐步废弃,推荐使用接口MI_LDC_QueryMappingPoints

    • 语法

      MI_S32 MI_LDC_QueryMappingPoint(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_DispMapSize_t *pstDispMapSize, MI_LDC_DispMapInfo_t *pstDispMapInfo, MI_LDC_Point_t *pstOriPoint, MI_LDC_Point_t *pstMapPoint);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC 通道号 输入
      pstDispMapSize 坐标查询功能中映射表尺寸 输入
      pstDispMapInfo 坐标查询功能中映射表信息 输入
      pstOriPoint 要查询的坐标点 输入
      pstMapPoint 查询后的映射坐标点 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 举例

      MI_LDC_CreateDevice 举例


    2.33. MI_LDC_QueryMappingPoints

    • 描述

      同时查询多个映射坐标。stitch模式下支持src2dst和dst2src,在ldc模式下支持dst2src

      dst2src代表:查询输出图中的点在输入图中对应的坐标

      src2dst代表:查询输入图中的点在输出图中对应的坐标

    • 语法

      MI_S32 MI_LDC_QueryMappingPoints(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_QueryPointsConfig_t *pstQueryPointsConfig,
                                   MI_U32 u32PointCnt, MI_LDC_Point_t *pstOriPoints, MI_LDC_Point_t *pstMapPoints);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC 设备号 输入
      chnId LDC 通道号 输入
      pstQueryPointsConfig 查询多点坐标的配置信息 输入
      u32PointCnt 要查询的坐标点数量 输入
      pstOriPoints 要查询坐标点数组指针 输入
      pstMapPoints 查询后的映射坐标点数组指针 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      stitch模式下使用该接口需要先获取到映射表尺寸和映射表信息(MI_LDC_GetDisplacementMapSize、MI_LDC_GenerateDisplacementMap)

    • 举例

      MI_LDC_WORKMODE_LDC模式下使用 :

      MI_S32 s32Ret = MI_SUCCESS;
      MI_LDC_DEV LdcDevid = 0;
      MI_LDC_CHN LdcChnId = 0;
      MI_LDC_DevAttr_t stDevAttr = {};
      MI_LDC_ChnAttr_t stChnAttr = {};
      MI_LDC_ChnLDCAttr_t stChnLDCAttr = {};
      MI_LDC_ChnDISAttr_t stChnDISAttr = {};
      MI_LDC_QueryPointsConfig_t stQueryPointsConfig = {};
      MI_LDC_Point_t *pstOriPoints = NULL;
      MI_LDC_Point_t *pstMapPoints = NULL;
      MI_U32 u32PointCnt = 3;
      
      stChnAttr.eMode = MI_LDC_WORKMODE_LDC ;
      stChnAttr.eInputBindType = E_MI_SYS_BIND_TYPE_FRAME_BASE;
      
      MI_LDC_CreateDevice(LdcDevid, & stDevAttr);
      MI_LDC_CreateChannel(LdcDevid, LdcChnId, &stChnAttr);
      
      // 这里忽略具体配置细节,详细参数参见接口说明
      // 根据场景进行配置,以下接口调用不分先后
      // 1. MI_LDC_SetInputPortAttr
      // 2. MI_LDC_SetChnLDCAttr
      // 3. MI_LDC_SetOutputPortAttr
      
      MI_LDC_StartChannel(LdcDevid, LdcChnId);
      pstMapPoints = (MI_LDC_Point_t *)calloc(u32PointCnt, sizeof(MI_LDC_Point_t));
      if (NULL == pstMapPoints)
      {
          ldc_err("fail to alloc memory!\n");
          return -1;
      }
      pstOriPoints = (MI_LDC_Point_t *)calloc(u32PointCnt, sizeof(MI_LDC_Point_t));
      if (NULL == pstOriPoints)
      {
          ldc_err("fail to alloc memory!\n");
          return -1;
      }
      for(MI_S32 s32Index = 0; s32Index < u32PointCnt; s32Index++)
      {
          pstOriPoints[s32Index].s16X = s32Index;
          pstOriPoints[s32Index].s16Y = s32Index;
      }
      stQueryPointsConfig.u32RegionIdx = 0;
      MI_LDC_QueryMappingPoints(LdcDevid, LdcChnId, &stQueryPointsConfig, u32PointCnt, pstOriPoints, pstMapPoints);
      
      for(MI_S32 s32Index = 0; s32Index < u32PointCnt; s32Index++)
      {
          printf("srcPoint(%d, %d)\n", pstMapPoints[s32Index].s16X, pstMapPoints[s32Index].s16Y);
      }
      
      /* 退出流程 */
      MI_LDC_StopChannel(LdcDevid, LdcChnId);
      MI_LDC_DestroyChannel(LdcDevid, LdcChnId);
      MI_LDC_DestroyDevice(LdcDevid);
      

      MI_LDC_WORKMODE_STITCH模式下使用 :

      MI_S32 s32Ret = MI_SUCCESS;
      MI_LDC_DEV LdcDevid = 0;
      MI_LDC_CHN LdcChnId = 0;
      MI_LDC_DevAttr_t stDevAttr = {};
      MI_LDC_ChnAttr_t stChnAttr = {};
      MI_LDC_ChnLDCAttr_t stChnLDCAttr = {};
      MI_LDC_ChnDISAttr_t stChnDISAttr = {};
      MI_LDC_DispMapConf_t stMapConf = {};
      MI_LDC_QueryPointsConfig_t stQueryPointsConfig = {};
      MI_LDC_Point_t *pstOriPoints = NULL;
      MI_LDC_Point_t *pstMapPoints = NULL;
      MI_U32 u32PointCnt = 3;
      
      stChnAttr.eMode = MI_LDC_WORKMODE_STITCH ;
      stChnAttr.eInputBindType = E_MI_SYS_BIND_TYPE_FRAME_BASE;
      
      MI_LDC_CreateDevice(LdcDevid, & stDevAttr);
      MI_LDC_CreateChannel(LdcDevid, LdcChnId, &stChnAttr);
      
      // 这里忽略具体配置细节,详细参数参见接口说明
      // 根据场景进行配置,以下接口调用不分先后
      // 1. MI_LDC_SetInputPortAttr
      // 2. MI_LDC_SetChnStitchAttr
      // 3. MI_LDC_SetOutputPortAttr
      
      MI_LDC_StartChannel(LdcDevid, LdcChnId);
      
      stMapConf.eMapType     = E_MI_LDC_DISPMAP_DST; // dst2src
      stMapConf.u32RegionIdx = 0;                    // sensor 0
      MI_LDC_GetDisplacementMapSize(LdcDevId, LdcChnId, &stMapConf, &(stQueryPointsConfig.stDispMapSize));
      
      stQueryPointsConfig.stDispMapInfo.u32XmapSize = stQueryPointsConfig.stDispMapSize.u32Height * stQueryPointsConfig.stDispMapSize.u32Width * sizeof(float);
      stQueryPointsConfig.stDispMapInfo.u32YmapSize = stQueryPointsConfig.stDispMapSize.u32Height * stQueryPointsConfig.stDispMapSize.u32Width * sizeof(float);
      stQueryPointsConfig.stDispMapInfo.pXmapAddr   = malloc(stQueryPointsConfig.stDispMapInfo.u32XmapSize);
      stQueryPointsConfig.stDispMapInfo.pYmapAddr   = malloc(stQueryPointsConfig.stDispMapInfo.u32YmapSize);
      MI_LDC_GenerateDisplacementMap(LdcDevId, LdcChnId, &stMapConf, &(stQueryPointsConfig.stDispMapInfo));
      
      pstMapPoints = (MI_LDC_Point_t *)calloc(u32PointCnt, sizeof(MI_LDC_Point_t));
      if (NULL == pstMapPoints)
      {
          ldc_err("fail to alloc memory!\n");
          return -1;
      }
      pstOriPoints = (MI_LDC_Point_t *)calloc(u32PointCnt, sizeof(MI_LDC_Point_t));
      if (NULL == pstOriPoints)
      {
          ldc_err("fail to alloc memory!\n");
          return -1;
      }
      for(MI_S32 s32Index = 0; s32Index < u32PointCnt; s32Index++)
      {
          pstOriPoints[s32Index].s16X = s32Index;
          pstOriPoints[s32Index].s16Y = s32Index;
      }
      
      MI_LDC_QueryMappingPoints(LdcDevid, LdcChnId, &stQueryPointsConfig, u32PointCnt, pstOriPoints, pstMapPoints);
      
      for(MI_S32 s32Index = 0; s32Index < u32PointCnt; s32Index++)
      {
          printf("srcPoint(%d, %d)\n", pstMapPoints[s32Index].s16X, pstMapPoints[s32Index].s16Y);
      }
      
      /* 退出流程 */
      MI_LDC_StopChannel(LdcDevid, LdcChnId);
      MI_LDC_DestroyChannel(LdcDevid, LdcChnId);
      MI_LDC_DestroyDevice(LdcDevid);
      

    2.30. MI_LDC_CalibIMUBaseDrift

    • 描述

      计算校准数据,校准传感器。

    • 语法

      MI_S32 MI_LDC_CalibIMUBaseDrift(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_U32 u32IMUPart, MI_U32 u32TimeMs);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC设备号 输入
      chnId LDC通道号 输入
      u32IMUPart 指定校准传感器哪部分 输入
      u32TimeMs 累积数据用于校准的时间 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      • 该接口仅在MI_LDC_DIS_GYRO模式下生效,校准完成后,会自动更新校准数据,无需再调用MI_LDC_SetIMUDriftPara

      • 该接口需要在MI_LDC_StartChannel之后调用。

      • u32IMUPart 取值由MI_LDC_IMUPart_e或运算得来,有效范围是[E_MI_LDC_IMU_PART_GYRO, E_MI_LDC_IMU_PART_GYRO],E_MI_LDC_IMU_PART_ACC目前不支持。

    • 举例

      MI_LDC_SetChnDISAttr 举例


    2.31. MI_LDC_SetIMUDriftPara

    • 描述

      设置校准数据,校准传感器。

    • 语法

      MI_S32 MI_LDC_SetIMUDriftPara(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_IMUDrift_t *pstIMUDrift);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC设备号 输入
      chnId LDC通道号 输入
      pstIMUDrift 校准数据 输入
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      • 该接口仅在MI_LDC_DIS_GYRO模式下生效。

      • 该接口需要在MI_LDC_StartChannel之后调用。

    • 举例

      MI_LDC_SetChnDISAttr 举例


    2.32. MI_LDC_GetIMUDriftPara

    • 描述

      获取传感器的校准数据。

    • 语法

      MI_S32 MI_LDC_GetIMUDriftPara(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_IMUDrift_t *pstIMUDrift);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC设备号 输入
      chnId LDC通道号 输入
      pstIMUDrift 校准数据 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      • 该接口仅在MI_LDC_DIS_GYRO模式下生效。

      • 该接口需要在MI_LDC_StartChannel之后调用。

    • 举例

      MI_LDC_SetChnDISAttr 举例


    2.37. MI_LDC_GetDisAuxiliaryInfo

    • 描述

      获取DIS相关的辅助数据。

    • 语法

      MI_S32 MI_LDC_GetDisAuxiliaryInfo(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_DisAuxiliaryInfo_t *pstAuxInfo);
      
    • 参数

      参数名称 描述 输入/输出
      devId LDC设备号 输入
      chnId LDC通道号 输入
      pstAuxInfo DIS 辅助数据 输出
    • 返回值

      • 0 成功。

      • 非0 失败,参照错误码

    • 需求

      • 头文件:mi_ldc.h

      • 库文件:libmi_ldc.a

    • 注意

      • 该接口仅在MI_LDC_DIS_GYRO模式下生效。

      • 只有当pstAuxInfo的成员变量bUpdated = TRUE 时,pstAuxInfo中的u32CurMaxShutter值才有效。

      • 该接口需要在MI_LDC_StartChannel之后调用。

    • 举例

      MI_LDC_SetChnDISAttr 举例


    3. 数据类型


    模块相关数据类型定义如下:

    数据类型 定义
    MI_LDC_DEV LDC 设备的ID
    MI_LDC_CHN LDC 通道的ID
    MI_LDC_DevAttr_t LDC 设备的属性
    MI_LDC_WorkMode_e LDC的工作模式
    MI_LDC_ChnAttr_t LDC 通道的属性
    MI_LDC_MountMode_e LDC的挂载模式
    MI_LDC_SensorCalibInfo_t LDC sensor校准参数
    MI_LDC_RegionMode_e LDC 模式的区域模式
    MI_LDC_RegionCropMode_e LDC 区域的裁剪模式
    MI_LDC_RegionPara_t LDC模式的区域矫正参数
    MI_LDC_DispMapInfo_t LDC映射表信息
    MI_LDC_RegionAttr_t LDC 模式的矫正区域的属性
    MI_LDC_ChnLDCAttr_t LDC模式的通道动态参数
    MI_LDC_DISMode_e DIS模式的工作方式
    MI_LDC_DISSceneType_e 镜头状态
    MI_LDC_DISMotionLevel_e 镜头抖动幅度
    MI_LDC_ChnDISAttr_t DIS模式的通道动态参数
    MI_LDC_ChnPMFAttr_t PMF模式的通道态参数
    MI_LDC_CalibConfig_t Sensor校准参数
    MI_LDC_ProjectionMode_e Stitch的投影模式
    MI_LDC_ChnStitchAttr_t Stitch模式的通道动态参数
    MI_LDC_ChnNIRAttr_t NIR模式的通道动态参数
    MI_LDC_ChnDPUAttr_t DPU模式的通道动态参数
    MI_LDC_InputPortAttr_t LDC 输入端口的属性
    MI_LDC_OutputPortAttr_t LDC 输出端口的属性
    MI_LDC_DirectBuf_t LDC输入buf 类型
    MI_LDC_LutTaskAttr_t LDC图像查找表任务类型
    MI_LDC_StitchDisparity_t Stitch模式所需的视差图数据
    MI_LDC_Point_t LDC映射框线坐标
    MI_LDC_DispMapType_e 坐标查询功能中映射表的类型
    MI_LDC_DispMapConf_t 坐标查询功能中映射表的配置
    MI_LDC_DispMapSize_t 坐标查询功能中映射表的尺寸
    MI_LDC_BaseDrift_t 各轴的零漂值
    MI_LDC_Drift_t 校准数据
    MI_LDC_IMUDrift_t 传感器的校准数据
    MI_LDC_IMUPart_e 传感器的校准部分
    MI_LDC_RegionDoorbell_t 门铃模式的矫正参数
    MI_LDC_IsMatrixInParam_t DIS客制化回调函数中的输入参数
    MI_LDC_IsMatrixOutParam_t DIS客制化回调函数中的输出参数
    MI_LDC_CalIsMatrixCb_t DIS客制化回调函数
    MI_LDC_ImgDirection_t 前级对输入图已做的变换操作
    MI_LDC_RegionBin_t 仿真工具CVTool生成的二进制文件
    MI_LDC_DisAuxiliaryInfo_t DIS相关辅助数据
    MI_LDC_QueryPointsConfig_t 查询多点坐标的配置信息

    3.1. MI_LDC_DEV

    • 说明

      定义LDC 设备的数据类型

    • 语法

      typedef MI_U32 MI_LDC_DEV;
      

    3.2. MI_LDC_CHN

    • 说明

      定义LDC 通道的数据类型

    • 语法

      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      = 0x04,
          MI_LDC_WORKMODE_PMF      = 0x08,
          MI_LDC_WORKMODE_STITCH   = 0x10,
          MI_LDC_WORKMODE_NIR      = 0x20,
          MI_LDC_WORKMODE_DPU      = 0x40,
          MI_LDC_WORKMODE_DIS_LDC        = (MI_LDC_WORKMODE_DIS | MI_LDC_WORKMODE_LDC),
          MI_LDC_WORKMODE_BUTT
      } MI_LDC_WorkMode_e;
      
    • 成员

      成员名称 描述
      MI_LDC_WORKMODE_LDC LDC 模式
      MI_LDC_WORKMODE_LUT LUT 直接查表模式
      MI_LDC_WORKMODE_DIS DIS 模式
      MI_LDC_WORKMODE_PMF PMF 模式
      MI_LDC_WORKMODE_STITCH STITCH 模式
      MI_LDC_WORKMODE_NIR NIR 模式
      MI_LDC_WORKMODE_DPU DPU 模式
      MI_LDC_WORKMODE_DIS_LDC DIS 模式叠加LDC模式,DIS仅支持设定MI_LDC_DIS_GYRO模式
      MI_LDC_WORKMODE_BUTT 无效值
    • 相关数据类型及接口

      MI_LDC_ChnAttr_t


    3.5. MI_LDC_ChnAttr_t

    • 说明

      LDC设备的通道属性。

    • 定义

      typedef struct MI_LDC_ChnAttr_s
      {
          MI_LDC_WorkMode_e eWorkMode;
          MI_SYS_BindType_e eInputBindType;
      } MI_LDC_ChnAttr_t;
      
    • 成员

      成员名称 描述
      eWorkMode LDC 通道的工作模式
      eInputBindType LDC 通道的输入模式
    • 注意

      • 当输入数据源为DRAM时,需配置eInputBindType为E_MI_SYS_BIND_TYPE_FRAME_BASE。

      • 当eWorkMode为MI_LDC_WORKMODE_STITCH时,Souffle平台支持配置eInputBindType为E_MI_SYS_BIND_TYPE_REALTIME,此时ISP-LDC之间必须以E_MI_SYS_BIND_TYPE_REALTIME模式绑定,且LDC不允许多通道分时复用。

      • 当eWorkMode为MI_LDC_WORKMODE_DIS时,仅支持配置eInputBindType为E_MI_SYS_BIND_TYPE_FRAME_BASE。

      • 当eWorkMode为MI_LDC_WORKMODE_LDC且u32RegionNum为1时,支持配置eInputBindType为E_MI_SYS_BIND_TYPE_HW_AUTOSYNC,此时ISP-LDC-SCL之间必须以E_MI_SYS_BIND_TYPE_HW_AUTOSYNC模式绑定,且LDC允许多通道分时复用。

    • 相关数据类型及接口

      MI_LDC_CreateChannel


    3.6. MI_LDC_MountMode_e

    • 说明

      Sensor的挂载模式。

    • 定义

      typedef enum
      {
          MI_LDC_DESKTOP_MOUNT = 0x01,
          MI_LDC_CEILING_MOUNT = 0x02,
          MI_LDC_WALL_MOUNT    = 0x03,
          MI_LDC_MOUNT_BUTT
      } MI_LDC_MountMode_e;
      
    • 成员

      成员名称 描述
      MI_LDC_DESKTOP_MOUNT 地装模式
      MI_LDC_CEILING_MOUNT 顶装模式
      MI_LDC_WALL_MOUNT 壁装模式
      MI_LDC_MOUNT_BUTT 无效值
    • 相关数据类型及接口

      MI_LDC_ChnLDCAttr_t


    3.7. MI_LDC_SensorCalibInfo_t

    • 说明

      LDC 模式Sensor 校准信息。

    • 定义

      typedef struct MI_LDC_SensorCalibInfo_s
      {
          MI_S32 s32CenterXOffset;
          MI_S32 s32CenterYOffset;
          MI_S32 s32FisheyeRadius;
      
          void*  pCalibPolyBinAddr;
          MI_U32 u32CalibPolyBinSize;
      
          MI_U32 u32FocalLengthX;
          MI_U32 u32FocalLengthY;
      } MI_LDC_SensorCalibInfo_t;
      
    • 成员

      成员名称 描述
      s32CenterXOffset 图像中心点相对于物理中心点的水平偏移
      s32CenterYOffset 图像中心点相对于物理中心点的垂直偏移
      s32FisheyeRadius 鱼眼半径
      pCalibPolyBinAddr 校准信息指针
      u32CalibPolyBinSize 校准信息大小
      u32FocalLengthX X轴焦距
      u32FocalLengthY Y轴焦距
    • 注意

      • 焦距的计算公式是 u32FocalLengthX = 100 * 0.5 * ImageWidth(pixel) / tan(HFOV(degree)*PI/360),u32FocalLengthY = 100 * 0.5 * ImageHeight(pixel) / tan(VFOV(degree)*PI/360)。其中 ImageWidth/ImageHeight 是输入图像的宽高,单位是 pixel;HFOV/VFOV 是水平和垂直方向上的视场角,单位是度;PI 是圆周率。

      • 在输入图像旋转90或270度时,u32FocalLengthX/u32FocalLengthY需要对调适配旋转。

    • 相关数据类型及接口

      MI_LDC_ChnLDCAttr_t

      MI_LDC_ImgDirection_t


    3.8. MI_LDC_RegionMode_e

    • 说明

      LDC 模式的区域模式

    • 定义

      typedef enum
      {
          MI_LDC_REGION_360_PANORAMA      = 0x01,
          MI_LDC_REGION_180_PANORAMA      = 0x02,
          MI_LDC_REGION_NORMAL            = 0x03,
          MI_LDC_REGION_MAP2BIN           = 0x04,
          MI_LDC_REGION_NO_TRANSFORMATION = 0x05,
          MI_LDC_REGION_DOORBELL          = 0x06,
          MI_LDC_REGION_BIN               = 0x07,
          MI_LDC_REGION_BUTT
      } MI_LDC_RegionMode_e;
      
    • 成员

      成员名称 描述
      MI_LDC_REGION_360_PANORAMA 360 度全景模式,适用于鱼眼镜头顶装与地装模式
      MI_LDC_REGION_180_PANORAMA 180 度全景模式,适用于鱼眼镜头壁装模式
      MI_LDC_REGION_NORMAL 普通矫正模式
      MI_LDC_REGION_MAP2BIN 映射表模式,接受用户直接传入映射表
      MI_LDC_REGION_NO_TRANSFORMATION 不做矫正
      MI_LDC_REGION_DOORBELL 门铃模式
      MI_LDC_REGION_BIN 离线模式,接受仿真工具CVTool生成的二进制文件
      MI_LDC_REGION_BUTT 无效值。在初始化之后,当需要动态地修改区域时才可以将区域模式设置为无效值,并且设置为无效值后,其区域参数保持为上一次所设置的值
    • 注意事项

      MI_LDC_REGION_BIN模式仅支持一个region的场景。

    • 相关数据类型及接口

      MI_LDC_RegionAttr_t


    3.9. MI_LDC_RegionCropMode_e

    • 说明

      LDC 区域裁剪模式。

    • 定义

      typedef enum
      {
          MI_LDC_REGION_CROP_NONE     = 0x00,
          MI_LDC_REGION_CROP_FILLING  = 0x01,
          MI_LDC_REGION_CROP_STRETCH  = 0x02,
          MI_LDC_REGION_CROP_BUTT
      } MI_LDC_RegionCropMode_e;
      
    • 成员

      成员名称 描述
      MI_LDC_REGION_CROP_NONE 不进行任何裁剪
      MI_LDC_REGION_CROP_FILLING 依照拉伸的原则进行处理,将处理后的图像的有效区域尽可能的都裁切输出
      MI_LDC_REGION_CROP_STRETCH 依照等比例缩放的原则进行处理,将处理后的图像按照预期的输出图像的宽高比例进行裁切放大
      MI_LDC_REGION_CROP_BUTT 无效值
    • 相关数据类型及接口

      MI_LDC_RegionPara_t


    3.10. MI_LDC_RegionPara_t

    • 说明

      LDC模式的区域矫正参数。

    • 定义

      typedef struct MI_LDC_RegionPara_s
      {
          MI_LDC_RegionCropMode_e eCropMode;
          MI_S32 s32Pan;
          MI_S32 s32Tilt;
          MI_S32 s32ZoomH;
          MI_S32 s32ZoomV;
          MI_S32 s32InRadius;
          MI_S32 s32OutRadius;
          MI_S32 s32FocalRatio;
          MI_S32 s32DistortionRatio;
          MI_S32 s32OutRotate;
          MI_S32 s32Rotate;
      } MI_LDC_RegionPara_t;
      
    • 成员

      成员名称 描述
      eCropMode 区域裁剪模式
      s32Pan 该矫正区域PTZ参数的Pan值
      s32Tilt 该矫正区域PTZ参数的Tilt值
      s32ZoomH 该矫正区域PTZ参数的水平Zoom值
      s32ZoomV 该矫正区域PTZ参数的垂直Zoom值
      s32InRadius 360全景模式表示该矫正区域所对应原图的内半径,其他模式无效
      s32OutRadius 360全景模式表示该矫正区域所对应原图的外半径,其他模式为矫正区域的可视半径
      s32FocalRatio 用于描述到投影面的距离,数值越大曲率越小画面越平整平滑,数值越小曲率越大画面越弯曲
      s32DistortionRatio 畸变强度,负数为枕型,正数为桶型,用于微调输出的图像的畸变程度,提高可视范围,但是线条会畸变
      s32OutRotate 用于将输出的图像进行旋转,360 全景模式该参数无效
      s32Rotate 该校正区域PTZ参数的rotate值,normal模式下该参数才有效
    • 注意事项

      LDC 模式支持对一幅图像的多个区域分别进行矫正,每个区域的属性配置都是相互独立的。

    • 相关数据类型及接口

      MI_LDC_RegionAttr_t


    3.11. MI_LDC_DispMapInfo_t

    • 说明

      LDC映射表信息。

    • 定义

      typedef struct MI_LDC_DispMapInfo_s
      {
          MI_U32 u32Grid;
      
          void *pXmapAddr;
          void *pYmapAddr;
          MI_U32 u32XmapSize;
          MI_U32 u32YmapSize;
          MI_U32 u32XOffset;
          MI_U32 u32YOffset;
      } MI_LDC_DispMapInfo_t;
      
    • 成员

      成员名称 描述
      u32Grid 映射表的采样精度
      pXmapAddr x坐标映射表的起始地址
      pYmapAddr x坐标映射表的起始地址
      u32XmapSize x坐标的映射表大小
      u32YmapSize y坐标的映射表大小
      u32XOffset 当前映射表对应到输出图的x偏移量,只在坐标查询功能中有效
      u32YOffset 当前映射表对应到输出图的y偏移量,只在坐标查询功能中有效
    • 相关数据类型及接口

      MI_LDC_RegionAttr_t


    3.12. MI_LDC_RegionAttr_t

    • 说明

      LDC 模式下区域的属性。

    • 定义

      typedef struct MI_LDC_RegionAttr_s
      {
          MI_LDC_RegionMode_e eRegionMode;
          MI_U8               u8Map2RegionId;
          union
          {
              MI_LDC_RegionPara_t     stRegionPara;
              MI_LDC_DispMapInfo_t    stRegionMapInfo;
              MI_LDC_RegionDoorbell_t stRegionDoorbellPara;
              MI_LDC_RegionBin_t      stRegionBinInfo;
          };
          MI_SYS_WindowRect_t stOutRect;
      } MI_LDC_RegionAttr_t;
      
    • 成员

      成员名称 描述
      eRegionMode 该区域的模式
      u8Map2RegionId 该区域对应的映射区域号
      stRegionPara 该区域的参数
      stRegionMapInfo 该区域映射表信息,当模式为映射表模式时使用
      stRegionDoorbellPara 该区域的参数,当模式为门铃模式时使用
      stRegionBinInfo 该区域的二进制文件,此二进制文件由CVTool生成,当模式为离线模式时使用
      stOutRect 该区域的输出位置及宽高
    • 相关数据类型及接口

      MI_LDC_ChnLDCAttr_t


    3.13. MI_LDC_ChnLDCAttr_t

    • 说明

      LDC模式的通道属性。

    • 定义

      typedef struct MI_LDC_ChnLDCAttr_s
      {
          MI_BOOL bBgColor;
          MI_U32 u32BgColor;
      
          MI_LDC_MountMode_e eMountMode;
          MI_LDC_SensorCalibInfo_t stCalibInfo;
          MI_U32 u32RegionNum;
          MI_LDC_RegionAttr_t stRegionAttr[LDC_MAX_REGION_NUM];
          MI_LDC_ImgDirection_t stSrcImgDirection;
      } MI_LDC_ChnLDCAttr_t;
      
    • 成员

      成员名称 描述
      bBgColor 是否配置背景颜色
      u32BgColor 设置背景颜色, 格式为rgb888
      eMountMode 挂载模式
      stCalibInfo sensor校准信息
      u32RegionNum 矫正区域的数量
      stRegionAttr 矫正区域属性
      stSrcImgDirection 描述前级模块对输入图像的位置操作,包括旋转、镜像和翻转,不支持动态切换
    • 相关数据类型及接口

      MI_LDC_SetChnLDCAttr

      MI_LDC_GetChnLDCAttr


    3.14. MI_LDC_DISMode_e

    • 说明

      DIS的工作模式。

    • 定义

      typedef enum
      {
          MI_LDC_DIS_NONE   = 0x00,
          MI_LDC_DIS_GME_6DOF = 0x01,
          MI_LDC_DIS_GME_8DOF = 0x02,
          MI_LDC_DIS_GYRO   = 0x03,
          MI_LDC_DIS_CUST = 0x04,
          MI_LDC_DIS_BUTT,
      } MI_LDC_DISMode_e;
      
    • 成员

      成员名称 描述
      MI_LDC_DIS_NONE 不做任何防抖处理。
      MI_LDC_DIS_GME_6DOF 基于GME 的6自由度防抖模式,不使用陀螺仪。
      MI_LDC_DIS_GME_8DOF 基于GME 的8自由度防抖模式,不使用陀螺仪。
      MI_LDC_DIS_GYRO 基于陀螺仪算法的防抖模式。该模式可叠加LDC的畸变矫正功能
      MI_LDC_DIS_CUST 基于客制化算法的防抖模式
      MI_LDC_DIS_BUTT 无效值。

      注意:

      当MI_LDC_DIS_GYRO需叠加LDC畸变矫正功能时,强制要求先调用MI_LDC_SetChnLDCAttr设定镜头校准参数(MI_LDC_SensorCalibInfo_t),后调用MI_LDC_SetChnDISAttr设定防抖相关参数。

    • 相关数据类型及接口

      MI_LDC_SetChnDISAttr

      MI_LDC_GetChnDISAttr

    3.15. MI_LDC_DISSceneType_e

    • 说明

      镜头状态。

    • 定义

      typedef enum
      {
          MI_LDC_DIS_FIX_SCENE  = 0x00,
          MI_LDC_DIS_MOVE_SCENE = 0x01,
          MI_LDC_DIS_SCENE_BUTT,
      } MI_LDC_DISSceneType_e;
      
    • 成员

      成员名称 描述
      MI_LDC_DIS_FIX_SCENE 镜头固定,默认值。
      MI_LDC_DIS_MOVE_SCENE 镜头移动。
      MI_LDC_DIS_SCENE_BUTT 无效值。
    • 相关数据类型及接口

      MI_LDC_SetChnDISAttr

      MI_LDC_GetChnDISAttr

    3.16. MI_LDC_DISMotionLevel_e

    • 说明

      镜头抖动幅度。

    • 定义

      typedef enum
      {
          MI_LDC_DIS_MOTION_LEVEL0 = 0x00,
          MI_LDC_DIS_MOTION_LEVEL1 = 0x01,
          MI_LDC_DIS_MOTION_BUTT,
      } MI_LDC_DISMotionLevel_e;
      
    • 成员

      成员名称 描述
      MI_LDC_DIS_MOTION_LEVEL0 镜头抖动幅度较小。
      MI_LDC_DIS_MOTION_LEVEL1 镜头抖动幅度较大,默认值。
      MI_LDC_DIS_MOTION_BUTT 无效值。
    • 相关数据类型及接口

      MI_LDC_SetChnDISAttr

      MI_LDC_GetChnDISAttr

    3.17. MI_LDC_ChnDISAttr_t

    • 说明

      DIS模式的通道参数。

    • 定义

      typedef struct MI_LDC_ChnDISAttr_s
      {
          MI_LDC_DISMode_e        eMode;
          MI_LDC_DISSceneType_e   eSceneType;
          MI_LDC_DISMotionLevel_e eMotionLevel;
      
          MI_S32  as32RotationMatrix[LDC_MAXTRIX_NUM];
          MI_U32  u32UserSliceNum;
          MI_U32  u32FocalLengthX;
          MI_U32  u32FocalLengthY;
      
          MI_U8    u8CropRatio;
          MI_BOOL  bBypass;
      
          MI_LDC_CalIsMatrixCb_t pCalIsMatrixCb;
          MI_LDC_ImgDirection_t stSrcImgDirection;
          MI_U8 u8BackwardRefFrameCnt;
      } MI_LDC_ChnDISAttr_t;
      
    • 成员

      成员名称 描述
      eMode 工作模式。
      eSceneType 镜头状态,MI_LDC_DIS_GME_6DOF或MI_LDC_DIS_GME_8DOF模式下设置。
      eMotionLevel 镜头抖动强度,MI_LDC_DIS_GME_6DOF或MI_LDC_DIS_GME_8DOF模式下设置。
      as32RotationMatrix 描述陀螺仪相对sensor摆放位置的映射矩阵,MI_LDC_DIS_GYRO模式下设置。
      u32UserSliceNum 垂直方向上切分数量,主要用于Rolling Shutter相机的运动场景,每个Slice会有单独的3x3 Matrix,目前支持最大的设定为12,MI_LDC_DIS_GYRO模式下设置。
      u32FocalLengthX X轴焦距,单位pixel,MI_LDC_DIS_GYRO模式下设置。
      u32FocalLengthY Y轴焦距,单位pixel,MI_LDC_DIS_GYRO模式下设置。
      u8CropRatio DIS图像裁剪后的图像比例,该参数可动态调节。MI_LDC_DIS_GME_6DOF或MI_LDC_DIS_GME_8DOF或MI_LDC_DIS_NONE模式下设置。取值范围为[50, 98],默认为70,该参数最终设定值为u8CropRatio*0.01。默认为70时,即裁剪后图像宽高为原来的0.7倍(裁减掉输入图像四周各15%),若输入图像宽高为1920×1080,则裁剪后图像宽为1920×70%=1344,高为1080×70%=756。当该参数结合bBypass==TRUE设置时,使用规则细节在注意事项中。
      bBypass 是否过滤防抖处理,TRUE表示过滤防抖,FALSE则表示经过防抖处理。该参数可动态调节,当使用是MI_LDC_DIS_GME_6DOF或MI_LDC_DIS_GME_8DOF或MI_LDC_DIS_NONE模式,该参数置为TRUE时,其输出图视场角可根据u8CropRatio的值来调整;当为MI_LDC_DIS_GYRO模式时,由于输出图的宽高一定要小于输入图(否则无法正常进行防抖),故该参数置为TRUE时,输入与输出图的尺寸和内容不一致,过滤了防抖效果。
      pCalIsMatrixCb 客制化防抖算法回调函数,只有MI_LDC_DIS_CUST 模式需要设置
      stSrcImgDirection 描述前级模块对输入图像的位置操作,包括旋转、镜像和翻转。仅MI_LDC_DIS_GYRO模式下需要设置,且不支持动态切换
      u8BackwardRefFrameCnt 向后参考的帧数,通过对输入帧进行累积,使得算法可以向后参考运动轨迹,以达到更好的防抖效果。若不需要向后参考,该值设定为0即可。仅MI_LDC_DIS_GYRO模式下支持,且不支持动态切换

      注意:

      • bBypass:其定义为是否过滤防抖处理,结合u8CropRatio的值,可在MI_LDC_DIS_GME_6DOF或MI_LDC_DIS_GME_8DOF或MI_LDC_DIS_NONE模式下对输出图的视场角进行调整,如下为具体的例子以及所允许的情况:

        bBypass设定值 u8CropRatio设定值 是否允许 具体描述
        0 [50, 98] Y 此时输出图的视场角与输入图不一致
        0 [0, 50)或(98, U8_MAX] N 调用MI_LDC_SetChnDISAttr失败
        1 [50, 98] Y 此时输出图的视场角与输入图不一致,且无防抖效果
        1 [99, 100] Y 此时输出图的视场角与输入图一致,内容一致,无防抖效果
        1 [0, 50)或(100, U8_MAX] N 调用MI_LDC_SetChnDISAttr失败
      • as32RotationMatrix成员设定:其定义陀螺仪角位与CMOS Sensor正摆之对应矩阵,必须输入正确的3x3补偿矩阵,若是输入错误,会造成DIS(MI_LDC_DIS_GYRO)补偿到错误方向。

        安装方式
        特性说明

        Sensor正摆(陀螺仪位于红框位置,红点为陀螺仪的PIN 1位置)

        陀螺仪传感器 ICG-20660 的轴线方向和旋转极性

        PIN 1 位置
        as32RotationMatrix设定

        [-1, 0, 0,
        0, -1, 0,
        0, 0, 1]

        [0, 1, 0,
        1, 0, 0,
        0, 0, -1]

        [0, -1, 0,
        1, 0, 0,
        0, 0, 1]

        [1, 0, 0,
        0, -1, 0,
        0, 0, -1]

        [1, 0, 0,
        0, 1, 0,
        0, 0, 1]

        [0, -1, 0,
        -1, 0, 0,
        0, 0, -1]

        [0, 1, 0,
        -1, 0, 0,
        0, 0, 1]

        [-1, 0, 0,
        0, 1, 0,
        0, 0, -1]

      • u32UserSliceNum成员设定:此输入参数决定LDC要切分多少水平切片进行DIS(MI_LDC_DIS_GYRO)补偿。若输出高度(由MI_LDC_SetOutputPortAttr设置)为1512,则每个水平切片由上到下为1512/6=252。在设置时需注意切片高度是否接近对齐32的数值,避免多余的CPU资源被占用。

      • u32FocalLengthX与 u32FocalLengthY成员设定:焦距设置,在输入前需将焦距换算到pixel单位,换算公式为:u32FocalLengthX/Y(pixels) = (FocalLength(mm)/CMOS_Unit_CellSize(μm)) * 10^5,其中FocalLength与CMOS_Unit_CellSize可以在Sensor的Lensspec与datasheet中找到,如下为例子:



        FocalLength(mm)在Lens spec的例子
        CMOS_Unit_CellSize(μm)在Sensor datasheet的例子

        进行变焦场景 时,需根据镜头配置文件中不同焦段的HFOV和VFOV来计算u32FocalLengthX/Y(pixels),公式如下:
        · u32FocalLengthX(pixels) = 100*(0.5*InputImageWidth(pixels))/(tan(HFOV(degree)PI/180/2))
        · u32FocalLengthY(pixels) = 100
        (0.5*InputImageHeight(pixels))/(tan(VFOV(degree)*PI/180/2))

        示例如下:在部分镜头配置文件中HFOV称为fov_h,VFOV称为fov_v

        fov_v
        fov_h
        InputImageWidth
        InputImageHeight
        u32FocalLengthX
        u32FocalLengthY
        68.8
        40.51
        1920
        1080
        260152
        78866
        35.16
        20.31
        1920
        1080
        535966
        170438

        • NOTE: 当前级ISP模块对图像进行了rot 90/270操作时,LDC输入的W/H较与rot前会调换,此时FocalLengthX/Y也务必进行调换。
      • pCalIsMatrix成员设定: pCalIsMatrix参数不支持动态修改,若修改需先销毁通道后重新创建通道。

      • eMode成员设定: eMode参数不支持动态修改,若修改需先销毁通道后重新创建通道。
      • stSrcImgDirection:设置前级模块对输入图像的位置操作,包括旋转、镜像和翻转。获取到该参数的目的是为了在前级对图像进行变换操作后,可正确的进行防抖补偿。目前旋转操作仅支持ISP模块,镜像与翻转仅支持Sensor模块。
      • u8BackwardRefFrameCnt:u8BackwardRefFrameCnt参数不支持动态修改,若修改需先销毁通道后重新创建通道。该参数会影响输出视频帧的实时性与内存使用量,请结合具体的防抖效果与场景进行设定。
        • 实时性的影响:驱动内部根据该参数的值,对当前输入帧的防抖处理时机强制延迟到第u8BackwardRefFrameCnt+1帧后;
        • 内存使用量的影响:由于其通过延迟输入帧的处理时机,会导致前级模块输出帧堆积。为保证该参数不为0时pipeline可正常运作,需通过MI_SYS_SetChnOutputPortDepth接口将LDC的前级模块输出端口的u32BufQueueDepth至少设定为u8BackwardRefFrameCnt+1。因此开启这个功能后,前级和LDC之间最少需要缓存u8BackwardRefFrameCnt + 1帧的图像数据,即占用的buffer size最少为(u8BackwardRefFrameCnt + 1)*每帧图像的大小
    • 相关数据类型及接口

      MI_LDC_SetChnDISAttr

      MI_LDC_GetChnDISAttr


    3.18. MI_LDC_ChnPMFAttr_t

    • 说明

      PMF模式的通道参数。

    • 定义

      typedef struct MI_LDC_ChnPMFAttr_s
      {
          MI_S64 as64PMFCoef[LDC_PMFCOEF_NUM];
      } MI_LDC_ChnPMFAttr_t;
      
    • 成员

      成员名称 配置范围
      as64PMFCoef[0] 取值范围:[-67108864, 67106816]
      as64PMFCoef[1] 取值范围:[-67108864, 67106816]
      as64PMFCoef[2] 取值范围:[-137438953472, 137434759168]
      as64PMFCoef[3] 取值范围:[-67108864, 67106816]
      as64PMFCoef[4] 取值范围:[-67108864, 67106816]
      as64PMFCoef[5] 取值范围:[-137438953472, 137434759168]
      as64PMFCoef[6] 取值范围:[-32768, 32767]
      as64PMFCoef[7] 取值范围:[-32768, 32767]
      as64PMFCoef[8] 取固定值:33554432

      参数含义:

      投影变换矩阵:(x,y)=F(x0,y0)

      即表示从输出坐标计算输入坐标,其中x, y为输入图像坐标,x0,y0为输出图像坐标。

    • 相关数据类型及接口

      MI_LDC_SetChnPMFAttr

      MI_LDC_GetChnPMFAttr


    3.19. MI_LDC_CalibConfig_t

    • 说明

      Sensor校准参数。

    • 定义

      typedef struct MI_LDC_CalibConfig_s
      {
          void *pCalibCfgAddr;
          MI_U32 u32CalibCfgSize;
      } MI_LDC_CalibConfig_t;
      
    • 成员

      成员名称 描述
      pCalibCfgAddr 存储校准信息的内存地址
      u32CalibCfgSize 校准信息大小
    • 相关数据类型及接口

      MI_LDC_ChnStitchAttr_t

      MI_LDC_ChnNIRAttr_t

      MI_LDC_ChnDPUAttr_t


    3.20. MI_LDC_ProjectionMode_e

    • 说明

      Stitch模式的投影模式。

    • 定义

      typedef enum
      {
          MI_LDC_PROJECTION_RECTILINEAR   = 0x00,
          MI_LDC_PROJECTION_CYLINDRICAL   = 0x01,
          MI_LDC_PROJECTION_SPHERICAL     = 0x02,
          MI_LDC_PROJECTION_BUTT
      } MI_LDC_ProjectionMode_e;
      
    • 成员

      成员名称 描述
      MI_LDC_PROJECTION_RECTILINEAR 直线投影模式
      MI_LDC_PROJECTION_CYLINDRICAL 圆柱投影模式
      MI_LDC_PROJECTION_SPHERICAL 球面投影模式
      MI_LDC_PROJECTION_BUTT 无效值
    • 相关数据类型及接口

      MI_LDC_ChnStitchAttr_t


    3.21. MI_LDC_ChnStitchAttr_t

    • 说明

      Stitch模式的通道参数。

    • 定义

      typedef struct MI_LDC_ChnStitchAttr_s
      {
          MI_LDC_ProjectionMode_e eProjType;
          MI_S32 s32Distance;
          MI_LDC_CalibConfig_t stCalCfg;
          MI_U8 u8PairNum;
          MI_LDC_StitchDisparity_t astDisparity[LDC_MAX_PAIR_NUM];
      } MI_LDC_ChnStitchAttr_t;
      
    • 成员

      成员名称 描述
      eProjType 投影模式
      s32Distance 拼接平面到sensor的距离,单位mm
      stCalCfg Sensor的校准信息
      u8PairNum 重叠区域数量
      astDisparity 视差图信息(每个重叠区一个视差图)
    • 相关数据类型及接口

      MI_LDC_SetChnStitchAttr

      MI_LDC_GetChnStitchAttr

      MI_LDC_StitchDisparity_t


    3.22. MI_LDC_ChnNIRAttr_t

    • 说明

      NIR模式的通道参数。

    • 定义

      typedef struct MI_LDC_ChnNIRAttr_s
      {
          MI_S32 s32Distance;
          MI_LDC_CalibConfig_t stCalCfg;
      } MI_LDC_ChnNIRAttr_t;
      
    • 成员

      成员名称 描述
      s32Distance 拼接平面到sensor的距离,单位mm
      stCalCfg Sensor的校准信息
    • 相关数据类型及接口

      MI_LDC_SetChnNIRAttr

      MI_LDC_GetChnNIRAttr


    3.23. MI_LDC_ChnDPUAttr_t

    • 说明

      DPU模式的通道参数。

    • 定义

      typedef struct MI_LDC_ChnDPUAttr_s
      {
          MI_S32 s32Distance;
          MI_LDC_CalibConfig_t stCalCfg;
      } MI_LDC_ChnDPUAttr_t;
      
    • 成员

      成员名称 描述
      s32Distance 拼接平面到sensor的距离,单位mm
      stCalCfg sensor校准信息
    • 相关数据类型及接口

      MI_LDC_SetChnDPUAttr

      MI_LDC_GetChnDPUAttr


    3.24. MI_LDC_InputPortAttr_t


    3.25. MI_LDC_OutputPortAttr_t

    • 说明

      定义LDC 输出端口的属性。

    • 定义

      typedef struct MI_LDC_OutputPortAttr_s
      {
      MI_U16 u16Width;
      MI_U16 u16Height;
      MI_SYS_PixelFormat_e ePixelFmt;
      } MI_LDC_OutputPortAttr_t;
      
    • 相关数据类型及接口

      MI_LDC_SetOutputPortAttr

      MI_LDC_GetOutputPortAttr


    3.26. 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 图像存储物理地址
    • 相关数据类型及接口

      MI_LDC_LutTaskAttr_t


    3.27. 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 存放查表之后的输出数据
    • 相关数据类型及接口

      MI_LDC_DoLutDirectTask


    3.28. MI_LDC_StitchDisparity_t

    • 说明

      LDC Stitch所需的视差图信息

    • 定义

      typedef struct MI_LDC_StitchDisparity_s
      {
          void *pMapData;
          MI_U32 u32MapSize;
      } MI_LDC_StitchDisparity_t;
      
    • 成员

      成员名称 描述
      pMapData 视差图数据
      u32MapSize 视差图数据大小
    • 相关数据类型及接口

      MI_LDC_ChnStitchAttr_t


    3.29. MI_LDC_Point_t

    • 说明

      LDC映射框线的坐标

    • 定义

      typedef struct MI_LDC_Point_s
      {
          MI_S16 s16X;
          MI_S16 s16Y;
      } MI_LDC_Point_t;
      
    • 成员

      成员名称 描述
      s16X 映射框线的X坐标
      s16Y 映射框线的Y坐标
    • 相关数据类型及接口

      MI_LDC_GetRegionBorderMappedPoints


    3.30. MI_LDC_DispMapType_e

    • 说明

      坐标查询功能中映射表的类型

    • 定义

      typedef enum
      {
          E_MI_LDC_DISPMAP_SRC = 0,
          E_MI_LDC_DISPMAP_DST,
          E_MI_LDC_DISPMAP_BUTT,
      } MI_LDC_DispMapType_e;
      
    • 成员

      成员名称 描述
      E_MI_LDC_DISPMAP_SRC 在坐标查询功能中,将输入图坐标映射到输出图坐标的映射表类型
      E_MI_LDC_DISPMAP_DST 在坐标查询功能中,将输出图坐标映射到输入图坐标的映射表类型
      E_MI_LDC_DISPMAP_BUTT 无效值
    • 相关数据类型及接口

      MI_LDC_GetDisplacementMapSize


    3.31. MI_LDC_DispMapConf_t

    • 说明

      坐标查询功能中映射表的配置

    • 定义

      typedef struct MI_LDC_DispMapConf_s
      {
          MI_U32 u32RegionIdx;
          MI_LDC_DispMapType_e eMapType;
      } MI_LDC_DispMapConf_t;
      
    • 成员

      成员名称 描述
      u32RegionIdx 区域索引。对于拼接场景,该索引会依据拼接的输出区域从左至右从0逐渐递增
      eMapType 坐标查询功能中映射表的类型
    • 相关数据类型及接口

      MI_LDC_GetDisplacementMapSize


    3.32. MI_LDC_DispMapSize_t

    • 说明

      坐标查询功能中映射表的尺寸

    • 定义

      typedef struct MI_LDC_DispMapSize_s
      {
          MI_U32 u32Width;
          MI_U32 u32Height;
      } MI_LDC_DispMapSize_t;
      
    • 成员

      成员名称 描述
      u32Width 坐标查询功能中映射表的宽度
      u32Height 坐标查询功能中映射表的高度
    • 相关数据类型及接口

      MI_LDC_GetDisplacementMapSize


    3.34. MI_LDC_BaseDrift_t

    • 说明

      各轴的零漂值

    • 定义

      typedef struct MI_LDC_BaseDrift_s
      {
          MI_BOOL bValid;
          MI_S32  as32BaseDrift[MI_LDC_IMU_AXIS_NUM];
      } MI_LDC_BaseDrift_t;
      
    • 成员

      成员名称 描述
      bValid 标识数据是否有效
      as32BaseDrift 三轴数据,0为x轴,1为y轴,2为z轴
    • 注意

      • MI_LDC_SetIMUDriftPara中使用时,bValid设定为TRUE,将更新零漂值重新校准传感器。bValid设定为FALSE,则不会重新校准。

      • MI_LDC_GetIMUDriftPara中使用时,若bValid为TRUE,说明获取的零漂值有效。若bValid为FALSE,说明获取的零漂值无效。

    • 相关数据类型及接口

      MI_LDC_Drift_t


    3.35. MI_LDC_Drift_t

    • 说明

      校准数据

    • 定义

      typedef struct MI_LDC_Drift_s
      {
          MI_LDC_BaseDrift_t stBaseDrift;
      } MI_LDC_Drift_t;
      
    • 成员

      成员名称 描述
      stBaseDrift 零漂值
    • 相关数据类型及接口

      MI_LDC_IMUDrift_t


    3.36. MI_LDC_IMUDrift_t

    • 说明

      传感器的校准数据

    • 定义

      typedef struct MI_LDC_IMUDrift_s
      {
          MI_LDC_Drift_t stGyroDrift;
          MI_LDC_Drift_t stAccDrift;
      } MI_LDC_IMUDrift_t;
      
    • 成员

      成员名称 描述
      stGyroDrift 陀螺仪的校准数据
      stAccDrift 加速度计的校准数据
    • 相关数据类型及接口

      MI_LDC_SetIMUDriftPara

      MI_LDC_GetIMUDriftPara


    3.37. MI_LDC_IMUPart_e

    • 说明

      传感器校准部分

    • 定义

      typedef enum
      {
          E_MI_LDC_IMU_PART_GYRO = 0x01,
          E_MI_LDC_IMU_PART_ACC  = 0x02,
          E_MI_LDC_IMU_PART_BUTT = 0x0
      } MI_LDC_IMUPart_e;
      
    • 成员

      成员名称 描述
      E_MI_LDC_IMU_PART_GYRO 校准陀螺仪
      E_MI_LDC_IMU_PART_ACC 校准加速度计,目前不支持
      E_MI_LDC_IMU_PART_BUTT 无效值
    • 相关数据类型及接口

      MI_LDC_CalibIMUBaseDrift


    3.38. MI_LDC_RegionDoorbell_t

    • 说明

      门铃模式的矫正参数。

    • 定义

      typedef struct MI_LDC_RegionDoorbell_s
      {
          MI_S16 s16Fx;
          MI_S16 s16Fy;
          MI_S16 s16A;
          MI_S16 s16B;
          MI_S16 s16Scale;
      } MI_LDC_RegionDoorbell_t;
      
    • 成员

      成员名称 描述
      s16Fx 水平方向的矫正强度,取值范围:[0, 2000]
      s16Fy 垂直方向的矫正强度,取值范围:[0, 2000]
      s16A 水平方向的缩放,取值范围:[1000, 4000]
      s16B 垂直方向的缩放,取值范围:[1000, 4000]
      s16Scale 输出的缩放,取值范围:[200, 20000]
    • 相关数据类型及接口

      MI_LDC_RegionAttr_t

    3.39. MI_LDC_IsMatrixInParam_t

    • 说明

      DIS客制化回调函数中的输入参数,由驱动内部提供如下数值。

    • 定义

      typedef struct MI_LDC_IsMatrixInPararm_s
      {
          MI_LDC_DEV devId;
          MI_LDC_CHN chnId;
          MI_U64 u64FramePts;
      }MI_LDC_IsMatrixInParam_t;
      
    • 成员

      成员名称 描述
      devId 设备ID
      chnId 通道ID
      u64FramePts 该次处理图像对应的时间戳
    • 相关数据类型及接口

      MI_LDC_ChnDISAttr_t

      MI_LDC_SetChnDISAttr

      MI_LDC_GetChnDISAttr

    3.40. MI_LDC_IsMatrixOutParam_t

    • 说明

      DIS客制化回调函数中的输出参数,由使用者提供如下数值。

    • 定义

      typedef struct MI_LDC_IsMatrixOutParam_s
      {
          MI_S32 as32Matrix[LDC_MAXTRIX_NUM];
      }MI_LDC_IsMatrixOutParam_t;
      
    • 成员

      成员名称 描述
      as32Matrix 描述需要LDC处理的防抖矩阵
    • 注意

      该矩阵的元素需做归一化与定点化,具体步骤参考IS_UserGuide文档。

    • 相关数据类型及接口

      MI_LDC_ChnDISAttr_t

      MI_LDC_SetChnDISAttr

      MI_LDC_GetChnDISAttr

    3.41. MI_LDC_CalIsMatrixCb_t


    3.41. MI_LDC_ImgDirection_t

    • 说明

      描述前级模块对输入图像的位置操作,包括旋转、镜像和翻转。

    • 定义

      typedef struct MI_LDC_ImgDirection_s
      {
          MI_SYS_Rotate_e eRotate;
          MI_BOOL bMirror;
          MI_BOOL bFlip;
      }MI_LDC_ImgDirection_t;
      
    • 成员

      成员名称 描述
      eRotate 前级ISP对图像做的rotate操作
      bMirror 前级Sensor对图像做的mirror操作
      bFlip 前级Sensor对图像做的flip操作
    • 相关数据类型及接口

      MI_LDC_SetChnDISAttr

    • 注意

      • 该参数不支持动态切换,若需修改,则需重新销毁通道后重新创建;
      • 该参数中eRotate仅支持ISP模块的操作,bMirror与bFlip仅支持Sensor模块的操作。

    3.43. MI_LDC_RegionBin_t

    • 说明

      仿真工具CVTool生成的二进制文件信息。

    • 定义

      typedef struct MI_LDC_RegionBin_s
      {
          void  *pBinAddr;
          MI_U32 u32BinSize;
      } MI_LDC_RegionBin_t;
      
    • 成员

      成员名称 描述
      pBinAddr 二进制文件的地址
      u32BinSize 二进制文件的大小
    • 相关数据类型及接口

      MI_LDC_SetChnLDCAttr

      MI_LDC_RegionMode_e

    • 注意

      • 使用请确认二进制文件符合实际场景,避免因不匹配导致问题发生。
    • 举例

      MI_LDC_DEV          LdcDevid     = 0;
      MI_LDC_CHN          LdcChnId     = 0;
      MI_LDC_DevAttr_t    stDevAttr    = {};
      MI_LDC_ChnAttr_t    stChnAttr    = {};
      MI_LDC_ChnLDCAttr_t stChnLDCAttr = {};
      
      stChnAttr.eWorkMode      = MI_LDC_WORKMODE_LDC;
      stChnAttr.eInputBindType = E_MI_SYS_BIND_TYPE_FRAME_BASE;
      
      MI_LDC_CreateDevice(LdcDevid, &stDevAttr);
      MI_LDC_CreateChannel(LdcDevid, LdcChnId, &stChnAttr);
      
      // 这里忽略具体配置细节,详细参数参见接口说明
      // 调用MI_LDC_SetChnLDCAttr接口前,请先调用以下接口
      // 1. MI_LDC_SetInputPortAttr
      // 2. MI_LDC_SetOutputPortAttr
      
      stChnLDCAttr.u32RegionNum                               = 1; // 仅支持设置成1
      stChnLDCAttr.stRegionAttr[0].eRegionMode                = MI_LDC_REGION_BIN;
      stChnLDCAttr.stRegionAttr[0].stRegionBinInfo.pBinAddr   = 0x00; // 请设置成实际的地址
      stChnLDCAttr.stRegionAttr[0].stRegionBinInfo.u32BinSize = 0x00; // 请设置成实际的大小
      MI_LDC_SetChnLDCAttr(LdcDevid, LdcChnId, &stChnLDCAttr);
      

    3.44. MI_LDC_DisAuxiliaryInfo_t

    • 说明

      DIS辅助信息,只有当 bUpdated = TRUE 时,u32CurMaxShutter值才有效。

    • 定义

      typedef struct MI_LDC_DisAuxiliaryInfo_s
      {
          MI_U32  u32CurMaxShutter;
          MI_BOOL bUpdated;
          MI_BOOL bMotion;
      } MI_LDC_DisAuxiliaryInfo_t;
      
    • 成员

      成员名称 描述
      u32CurMaxShutter 推荐的最大shutter值
      bUpdated 数据是否已被更新
      bMotion sensor是否在移动
    • 相关数据类型及接口

      MI_LDC_GetDisAuxiliaryInfo


    3.45. MI_LDC_QueryPointsConfig_t

    • 说明

      查询多坐标点的配置信息。stitch模式下忽略u32RegionIdx; LDC模式下忽略stDispMapSize和stDispMapInfo

    • 定义

      typedef struct MI_LDC_QueryPointsConfig_s
      {
          MI_U32 u32RegionIdx;
          MI_LDC_DispMapSize_t stDispMapSize;
          MI_LDC_DispMapInfo_t stDispMapInfo;
      } MI_LDC_QueryPointsConfig_t;
      
    • 成员

      成员名称 描述
      u32RegionIdx 查询的Region ID, MI_LDC_WORKMODE_STITCH模式下不需填写该值
      stDispMapSize 坐标查询功能中映射表尺寸,MI_LDC_WORKMODE_LDC模式下不需填写该值
      stDispMapInfo 坐标查询功能中映射表信息,MI_LDC_WORKMODE_LDC模式下不需填写该值
    • 相关数据类型及接口

      MI_LDC_QueryMappingPoints


    4. 错误码


    错误代码 宏定义 描述
    0xA0172001 MI_ERR_LDC_INVALID_DEVID 无效的设备id
    0xA0172002 MI_ERR_LDC_INVALID_CHNID 无效的通道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 通道正忙
    0xA0172015 MI_ERR_LDC_MOD_NOT_INIT 模块没有初始化
    0xA0172016 MI_ERR_LDC_MOD_INITED 模块已经初始化
    0xA0172018 MI_ERR_LDC_PORT_NOT_DISABLE 端口没有失能
    0xA017201F MI_ERR_LDC_FAIL 操作执行失败
    0xA0172300 MI_ERR_LDC_DEV_CREATED 设备已经创建
    0xA0172301 MI_ERR_LDC_DEV_NOT_CREATE 设备还没有创建
    0xA0172302 MI_ERR_LDC_DEV_NOT_DESTROY 设备没有被销毁
    0xA0172303 MI_ERR_LDC_CHN_CREATED 通道已经创建
    0xA0172304 MI_ERR_LDC_CHN_NOT_CREATE 通道还没有创建
    0xA0172305 MI_ERR_LDC_CHN_NOT_STOP 通道没有被禁用
    0xA0172306 MI_ERR_LDC_CHN_NOT_DESTROY 通道没有被销毁
    0xA0172307 MI_ERR_LDC_PORT_NOT_UNBIND 端口没有解绑

    5. PROCFS介绍


    5.1. cat

    • 调试信息

      # cat /proc/mi_modules/mi_ldc/mi_ldc<devid>
      
    • 调试信息分析

      记录当前 LDC 的使用状况以及相关属性、可以动态地获取到这些信息,方便调试和测试。

    • 参数说明

      参数 描述
      Device Info DevID 设备 ID
      IRQ_Enable IRQ使能状况
      IsrCnt 中断发生的次数,在cmdq mode下没有参考意义
      IsrNum 中断号
      TotBlkNum 总共需要处理的ldc块的数量
      FramDonCnt 处理完帧的数量
      Cmdqif cmdq 接口地址
      ClkMhz LDC 时钟频率
      HalInFrmCnt 输入到Hal 的帧总数
      HalDoneFrmCnt

      Hal 处理完的帧总数

      HalDoneBlkCnt Hal 当前帧处理完的块总数
      HalIsrDoneCnt Hal done中断发生的次数
      HalIsrErrCnt Hal Err 中断发生的次数
      ProcessTime LDC 硬件处理时间

      参数 描述
      Channel Info ChnId 通道ID
      workmode 当前channel的工作模式
      status 当前channel的状态:0:uninit 1:init 2:start 3:stop 4:destroyed
      InputWH 输入帧的分辨率
      Pixel 输入帧的格式
      Stride 输入帧的stride[0]
      InBufCnt 前级输入的帧总数量
      IntodoCnt 待处理帧的标号(递增)
      Atom 底层拿住buf数量
      PassId 0:DIS 1:LDC 2:STITCH
      PreTEnq 申请输出buf的时间
      EnqTDeq 拿到前级buf到处理完的总时间
      Process 前级buf的处理时间
      ClrPad 清理输出buf填充部分的耗时

      参数 描述
      ChnId 通道ID
      ViewId ldc 对应窗口的Id
      mode ldc使用的场景模式
      NumRuns ldc 当前场景需要处理的总区块数
      InSize 当前view的输入区域
      ViewSize 当前view的输出区域
      OutSize 当前场景的输出区域
      ViewTime 当前view的处理时间
      BlkId 当前blk的ID
      INV 当前blk是否翻转
      Inblk 当前blk的输入区域
      OutBlk 当前blk的算法输出区域
      SclBlk 当前blk的输出区域
      DeltaXY 当前blk对应delta 表的坐标

      参数 描述
      DIS Device Info Dev 设备 ID
      Mode 设备模式
      HwResetCnt DIS HW复位次数
      CurTaskCycle 当次DIS HW 处理花费的Cycle数
      MaxTaskCycle 在整个pipeline流程中,DIS HW 处理最大Cycle数
      CycleThrd DIS HW 所设定单次处理Cycle的阈值,超过该阈值会触发TimeoutExcp
      InlierThrd DIS HW 所设定单次处理得到的Inlier阈值,小于该阈值会触发InlierLessExcp
      IrqCnt ISR执行次数
      DoneIrqCnt DIS HW 一帧完成中断次数
      SelLessExcpCnt DIS HW 触发选点过小异常次数
      InlierLessExcpCnt DIS HW 触发内点过小异常次数
      Div0ExcpCnt DIS HW 触发除零异常次数
      NoconfidExcpCnt DIS HW 触发无Confid异常次数
      TimeOutExcpCnt DIS HW 触发超时异常次数

      参数 描述
      DIS Channel Info ChnId 通道 ID
      bCreated 通道是否被创建
      disMode DIS的工作模式
      cmdqif cmdq 接口地址
      motionLv 镜头抖动强度
      sceneType 镜头状态
      cropRatio 图像裁剪后的图像比例
      sliceNum 垂直方向上切分数量
      focalLengthX X轴焦距
      focalLengthY Y轴焦距
      TaskCnt 任务完成次数
      HwDoneCnt 硬件任务完成次数
      AlgoDoneCnt 算法任务完成次数
      TaskId 当前最近8次任务的ID
      AllTask 该次任务的总耗时,单位us
      HwTask 该次任务中硬件相关的耗时,单位us
      AlgoTask 该次任务中软件算法相关的耗时,单位us
      CalM33Ops 该次任务的软件算法中计算防抖矩阵的函数耗时,单位us
      GenBinOps 该次任务的软件算法中计算LDC变换映射区的函数耗时,单位us
      FramePtsUs 该次任务的图像时间戳
      SliceId 该次任务的slice ID
      OutputMatrix 该次任务中对应SliceId输出的防抖矩阵

      参数 描述
      DIS Chnannel BackwardRef Info s8QueueSeqNum 模块内部参考信息缓冲区中已累计元素的统计值
      s8DequeueSeqNum 模块内部参考信息缓冲区中已使用元素的统计值
      Index 模块内部参考信息缓冲区中元素的Index
      FramePtsUs 模块内部参考信息缓冲区中帧时间戳元素的值


    5.2. echo

    Echo help 查看可用命令

    # echo help > /proc/mi_modules/mi_ldc/mi_ldc<devid>
    

    以devid 为0的情况为例:

    功能 dump LDC 输出文件
    命令 echo dumpoutputtask [chnid type cnt path] > /proc/mi_modules/mi_ldc/mi_ldc0
    参数说明 chnid: 通道ID
    type: dump的数据类别, 0:dis, 1:ldc,2:stitch
    cnt:dump的数量
    path:dump的路径
    举例 echo dumpoutputtask 0 1 2 /mnt/ > /proc/mi_modules/mi_ldc/mi_ldc0
    功能 dump LDC 输入文件
    命令 echo dumpinputtask [chnid type cnt path] > /proc/mi_modules/mi_ldc/mi_ldc0
    参数说明 chnid: 通道ID
    type: dump的数据类别, 0:dis, 1:ldc,2:stitch
    cnt:dump的数量
    path:dump的路径
    举例 echo dumpinputtask 0 1 2 /mnt/ > /proc/mi_modules/mi_ldc/mi_ldc0
    功能 dump LDC map文件
    命令 echo dumpalgobin [chnid view/all path] > /proc/mi_modules/mi_ldc/mi_ldc0
    参数说明 chnid: 通道ID
    view/all:  dump的内容, view:具体的viewid, all:当前场景所有的view
    path:dump的路径
    举例 echo dumpalgobin 0 all /mnt/ > /proc/mi_modules/mi_ldc/mi_ldc0
    功能 打印DIS HW调试信息
    命令 echo dis_sel_dbgcfg [chn_id cfg_id] > /proc/mi_modules/mi_ldc/mi_ldc0
    参数说明 chn_id: 通道ID
    cfg_id:调试配置等级,范围[1, 5]
    举例 echo dis_sel_dbgcfg 0 1 > /proc/mi_modules/mi_ldc/mi_ldc0
    功能 设定DIS HW inlier个数阈值
    命令 echo dis_cfg_inlier_thrd [chn_id thrd] > /proc/mi_modules/mi_ldc/mi_ldc0
    参数说明 chn_id: 通道ID
    thrd: inlier个数阈值,范围[1, 7]
    举例 echo dis_cfg_inlier_thrd 0 1 > /proc/mi_modules/mi_ldc/mi_ldc0
    功能 设定DIS HW 处理cycle阈值
    命令 echo dis_cfg_cycle_thrd [chn_id thrd] > /proc/mi_modules/mi_ldc/mi_ldc0
    参数说明 chn_id: 通道ID
    thrd: cycle阈值,范围[0, 2147483647]
    举例 echo dis_cfg_cycle_thrd 0 1 > /proc/mi_modules/mi_ldc/mi_ldc0
    功能 bypass DIS防抖功能(bypass前后,输出图视场角一致)
    命令 echo dis_bypass [chn_id switch] > /proc/mi_modules/mi_ldc/mi_ldc0
    参数说明 chn_id: 通道ID
    switch: 是否开启,(0-off, 1-on)
    举例 echo dis_bypass 0 0 > /proc/mi_modules/mi_ldc/mi_ldc0
    功能 设置DIS算法日志等级
    命令 echo dis_loglv [chn_id loglv] > /proc/mi_modules/mi_ldc/mi_ldc0
    参数说明 chn_id:通道ID
    loglv:日志等级
    举例 echo dis_loglv 0 3 > /proc/mi_modules/mi_ldc/mi_ldc0
    功能 设置DIS模式下矫正算法日志等级
    命令 echo calib_loglv [chn_id loglv] > /proc/mi_modules/mi_ldc/mi_ldc0
    参数说明 chn_id:通道ID
    loglv:日志等级
    举例 echo calib_loglv 0 3 > /proc/mi_modules/mi_ldc/mi_ldc0