MI VIF API

Version 3.0


1. 概述


1.1. 模块说明

视频输入(VIF)实现启用视频输入设备、视频输入通道、绑定视频输入通道等功能。


1.2. 流程框图

图 1 1:Tiramisu框图

注意:

  • 16个Dev中总共只有8个Dev可以用。

  • mipi接口4个sensor 分别用到:

    linear mode: dev0/dev4/dev8/dev12, hdr frame mode: dev0/1, dev⅘, dev8/9, dev12/13。

    hdr reatlime mode: dev0/dev4

  • BT656 接口2个sensor分别用到:sensor pad0/2

  • 每个device 都只有一个channel Id0, 通过MI_SYS和后端绑定时只能用channel id0

| PortId | 输入Pixel | 输出Pixel | Crop | scaling | 输出形式 | |--------|---------------|----------|----------|---------------| | 0 | 按照sensor格式输入 | 1. 按照sensor格式输出;
2. 将YUV422格式转成12bit bayer 格式输出。 | 不支持 | 不支持 | 1. Dram 输出。
2. 一个Device支持sensor 格式 realtime 输出到MI_ISP,DeviceId 任意。
3. 一个Device支持YUV422格式realtime 输出到MI_SCL,DeviceId 任意. | | 1 | 只支持YUV422格式输入 | 只支持12bit bayer格式输出 | 支持 | 只支持scaling down, height 有做scaling down 时, width 最大等于960。 | 只支持Dram 输出。 |


1.3. 关键字说明

  • Group

    群组,一个sensor pad中有可能会混合多种信号,所以一个sensor pad 需要一个group来对应接收。

  • Dev

    Group 中处理单独一种信号的设备。

  • Port

    Dev 上的输出端口。


2. API 参考


2.1. 功能模块API

表 2‑1:API参考

API名 功能
MI_VIF_CreateDevGroup 创建Device 对应的Group
MI_VIF_CreateDevGroupExt 创建Group 并且设置一些额外属性
MI_VIF_DestroyDevGroup 销毁Group
MI_VIF_GetDevGroupAttr 获取Group 的属性
MI_VIF_SetDevAttr 设置设备属性
MI_VIF_GetDevAttr 获取设备属性
MI_VIF_EnableDev 启用 设备
MI_VIF_DisableDev 禁用设备
MI_VIF_GetDevStatus 获取设备的状态
MI_VIF_SetOutputPortAttr 设置output 端口属性
MI_VIF_GetOutputPortAttr 获取output 端口属性
MI_VIF_EnableOutputPort 启用output 端口Port
MI_VIF_DisableOutputPort 禁用output 端口
MI_VIF_Query 查询 VIF 通道的Port中断计数、平均帧率等信息
MI_VIF_CallBackTask_Register 向 VIF 注册回调接口
MI_VIF_CallBackTask_UnRegister 向 VIF 反注册回调接口

