MI VIF API


1. 概述


1.1. 模块说明

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


1.2. Pretzel, Macaron, Pudding, Ispahan, Ikayaki流程框图

Naboo系列芯片支持Vif output port1,只有在BT656接口中用到,并且outport1的width/height是outport0的一半。

MI_VIF device 和channel之间的映射关系如下:

Pretzel和Pudding芯片中N max=3,

Macaron、Ispahan和 Ikayaki芯片中N max=2

注:N为Device Id。

Mipi接口中只能用到对应VifDev中的第一个channel,BT656接口复合模式下才会用到VifDev中的multi channel。


2. API 参考


2.1. 功能模块API

表 2‑1:API参考

API名 功能
MI_VIF_SetDevAttr 设置 VIF 设备属性
MI_VIF_GetDevAttr 获取 VIF 设备属性
MI_VIF_EnableDev 启用 VIF 设备
MI_VIF_DisableDev 禁用 VIF 设备
MI_VIF_SetChnPortAttr 设置 VIF 通道Port属性
MI_VIF_GetChnPortAttr 获取 VIF 通道Port属性
MI_VIF_EnableChnPort 启用 VIF 通道Port
MI_VIF_DisableChnPort 禁用 VIF 通道Port
MI_VIF_Query 查询 VIF 通道的Port中断计数、平均帧率等信息
MI_VIF_SetDev2SnrPadMux 设置VIF 设备和sensor 之间绑定关系
MI_VIF_InitDev 初始化VIF设备
MI_VIF_DeInitDev 反初始化VIF设备
MI_VIF_GetDevStatus 获取Vif Dev当前状态
MI_VIF_CallBackTask_Register 向 VIF 注册回调接口
MI_VIF_CallBackTask_UnRegister 向 VIF 反注册回调接口

