一个典型的IPC数据流
下图是一个典型的IPC数据流模型,流动过程如下:
1. 建立Vif->Vpe->Venc的绑定关系;
2. Sensor 将数据送入vif处理;
3. Vif 将处理后的数据写入Output Port申请的内存,送入下一级;
4. Vpe接收数据,分别送入Pass0(ISP/SCL0)、Pass1(LDC)、Pass2(SCL1)进行处理,将处理的数据写入Output Port申请的内存,送入下一级;
5. Venc接收数据,送入编码器进行编码处理,将编码后的数据写入RingPool内存区;
6. 用户调用Venc的接口取流,送入用户业务层App。
------------------------------
视频输入(VIF)实现启用视频输入设备、视频输入通道、绑定视频输入通道等功能。
==================================
视频输入(VIF)模块结构体如下:
MI_VIF_DevAttr_t结构体
MI_VIF_DevAttr_t定义视频输入设备的属性。
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_VIF_DevAttr_t;
成员包括:
---------------------------------------------
MI_VIF_ChnPortAttr_t结构体
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,其他属性会被忽略
------------------------------------------------
MI_VIF_ChnPortStat_t结构体
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;
成员包括:
- 结构体的中断计数,可用于无中断检测。
- 该结构体的帧率是每 10 秒钟的平均帧率,即 VIF 会每隔十秒统计一次平均帧率, 该值并不精确。
- 如果查询到该结构体的中断丢失计数一直在增加,说明 VIF 工作出现异常。
-------------------------------------------------
MI_VIF_SNRPad_e结构体
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;
成员包括:
在默认情况下是VIF Dev0 对应Sensor0, Dev2 对应Sensor1。
参考下图:
------------------------------------------
MI_VIF_Dev2SnrPadMuxCfg_t 结构体
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;
成员包括:
在默认情况下是VIF Dev0 对应Sensor0, Dev2 对应Sensor1.默认不调用该接口。