2.2. MI_VIF_CreateDevGroup

  • 功能

    创建Device 对应的Group

  • 语法

    MI_S32 MI_VIF_CreateDevGroup(MI_VIF_GROUP GroupId, MI_VIF_GroupAttr_t *pstGroupAttr)
    
  • 形参

    参数名称 描述 输入/输出
    GroupId Group ID 输入
    pstGroupAttr Group属性,静态属性。 输入
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

    Group Id 包含Device Id
    0 Device0~3
    1 Device4~7
    2 Device8~11
    3 Device12~15
  • 举例

    #define ST_MAX_VIF_DEV_PERGROUP (4)
    #define ST_MAX_VIF_OUTPORT_NUM (2)
    

    MI_VIF 初始化流程:

    MI_S32 ST_VifModuleInit(MI_VIF_GROUP GroupId)
    {
        MI_VIF_DEV vifDev =0;
        MI_U8 vifDevIdPerGroup = 0;
        MI_VIF_PORT vifPort = 0;
        ST_VifGroupAttr_t *pstVifGroupAttr = &gstVifModule.stVifGroupAttr[GroupId];
        MI_SNR_PAD_ID_e eSnrPadId = (MI_SNR_PAD_ID_e)pstVifGroupAttr->stBindSensor.eSensorPadID;
        MI_U32 u32PlaneId = pstVifGroupAttr->stBindSensor.u32PlaneID[0];
    
        MI_SNR_PADInfo_t  stPad0Info;
        MI_SNR_PlaneInfo_t stSnrPlane0Info;
        memset(&stPad0Info, 0x0, sizeof(MI_SNR_PADInfo_t));
        memset(&stSnrPlane0Info, 0x0, sizeof(MI_SNR_PlaneInfo_t));
    
        MI_VIF_GroupAttr_t stGroupAttr;
        memset(&stGroupAttr, 0x0, sizeof(MI_VIF_GroupAttr_t));
    
        STCHECKRESULT(MI_SNR_GetPadInfo(eSnrPadId, &stPad0Info));
        STCHECKRESULT(MI_SNR_GetPlaneInfo(eSnrPadId, u32PlaneId, &stSnrPlane0Info));
    
        stGroupAttr.eIntfMode = E_MI_VIF_MODE_MIPI;
        stGroupAttr.eWorkMode = E_MI_VIF_WORK_MODE_1MULTIPLEX;
        stGroupAttr.eHDRType = E_MI_VIF_HDR_TYPE_OFF;
        if(stGroupAttr.eIntfMode == E_MI_VIF_MODE_BT656)
            stGroupAttr.eClkEdge = (MI_VIF_ClkEdge_e)stPad0Info.unIntfAttr.stBt656Attr.eClkEdge;
        else
            stGroupAttr.eClkEdge = E_MI_VIF_CLK_EDGE_DOUBLE;
    
        STCHECKRESULT(MI_VIF_CreateDevGroup(GroupId, &stGroupAttr));
    
        for(vifDevIdPerGroup=0; vifDevIdPerGroup< ST_MAX_VIF_DEV_PERGROUP; vifDevIdPerGroup++)
        {
            ST_VifDevAttr_t *pstVifDevAttr = &pstVifGroupAttr->stVifDevAttr[vifDevIdPerGroup];
            MI_VIF_DevAttr_t stVifDevAttr;
            memset(&stVifDevAttr, 0x0, sizeof(MI_VIF_DevAttr_t));
    
            vifDev = GroupId*ST_MAX_VIF_DEV_PERGROUP+vifDevIdPerGroup;
            stVifDevAttr.stInputRect.u16X = stSnrPlane0Info.stCapRect.u16X;
            stVifDevAttr.stInputRect.u16Y = stSnrPlane0Info.stCapRect.u16Y;
            stVifDevAttr.stInputRect.u16Width = stSnrPlane0Info.stCapRect.u16Width;
            stVifDevAttr.stInputRect.u16Height = stSnrPlane0Info.stCapRect.u16Height;
            if(stSnrPlane0Info.eBayerId >= E_MI_SYS_PIXEL_BAYERID_MAX)
            {
                stVifDevAttr.eInputPixel = stSnrPlane0Info.ePixel;
            }
            else
                stVifDevAttr.eInputPixel = (MI_SYS_PixelFormat_e)RGB_BAYER_PIXEL(stSnrPlane0Info.ePixPrecision, stSnrPlane0Info.eBayerId);
    
            printf("setchnportattr (%d,%d,%d,%d) \n", stVifDevAttr.stInputRect.u16X, stVifDevAttr.stInputRect.u16Y, stVifDevAttr.stInputRect.u16Width, stVifDevAttr.stInputRect.u16Height);
            STCHECKRESULT(MI_VIF_SetDevAttr(vifDev, &stVifDevAttr));
            STCHECKRESULT(MI_VIF_EnableDev(vifDev));
    
            for(vifPort=0; vifPort< ST_MAX_VIF_OUTPORT_NUM; vifPort++)
            {
                ST_VifPortAttr_t *pstVifPortAttr = &pstVifDevAttr->stVifOutPortAttr[vifPort];
                MI_VIF_OutputPortAttr_t stVifPortInfo;
                memset(&stVifPortInfo, 0, sizeof(MI_VIF_OutputPortAttr_t));
    
                stVifPortInfo.stCapRect.u16X = stSnrPlane0Info.stCapRect.u16X;
                stVifPortInfo.stCapRect.u16Y = stSnrPlane0Info.stCapRect.u16Y;
                stVifPortInfo.stCapRect.u16Width =  stSnrPlane0Info.stCapRect.u16Width;
                stVifPortInfo.stCapRect.u16Height = stSnrPlane0Info.stCapRect.u16Height;
                stVifPortInfo.stDestSize.u16Width = stSnrPlane0Info.stCapRect.u16Width;
                stVifPortInfo.stDestSize.u16Height = stSnrPlane0Info.stCapRect.u16Height;
                printf("sensor bayerid %d, bit mode %d \n", stSnrPlane0Info.eBayerId, stSnrPlane0Info.ePixPrecision);
                if(stSnrPlane0Info.eBayerId >= E_MI_SYS_PIXEL_BAYERID_MAX)
                {
                    stVifPortInfo.ePixFormat = stSnrPlane0Info.ePixel;
                }
                else
                    stVifPortInfo.ePixFormat = (MI_SYS_PixelFormat_e)RGB_BAYER_PIXEL(stSnrPlane0Info.ePixPrecision, stSnrPlane0Info.eBayerId);
                stVifPortInfo.eFrameRate = E_MI_VIF_FRAMERATE_FULL;
    
                STCHECKRESULT(MI_VIF_SetOutputPortAttr(vifDev, vifPort, &stVifPortInfo));
                STCHECKRESULT(MI_VIF_EnableOutputPort(vifDev, vifPort));
            }
        }
        return MI_SUCCESS;
    }
    

    MI_VIF 去初始化流程:

    MI_S32 ST_VifModuleUnInit(MI_VIF_GROUP GroupId)
    {
        MI_VIF_DEV vifDev = 0;
        MI_U32 vifDevIdPerGroup =0;
        MI_VIF_PORT vifPort=0;
        ST_VifGroupAttr_t  *pstVifGroupAttr = &gstVifModule.stVifGroupAttr[GroupId];
        for(vifDevIdPerGroup=0; vifDevIdPerGroup< ST_MAX_VIF_DEV_PERGROUP; vifDevIdPerGroup++)
        {
            ST_VifDevAttr_t *pstDevAttr = &pstVifGroupAttr->stVifDevAttr[vifDevIdPerGroup];
            vifDev = GroupId*ST_MAX_VIF_DEV_PERGROUP+vifDevIdPerGroup;
    
            for(vifPort=0; vifPort< ST_MAX_VIF_OUTPORT_NUM; vifPort++)
            {
                ST_VifPortAttr_t *pstVifOutputPortAttr = &pstDevAttr->stVifOutPortAttr[vifPort];
                STCHECKRESULT(MI_VIF_DisableOutputPort(vifDev, vifPort));
            }
            STCHECKRESULT(MI_VIF_DisableDev(vifDev));
        }
    
        STCHECKRESULT(MI_VIF_DestroyDevGroup(GroupId));
    
        return MI_SUCCESS;
    }
    
  • 相关主题

    MI_VIF_DestroyDevGroup


2.3. MI_VIF_CreateDevGroupExt

  • 功能

    创建Group 并且设置一些额外属性。

  • 语法

    MI_S32 MI_VIF_CreateDevGroupExt(MI_VIF_GROUP GroupId, MI_VIF_GroupAttr_t *pstGroupAttr, MI_VIF_GroupExtAttr_t *pstGroupOptionExtAttr)
    
  • 形参

    参数名称 描述 输入/输出
    GroupId Group ID 输入
    pstGroupAttr Group 常规属性,静态属性 输入
    pstGroupOptionExtAttr Group 额外属性 输入
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

    VIF Group 和sensor Pad, Device和PlaneId 有默认的对应关系, 如果需要改变这个关系, 可以通过这个api 设置Group 接收对应Sensor Pad信号, Device 接收对应Plane信号。

    在调用 MI_SNR_SetPlaneMode 后VIF Group 和sensor Pad, Device和PlaneId对应关系会重置到默认情况,所以应在 MI_SNR_SetPlaneMode 后调用MI_VIF_CreateDevGroupExt 。

    Tiramisu系列芯片不支持改Group 和sensor pad的对应关系。

  • 相关主题

    MI_VIF_DestroyDevGroup


