MI LDC API

Version 2.06


1. 概述


1.1. 模块说明

镜头畸变矫正(Lens distortion correction),通过bin档的设置将画面内容进行拉直或者融合。


1.2. 流程框图

图1-1

注:32X32 为宽高对齐限制。


1.3. 关键字说明

  • bin档

    在发布包中包含libeptz.a 算法库文件, app通过调用算法接口,生成对应的bin文件, 以指针buffer形式送给MI_LDC。

  • channel

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

  • View/Block

    LDC根据bin中的mode配置,将画面分割成view,每一个view对应一个bin文件,view画面是由若干个block组成,block为LDC处理的最小单元。


2. API 参考


2.1. 功能模块API

表2-1

API名 功能
MI_LDC_CreateDevice 创建LDC device 设备
MI_LDC_DestroyDevice 销毁LDC device 设备
MI_LDC_CreateChannel 创建LDC channel 通道
MI_LDC_DestroyChannel 销毁LDC channel 通道
MI_LDC_StartChannel 启用LDC channel 通道
MI_LDC_StopChannel 禁用LDC channel 通道
MI_LDC_GetOutputPortAttr 获取LDC output 属性
MI_LDC_SetConfig 设置LDC config bin
MI_LDC_InitDev 初始化LDC设备
MI_LDC_DeInitDev 初始化LDC设备
MI_LDC_SetBatchViewConfig 设置一组LDC的配置

2.2. MI_LDC_CreateDevice

  • 描述

    创建一个LDC device设备。

  • 语法

    MI_S32 MI_LDC_CreateDevice(MI_LDC_DEV devId);
    
  • 参数

    表2-2

    参数名称 描述 输入/输出
    devId Device id号 输入
    eWorkMdoe 工作模式 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_ldc.h

    • 库文件:libmi_ldc.a

  • 注意

    目前只支持devId = 0;

  • 举例

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

        MI_LDC_DEV LdcDevid = 0;
    
        MI_LDC_CHN LdcChnId = 0;
    
        MI_U32 u32ViewNum=1;
    
        MI_U32 i=0;
    
        MI_LDC_CreateDevice (LdcDevid,);
    
        MI_LDC_CreateChannel (LdcDevid, LdcChnId);
    
        for(i=0; i\< u32ViewNum; i++)
    
        {
    
        MI_LDC_SetConfig(LdcDevid, LdcChnId,
        pstLDCChnattr->ldcBinBuffer[i], pstLDCChnattr->u32LdcBinSize[i]);
    
        free(pstLDCChnattr->ldcBinBuffer);
    
        }
    
        MI_LDC_StartChannel(LdcDevid, LdcChnId);
    
        /*销毁通道*/
    
        MI_LDC_StopChannel(LdcDevid, LdcChnId);
    
        MI_LDC_DestroyChannel(LdcDevid, LdcChnId);
    
        MI_LDC_DestroyDevice(LdcDevid);
    
  • 相关主题

    MI_LDC_DestroyDevice


2.3. MI_LDC_DestroyDevice

  • 描述

    销毁LDC device 设备。

  • 语法

    MI_S32 MI_LDC_DestroyDevice(MI_LDC_DEV devId);
    
  • 参数

    表2-3

    参数名称 描述 输入/输出
    devId Device id号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_ldc.h

    • 库文件:libmi_ldc.a

  • 注意

    目前只支持devId = 0;

  • 举例

    参见MI_LDC_CreateDevice 举例.

  • 相关主题

    MI_LDC_CreateDevice


2.4. MI_LDC_CreateChannel

  • 描述

    创建LDC channel 通道

  • 语法

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

    表2-4

    参数名称 描述 输入/输出
    devId Device id号 输入
    chnId Ldc Channel 号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_ldc.h

    • 库文件:libmi_ldc.a

  • 注意

    需在MI_LDC_CreateDevice之后调用。

  • 举例

    参见MI_LDC_CreateDevice 举例.

  • 相关主题

    MI_LDC_DestroyChannel


2.5. MI_LDC_DestroyChannel

  • 描述

    销毁LDC channel 通道

  • 语法

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

    表2-5

    参数名称 描述 输入/输出
    devId Device id号 输入
    chnId Ldc Channel 号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_ldc.h

    • 库文件:libmi_ldc.a

  • 举例

    参见MI_LDC_CreateDevice 举例.

  • 相关主题

    MI_LDC_CreateDevice


