MI IQSERVER API


1. 概述


1.1. 模块说明

IQSERVER(Image Quality tuning Server)图像质量调校服务,用来完成调校工具(IQTool)和开发板之间的数据通信,包括ISP参数设置,获取图像,上传/下载相关文件等功能。


1.2. 流程框图


1.3. 关键字说明

  • ISP

    Image Signal Processing 图像信号处理单元,负责图像降噪/颜色渲染/亮度调整等功能。

  • VPE

    Video Process Engine图像处理引擎,负责对一幅输入的图像进行图像质量调整。

  • VENC

    Video Encoder 视频编码器,负责将YUV序列编码成H264/H265/Jpeg等格式的视频流。


2. API 参考


2.1. 功能模块API

该功能模块提供以下 API:

API名 功能
MI_IQSERVER_Open 启动IQ server
MI_IQSERVER_Close 关闭IQ server
MI_IQSERVER_SetDataPath 设置IQ server数据存储路径
MI_IQSERVER_SetCustFunc 设置IQ server的可执行自定义函数

2.2. MI_IQSERVER_Open

  • 功能

    调用此接口启动IQ server。

  • 语法

    MI_S32 MI_IQSERVER_Open(MI_U16 width, MI_U16 height, MI_S32 vpeChn);
    
  • 形参

    参数名称 描述 输入/输出
    width Sensor输出分辨率宽度。 输入
    height Sensor输出分辨率高度 输入
    vpeChn vpe通道号 输入
  • 返回值

    MI_IQSERVER_OK, 启动IQ server成功。

    返回值

    其它, 启动失败,详情参照*错误码*。

  • 依赖

    • 头文件:mi_iqserver.h

    • 库文件:libmi_iqserver.a

  • 注意

    • 根据vpe通道号创建IQ server,IQ server目前只能创建一个。

    • Width和height赋0时,IQ server会主动获取sensor分辨率。

    • 创建之后,即可以用IQ Tool连接调试。

  • 举例

    /*declaration*/
    
    MI_S32 s32Ret = 0;
    
    /* open IQSERVER*/
    
    s32Ret = MI_IQSERVER_Open(1920, 1080, 0);
    
    if (MI_IQSERVER_OK != s32Ret)
    
    {
    
        Printf(“open iqserver error:%x\n, s32Ret);
    
        return s32Ret;
    
    }
    
  • 相关主题

    MI_IQSERVER_Close


2.3. MI_IQSERVER_Close

  • 功能

    调用此接口关闭IQ server。

  • 语法

    MI_ S32 MI_IQSERVER_Close();
    
  • 形参

    参数名称 描述 输入/输出
  • 返回值

    MI_IQSERVER_OK,成功关闭IQ server。

    返回值

    其它, 关闭IQ server失败,详情参照错误码

  • 依赖

    • 头文件:mi_iqserver.h

    • 库文件:libmi_iqserver.a

  • 注意

    调用MI_IQSERVER_OpenMI_IQSERVER_Close 需要对应。

  • 举例

    /*declaration*/
    
        MI_S32 s32Ret = 0;
    
    /* close IQSERVER*/
    
    s32Ret = MI_IQSERVER_Close();
    
    if (MI_IQSERVER_OK != s32Ret)
    
    {
    
    Printf(“close iqserver error:%x\n, s32Ret);
    
    return s32Ret;
    
    }
    
  • 相关主题

    MI_IQSERVER_Open


2.4. MI_IQSERVER_SetDataPath

  • 功能

    设置IQ server的数据存储路径。

  • 语法

    MI_S32 MI_IQSERVER_SetDataPath(char* path);
    
  • 形参

    参数名称 描述 输入/输出
    path 路径字符串指针,末尾是\0。 输入
  • 返回值

    MI_IQSERVER_OK,成功。

    返回值

    其它, 设置失败,详情参照错误码

  • 依赖

    • 头文件:mi_iqserver.h

    • 库文件:libmi_iqserver.a

  • 注意

    • 可以在MI_IQSERVER_Open 之前调用。

    • 调用前,请确认路径是否可访问,路径内是否有IQ server需要的数据资料。

    • IQ server通常需要读取的资料有:isp_api.xml(用于IQ Tool使用)。

  • 举例

    /*declaration*/
    
        MI_S32 s32Ret = 0;
    
        char *data_path = /customer/iqconfig/;
    
    /* set IQSERVER data path*/
    
    s32Ret = MI_IQSERVER_SetDataPath(data_path);
    
    if (MI_IQSERVER_OK != s32Ret)
    
    {
    
        Printf(“set iqserver data path error:%x\n, s32Ret);
    
        return s32Ret;
    
        }
    
  • 相关主题

    无。


2.5. MI_IQSERVER_SetCustFunc

  • 功能

    设置IQ server的可执行的自定义函数,满足用户通过IQ Server调用自定义接口函数的目的。

  • 语法

    MI_S32 MI_IQSERVER_SetCustFunc(MI_S32(* func)(MI_U16 data_type, MI_U32     length, MI_U8 * data));
    
  • 形参

    参数名称 描述 输入/输出
    func 用户自定义的函数指针 输入
  • 返回值

    MI_IQSERVER_OK,成功。

    返回值

    其它, 设置失败,详情参照错误码

  • 依赖

    • 头文件:mi_iqserver.h

    • 库文件:libmi_iqserver.a

  • 注意

    • 使用前,需要客户先实现自定义的func函数。函数参数如下:

      1. datatype: 表示data的类型,用户自定义,用来区分不同的data。

      2. length: 表示data的长度,IQ Tool会识别并自动填入该值。

      3. data: 表示data地址。

      在func内部可根据上述参数,做相关处理。

    • 可以添加用户自定义的函数功能实现, IQ server内部获取IQ Tool传入的数据,再调用客户传进来的函数func,这样在func里面就可以获取到IQ Tool的数据,实现客制化的功能。

      比如下面两项自定义功能:

      1. 通过IQ Tool传入固件,在func里面获取固件,然后烧写flash。

      2. 通过IQ Tool传入IR开关选项,在func里面切换IR。

    • 调用前,请确认函数指针func是否可执行。

    • Data_type和data数据通过IQ tool传入,length表示data的长度。

    • Data_type可以用来区分data的类型,这样func可以针对不同的类型实现不同的功能。

  • 举例

    /*declaration*/
    
        MI_S32 s32Ret = 0;
    
        MI_S32 sample_func(MI_U16 data_type, MI_U32 length, MI_U8 *data)
    
        {
    
            printf("call MI_IQSERVER_SetCustFunc() success\n");
    
            printf(“data_type is %d, length:%u, data addr:%p\n, data_type, length,
            data);
    
            //do something
    
            return MI_IQSERVER_OK;
    
        }
    
    /* set IQSERVER custom function*/
    
    s32Ret = MI_IQSERVER_SetCustFunc(sample_func);
    
    if (MI_IQSERVER_OK != s32Ret)
    
    {
    
        Printf(“set iqserver cust func error:%x\n, s32Ret);
    
        return s32Ret;
    
        }
    
  • 相关主题

    无。


3. 错误码

IQSERVER API 错误码如下所示。

错误代码 宏定义 描述
0x0 MI_IQSERVER_OK 成功
0x1 MI_ERR_IQSERVER_FAIL 失败
0x2 MI_ERR_IQSERVER_NULL_PTR 空指针异常
0x3 MI_ERR_IQSERVER_NO_BUFF Buff不够