2.4. MI_VIF_DestroyDevGroup

  • 功能

    销毁设备对应的Group。

  • 语法

    MI_S32 MI_VIF_DestroyDevGroup(MI_VIF_GROUP GroupId)
    
  • 形参

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

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

    需要先使用MI_VIF_DisableOutputPort 禁用掉device 上所有输出端口,再使用MI_VIF_DisableDev 禁用掉group 上所有device。

  • 举例

    请参见MI_VIF_CreateDevGroup的举例。

  • 相关主题

    MI_VIF_CreateDevGroup


2.5. MI_VIF_GetDevGroupAttr

  • 功能

    获取Group 的属性。

  • 语法

    MI_S32 MI_VIF_GetDevGroupAttr(MI_VIF_GROUP GroupId, MI_VIF_GroupAttr_t *pstGroupAttr)
    
  • 形参

    参数名称 描述 输入/输出
    GroupId Group ID 输入
    pstGroupAttr Group属性 输出
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 相关主题

    MI_VIF_CreateDevGroup


2.6. MI_VIF_SetDevAttr

  • 功能

    设置 VIF 设备属性。

  • 语法

    MI_S32 MI_VIF_SetDevAttr(MI_VIF_DEV DevId, MI_VIF_DevAttr_t *pstDevAttr)
    
  • 形参

    参数名称 描述 输入/输出
    DevId VIF 设备号。 输入
    pstDevAttr VIF 设备属性指针,静态属性。 输入
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

    • 在调用前要保证 VIF 设备处于禁用状态。如果 VIF 设备已处于使能状态,可以使用MI_VIF_DisableDev 来禁用设备。

    • 参数 pstDevAttr 主要用来配置指定 VIF 设备的视频输入格式。

  • 举例

    请参见MI_VIF_CreateDevGroup的举例。

  • 相关主题

    MI_VIF_GetDevAttr


2.7. MI_VIF_GetDevAttr

  • 功能

    获取 VIF 设备属性。

  • 语法

    MI_S32 MI_VIF_GetDevAttr(MI_VIF_DEV DevId, MI_VIF_DevAttr_t *pstDevAttr)
    
  • 形参

    参数名称 描述 输入/输出
    DevId VIF 设备号。 输入
    pstDevAttr VIF 设备属性指针。 输出
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 相关主题

    MI_VIF_SetDevAttr


2.8. MI_VIF_EnableDev

  • 功能

    启用 VIF 设备。

  • 语法

    MI_S32 MI_VIF_EnableDev(MI_VIF_DEV DevId);
    
  • 形参

    参数名称 描述 输入/输出
    DevId VIF 设备号。 输入
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

    • 启用前必须已经设置设备属性,否则返回失败。

    • 可重复启用,不返回失败。

  • 举例

    请参见MI_VIF_CreateDevGroup的举例。

  • 相关主题

    MI_VIF_DisableDev


2.9. MI_VIF_DisableDev

  • 功能

    禁用 VIF 设备。

  • 语法

    MI_S32 MI_VIF_DisableDev(MI_VIF_DEV DevId);
    
  • 形参

    参数名称 描述 输入/输出
    DevId VIF 设备号。 输入
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

    • 必须先禁用所有设备上的输出端口后,才能禁用 VIF 设备。

    • 可重复禁用,不返回失败。

  • 举例

    请参见MI_VIF_CreateDevGroup的举例。

  • 相关主题

    MI_VIF_EnableDev


2.10. MI_VIF_GetDevStatus

  • 功能

    获取设备的状态。

  • 语法

    MI_S32 MI_VIF_GetDevStatus(MI_VIF_DEV DevId, MI_VIF_DevStatus_t *pstVifDevStatus)
    
  • 形参

    参数名称 描述 输入/输出
    DevId VIF 设备号 输入
    pstVifDevStatus 设备状态 输出
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a


2.11. MI_VIF_SetOutputPortAttr

  • 功能

    设置 VIF 输出端口属性。

  • 语法

    MI_S32 MI_VIF_SetOutputPortAttr(MI_VIF_DEV DevId, MI_VIF_PORT PortId, MI_VIF_OutputPortAttr_t *pstAttr);
    
  • 形参

    参数名称 描述 输入/输出
    DevId VIF 通道号。 输入
    PortId Port号 输入
    pstAttr VIF 通道Port属性指针。 输入
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

    • 默认情况下,使用 MI_VIF_SetOutputPortAttr 接口的目的是设置端口属性,如CapSize、DestSize、FrameRate等等。

    • Tiramisu 系列芯片:port0不支持crop和scaling, 所以cap 和dest size 必须和MI_VIF_SetDevAttr时的input size 相等;port1 的输入只支持YUV格式, 所以只有YUVsensor 才可以使用port1, 支持crop, 和scaling down, 输出只支持12bit bayer格式。

    • Port1 height 有做scaling down 时, 输出width 最大等于960。

  • 举例

    请参见MI_VIF_CreateDevGroup的举例。

  • 相关主题

    MI_VIF_GetOutputPortAttr


2.12. MI_VIF_GetOutputPortAttr

  • 功能

    获取 VIF 输出端口属性。

  • 语法

    MI_S32 MI_VIF_GetOutputPortAttr(MI_VIF_DEV DevId, MI_VIF_PORT PortId, MI_VIF_OutputPortAttr_t *pstAttr)
    
  • 形参

    参数名称 描述 输入/输出
    DevId VIF 通道号。 输入
    PortId Port号。 输入
    pstAttr VIF 通道Port属性指针。 输出
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 相关主题

    MI_VIF_SetOutputPortAttr