2.6. MI_LDC_StartChannel

  • 描述

    启用LDC channel 通道。

  • 语法

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

    表2-6

    参数名称 描述 输入/输出
    devId Device id号 输入
    chnId Ldc Channel 号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_ldc.h

    • 库文件:libmi_ldc.a

  • 注意

    Device和Channel 创建之后调用。

  • 举例

    参见MI_LDC_CreateDevice举例.

  • 相关主题

    MI_LDC_StopChannel


2.7. MI_LDC_StopChannel

  • 描述

    禁用LDC channel 通道。

  • 语法

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

    表2-7

    参数名称 描述 输入/输出
    devId Device id号 输入
    chnId Ldc Channel 号 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_ldc.h

    • 库文件:libmi_ldc.a

  • 举例

    参见MI_LDC_CreateDevice举例.

  • 相关主题

    MI_LDC_StartChannel


2.8. MI_LDC_GetOutputPortAttr

  • 描述

    获取LDC output 属性。

  • 语法

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

    表2-8

    参数名称 描述 输入/输出
    devId Device id号 输入
    chnId Ldc Channel 号 输入
    pstOutputAttr Output 属性 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_ldc.h

    • 库文件:libmi_ldc.a

  • 注意

    output信息是设置在bin档中,当后端需要知道input信息的时候,可以通过该接口获得。

  • 举例

    参见MI_LDC_CreateDevice 举例.


2.9. MI_LDC_SetConfig

  • 描述

    设置LDC config bin。

  • 语法

    MI_S32 MI_LDC_SetConfig(MI_LDC_DEV devId, MI_LDC_CHN chnId, void *pConfigAddr, MI_U32 u32Size);
    
  • 参数

    表2-9

    参数名称 描述 输入/输出
    devId Device id号 输入
    chnId Ldc Channel 号 输入
    pConfigAddr Config bin buffer 指针 输入
    u32Size Config bin buffer size 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_ldc.h

    • 库文件:libmi_ldc.a

  • 注意

    • api调用完之后才可以释放掉对应的bin buffer。

    • 每一个view对应一个ldc bin buffer, 一个channel可能会有多个view 窗口组成。

  • 举例

    • 初始化见MI_LDC_CreateDevice 举例.

    • 切换某一个view窗口的bin设置可以直接call 这个api设置

    • 切换mode或者view num 需要变化时流程如下:

      MI_LDC_StopChannel(LdcDevid, LdcChnId);
      
      for(i=0; i\< u32ViewNum; i++)
      
      {
      
          MI_LDC_SetConfig(LdcDevid, LdcChnId, pstLDCChnattr->ldcBinBuffer[i],
          pstLDCChnattr->u32LdcBinSize[i]);
      
          free(pstLDCChnattr->ldcBinBuffer);
      
      }
      
      MI_LDC_StartChannel(LdcDevid, LdcChnId);
      

2.10. MI_LDC_InitDev

  • 描述

    初始化LDC设备

  • 语法

    MI_S32 MI_LDC_InitDev(MI_LDC_InitParam_t *pstInitParam);
    
  • 参数

    表2-10

    参数名称 描述 输入/输出
    pstInitParam 设备初始化参数 输入
  • 返回值

    • MI_OK 成功。

    • 非MI_OK 失败,参照错误码。

  • 需求

    • 头文件:mi_ldc.h

    • 库文件:

  • 注意

    本接口必须和MI_LDC_DeInitDev成对使用,不可单独重复调用,否则返回失败。


2.11. MI_LDC_DeInitDev

  • 描述

    反初始化LDC设备

  • 语法

    MI_S32 MI_LDC_DeInitDev(void);
    
  • 返回值

    • MI_OK 成功。

    • 非MI_OK 失败,参照错误码

  • 需求

    • 头文件:mi_ldc.h

    • 库文件:

  • 注意

    • 此函数必须在初始化设备后调用,否则返回失败。

    • 本接口必须和MI_LDC_InitDev成对使用,不可单独重复调用,否则返回失败。