2.2. MI_VIF_SetDevAttr

  • 功能

    设置 VIF 设备属性。基本设备属性默认了部分芯片配置,满足绝大部分的 AD 芯片对接要求。

  • 语法

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

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

    • MI_SUCCESS(0) 成功

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

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

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

    • 参数 pstDevAttr 主要用来配置指定 VIF 设备的视频接口模式,用于与外围camera、 sensor对接,支持的接口模式包括 BT.656、digital camera、MIPI sensor。具体属性意义参见 VIF数据类型部分的说明。

  • 举例

    VIF初始化启动及退出范例:

    STCHECKRESULT(MI_SNR_GetPadInfo(eSnrPadId, &stPad0Info));
    STCHECKRESULT(MI_SNR_GetPlaneInfo(eSnrPadId, 0, &stSnrPlane0Info));
    
    u32CapWidth = stSnrPlane0Info.stCapRect.u16Width;
    u32CapHeight = stSnrPlane0Info.stCapRect.u16Height;
    ePixFormat = (MI_SYS_PixelFormat_e)RGB_BAYER_PIXEL(stSnrPlane0Info.ePixPrecision, stSnrPlane0Info.eBayerId);
    
    /************************************************
    init VIF
    *************************************************/
    MI_VIF_DevAttr_t stDevAttr;
    MI_VIF_InitParam_t stInitParam;
    
    memset(&stDevAttr, 0x0, sizeof(MI_VIF_DevAttr_t));
    memset(&stInitParam, 0x0, sizeof(MI_VIF_InitParam_t));
    
    stInitParam.u32DevId = 0;
    stInitParam.u8Data = 0;
    STCHECKRESULT(MI_VIF_InitDev(&stInitParam));
    
    stDevAttr.eIntfMode = stPad0Info.eIntfMode;
    stDevAttr.eWorkMode = pstVifDevAttr->eWorkMode;
    stDevAttr.eHDRType = (MI_VIF_HDRType_e)pstVpeChnattr->eHdrType;
    if(stDevAttr.eIntfMode == E_MI_VIF_MODE_BT656)
        stDevAttr.eClkEdge = stPad0Info.unIntfAttr.stBt656Attr.eClkEdge;
    else
        stDevAttr.eClkEdge = E_MI_VIF_CLK_EDGE_DOUBLE;
    
    if(stDevAttr.eIntfMode == E_MI_VIF_MODE_MIPI)
        stDevAttr.eDataSeq =stPad0Info.unIntfAttr.stMipiAttr.eDataYUVOrder;
    else
        stDevAttr.eDataSeq = E_MI_VIF_INPUT_DATA_YUYV;
    
    if(stDevAttr.eIntfMode == E_MI_VIF_MODE_BT656)
        memcpy(&stDevAttr.stSyncAttr, &stPad0Info.unIntfAttr.stBt656Attr.stSyncAttr, sizeof(MI_VIF_SyncAttr_t));
    
    stDevAttr.eBitOrder = E_MI_VIF_BITORDER_NORMAL;
    
    STCHECKRESULT(MI_VIF_SetDevAttr(vifDev, &stDevAttr));
    STCHECKRESULT(MI_VIF_EnableDev(vifDev));
    
    MI_VIF_ChnPortAttr_t stVifPortInfo;
    memset(&stVifPortInfo, 0, sizeof(MI_VIF_ChnPortAttr_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 = u32CapWidth;
    stVifPortInfo.stDestSize.u16Height = u32CapHeight;
    stVifPortInfo.ePixFormat = ePixFormat;
    //stVifPortInfo.u32FrameModeLineCount for lowlantancy mode
    
    if(stDevAttr.eIntfMode == E_MI_VIF_MODE_BT656)
    {
        stVifPortInfo.eFrameRate = E_MI_VIF_FRAMERATE_FULL;
        stVifPortInfo.eCapSel = E_MI_SYS_FIELDTYPE_BOTH;
        stVifPortInfo.eScanMode = E_MI_SYS_FRAME_SCAN_MODE_PROGRESSIVE;
    }
    STCHECKRESULT(MI_VIF_SetChnPortAttr(vifChn, vifPort, &stVifPortInfo));
    STCHECKRESULT(MI_VIF_EnableChnPort(vifChn, vifPort));
    /************************************************
    call sys bind interface
    *************************************************/
    
    /************************************************
    exit call sys unbind interface
    *************************************************/
    STCHECKRESULT(MI_VIF_DisableChnPort(vifChn, vifPort));
    STCHECKRESULT(MI_VIF_DisableDev(vifDev));
    STCHECKRESULT(MI_VIF_DeInitDev());
    
  • 相关主题

    MI_VIF_GetDevAttr


2.3. MI_VIF_GetDevAttr

  • 功能

    获取 VIF 设备属性。

  • 语法

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

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

    • MI_SUCCESS(0) 成功

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

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

    如果未设置 VIF 设备属性,该接口将返回失败。

  • 相关主题

    MI_VIF_SetDevAttr


2.4. MI_VIF_EnableDev

  • 功能

    启用 VIF 设备。

  • 语法

    MI_S32 MI_VIF_EnableDev(MI_VIF_DEV u32VifDev);
    
  • 形参

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

    • MI_SUCCESS(0) 成功

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

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

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

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

  • 举例

    请参见 MI_VIF_SetDevAttr的举例。

  • 相关主题

    MI_VIF_DisableDev


2.5. MI_VIF_DisableDev

  • 功能

    禁用 VIF 设备。

  • 语法

    MI_S32 MI_VIF_DisableDev(MI_VIF_DEV u32VifDev);
    
  • 形参

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

    • MI_SUCCESS(0) 成功

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

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

    • 必须先禁用所有与该 VIF 设备绑定的 VIF 通道后,才能禁用 VIF 设备。

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

  • 举例

    请参见 MI_VIF_SetDevAttr的举例。

  • 相关主题

    MI_VIF_EnableDev


2.6. MI_VIF_SetChnPortAttr

  • 功能

    设置 VIF 通道次属性。

  • 语法

    MI_S32 MI_VIF_SetChnPortAttr(MI_VIF_CHN u32VifChn, MI_VIF_PORT u32ChnPort, MI_VIF_ChnPortAttr_t *pstAttr);
    
  • 形参

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

    • MI_SUCCESS(0) 成功

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

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

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

    请参见MI_VIF_SetDevAttr的举例。

  • 相关主题

    MI_VIF_GetChnPortAttr


2.7. MI_VIF_GetChnPortAttr

  • 功能

    获取 VIF 通道次属性。

  • 语法

    MI_S32 MI_VIF_GetChnPortAttr(MI_VIF_CHN u32VifChn, MI_VIF_PORT u32ChnPort, MI_VIF_ChnPortAttr_t *pstAttr);
    
  • 形参

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

    • MI_SUCCESS(0) 成功

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

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

    必须先设置属性再获取属性。

  • 举例

    请参见 MI_VIF_SetChnPortAttr 的举例。

  • 相关主题

    MI_VIF_SetChnPortAttr


2.8. MI_VIF_EnableChnPort

  • 功能

    启用 VIF 通道。

  • 语法

    MI_S32 MI_VIF_EnableChnPort (MI_VIF_CHN u32VifChn,MI_VIF_PORT u32ChnPort);
    
  • 形参

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

    • MI_SUCCESS(0) 成功

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

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

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

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

  • 举例

    请参见 MI_VIF_SetDevAttr 的举例。

  • 相关主题

    MI_VIF_DisableChnPort


2.9. MI_VIF_DisableChnPort

  • 功能

    禁用 VIF 通道。

  • 语法

    MI_S32 MI_VIF_DisableChnPort (MI_VIF_CHN u32VifChn, MI_VIF_PORT u32ChnPort);
    
  • 形参

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

    • MI_SUCCESS(0) 成功

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

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

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

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

  • 举例

    请参见 MI_VIF_SetDevAttr的举例。

  • 相关主题

    MI_VIF_EnableChnPort


2.10. MI_VIF_Query

  • 功能

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

  • 语法

    MI_S32 MI_VIF_Query(MI_VIF_CHN u32VifChn, MI_VIF_PORT u32ChnPort, MI_VIF_ChnPortStat_t *pstStat);
    
  • 形参

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

    • MI_SUCCESS(0) 成功

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

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

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

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

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

    • 暂时不支持该接口。


2.11. MI_VIF_SetDev2SnrPadMux

  • 功能

    设置Vif Dev 和sensor Pad 之间的绑定关系

  • 语法

    MI_S32 MI_VIF_SetDev2SnrPadMux(MI_VIF_Dev2SnrPadMuxCfg_t  stVifDevMap[], MI_U8 u8Length);
    
  • 形参

    参数名称 描述 输入/输出
    stVifDevMap Dev 和SensorPad Maping 关系 输入
    u8Length Dev Num 输入
  • 返回值

    • MI_SUCCESS(0) 成功

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

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

    • 在默认情况下vif Dev 和SensorPad 对应关系是vif Dev0 -> SensorPad0, vif Dev2 -> SensorPad1.如果要用到其它的Vif Dev 或者Sensor Pad 需要用MI_VIF_SetDev2SnrPadMux api 设置对应连接关系。

    • 在调用 MI_SNR_SetPlaneMode 后vif Dev 和 SenosrPad 对应关系会重置到默认情况,所以应在 MI_SNR_SetPlaneMode 后调用 MI_VIF_SetDev2SnrPadMux 。

  • 举例

    该api实现Vif Dev0 bind SensorPad0, Dev1 bind SensorPad2, Dev2 bind SensorPad1绑定关系范例如下:

    MI_VIF_Dev2SnrPadMuxCfg_t stVifDev[4];
    
    stVifDev[0].eSensorPadID = E_MI_VIF_SNRPAD_ID_0;
    
    stVifDev[0].u32PlaneID = 0xff;//oxff liner mode, 0:长曝光,1:短曝光。
    
    stVifDev[1].eSensorPadID = E_MI_VIF_SNRPAD_ID_2;
    
    stVifDev[1].u32PlaneID = 0xff;
    
    stVifDev[2].eSensorPadID = E_MI_VIF_SNRPAD_ID_1;
    
    stVifDev[2].u32PlaneID = 0xff;
    
    stVifDev[3].eSensorPadID = E_MI_VIF_SNRPAD_ID_3;
    
    stVifDev[3].u32PlaneID = 0xff;
    
    MI_VIF_SetDev2SnrPadMux(stVifDev, 4);
    

2.12. MI_VIF_InitDev

  • 描述

    初始化VIF设备。

  • 语法

    MI_S32 MI_VIF_InitDev(MI_VIF_InitParam_t *pstInitParam);
    
  • 参数

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

    • MI_SUCCESS(0) 成功

    • 非0 失败,参照错误码

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

    STR功能时才调用该接口,非STR并使用默认的初始化参数,则无需调用该接口。

  • 举例

    请参考 MI_VIF_SetDevAttr的举例


2.13. MI_VIF_DeInitDev

  • 描述

    反初始化vif设备。

  • 语法

    MI_S32 MI_VIF_DeInitDev(void);
    
  • 返回值

    • MI_SUCCESS(0) 成功

    • 非0 失败,参照错误码

  • 依赖

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

    • 库文件:libmi_vif.a

  • 注意

    • STR功能时才调用该接口,非STR时无需调用

    • 若选择使用该接口,则必须在销毁VIF设备后调用,否则会返回MI_ERR_FAILED

    • 若重复调用该接口,会报错 fd is Invalid并返回MI_ERR_FAILED

  • 举例

    请参考 MI_VIF_SetDevAttr的举例


2.14. MI_VIF_GetDevStatus

  • 描述

    获取Vif Dev当前状态。

  • 语法

    MI_S32 MI_VIF_GetDevStatus(MI_VIF_DEV u32Vifdev,MI_VIF_DevStatus_t *pstVifDevStatus);
    
  • 参数

    参数名称 描述 输入/输出
    u32Vifdev VIF Dev ID 输入
    pstVifDevStatus VIF Dev当前状态 输出
  • 返回值

    • MI_SUCCESS(0) 成功

    • 非0 失败,参照错误码

  • 依赖

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

    • 库文件:libmi_vif.a

  • 举例

    该api实现Vif Dev当前状态的获取,使用范例如下:

    MI_VIF_DevStatus_t stVifDev[VIF_MAX_DEV_NUM];
    
    MI_VIF_DEV a = 0;
    
    for(a=0;a< VIF_MAX_DEV_NUM;a++)
    
    {
    
        ret = MI_VIF_GetDevStatus(a,&stVifDev[a]);
    
    }
    

2.15. MI_VIF_CallBackTask_Register

  • 描述

    向VIF注册回调接口。

  • 语法

    MI_S32 MI_VIF_CallBackTask_Register(MI_VIF_CHN u32VifChn, MI_VIF_CallBackParam_t *pstCallBackParam);
    
  • 参数

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

    • MI_SUCCESS(0) 成功

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: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_CHN u32VifChn = 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(u32VifChn,&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(u32VifChn,&stCallBackParam2);
    
        return 0;
    
    }
    static MS_S32 _mi_vif_testUnRegVifCallback(void)
    {
        MI_VIF_CallBackParam_t stCallBackParam1;
        MI_VIF_CallBackParam_t stCallBackParam2;
    
        MI_VIF_CHN u32VifChn = 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(u32VifChn,&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(u32VifChn,&stCallBackParam2);
        return 0;
    }
    
  • 相关主题

    MI_VIF_CallBackTask_UnRegister


2.16. MI_VIF_CallBackTask_UnRegister

  • 描述

    向VIF反注册回调接口。

  • 语法

    MI_S32 MI_VIF_CallBackTask_UnRegister(MI_VIF_CHN u32VifChn, MI_VIF_CallBackParam_t *pstCallBackParam);
    
  • 参数

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

    • MI_SUCCESS(0) 成功

    • 非0 失败,参照错误码

  • 依赖

    • 头文件: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_IntfMode_e 定义视频输入设备的接口模式
MI_VIF_WorkMode_e 定义视频设备的复合工作模式
MI_VIF_FrameRate_e 定义视频设备输出fps和输入fps的关系
MI_VIF_DataYuvSeq_e 定义视频设备接收的 YUV 数据的数据排列顺序
MI_VIF_ClkEdge_e 定义视频设备接收的时钟类型
MI_VIF_BitOrder_e 定义视频设备的data bit翻转顺序
MI_VIF_HDRType_e 定义视频设备HDR 类型
MI_VIF_Polar_e 定义信号极性
MI_VIF_DevId_e 定义视频设备的ID
MI_VIF_SyncAttr_t 定义同步信号属性
MI_VIF_DevAttr_t 定义视频输入设备的属性。
MI_VIF_ChnPortAttr_t 定义 VIF 通道属性。
MI_VIF_ChnPortStat_t 定义VIF 通道信息结构体
MI_VIF_SNRPad_e 定义 SensorPad Id
MI_VIF_Dev2SnrPadMuxCfg_t 定义VIF 设备和SensorPad 绑定关系
MI_VIF_InitParam_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_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_BT601,
    
            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 协议
    E_MI_VIF_MODE_BT601 输入数据符合BT.601 协议
  • 注意事项

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

  • 相关数据类型及接口

    MI_VIF_DevAttr_t

    MI_VIF_SetDevAttr


3.3. 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,
    
        /* RGB mode for MIPI/Parallel sensor */
    
        E_MI_VIF_WORK_MODE_RGB_REALTIME,
    
        E_MI_VIF_WORK_MODE_RGB_FRAMEMODE,
    
        E_MI_VIF_WORK_MODE_MAX
    
    } MI_VIF_WorkMode_e;
    
  • 成员

成员名称 描述
E_MI_VIF_WORK_MODE_1MULTIPLEX 1 路复合工作模式。
E_MI_VIF_WORK_MODE_2MULTIPLEX 2 路复合工作模式,输入数据的协议必须为标准 BT.656 协议。
E_MI_VIF_WORK_MODE_4MULTIPLEX 4 路复合工作模式,输入数据的协议必须为标准 BT.656 协议。
E_MI_VIF_WORK_MODE_RGB_REALTIME RGB Realtime mode for MIPI/Parallel sensor
E_MI_VIF_WORK_MODE_RGB_FRAMEMODE, RGB Framemode mode for MIPI/Parallel sensor
  • 注意事项

    • 当该项设为RGB_REALTIME时 后端只能绑定MI_VPE模块,且MI_VPE也要设置为Realtime mode, 两个模块之间没有Dram buffer,底层硬件直接相连,Realtime mode连接时两个模块不支持分时复用。

    • 当该项设置为RGB_FRAME时,VIF向Dram写出buffer,送给后端模块。

    • Pudding、Ispahan系列芯片不支持复合工作模式,WorkMode设置为复合工作模式时无效,使用BT656 sensor时,WorkMode需设置为RGB_REALTIME或RGB_FRAME。

  • 相关数据类型及接口

    MI_VIF_DevAttr_t

    MI_VIF_SetDevAttr


3.4. 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输出。
  • 注意事项

    仅在BT656 multiple channel mode 下设置有效

  • 相关数据类型及接口

    MI_VIF_ChnPortAttr_t

    MI_VIF_SetChnPortAttr


3.5. MI_VIF_DataYuvSeq_e

  • 说明

    定义视频设备接收的 YUV 数据的数据排列顺序。

  • 定义

    typedef enum
    
    {
    
        E_MI_VIF_INPUT_DATA_VUVU = 0,
    
        E_MI_VIF_INPUT_DATA_UVUV,
    
        E_MI_VIF_INPUT_DATA_UYVY = 0,
    
        E_MI_VIF_INPUT_DATA_VYUY,
    
        E_MI_VIF_INPUT_DATA_YUYV,
    
        E_MI_VIF_INPUT_DATA_YVYU,
    
        E_MI_VIF_DATA_YUV_NUM
    
    } MI_VIF_DataYuvSeq_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_INPUT_DATA_VUVU YUV 数据通过分离模式输入时,C 分量的输入排列顺序为 VUVU。
    E_MI_VIF_INPUT_DATA_UVUV YUV 数据通过分离模式输入时,C 分量的输入排列顺序为 UVUV。
    E_MI_VIF_INPUT_DATA_UYVY YUV 数据通过复合模式输入时,顺序为UYVY。
    E_MI_VIF_INPUT_DATA_VYUY YUV 数据通过复合模式输入时,顺序为VYUY。
    E_MI_VIF_INPUT_DATA_YUYV YUV 数据通过复合模式输入时,顺序为YUYV。
    E_MI_VIF_INPUT_DATA_YVYU YUV 数据通过复合模式输入时,顺序为YVYU。
  • 相关数据类型及接口

    MI_VIF_DevAttr_t

    MI_VIF_SetDevAttr


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_DevAttr_t

    MI_VIF_SetDevAttr


3.7. MI_VIF_BitOrder_e

  • 说明

    Vif设备的data bit顺序翻转设定

  • 定义

    typedef enum
    
    {
    
        E_MI_VIF_BITORDER_NORMAL = 0,
    
        E_MI_VIF_BITORDER_REVERSED
    
    } MI_VIF_BitOrder_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_BITORDER_NORMAL 正常data bit排序
    E_MI_VIF_BITORDER_REVERSED 逆序data bit排序
  • 相关数据类型及接口

    MI_VIF_DevAttr_t

    MI_VIF_SetDevAttr


3.8. 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_VPE 模块设置相同的HDR类型。

  • 相关数据类型及接口

    MI_VIF_DevAttr_t

    MI_VIF_SetDevAttr


3.9. MI_VIF_Polar_e

  • 说明

    定义视频输入信号有效。

  • 定义

    typedef enum
    
    {
    
        E_MI_VIF_PIN_POLAR_POS,
    
        E_MI_VIF_PIN_POLAR_NEG
    
    } MI_VIF_Polar_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_PIN_POLAR_POS 高电平信号有效
    E_MI_VIF_PIN_POLAR_NEG 低电平信号有效
  • 注意事项

    只有parallel sensor 接口可以设置

  • 相关数据类型及接口

    MI_VIF_SyncAttr_t


3.10. MI_VIF_DevId_e

  • 说明

    定义视频设备的ID。

  • 定义

    typedef enum
    
    {
    
        E_MI_VIF_DEVICE_ID0  = 0x0001,
    
        E_MI_VIF_DEVICE_ID1  = 0x0002,
    
        E_MI_VIF_DEVICE_ID2  = 0x0004,
    
        E_MI_VIF_DEVICE_ID3  = 0x0008,
    
        E_MI_VIF_DEVICE_ID4  = 0x0010,
    
        E_MI_VIF_DEVICE_ID5  = 0x0020,
    
        E_MI_VIF_DEVICE_ID6  = 0x0040,
    
        E_MI_VIF_DEVICE_ID7  = 0x0080,
    
        E_MI_VIF_DEVICE_ID8  = 0x0100,
    
        E_MI_VIF_DEVICE_ID9  = 0x0200,
    
        E_MI_VIF_DEVICE_ID10  = 0x0400,
    
        E_MI_VIF_DEVICE_ID11  = 0x0800,
    
        E_MI_VIF_DEVICE_ID12  = 0x1000,
    
        E_MI_VIF_DEVICE_ID13  = 0x2000,
    
        E_MI_VIF_DEVICE_ID14  = 0x4000,
    
        E_MI_VIF_DEVICE_ID15  = 0x8000,
    
        E_MI_VIF_DEVICE_ID_MAX = 0xffff
    
    } MI_VIF_DevId_e;
    
  • 相关数据类型及接口

    MI_VIF_DevAttr_t


3.11. MI_VIF_SyncAttr_t

  • 说明

    同步信号属性设置。

  • 定义

    typedef struct MI_VIF_SyncAttr_s
    
    {
    
        MI_VIF_Polar_e   eVsyncPolarity;
    
        MI_VIF_Polar_e   eHsyncPolarity;
    
        MI_VIF_Polar_e   ePclkPolarity;
    
        MI_U32   VsyncDelay;
    
        MI_U32   HsyncDelay;
    
        MI_U32   PclkDelay;
    
    } MI_VIF_SyncAttr_t;
    
  • 成员

    成员名称 描述
    eVsyncPolarity 垂直同步信号有效极性
    eHsyncPolarity 水平同步信号有效极性
    ePclkPolarity Pixel Clock 有效极性
    VsyncDelay 垂直同步信号延时时间
    HsyncDelay 水平同步信号延时时间
    PclkDelay Pixel Clock 延时时间

    以1920x1080分辨率, Pclk/Hsync/Vsync都是高电平有效,波形对应关系如下:

    Pclk: pixel clock, 每收到一个pixel,产生一个clock。

    Hsync:行同步,有效时收到的信号属于同一行。

    Vsync:场同步,有效时收到的信号属于同一张frame。

  • 注意事项

    只有parallel sensor 接口可以设置

  • 相关数据类型及接口

    MI_VIF_DevAttr_t


3.12. MI_VIF_DevAttr_t

  • 说明

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

  • 定义

    typedef struct MI_VIF_DevAttr_s
    
    {
    
        MI_VIF_IntfMode_e eIntfMode;
    
        MI_VIF_WorkMode_e eWorkMode;
    
        MI_VIF_HDRType_e eHDRType;
    
        MI_VIF_ClkEdge_e eClkEdge;
    
        MI_VIF_DataYuvSeq_e eDataSeq;
    
        MI_VIF_BitOrder_e eBitOrder;
    
        /* adjust bit order layout */
    
        MI_VIF_SyncAttr_t stSyncAttr;
    
        MI_U32 u32DevStitchMask; //multi vif dev bitmask by MI_VIF_DevId_e
    
    } MI_VIF_DevAttr_t;
    
  • 成员

    成员名称 描述
    eIntfMode 接口模式。
    eWorkMode 工作模式。
    eHDRType HDR类型
    eClkEdge 时钟边沿模式(上升沿采样、下降沿采样、双沿采样)。
    eDataSeq 输入数据顺序 (仅支持 yuv 格式), Digital Camera 模式时必须配置,其它模式时无效。
    eBitOrder Vif的data线layout是正序还是逆序
    stSyncAttr 同步信号属性
    u32DevStitchMask 图像融合设备ID
  • 注意事项

    • u32DevStitchMask = E_MI_VIF_DEVICE_ID0| E_MI_VIF_DEVICE_ID2

    • 当设置了该参数时,后端MI_VPE 必须使用MI_VPE_CreateMultiChannelStitch API创建通道,详细用法参考MI_VPE api doc中该api的举例。

  • 相关数据类型及接口

    MI_VIF_SetDevAttr


3.13. MI_VIF_ChnPortAttr_t

  • 说明

    定义 VIF 通道Port属性。

  • 定义

    typedef struct MI_VIF_ChnPortAttr_s
    
    {
    
        MI_SYS_WindowRect_t stCapRect;
    
        MI_SYS_WindowRect_t stDestSize;
    
        MI_SYS_FieldType_e enCapSel;
    
        MI_SYS_FrameScanMode_e nScanMode;
    
        MI_SYS_PixelFormat_e ePixFormat;
    
        MI_VI_FrameRate_e eFrameRate;
    
        MI_U32 u32FrameModeLineCount
    
    } MI_VIF_ChnPortAttr_t;
    
  • 成员

    此Port仅仅支持设置stDestSize,enDstFrameRate,其他属性会被忽略。

    成员名称 描述
    stCapRect 捕获区域起始坐标(相对于设备图像的大小)与宽高
    stDestSize 目标图像大小。必须配置,且大小不应该超出外围 ADC 输出图像的大小范围,否则可能导致VIF 硬件工作异常
    eCapSel 帧场选择,只用于隔行模式,建议捕获单场时选择捕获底场。逐行模式时,该项必须设置为 E_MI_SYS_FIELDTYPE_BOTH。
    eScanMode 输入扫描模式 (逐行、隔行)
    ePixFormat 支持的像素存储格式。
    eFrameRate 目标帧率和输入帧率的比值关系。如果不进行帧率控制,则该值设置为0。可以按照1:1,2:1,4:1,8:1,4:3等比例输出,仅在BT656接口中可用。
    u32FrameModeLineCount 通知下一级处理的时机,用于E_MI_VIF_WORK_MODE_RGB_FRAMEMODE的时候
  • 相关数据类型及接口

    MI_VIF_SetChnPortAttr


3.14. MI_VIF_ChnPortStat_t

  • 说明

    VIF 通道信息结构体。

  • 定义

    typedef struct MI_VIF_ChnStat_s
    
    {
    
        MI_BOOL bEnable; /* Whether this channel is enabled */
    
        MI_U32 u32IntCnt; /* The VIFdeo frame interrupt count */
    
        MI_U32 u32FrmRate; /* current frame rate */
    
        MI_U32 u32LostInt; /* The interrupt is received but nobody care */
    
        MI_U32 u32VbFail; /* video buffer malloc failure */
    
        MI_U32 u32PicWidth;/* curren pic width */
    
        MI_U32 u32PicHeight;/* current pic height */
    
    } MI_VIF_ChnPortStat_t;
    
  • 成员

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

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

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

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


3.15. MI_VIF_SNRPad_e

  • 说明

    定义SensorPad Id。

  • 定义

    typedef enum
    
    {
    
        E_MI_VIF_SNRPAD_NULL,
    
        E_MI_VIF_SNRPADID0,
    
        E_MI_VIF_SNRPADID1,
    
        E_MI_VIF_SNRPADID2,
    
        E_MI_VIF_SNRPADID3,
    
        E_MI_VIF_SNRPAD_NUM
    
    }MI_VIF_SNRPad_e;
    
  • 成员

    成员名称 描述
    E_MI_VIF_SNRPAD_NULL 不绑定SensorPad
    E_MI_VIF_SNRPADID0 对应硬件设备Sensor0
    E_MI_VIF_SNRPADID1 对应硬件设备Sensor1
    E_MI_VIF_SNRPADID2 对应硬件设备Sensor2
    E_MI_VIF_SNRPADID3 对应硬件设备Sensor3
    E_MI_VIF_SNRPAD_NUM 超过最大Sensor Num
  • 注意事项

    在默认情况下是VIF Dev0 对应Sensor0, Dev2 对应Sensor1。

    参考MI SENSOR API中的1.2章节流程框图。

  • 相关数据类型及接口

    MI_VIF_Dev2SnrPadMuxCfg_t


3.16. MI_VIF_Dev2SnrPadMuxCfg_t

  • 说明

    定义VIF 设备和SensorPad 绑定关系。

  • 定义

    typedef struct MI_VIF_VIFDev2SnrPadMuxConf_s
    
    {
    
        MI_VIF_SNRPad_e eSensorPadID;   //sensor Pad id
    
        MI_U32 u32PlaneID;              //For HDR, 1 is short exposure, 0 is long exposure,
    
    } MI_VIF_Dev2SnrPadMuxCfg_t;
    
  • 成员

    成员名称 描述
    eSensorPadID Sensor Pad Id
    u32PlaneID PlaneId, for HDR 1 长曝,0 短曝, for liner 为0xff.
  • 注意事项

    在默认情况下是VIF Dev0 对应Sensor0, Dev2 对应Sensor1.默认不调用该接口。

  • 相关数据类型及接口

    MI_VIF_SetDev2SnrPadMux


3.17. MI_VIF_InitParam_t

  • 说明

    VIF设备初始化参数。

  • 定义

    typedef struct MI_VIF_InitParam_s
    
    {
    
        MI_U32 u32DevId;
    
        MI_U8 *u8Data;
    
    } MI_VIF_InitParam_t;
    
  • 成员

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

    MI_VIF_InitDev


3.18. MI_VIF_DevStatus_t

  • 说明

    VIF Dev当前状态

  • 定义

    typedef struct MI_VIF_VIFDevStatus_s
    
        {
    
            MI_VIF_Dev2SnrPadMuxCfg_t stDev2SensrPad;
    
            MI_U32 bDevEn;
    
        } MI_VIF_DevStatus_t;
    
  • 成员

    成员名称 描述
    stDev2SensrPad VIF Dev 绑定的SensorPad及PlaneId
    bDevEn VIF Dev当前使能状态
  • 相关数据类型及接口

    MI_VIF_GetDevStatus


3.19. MI_VIF_CALLBK_FUNC

  • 说明

    定义回调函数类型

  • 定义

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

    MI_VIF_CallBackParam_t


3.20. MI_VIF_CallBackMode_e

  • 说明

    定义回调模式。

  • 定义

    typedef enum
    
    {
    
        E_MI_VIF_CALLBACK_ISR,
    
        E_MI_VIF_CALLBACK_MAX,
    
    } MI_VIF_CallBackMode_e;
    
  • 成员

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

    目前只支持ISR 回调模式。

  • 相关数据类型及接口

    MI_VIF_CallBackParam_t


3.21. 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.22. 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 视频通道已绑定

5. PROCFS介绍


5.1. cat

  • 调试信息

    #cat /proc/mi_modules/mi_vif/mi_vif0
    

  • 调试信息分析

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

  • 参数说明

    参数 描述
    Dev Attr u32VifDevIdx Dev 号
    Intf 输入数据的协议
    Clk 工作模式,Runmode
    Hdr Hdr 类型
    IsrCnt Frame start callback count
    yncCnt/EnqCnt/ BarCnt/CheckCnt/ DequCnt Callback 接口执行次数
    OutPort Attr Chn Channel id
    Pipe   Pipe id
    Port Port id
    Cap_size 输入 size
    Dest_size 输出 size
    Sel 帧场选择
    Scan 扫描模式,progressive or interlaced
    Fmt Out put pixel format
    Rate

    Frame rate type

    LineCnt Frame mode line count
    Atom 底层拿住 buffer  数量
    MetaInfo Frame id
    Outcount 输出 frame count
    Failcount 获取 outputbuffer 失败次数
    Fps Frame per second
    Recv_size Vif  硬件收到 size
    Out_size Write dma size
    SubOut_size Write sub dma size
    ReadIdx/WriteIdx/ DequeIdx Read,write,deque 的 index
    FrameStartCnt 处理到第几 frame
    FrameDoneCnt 处理完多少 frame
    VbFail VbFail 计数
    DropFrameCnt Drop frame 的数量
    RingBufStatus Ring buf  状态


5.2. echo

功能
Dump frame 到指定路径
命令 echo dump [chnid portid /path] > /proc/mi_modules/mi_vif/mi_vif0
参数说明 Chnid: channel id
Portid: port id
Path: 路径存放
举例 echo dump 0 0 /tmp > /proc/mi_modules/mi_vif/mi_vif0
功能
设置vif的atom 数量
命令 echo initatom [chnid InitAtom] > /proc/mi_modules/mi_vif/mi_vif0
参数说明 Chnid: channel id
InitAtom: Driver 最大持有buffer 数量
举例 echo initatom 0 2 > /proc/mi_modules/mi_vif/mi_vif0
功能
设置timer
命令 echo usetimer [devid bUseTimer] > /proc/mi_modules/mi_vif/mi_vif0
参数说明 devid: device id
bUseTimer: 使能timer
举例 echo usetimer 0 1 > /proc/mi_modules/mi_vif/mi_vif0