2.13. MI_VIF_EnableOutputPort

  • 功能

    启用 VIF输出端口。

  • 语法

    MI_S32 MI_VIF_EnableOutputPort(MI_VIF_DEV DevId, MI_VIF_PORT PortId)
    
  • 形参

    参数名称 描述 输入/输出
    DevId VIF 设备号 输入
    PortId Port号 输入
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

    • 必须先设置通道属性,且通道所绑定的 VIF 设备必须使能。

    • 可重复启用 VIF 通道,不返回失败。

  • 举例

    请参见 MI_VIF_SetDevAttr 的举例。

  • 相关主题

    MI_VIF_DisableOutputPort


2.14. MI_VIF_DisableOutputPort

  • 功能

    禁用 VIF 输出端口。

  • 语法

    MI_S32 MI_VIF_DisableOutputPort(MI_VIF_DEV DevId, MI_VIF_PORT PortId)
    
  • 形参

    参数名称 描述 输入/输出
    DevId VIF 通道号。 输入
    PortId Port号 输入
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

    • 禁用 VIF 通道Port后,此 VIF 通道Port即停止采集视频输入数据,如果已经绑定后端,则后端不会再接收到视频图像。

    • 可重复禁用 VIF 通道Port,不返回失败。

  • 举例

    请参见MI_VIF_CreateDevGroup的举例。

  • 相关主题

    MI_VIF_EnableOutputPort


2.15. MI_VIF_Query

  • 功能

    查询 VIF 通道的中断计数、平均帧率等信息。

  • 语法

    MI_S32 MI_VIF_Query(MI_VIF_DEV DevId, MI_VIF_PORT PortId, MI_VIF_DevPortStat_t *pstStat)
    
  • 形参

    参数名称 描述 输入/输出
    DevId VIF 通道号。 输入
    PortId Port口 输入
    pstStat 通道信息结构体指针。 输出
  • 返回值

    • MI_OK 成功。

    • 非0 失败,详情参照错误码

  • 依赖

    • 头文件:mi_vif_datatype.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

    • 该接口可查询中断计数、通道使能状态、平均帧率、中断丢失数、获取 VB 失败次数、图像宽高等信息。

    • 通过该接口获取到的帧率是每 1 秒钟的平均帧率,即 VIF 会每隔一秒统计一次平均帧率,该值并不精确,会有些波动。

    • 用户可通过该接口查询中断丢失数,如果该数值一直在增加,说明 VIF 工作出现异常。


2.16. MI_VIF_CallBackTask_Register

  • 描述

    向VIF注册回调接口。

  • 语法

    MI_S32 MI_VIF_CallBackTask_Register(MI_VIF_DEV DevId, MI_VIF_CallBackParam_t *pstCallBackParam);
    
  • 参数

    参数名称 描述 输入/输出
    DevId VIF Chn ID 输入
    pstCallBackParam 回调参数 输入
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

  • 举例

    MI_S32 _mi_vif_framestart1(MI_U64 u64Data)
    {
        DBG_ERR("DATA %llu \n", u64Data);
        return 0;
    }
    MI_S32 _mi_vif_framestart2(MI_U64 u64Data)
    {
        DBG_ERR("DATA %llu \n", u64Data);
        return 0;
    }
    
    static MS_S32 _mi_vif_testRegVifCallback(void)
    {
        MI_VIF_CallBackParam_t stCallBackParam1;
        MI_VIF_CallBackParam_t stCallBackParam2;
        MI_VIF_DEV u32DevId = 0;
        memset(&stCallBackParam1, 0x0, sizeof(MI_VIF_CallBackParam_t));
        memset(&stCallBackParam2, 0x0, sizeof(MI_VIF_CallBackParam_t));
        stCallBackParam1.eCallBackMode = E_MI_VIF_CALLBACK_ISR;
        stCallBackParam1.eIrqType = E_MI_VIF_IRQ_FRAMESTART;
        stCallBackParam1.pfnCallBackFunc = _mi_vif_framestart1;
        stCallBackParam1.u64Data = 11;
        MI_VIF_CallBackTask_Register(u32DevId,&stCallBackParam1);
        stCallBackParam2.eCallBackMode = E_MI_VIF_CALLBACK_ISR;
        stCallBackParam2.eIrqType = E_MI_VIF_IRQ_FRAMESTART;
        stCallBackParam2.pfnCallBackFunc = _mi_vif_framestart2;
        stCallBackParam2.u64Data = 22;
        MI_VIF_CallBackTask_Register(u32DevId,&stCallBackParam2);
        return 0;
    }
    static MS_S32 _mi_vif_testUnRegVifCallback(void)
    {
        MI_VIF_CallBackParam_t stCallBackParam1;
        MI_VIF_CallBackParam_t stCallBackParam2;
    
        MI_VIF_DEV u32DevId = 0;
        memset(&stCallBackParam1, 0x0, sizeof(MI_VIF_CallBackParam_t));
        memset(&stCallBackParam1, 0x0, sizeof(MI_VIF_CallBackParam_t));
        stCallBackParam1.eCallBackMode = E_MI_VIF_CALLBACK_ISR;
        stCallBackParam1.eIrqType = E_MI_VIF_IRQ_FRAMESTART;
        stCallBackParam1.pfnCallBackFunc = _mi_vif_framestart1;
        stCallBackParam1.u64Data = 33;
        MI_VIF_CallBackTask_UnRegister(u32DevId,&stCallBackParam1);
        stCallBackParam2.eCallBackMode = E_MI_VIF_CALLBACK_ISR;
        stCallBackParam2.eIrqType = E_MI_VIF_IRQ_FRAMESTART;
        stCallBackParam2.pfnCallBackFunc = _mi_vif_framestart2;
        stCallBackParam2.u64Data = 44;
        MI_VIF_CallBackTask_UnRegister(u32DevId,&stCallBackParam2);
        return 0;
    }
    
  • 相关主题

    MI_VIF_CallBackTask_UnRegister