2.12.MI_LDC_SetBatchViewConfig

  • 描述

    LDC 的config bin的批量配置,可以用来动态切换LDC的模式。

  • 语法

    MI_S32 MI_LDC_SetBatchViewConfig(MI_LDC_DEV devId, MI_LDC_CHN chnId, MI_LDC_Config_t * pstCfg, MI_U32 u32CfgNum);
    
  • 参数

    参数名称 描述 输入/输出
    devId Device ID号。 输入
    chnId LDC Channel 号 输入
    pstCfg LDC Config结构体指针 输入
    u32CfgNum Config的数量 输入
  • 返回值

    • MI_OK 成功。

    • 非MI_OK 失败,参照错误码

  • 需求

    • 头文件:mi_ldc.h

    • 库文件:libmi_ldc.a

  • 注意

    • api调用完之后才可以释放掉对应的bin buffer。

    • 每一个view对应一个ldc bin buffer, 一个channel可能会有多个view 窗口组成。

  • 举例

    • 初始化见MI_LDC_CreateDevice 举例.

    • 切换模式可参考如下程序直接调用此api进行设置

      MI_LDC_Config_t * pstLdcConfig =
      (MI_LDC_Config_t *)malloc(u32ViewNum * sizeof(MI_LDC_Config_t));
      
      for(i=0; i< u32ViewNum; i++)
      {
          pstLdcConfig[i]. pCfgAddr = pstLDCChnattr->ldcBinBuffer[i]
          pstLdcConfig[i]. u32CfgSize = pstLDCChnattr->u32LdcBinSize[i]
      }
      
      MI_LDC_SetBatchViewConfig(LdcDevid, LdcChnId, pstLdcConfig, u32ViewNum);
      free(pstLdcConfig);
      

3. ldc 数据类型


3.1. 数据类型定义

表3-1

数据类型 定义
MI_LDC_DEV 定义LDC device的类型
MI_LDC_CHN 定义LDC channel的类型
MI_LDC_OutputPortAttr_t 定义LDC output 端口属性
MI_LDC_InitParam_t 定义LDC设备初始化参数
MI_LDC_Config_t 定义LDC 配置的类型

3.2. MI_LDC_DEV

  • 说明

    定义LDC device的类型

  • 语法

    typedef MI_U32 MI_LDC_DEV;
    

3.3. MI_LDC_CHN

  • 说明

    定义LDC channel的类型

  • 语法

    typedef MI_U32 MI_LDC_CHN;
    

3.4. MI_LDC_OutputPortAttr_t

  • 说明

    定义LDC output 端口属性。

  • 语法

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

    MI_LDC_GetOutputPortAttr


3.5. MI_LDC_InitParam_t

  • 说明

    LDC设备初始化参数。

  • 定义

    typedef struct MI_LDC_InitParam_s
    
    {
    
        MI_U32 u32DevId;
    
        MI_U8 *u8Data;
    
    } MI_LDC_InitParam_t;
    
  • 成员

    表3-2

    成员名称 描述
    u32DevId 设备ID
    u8Data 数据buffer指针
  • 相关数据类型及接口

    MI_LDC_InitDev


3.6. MI_LDC_Config_t

  • 说明

    LDC 配置的结构体。

  • 定义

    typedef struct MI_LDC_Config_s
    
    {
    
        void *pCfgAddr;
    
        MI_U32 u32CfgSize;
    
    } MI_LDC_Config_t;
    
  • 成员

    成员名称 描述
    pCfgAddr 指向Ldc 配置的指针
    u32CfgSize 当前配置的大小
  • 相关数据类型及接口

    MI_LDC_SetBatchViewConfig


4. 错误码

表4-1 LDC API错误码

错误代码 宏定义 描述
0xA0172003 MI_ERR_LDC_ILLEGAL_PARAM 输入参数非法
0xA0172006 MI_ERR_LDC_NULL_PTR 输入参数空指针错误
0xA0172012 MI_ERR_LDC_BUSY Chanel 系统忙
0xA017201F MI_ERR_LDC_FAIL 操作执行失败
0xA0172001 MI_ERR_LDC_INVALID_DEVID 无效device id
0xA0172008 MI_ERR_LDC_NOT_SUPPORT 操作不支持
0xA0172016 MI_ERR_LDC_MOD_INITED Module 已经初始化
0xA0172015 MI_ERR_LDC_MOD_NOT_INIT Module 没有初始化
0xA0172300 MI_ERR_LDC_DEV_CREATED Device 已经创建
0xA0172301 MI_ERR_LDC_DEV_NOT_CREATE Device 还没有创建
0xA0172302 MI_ERR_LDC_DEV_NOT_DESTROY Device 没有被销毁
0xA0172303 MI_ERR_LDC_CHN_CREATED Channel 已经创建
0xA0172304 MI_ERR_LDC_CHN_NOT_CREATE Channel 还没有创建
0xA0172305 MI_ERR_LDC_CHN_NOT_STOP Channel 没有被禁用
0xA0172306 MI_ERR_LDC_CHN_NOT_DESTROY Channel 没有被销毁
0xA0172018 MI_ERR_LDC_PORT_NOT_DISABLE Port 没有失能
0xA0172307 MI_ERR_LDC_PORT_NOT_UNBIND Port 没有解绑