2.17. MI_VIF_CallBackTask_UnRegister

  • 描述

    向VIF反注册回调接口。

  • 语法

    MI_S32 MI_VIF_CallBackTask_UnRegister(MI_VIF_DEV DevId, MI_VIF_CallBackParam_t *pstCallBackParam);
    
  • 参数

    参数名称 描述 输入/输出
    DevId VIF Chn ID 输入
    pstCallBackParam 回调参数 输入
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_vif.h

    • 库文件:libmi_vif.a

  • 注意

  • 举例

    MI_VIF_CallBackTask_Register举例

  • 相关主题

    MI_VIF_CallBackTask_Register


3. VIF 数据类型


3.1. 数据类型定义

表 3‑1:VIF 数据类型

数据类型 描述
MI_VIF_GROUP 定义设备群组Id
MI_VIF_IntfMode_e 定义视频输入设备的接口模式
MI_VIF_WorkMode_e 定义视频设备的复合工作模式
MI_VIF_FrameRate_e 定义视频设备输出fps和输入fps的关系
MI_VIF_ClkEdge_e 定义视频设备接收的时钟类型
MI_VIF_HDRType_e 定义视频设备HDR 类型
MI_VIF_MclkSource_e 定义给Sensor 输入驱动clk 类型
MI_VIF_GroupIdMask_e 定义设备群组mask
MI_VIF_SNRPad_e 定义 SensorPad Id
MI_VIF_GroupAttr_t 定义设备群组属性
MI_VIF_GroupExtAttr_t 定义设备群组额外属性
MI_VIF_DevAttr_t 定义视频输入设备的属性。
MI_VIF_OutputPortAttr_t 定义VIF 输出端口属性。
MI_VIF_DevPortStat_t 定义VIF输出端口信息结构体
MI_VIF_DevStatus_t 定义VIF设备当前状态
MI_VIF_CALLBK_FUNC 定义回调函数类型
MI_VIF_CallBackMode_e 定义回调模式
MI_VIF_IrqType_e 定义硬件中断类型
MI_VIF_CallBackParam_t 定义回调参数

3.2. MI_VIF_GROUP

  • 说明

    定义设备群组ID。

  • 定义

    typedef MI_U32 MI_VIF_GROUP;
    
  • 相关数据类型及接口

    MI_VIF_CreateDevGroup


3.3. MI_VIF_IntfMode_e

  • 说明

    定义视频设备的接口模式。

  • 定义

        typedef enum
    
        {
    
            E_MI_VIF_MODE_BT656 = 0,
    
            E_MI_VIF_MODE_DIGITAL_CAMERA,
    
            E_MI_VIF_MODE_BT1120_STANDARD,
    
            E_MI_VIF_MODE_BT1120_INTERLEAVED,
    
            E_MI_VIF_MODE_MIPI
    
            E_MI_VIF_MODE_NUM
    
        } MI_VIF_IntfMode_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_MODE_BT656 输入数据的协议符合标准 BT.656 协议,端口数据输入模式为亮度色度复合模式,分量模式为单分量。
    E_MI_VIF_MODE_DIGITAL_CAMERA 输入数据的协议为 Digital camera 协议,端口数据输入模式为亮度色度复合模式,分量模式为单分量。
    E_MI_VIF_MODE_BT1120_STANDARD 输入数据的协议符合标准 BT.1120 协议 (BT.656+双分量),端口数据输入模式为亮度色度分离模式,分量模式为双分量。
    E_MI_VIF_MODE_BT1120_INTERLEAVED 输入数据的协议符合 BT.1120 interleave 模式,端口数据输入模式为亮度色度分离模式,分量模式为双分量。
    E_MI_VIF_MODE_MIPI 输入数据符合MIPI 协议
  • 注意事项

    可以通过MI_SNR_GetPadInfo中的eIntfMode 获取当前接口模式。

  • 相关数据类型及接口

    MI_VIF_GroupAttr_t


3.4. MI_VIF_WorkMode_e

  • 说明

    定义视频设备的复合工作模式。

  • 定义

    typedef enum
    
    {
    
        /* BT656 multiple ch mode */
    
        E_MI_VIF_WORK_MODE_1MULTIPLEX,
    
        E_MI_VIF_WORK_MODE_2MULTIPLEX,
    
        E_MI_VIF_WORK_MODE_4MULTIPLEX,
    
        E_MI_VIF_WORK_MODE_MAX
    
    } MI_VIF_WorkMode_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_WORK_MODE_1MULTIPLEX 1 路复合工作模式。
    E_MI_VIF_WORK_MODE_2MULTIPLEX 2 路复合工作模式。
    E_MI_VIF_WORK_MODE_4MULTIPLEX 4 路复合工作模式。
  • 注意事项

    例如E_MI_VIF_WORK_MODE_4MULTIPLEX, 代表Group 对应的Sensor Pad中有4路混合视频信号, 如果SensorPad 中混合信号数量, 和Group 的复合工作模式不匹配,Group 会采集信号异常。

  • 相关数据类型及接口

    MI_VIF_GroupAttr_t


3.5. MI_VIF_FrameRate_e

  • 说明

    定义视频设备输出fps和输入fps的关系。

  • 定义

    typedef enum
    
    {
    
        E_MI_VIF_FRAMERATE_FULL = 0,
    
        E_MI_VIF_FRAMERATE_HALF,
    
        E_MI_VIF_FRAMERATE_QUARTR,
    
        E_MI_VIF_FRAMERATE_OCTANT,
    
        E_MI_VIF_FRAMERATE_THREE_QUARTERS,
    
        E_MI_VIF_FRAMERATE_NUM,
    
    } MI_VIF_FrameRate_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_FRAMERATE_FULL 源和目标1:1输出。
    E_MI_VIF_FRAMERATE_HALF 源和目标2:1输出。
    E_MI_VIF_FRAMERATE_QUARTER 源和目标4:1输出。
    E_MI_VIF_FRAMERATE_OCTANT 源和目标8:1输出。
    E_MI_VIF_FRAMERATE_THREE_QUARTERS 源和目标4:3输出。
  • 注意事项

    该功能为预留功能,暂不支持,如果需要控制帧率输出,可以通过MI_SYS_BindChnPort2 来设置。

  • 相关数据类型及接口

    MI_VIF_OutputPortAttr_t


3.6. MI_VIF_ClkEdge_e

  • 说明

    定义视频设备接收的时钟类型。

  • 定义

    typedef enum
    
    {
    
        E_MI_VIF_CLK_EDGE_SINGLE_UP = 0,
    
        E_MI_VIF_CLK_EDGE_SINGLE_DOWN,
    
        E_MI_VIF_CLK_EDGE_DOUBLE,
    
        E_MI_VIF_CLK_EDGE_NUM
    
    } MI_VIF_ClkEdge_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_CLK_EDGE_SINGLE_UP 时钟单沿模式,且 VIF 设备在上升沿采样。
    E_MI_VIF_CLK_EDGE_SINGLE_DOWN 时钟单沿模式,且 VIF 设备在下降沿采样。
    E_MI_VIF_CLK_EDGE_DOUBLE 前端送过来双沿数据时,VIF 进行双沿采样。
  • 注意事项

    无。

  • 相关数据类型及接口

    MI_VIF_GroupAttr_t


3.7. MI_VIF_HDRType_e

  • 说明

    定义视频设备HDR 类型。

  • 定义

    typedef enum
    
    {
    
        E_MI_VIF_HDR_TYPE_OFF,
    
        E_MI_VIF_HDR_TYPE_VC,       //virtual channel mode HDR,vc0->long, vc1->short
    
        E_MI_VIF_HDR_TYPE_DOL,
    
        E_MI_VIF_HDR_TYPE_EMBEDDED,  //compressed HDR mode
    
        E_MI_VIF_HDR_TYPE_LI,           //Line interlace HDR
    
        E_MI_VIF_HDR_TYPE_MAX
    
    } MI_VIF_HDRType_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_HDR_TYPE_OFF 不开HDR
    E_MI_VIF_HDR_TYPE_VC virtual channel mode HDR,vc0->long, vc1->short
    E_MI_VIF_HDR_TYPE_DOL Digital Overlap High Dynamic Range
    E_MI_VIF_HDR_TYPE_EMBEDDED compressed HDR mode
    E_MI_VIF_HDR_TYPE_LI Line interlace HDR
  • 注意事项

    hdr type和sensor相关, 可以通过MI_SNR_GetPadInfo的eHDRMode获取当前sensor支持的HDR type。

    实现HDR功能需要MI_VIF 和MI_ISP 模块设置相同的HDR类型。

  • 相关数据类型及接口

    MI_VIF_GroupAttr_t


3.8. MI_VIF_MclkSource_e

  • 说明

    设置Senor时钟驱动。

  • 定义

    typedef enum
    {
        E_MI_VIF_MCLK_12MHZ,
        E_MI_VIF_MCLK_18MHZ,
        E_MI_VIF_MCLK_27MHZ,
        E_MI_VIF_MCLK_36MHZ,
        E_MI_VIF_MCLK_54MHZ,
        E_MI_VIF_MCLK_108MHZ,
        E_MI_VIF_MCLK_MAX
    }MI_VIF_MclkSource_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_MCLK_12MHZ 12M clk 类型
    E_MI_VIF_MCLK_18MHZ 18M clk 类型
    E_MI_VIF_MCLK_27MHZ 27M clk 类型
    E_MI_VIF_MCLK_36MHZ 36M clk 类型
    E_MI_VIF_MCLK_54MHZ 54M clk 类型
    E_MI_VIF_MCLK_108MHZ 108M clk 类型
  • 注意事项

    • 有sensor driver的情况下, 优先从sensor driver中设置mclk。

    • 如果没有sensor driver 并且需要主控芯片输出mclk 才通过该参数设置。

  • 相关数据类型及接口

    MI_VIF_GroupAttr_t


3.9. MI_VIF_GroupIdMask_e

  • 说明

    设备群组mask。

  • 定义

    typedef enum
    {
        E_MI_VIF_GROUPMASK_ID0  = 0x0001,
        E_MI_VIF_GROUPMASK_ID1  = 0x0002,
        E_MI_VIF_GROUPMASK_ID2  = 0x0004,
        E_MI_VIF_GROUPMASK_ID3  = 0x0008,
        E_MI_VIF_GROUPMASK_ID_MAX = 0xffff
    } MI_VIF_GroupIdMask_e;
    
  • 注意事项

    在多sensor 拼接场景中, 需要两个sensor 图像同步输出, 此时只需要创建一个group, 将这两个group id mask 在一起即可。

  • 相关数据类型及接口

    MI_VIF_GroupAttr_t


3.10. MI_VIF_SNRPad_e

  • 说明

    定义SensorPad Id。

  • 定义

    typedef enum
    {
        E_MI_VIF_SNRPAD_ID_0 = 0,
        E_MI_VIF_SNRPAD_ID_1 = 1,
        E_MI_VIF_SNRPAD_ID_2 = 2,
        E_MI_VIF_SNRPAD_ID_3 = 3,
        E_MI_VIF_SNRPAD_ID_MAX,
        E_MI_VIF_SNRPAD_ID_NA = 0xFF,
    }MI_VIF_SNRPad_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_SNRPAD_ID_0 对应硬件设备Sensor0
    E_MI_VIF_SNRPAD_ID_1 对应硬件设备Sensor1
    E_MI_VIF_SNRPAD_ID_2 对应硬件设备Sensor2
    E_MI_VIF_SNRPAD_ID_3 对应硬件设备Sensor3
    E_MI_VIF_SNRPAD_ID_MAX 超过最大Sensor Num
    E_MI_VIF_SNRPAD_ID_NA 无效sensor id
  • 注意事项

    在默认情况下是VIF Group0 对应Sensor0, Group2 对应Sensor1。

    参考MI_SENSOR_API1.2章节流程框图。

  • 相关数据类型及接口

    MI_VIF_GroupExtAttr_t

    MI_VIF_DevStatus_t


3.11. MI_VIF_GroupAttr_t

  • 说明

    定义Group群组属性。

  • 定义

    typedef struct MI_VIF_GroupAttr_s
    {
        MI_VIF_IntfMode_e       eIntfMode;
        MI_VIF_WorkMode_e       eWorkMode;
        MI_VIF_HDRType_e        eHDRType;
        MI_VIF_ClkEdge_e        eClkEdge; //BT656
        MI_VIF_MclkSource_e     eMclk;
        MI_SYS_FrameScanMode_e  eScanMode;
        MI_U32     u32GroupStitchMask;  //multi vif dev bitmask by MI_VIF_GroupIdMask_e
    } MI_VIF_GroupAttr_t;
    
  • 成员

    成员名称 描述
    MI_VIF_IntfMode_e 接口模式。
    MI_VIF_WorkMode_e 工作模式。
    MI_VIF_HDRType_e HDR类型
    MI_VIF_ClkEdge_e 时钟边沿模式(上升沿采样、下降沿采样、双沿采样)。
    MI_VIF_MclkSource_e 输出给sensor的时钟类型
    MI_SYS_FrameScanMode_e 输入扫描模式 (逐行、隔行)
    u32GroupStitchMask 多个GroupId缝合输出, 由MI_VIF_GroupIdMask_e bitmask 组成。
  • 注意事项

    Tiramisu系列芯片eScanMode只支持 E_MI_SYS_FRAME_SCAN_MODE_PROGRESSIVE。

  • 相关数据类型及接口

    MI_VIF_CreateDevGroup

    MI_VIF_CreateDevGroupExt

    MI_VIF_GetDevGroupAttr


3.12. MI_VIF_GroupExtAttr_t

  • 说明

    定义SensorPad Id。

  • 定义

    typedef struct MI_VIF_GroupExtAttr_s
    {
        MI_VIF_SNRPad_e eSensorPadID;   //sensor Pad id
        MI_U32 u32PlaneID[MI_VIF_MAX_GROUP_DEV_CNT];  //For HDR,0 is short exposure, 1 is long exposure
    } MI_VIF_GroupExtAttr_t;
    
  • 成员

    成员名称 描述
    eSensorPadID 硬件设备Sensor号
    u32PlaneID PlaneId, for HDR 1 长曝,0 短曝, for liner 为0xff.
  • 注意事项

    默认情况下按照1.2 章节框架图 sensor Pad 和Vif Group之间的映射。

  • 相关数据类型及接口

    MI_VIF_CreateDevGroupExt


3.13. MI_VIF_DevAttr_t

  • 说明

    定义视频输入设备的属性。

  • 定义

    typedef struct MI_VIF_DevAttr_s
    {
        MI_SYS_PixelFormat_e   eInputPixel;
        MI_SYS_WindowRect_t   stInputRect;
        MI_SYS_FieldType_e     eField;
        MI_BOOL               bEnH2T1PMode;
    } MI_VIF_DevAttr_t;
    
  • 成员

    成员名称 描述
    eInputPixel 设备输入像素格式。
    stInputRect 设备采集输入范围。
    eField 帧场选择,只用于隔行模式,建议捕获单场时选择捕获底场。逐行模式时,该项必须设置为 E_MI_SYS_FIELDTYPE_NONE。
    bEnH2T1PMode 使能采集水平方向缩小一半功能。
  • 注意事项

    • 如果设备是bayer格式, pixel format设置形式如下:

      stVifDevAttr.eInputPixel = (MI_SYS_PixelFormat_e)RGB_BAYER_PIXEL(stSnrPlane0Info.ePixPrecision, stSnrPlane0Info.eBayerId);

    • bEnH2T1Pmode 参数只有输入是YUV格式时 才可以使用, 非YUV格式使用会返回err。

  • 相关数据类型及接口

    MI_VIF_SetDevAttr

    MI_VIF_GetDevAttr


3.14. MI_VIF_OutputPortAttr_t

  • 说明

    定义 VIF 通道Port属性。

  • 定义

    typedef struct MI_VIF_OutputPortAttr_s
    {
        MI_SYS_WindowRect_t              stCapRect;
    MI_SYS_WindowSize_t              stDestSize; 
    MI_SYS_PixelFormat_e   ePixFormat;  
        MI_VIF_FrameRate_e     eFrameRate;
    } MI_VIF_OutputPortAttr_t;
    
  • 成员

    成员名称 描述
    stCapRect 捕获区域起始坐标(相对于设备图像的大小)与宽高
    stDestSize 目标图像大小。必须配置,且大小不应该超出外围 ADC 输出图像的大小范围,否则可能导致VIF 硬件工作异常
    ePixFormat 像素存储格式支持,在BT656格式下仅支持YUV422。
    eFrameRate 目标帧率和输入帧率的比值关系。如果不进行帧率控制,则该值设置为0。可以按照1:1,2:1,4:1,8:1,4:3等比例输出,仅在BT656接口中可用。
  • 相关数据类型及接口

    MI_VIF_SetOutputPortAttr

    MI_VIF_GetOutputPortAttr


3.15. MI_VIF_DevPortStat_t

  • 说明

    VIF 通道信息结构体。

  • 定义

    typedef struct MI_VIF_DevPortStat_s
    {
        MI_BOOL bEnable;
        MI_U32  u32IntCnt;
        MI_U32  u32FrameRate;
        MI_U32  u32LostInt;
        MI_U32  u32VbFail;
        MI_U32  u32PicWidth;
        MI_U32  u32PicHeight;
    } MI_VIF_DevPortStat_t;
    
  • 成员

    成员名称 描述
    bEnable 通道是否使能。
    u32IntCnt 中断计数。
    u32FrameRate 每 10 秒的平均帧率,该值不一定精确。
    u32LostInt 中断丢失计数。
    u32VbFail 获取 VB 失败计数。
    u32PicWidth 图像宽度。
    u32PicHeight 图像高度。
  • 注意事项

    • 结构体的中断计数,可用于无中断检测。

    • 该结构体的帧率是每 10 秒钟的平均帧率,即 VIF 会每隔十秒统计一次平均帧率, 该值并不精确。

    • 如果查询到该结构体的中断丢失计数一直在增加,说明 VIF 工作出现异常。

  • 相关数据类型及接口

    MI_VIF_Query


3.16. MI_VIF_DevStatus_t

  • 说明

    VIF Dev当前状态

  • 定义

    typedef struct MI_VIF_VIFDevStatus_s
    {
        MI_VIF_GROUP  GroupId;
        MI_BOOL  bGroupCreated;
        MI_U32 bDevEn;
        MI_VIF_SNRPad_e eSensorPadID;
        MI_U32 u32PlaneID;
    } MI_VIF_DevStatus_t;
    
  • 成员

    成员名称 描述
    GroupId Device 所属Group number
    bGroupCreated Group 当前Create 状态
    bDevEn VIF Dev 当前使能状态
    eSensorPadID VIF Dev 绑定的SensorPad
    u32PlaneID VIF Dev 绑定的PlaneId
  • 相关数据类型及接口

    MI_VIF_GetDevStatus


3.17. MI_VIF_CALLBK_FUNC

  • 说明

    定义回调函数类型

  • 定义

    typedef MI_S32 (*MI_VIF_CALLBK_FUNC)(MI_U64 u64Data);
    
  • 相关数据类型及接口

    MI_VIF_CallBackParam_t


3.18. MI_VIF_CallBackMode_e

  • 说明

    定义回调模式。

  • 定义

    typedef enum
    {
        E_MI_VPE_CALLBACK_ISR,
        E_MI_VPE_CALLBACK_MAX,
    } MI_VPE_CallBackMode_e;
    
  • 成员

    成员名称 描述
    E_MI_VPE_CALLBACK_ISR 硬件中断模式回调
    E_MI_VPE_CALLBACK_MAX 回调模式最大值
  • 注意事项

    目前只支持ISR 回调模式。

  • 相关数据类型及接口

    MI_VIF_CallBackParam_t


3.19. MI_VIF_IrqType_e

  • 说明

    定义硬件中断类型

  • 定义

    typedef enum
    {
        E_MI_VIF_IRQ_FRAMESTART,  //frame start irq
        E_MI_VIF_IRQ_FRAMEEND,  //frame end irq
        E_MI_VIF_IRQ_LINEHIT,  //frame line hit irq
        E_MI_VIF_IRQ_MAX,
    } MI_VIF_IrqType_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_IRQ_FRAMESTART VIF Feame start 中断类型
    E_MI_VIF_IRQ_FRAMEEND VIF Frame done 中断类型
    E_MI_VIF_IRQ_LINEHIT VIF LineCount Hit中断类型
  • 注意事项

    • E_MI_VIF_IRQ_FRAMESTART: 每一帧第一个pixel的信号

    • E_MI_VPE_IRQ_ISPFRAMEDONE:每一帧最后一个pixel的信号

    • E_MI_VIF_IRQ_LINEHIT:每一帧指定line到达时的信号

  • 相关数据类型及接口

    MI_VIF_CallBackParam_t


3.20. MI_VIF_CallBackParam_t

  • 说明

    定义回调参数

  • 定义

    typedef struct MI_VIF_CallBackParam_s
    {
        MI_VIF_CallBackMode_e eCallBackMode;
        MI_VIF_IrqType_e  eIrqType;
        MI_VIF_CALLBK_FUNC  pfnCallBackFunc;
        MI_U64    u64Data;
    } MI_VIF_CallBackParam_t;
    
  • 成员

    成员名称 描述
    eCallBackMode Callback mode
    eIrqType Hardware interrupt type
    pfnCallBackFunc 回调函数
    u64Data 回调函数参数
  • 相关数据类型及接口

    MI_VIF_CallBackTask_Register

    MI_VIF_CallBackTask_UnRegister


4. 错误码

视频输入 API 错误码如下表所示。

表 4‑1:视频输入 API 错误码

错误代码 宏定义 描述
0xA0062001 MI_ERR_VIF_INVALID_DEVID 视频输入设备号无效
0xA0062002 MI_ERR_VIF_INVALID_CHNID 视频输入通道号无效
0xA0062003 MI_ERR_VIF_INVALID_PARA 视频输入参数设置无效
0xA0062006 MI_ERR_VIF_INVALID_NULL_PTR 输入参数空指针错误
0xA0062007 MI_ERR_VIF_FAILED_NOTCONFIG 视频设备或通道属性未配置
0xA0062008 MI_ERR_VIF_NOT_SUPPORT 操作不支持
0xA0062009 MI_ERR_VIF_NOT_PERM 操作不允许
0xA006200C MI_ERR_VIF_NOMEM 分配内存失败
0xA006200E MI_ERR_VIF_BUF_EMPTY 视频输入缓存为空
0xA006200F MI_ERR_VIF_BUF_FULL 视频输入缓存为满
0xA0062010 MI_ERR_VIF_SYS_NOTREADY 视频输入系统未初始化
0xA0062012 MI_ERR_VIF_BUSY 视频输入系统忙
0xA0062080 MI_ERR_VIF_INVALID_PORTID 视频输入端口无效
0xA0062081 MI_ERR_VIF_FAILED_DEVNOTENABLE 视频输入设备未启用
0xA0062082 MI_ERR_VIF_FAILED_DEVNOTDISABLE 视频输入设备未禁用
0xA0062083 MI_ERR_VIF_FAILED_PORTNOTENABLE 视频输入通道未启用
0xA0062084 MI_ERR_VIF_FAILED_PORTNOTDISABLE 视频输入通道未禁用
0xA0062085 MI_ERR_VIF_CFG_TIMEOUT 视频配置属性超时
0xA0062086 MI_ERR_VIF_NORM_UNMATCH 视频ADC VIU不匹配
0xA0062087 MI_ERR_VIF_INVALID_WAYID 视频通路号无效
0xA0062088 MI_ERR_VIF_INVALID_PHYCHNID 视频物理通道号无效
0xA0062089 MI_ERR_VIF_FAILED_NOTBIND 视频通道未绑定
0xA006208A MI_ERR_VIF_FAILED_BINDED 视频通道已绑定