MI VIF API
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
3.0 | 12/04/2020 | |
3.1 | 07/16/2021 | |
3.2 | 08/25/2021 | |
3.3 | 12/22/2021 | |
3.4 | 02/17/2022 | |
3.5 | 03/21/2022 | |
3.6 | 07/08/2022 | |
3.7 | 10/27/2022 | |
3.8 | 01/11/2023 | |
3.9 | 03/14/2023 | |
3.10 | 04/17/2023 | |
3.11 | 06/28/2023 | |
3.12 | 12/22/2023 | |
3.13 | 06/14/2024 |
1. 概述¶
1.1. 模块说明¶
视频输入(VIF)实现启用视频输入设备、视频输入通道、绑定视频输入通道等功能。
1.2. 流程框图¶
1.2.1. Tiramisu框图¶
注意:
-
16个Dev中总共只有8个Device、8条Pipe可以用。
-
mipi接口4个sensor 分别用到:
linear mode: dev0/dev4/dev8/dev12
hdr frame mode: dev0/dev1, dev4/dev5, dev8/dev9, dev12/dev13
hdr reatlime mode: dev0/dev1
-
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支持realtime 输出到MI_ISP,同一时间只能用一个。
3. 任意Device支持YUV422格式realtime 输出到MI_SCL,同一时间只能用一个。1 只支持YUV422格式输入 只支持12bit bayer格式输出 支持 只支持scaling down, height 有做scaling down 时, width 最大等于960。 只支持Dram 输出。
1.2.2. Muffin框图¶
注意:
-
最大32个Device、32条Pipe可用。
-
mipi接口8个sensor 分别用到:
linear mode: dev0/dev4/dev8/dev12, dev16/dev20/dev24/dev28
hdr frame mode: dev0/dev1, dev4/dev5, dev8/dev9, dev12/dev13, dev16/dev17, dev20/dev21, dev24/dev25, dev28/dev29
hdr reatlime mode: dev0/dev1, dev16/dev17
-
BT656 接口8个sensor分别用到pad0/pad2/pad1/pad3/pad4/pad6/pad5/pad7
-
BT1120接口4个sensor分别用到pad0/pad1/pad4/pad5
-
Lvds接口4个sensor分别用到:
Linear mode: dev0/dev8, dev/16/dev24
Hdr frame mode: dev0/dev1, dev8/dev9, dev16/dev17, dev24/dev25
Hdr realitme mode: dev0/dev1, dev16/dev17
-
每个device 都只有一个channel Id0, 通过MI_SYS和后端绑定时只能用channel id0
PortId 输入Pixel 输出Pixel Crop scaling 输出形式 0 按照sensor格式输入 1. 按照sensor格式输出;
2. 将YUV422格式转成12bit bayer 格式输出。不支持 不支持 1. Dram 输出。
2. Device0-15 支持 realtime 输出到MI_ISP Dev0,同一时间只能用一个;Device16-31 支持 realtime 输出到MI_ISP Dev1,同一时间只能用一个。
3. Device0-15 支持YUV422格式realtime 输出到MI_SCL Dev2,同一时间只能用一个;Device16-31 支持YUV422格式realtime 输出到MI_SCL Dev6,同一时间只能用一个。
1.2.3. Mochi框图¶
注意:
-
最大16个Device、16条Pipe可用。
-
Mipi(YUV)接口4个sensor 分别用到:pad0/pad2/pad1/pad3,不支持HDR,类似BT656,1个pad最多支持出4路。
-
BT656 接口4个sensor分别用到pad0/pad2/pad1/pad3。
-
BT1120接口2个sensor分别用到pad0/pad1。
-
每个device 都只有一个channel Id0,通过MI_SYS和后端绑定时只能用channel id0。
PortId 输入Pixel 输出Pixel Crop scaling 输出形式 0 只支持YUV422格式输入 只支持YUV422格式输出 不支持 不支持 1. Dram 输出。
2. 任意Device支持yuv 格式 realtime 输出到MI_ISP Dev0,同一时间只能用一个。
1.2.4. Maruko框图¶
注意:
-
最大9个Dev、4条Pipe可用。
-
Mipi接口2个sensor 分别用到:pad0/pad2,1个pad最多支持出4路。Pad0支持 4lane 或者拆成 2+2 lane(pad0+pad2)。
-
BT656 只支持sensor pad1,只支持一路sensor 信号。
-
不支持BT1120。
-
每个device 都只有一个channel id0,通过MI_SYS和后端绑定时只能用channel id0。
PortId 输入Pixel 输出Pixel Crop scaling 输出形式 0 按照sensor格式输入 按照sensor格式输出 不支持 不支持 1. Dram 输出。
2. 任意Device支持realtime 输出到MI_ISP Dev0,同一时间只能用一个。
3. 任意Device支持YUV422格式realtime 输出到MI_SCL Dev2,同一时间只能用一个。
1.2.5. Opera框图¶
注意:
-
最大16个Dev、5条Pipe可用。
-
Mipi接口分别用到:pad0/pad2/pad1/pad3,1个pad最多支持出4路混合视频信号。
Pad0支持 4lane 或者拆成 2+2 lane(pad0+pad2),Pad1支持 2lane 或者拆成 1+1 lane(pad1+pad3)。
-
BT656 接口2个sensor分别用到pad0/pad1,都只支持一路sensor 信号。
-
BT1120接口1个sensor用到pad0,只支持一路sensor 信号,只支持YUYV和UYVY格式输入。
-
每个device 都只有一个channel id0,通过MI_SYS和后端绑定时只能用channel id0。
PortId 输入Pixel 输出Pixel Crop scaling 输出形式 0 按照sensor格式输入 按照sensor格式输出 不支持 不支持 1. Dram 输出。
2. 任意Device支持realtime 输出到MI_ISP Dev0,同一时间只能用一个。
3. 任意Device支持YUV422格式realtime 输出到MI_SCL Dev2,同一时间只能用一个。
1.2.6. Souffle框图¶
注意:
-
最大16个Dev可用,一共19条Pipe,只有13条可用(10条接收前段数据,3条用于STA统计),与Opera/Maruko不同,存在留空无效的Pipe(⅔/7/11/14/15)。
-
Mipi接口分别用到:pad0/pad2/pad1/pad3,1个pad最多支持出4路混合视频信号。
Pad0支持 4lane 或者拆成 2+2 lane(pad0+pad2),Pad1支持 4lane,pad3支持 2lane。
-
BT656 接口2个sensor分别用到pad0/pad1,都只支持一路sensor 信号。
-
BT1120接口1个sensor用到pad0,只支持一路sensor 信号。
-
每个device 都只有一个channel id0,通过MI_SYS和后端绑定时只能用channel id0。
PortId 输入Pixel 输出Pixel Crop scaling 输出形式 0 按照sensor格式输入 按照sensor格式输出 不支持 不支持 1. Dram 输出。
2. 任意Device支持realtime 输出到MI_ISP Dev0,同一时间只能用一个。
3. 任意Device支持YUV422格式realtime 输出到MI_SCL Dev2,同一时间只能用一个。
1.2.7. Iford框图¶
注意:
-
支持Mipi 接口。
-
不支持BT656 / BT1120 / Parallel 接口。
-
最大8个Dev、3条Pipe可用。
-
Mipi接口2个sensor 分别用到:pad0/pad2,1个pad最多支持出4路。Pad0支持 4lane 或者拆成 2+2 lane(pad0+pad2)。
-
每个device 都只有一个channel id0,通过MI_SYS和后端绑定时只能用channel id0。
PortId 输入Pixel 输出Pixel Crop scaling 输出形式 0 按照sensor格式输入 按照sensor格式输出 支持 不支持 1. Dram 输出。
2. 任意Device支持realtime 输出到MI_ISP Dev0,同一时间只能用一个。
3. 不支持YUV422格式realtime 输出到MI_SCL Dev2。
1.3. 关键字说明¶
-
Group
群组,一个sensor pad中有可能会混合多种信号,所以一个sensor pad 需要一个group来对应接收。
-
Dev
Group 中处理单独一种信号的设备。
-
Port
Dev 上的输出端口。
-
Pipe
Pipe 为VIF内部的数据流通道,所有device共同分配,决定VIF最大可以同时输出的路数。
-
DI模式
去隔行功能,将两场信号合成一场。
2. API 参考¶
API名 | 功能 |
---|---|
MI_VIF_CreateDevGroup | 创建Device 对应的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 反注册回调接口 |
MI_VIF_CustFunction | 提供Vif客制化功能 |
2.1. 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_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
注意
-
MI VIF跟后端模块同时存在Realtime 和FrameMode连接时,例如ISP Bayer Realitme,SCL Dev2 YUV Realitme同时其他Dev有Frame mode连接,优先Create Realtime连接的DevGroup 并Bind后端模块。
-
在Create DevGroup之前一定要确保 sensor 出流,即如果使用我们的MI sensor,需要确保MI_SNR_Enable,如果使用user sensor需要确保user自己的sensor已经完成初始化。
-
Group Id 包含Device Id 0 Device0~3 1 Device4~7 2 Device8~11 3 Device12~15 4 Device16~19 5 Device20~23 6 Device24~27 7 Device28~31
-
-
举例
#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_VIF_PORT vifPort = 0; MI_SNR_PADID SnrPadId = 0; MI_U32 u32PlaneId = 0; MI_U16 vifDevIdPerGroup=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(SnrPadId, &stPad0Info)); STCHECKRESULT(MI_SNR_GetPlaneInfo(SnrPadId, 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++) { 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++) { 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_VIF_PORT vifPort=0; MI_U16 vifDevIdPerGroup=0; for(vifDevIdPerGroup=0; vifDevIdPerGroup< ST_MAX_VIF_DEV_PERGROUP; vifDevIdPerGroup++) { vifDev = groupId*ST_MAX_VIF_DEV_PERGROUP+vifDevIdPerGroup; for(vifPort=0; vifPort< ST_MAX_VIF_OUTPORT_NUM; vifPort++) { STCHECKRESULT(MI_VIF_DisableOutputPort(vifDev, vifPort)); } STCHECKRESULT(MI_VIF_DisableDev(vifDev)); } STCHECKRESULT(MI_VIF_DestroyDevGroup(groupId)); return MI_SUCCESS; }
-
相关主题
2.2. MI_VIF_DestroyDevGroup¶
-
功能
销毁设备对应的Group。
-
语法
MI_S32 MI_VIF_DestroyDevGroup(MI_VIF_GROUP GroupId)
-
形参
参数名称 描述 输入/输出 GroupId Group ID 输入 -
返回值
-
MI_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
注意
需要先使用MI_VIF_DisableOutputPort 禁用掉device 上所有输出端口,再使用MI_VIF_DisableDev 禁用掉group 上所有device。
-
举例
请参见MI_VIF_CreateDevGroup的举例。
-
相关主题
2.3. MI_VIF_GetDevGroupAttr¶
-
功能
获取Group 的属性。
-
语法
MI_S32 MI_VIF_GetDevGroupAttr(MI_VIF_GROUP GroupId, MI_VIF_GroupAttr_t *pstGroupAttr)
-
形参
参数名称 描述 输入/输出 GroupId Group ID 输入 pstGroupAttr Group属性 输出 -
返回值
-
MI_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
相关主题
2.4. MI_VIF_SetDevAttr¶
-
功能
设置 VIF 设备属性。
-
语法
MI_S32 MI_VIF_SetDevAttr(MI_VIF_DEV DevId, MI_VIF_DevAttr_t *pstDevAttr)
-
形参
参数名称 描述 输入/输出 DevId VIF 设备号。 输入 pstDevAttr VIF 设备属性指针,静态属性。 输入 -
返回值
-
MI_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
注意
-
在调用前要保证 VIF 设备处于禁用状态。如果 VIF 设备已处于使能状态,可以使用MI_VIF_DisableDev 来禁用设备。
-
参数 pstDevAttr 主要用来配置指定 VIF 设备的视频输入格式。
-
eInputPixel只支持YUV422_YUYV/YVYU/UYVY/VYUY 和 bayer格式,具体请参考章节1.2,根据chip规格设置。
-
-
举例
请参见MI_VIF_CreateDevGroup的举例。
-
相关主题
2.5. MI_VIF_GetDevAttr¶
-
功能
获取 VIF 设备属性。
-
语法
MI_S32 MI_VIF_GetDevAttr(MI_VIF_DEV DevId, MI_VIF_DevAttr_t *pstDevAttr)
-
形参
参数名称 描述 输入/输出 DevId VIF 设备号。 输入 pstDevAttr VIF 设备属性指针。 输出 -
返回值
-
MI_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
相关主题
2.6. MI_VIF_EnableDev¶
-
功能
启用 VIF 设备。
-
语法
MI_S32 MI_VIF_EnableDev(MI_VIF_DEV DevId);
-
形参
参数名称 描述 输入/输出 DevId VIF 设备号。 输入 -
返回值
-
MI_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
注意
-
启用前必须已经设置设备属性,否则返回失败。
-
可重复启用,不返回失败。
-
-
举例
请参见MI_VIF_CreateDevGroup的举例。
-
相关主题
2.7. MI_VIF_DisableDev¶
-
功能
禁用 VIF 设备。
-
语法
MI_S32 MI_VIF_DisableDev(MI_VIF_DEV DevId);
-
形参
参数名称 描述 输入/输出 DevId VIF 设备号。 输入 -
返回值
-
MI_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
注意
-
必须先禁用所有设备上的输出端口后,才能禁用 VIF 设备。
-
可重复禁用,不返回失败。
-
-
举例
请参见MI_VIF_CreateDevGroup的举例。
-
相关主题
2.8. MI_VIF_GetDevStatus¶
-
功能
获取设备的状态。
-
语法
MI_S32 MI_VIF_GetDevStatus(MI_VIF_DEV DevId, MI_VIF_DevStatus_t *pstVifDevStatus)
-
形参
参数名称 描述 输入/输出 DevId VIF 设备号 输入 pstVifDevStatus 设备状态 输出 -
返回值
-
MI_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
2.9. 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_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
注意
-
默认情况下,使用 MI_VIF_SetOutputPortAttr 接口的目的是设置端口属性,如CapSize、DestSize、FrameRate等等。
-
Port0不支持crop和scaling,所以cap和dest size 必须和MI_VIF_SetDevAttr时的input size 相等。
-
Tiramisu 系列芯片支持port1,port1输入只支持YUV格式,所以只有YUV sensor才可以使用port1,支持crop和scaling down,输出只支持12bit bayer格式。
-
Tiramisu 系列芯片支持port1,Port1 height 有做scaling down 时,输出width 最大等于960。
-
目前不支持eFrameRate 设置,预留参数。
-
Tiramisu、Muffin、Opera、Souffle系列芯片:port0支持输出12bit bayer格式,可以送进MI_ISP 做3DNR。
-
Mochi芯片:支持输出YUV422格式,可以送进MI_ISP 做3DNR。
芯片 Pixel 要求 支持压缩模式 注意 Tiramisu Bayer 10/12bit E_MI_SYS_COMPRESS_MODE_TO_8BIT 无 Muffin Bayer 10/12bit E_MI_SYS_COMPRESS_MODE_TO_8BIT 无 Mochi YUV422 UYVY E_MI_SYS_COMPRESS_MODE_TO_6BIT
E_MI_SYS_COMPRESS_MODE_SFBC0DI 模式不支持SFBC0压缩 Maruko Bayer 10/12bit E_MI_SYS_COMPRESS_MODE_TO_8BIT 无 Opera Bayer 10/12bit E_MI_SYS_COMPRESS_MODE_TO_8BIT 无 Souffle Bayer 10/12bit E_MI_SYS_COMPRESS_MODE_TO_8BIT 无 Iford Bayer 10/12bit E_MI_SYS_COMPRESS_MODE_TO_8BIT 无
-
-
举例
请参见MI_VIF_CreateDevGroup的举例。
-
相关主题
2.10. 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_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
相关主题
2.11. MI_VIF_EnableOutputPort¶
-
功能
启用 VIF输出端口。
-
语法
MI_S32 MI_VIF_EnableOutputPort(MI_VIF_DEV DevId, MI_VIF_PORT PortId)
-
形参
参数名称 描述 输入/输出 DevId VIF 设备号 输入 PortId Port号 输入 -
返回值
-
MI_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
注意
-
必须先设置通道属性,且通道所绑定的 VIF 设备必须使能。
-
可重复启用 VIF 通道,不返回失败。
-
-
举例
请参见 MI_VIF_SetDevAttr 的举例。
-
相关主题
2.12. MI_VIF_DisableOutputPort¶
-
功能
禁用 VIF 输出端口。
-
语法
MI_S32 MI_VIF_DisableOutputPort(MI_VIF_DEV DevId, MI_VIF_PORT PortId)
-
形参
参数名称 描述 输入/输出 DevId VIF 通道号。 输入 PortId Port号 输入 -
返回值
-
MI_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
注意
-
禁用 VIF 通道Port后,此 VIF 通道Port即停止采集视频输入数据,如果已经绑定后端,则后端不会再接收到视频图像。
-
可重复禁用 VIF 通道Port,不返回失败。
-
-
举例
请参见MI_VIF_CreateDevGroup的举例。
-
相关主题
2.13. 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_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_vif_datatype.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
注意
-
该接口可查询中断计数、通道使能状态、平均帧率、中断丢失数、获取 VB 失败次数、图像宽高等信息。
-
通过该接口获取到的帧率是每 1 秒钟的平均帧率,即 VIF 会每隔一秒统计一次平均帧率,该值并不精确,会有些波动。
-
用户可通过该接口查询中断丢失数,如果该数值一直在增加,说明 VIF 工作出现异常。
-
Tiramisu系列以后的芯片才支持该接口。
-
2.14. 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_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_common.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
注意
-
该接口目前只支持kernel mode调用
-
-
举例
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; }
-
相关主题
2.15. 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_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_common.h、mi_vif.h
-
库文件:libmi_vif.a
-
-
注意
-
该接口目前只支持kernel mode调用
-
-
举例
-
相关主题
2.16. MI_VIF_CustFunction¶
-
描述
提供VIF客制化功能。
-
语法
MI_S32 MI_VIF_CustFunction(MI_VIF_DEV DevId, MI_VIF_CustCmd_e eCmdId, MI_U32 u32DataSize, void *pCustData);
-
参数
参数名称 描述 输入/输出 DevId VIF dev ID 输入 eCmdId 客制化功能ID 输入 u32DataSize 客制化功能数据大小 输入 pCustData 客制化功能数据首地址 输入 -
返回值
-
MI_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_common.h、mi_vif.h
-
库文件:libmi_vif.a
-
3. 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 输入驱动clock 类型 |
MI_VIF_GroupIdMask_e | 定义设备群组mask |
MI_VIF_SNRPad_e | 定义 SensorPad Id |
MI_VIF_GroupAttr_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 | 定义回调参数 |
MI_VIF_HDRFusionType_e | 定义VIF HDR 融合模式 |
MI_VIF_HDRExposureType_e | 定义VIF HDR 曝光类型 |
MI_VIF_MetaDataType_e | 定义VIF额外功能类型 |
MI_VIF_MetaDataAttr_t | 定义VIF额外功能参数结构体 |
MI_VIF_CustCmd_e | 定义VIF客制化命令 |
MI_VIF_PutDataAttr_t | 定义VIF输入数据结构体 |
3.1. MI_VIF_GROUP¶
-
说明
定义设备群组ID。
-
定义
typedef MI_U32 MI_VIF_GROUP;
-
相关数据类型及接口
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_LVDS, 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_LVDS 输入数据符合LVDS 协议 -
注意事项
可以通过MI_SNR_GetPadInfo中的eIntfMode 获取当前接口模式。
-
相关数据类型及接口
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,
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 会采集信号异常。
-
相关数据类型及接口
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输出。 -
注意事项
该功能为预留功能,暂不支持,如果需要控制帧率输出,可以通过MI_SYS_BindChnPort2 来设置。
-
相关数据类型及接口
3.5. 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 进行双沿采样。 -
注意事项
无。
-
相关数据类型及接口
3.6. 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_COMP, //compressed HDR mode E_MI_VIF_HDR_TYPE_LI, //Line interlace HDR E_MI_VIF_HDR_TYPE_COMPVS, E_MI_VIF_HDR_TYPE_DCG, //Dual conversion gain 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_COMP, sensor融合长曝和短曝,isp控制两张frame的gain值 E_MI_VIF_HDR_TYPE_LI Line interlace HDR E_MI_VIF_HDR_TYPE_COMPVS compressed HDR + Very short E_MI_VIF_HDR_TYPE_DCG Dual conversion gain HDR -
注意事项
-
hdr type和sensor相关,可以通过MI_SNR_GetPadInfo的eHDRMode获取当前sensor支持的HDR type。
-
实现HDR功能需要MI_VIF 和MI_ISP 模块设置相同的HDR类型。
-
DCG HDR type 和 COMPVS HDR type暂不支持。
-
COMP HDR type opera系列芯片支持。
-
-
相关数据类型及接口
3.7. 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 才通过该参数设置。
-
-
相关数据类型及接口
3.8. 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_ID4 = 0x0010, E_MI_VIF_GROUPMASK_ID5 = 0x0020, E_MI_VIF_GROUPMASK_ID6 = 0x0040, E_MI_VIF_GROUPMASK_ID7 = 0x0080, E_MI_VIF_GROUPMASK_ID_MAX = 0xffff } MI_VIF_GroupIdMask_e;
-
注意事项
在多sensor 拼接场景中, 需要两个sensor 图像同步输出, 此时只需要创建一个group, 将这两个group id mask 在一起即可。
-
相关数据类型及接口
3.9. 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_4 = 4, E_MI_VIF_SNRPAD_ID_5 = 5, E_MI_VIF_SNRPAD_ID_6 = 6, E_MI_VIF_SNRPAD_ID_7 = 7, 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_4 对应硬件设备Sensor4 E_MI_VIF_SNRPAD_ID_5 对应硬件设备Sensor5 E_MI_VIF_SNRPAD_ID_6 对应硬件设备Sensor6 E_MI_VIF_SNRPAD_ID_7 对应硬件设备Sensor7 E_MI_VIF_SNRPAD_ID_MAX 超过最大Sensor Num E_MI_VIF_SNRPAD_ID_NA 无效sensor id -
注意事项
-
在默认情况下是VIF Group0 对应Sensor0,Group2 对应Sensor1,group6 对应Sensor5。
-
Tiramisu、Mochi 只有4个pad(0-3),Muffin 则有8个pad(0-7)。参考章节1.2。
-
-
相关数据类型及接口
3.10. 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_HDRFusionType_e eHDRFusionTpye; MI_U8 u8HDRExposureMask; 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_MetaDataAttr_t stMetaDataAttr; } MI_VIF_GroupAttr_t;
-
成员
成员名称 描述 eIntfMode 接口模式。 eWorkMode 工作模式。 eHDRType HDR类型 eHDRFusionTpye HDR融合类型(2Frame 还是 3Frame) u8HDRExposureMask HDR曝光组合,由 MI_VIF_HDRExposureType_e bitmask 组成 eClkEdge 时钟边沿模式(上升沿采样、下降沿采样、双沿采样)。 eMclk 输出给sensor的时钟类型 eScanMode 输入扫描模式 (逐行、隔行) u32GroupStitchMask 多个GroupId缝合输出, 由MI_VIF_GroupIdMask_e bitmask 组成。 stMetaDataAttr 额外功能开关及属性(PDAF、档头不压缩、STA统计)。 -
注意事项
Tiramisu、Muffin系列芯片eScanMode只支持 E_MI_SYS_FRAME_SCAN_MODE_PROGRESSIVE。
u8HDRExposureMask : 2Frame HDR 时下没有意义,内部会设定成长短曝。3Frame Hdr 时,可以通过该值设定4种组合,长短、长中、中短、长中短,目前只有 Souffle 支持。
-
相关数据类型及接口
3.11. MI_VIF_DevAttr_t¶
-
说明
定义视频输入设备的属性。
-
定义
typedef struct MI_VIF_DevAttr_s { MI_SYS_PixelFormat_e eInputPixel; MI_SYS_DataPrecision_e eDataPrecision; MI_SYS_WindowRect_t stInputRect; MI_SYS_FieldType_e eField; MI_BOOL bEnH2T1PMode; } MI_VIF_DevAttr_t;
-
成员
成员名称 描述 eInputPixel 设备输入像素格式。 eDataPrecision 设备输入像素位宽。 stInputRect 设备采集输入范围。 eField 帧场选择,只用于隔行模式,建议捕获单场时选择捕获底场。逐行模式时,该项必须设置为 E_MI_SYS_FIELDTYPE_NONE。
Value: 0 No Field / 1 Top Field / 2 Bottom Field / 3 Both FieldsbEnH2T1PMode 使能采集水平方向缩小一半功能。 -
注意事项
-
如果设备是bayer格式, pixel format设置形式如下:
stVifDevAttr.eInputPixel = (MI_SYS_PixelFormat_e)RGB_BAYER_PIXEL(stSnrPlane0Info.ePixPrecision, stSnrPlane0Info.eBayerId);
-
eDataPrecision 参数仅在DVP接口跑YUV sensor时使用。如:输入8 bit YUV时,需设置eDataPrecision为E_MI_SYS_DATA_PRECISION_8BPP,告知VIF当前输入的data pin数目为8。
-
bEnH2T1Pmode 参数只有输入是YUV格式时才可以使用,非YUV格式使用会返回err。
-
-
相关数据类型及接口
3.12. MI_VIF_OutputPortAttr_t¶
-
说明
定义 VIF输出端口属性。
-
定义
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_SYS_CompressMode_e eCompressMode; } MI_VIF_OutputPortAttr_t;
-
成员
成员名称 描述 stCapRect 捕获区域起始坐标(相对于设备图像的大小)与宽高。 stDestSize 目标图像大小。必须配置,且大小不应该超出外围 ADC 输出图像的大小范围,否则可能导致VIF 硬件工作异常。 ePixFormat 像素存储格式支持,可支持YUV422 packet/bayer。 eFrameRate 目标帧率和输入帧率的比值关系。如果不进行帧率控制,则该值设置为0。可以按照1:1,2:1,4:1,8:1,4:3等比例输出。该功能为预留功能,暂不支持,如果需要控制帧率输出,可以通过MI_SYS_BindChnPort2 来设置。 eCompressMode 图像压缩模式,只有在vif与isp绑定模式为framemode才能打开,节省buffer,不设置默认值为0不压缩。
Muffin可以设置成E_MI_SYS_COMPRESS_MODE_TO_8BIT,打开FBC。
Mochi可以设置成E_MI_SYS_COMPRESS_MODE_TO_6BIT (for YUV FBC)或者E_MI_SYS_COMPRESS_MODE_SFBC0 (SFBC)。 -
相关数据类型及接口
3.13. 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 每 1 秒的平均帧率,该值不一定精确。 u32LostInt 中断丢失计数。 u32VbFail 获取 VB 失败计数。 u32PicWidth 图像宽度。 u32PicHeight 图像高度。 -
注意事项
-
结构体的中断计数,可用于无中断检测。
-
该结构体的帧率是每 1 秒钟的平均帧率,即 VIF 会每隔一秒统计一次平均帧率, 该值并不精确。
-
如果查询到该结构体的中断丢失计数一直在增加,说明 VIF 工作出现异常。
-
-
相关数据类型及接口
3.14. 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 -
相关数据类型及接口
3.15. MI_VIF_CALLBK_FUNC¶
-
说明
定义回调函数类型
-
定义
typedef MI_S32 (*MI_VIF_CALLBK_FUNC)(MI_U64 u64Data);
-
相关数据类型及接口
3.16. 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 回调模式。
-
相关数据类型及接口
3.17. 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到达时的信号
-
-
相关数据类型及接口
3.18. 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 回调函数参数 -
相关数据类型及接口
3.19. MI_VIF_HDRFusionType_e¶
-
说明
定义VIF HDR 融合模式
-
定义
typedef enum { E_MI_VIF_HDR_FUSION_TYPE_NONE, E_MI_VIF_HDR_FUSION_TYPE_2T1, E_MI_VIF_HDR_FUSION_TYPE_3T1, E_MI_VIF_HDR_FUSION_TYPE_MAX } MI_VIF_HDRFusionType_e;
-
成员
成员名称 描述 E_MI_VIF_HDR_FUSION_TYPE_NONE 不代表任何融合模式 E_MI_VIF_HDR_FUSION_TYPE_2T1 2Frame HDR 模式 E_MI_VIF_HDR_FUSION_TYPE_3T1 3Frame HDR 模式 E_MI_VIF_HDR_FUSION_TYPE_MAX HDR 融合模式 Enum Max 值 -
注意事项
-
E_MI_VIF_HDR_FUSION_TYPE_2T1: 即普通的HDR长短曝两帧,开启HDR功能后,就算不设置也会内部设定的default值
-
E_MI_VIF_HDR_FUSION_TYPE_3T1: 3帧HDR 曝光融合,目前只有 Souffle 支持
-
-
相关数据类型及接口
3.20. MI_VIF_HDRExposureType_e¶
-
说明
定义VIF HDR 曝光类型
-
定义
typedef enum { E_MI_VIF_HDR_EXPOSURE_TYPE_NONE, E_MI_VIF_HDR_EXPOSURE_TYPE_SHORT = 0x01, E_MI_VIF_HDR_EXPOSURE_TYPE_MEDIUM = 0x02, E_MI_VIF_HDR_EXPOSURE_TYPE_LONG = 0x04, E_MI_VIF_HDR_EXPOSURE_TYPE_MAX } MI_VIF_HDRExposureType_e;
-
成员
成员名称 描述 E_MI_VIF_HDR_EXPOSURE_TYPE_NONE 不代表任何 HDR 曝光 E_MI_VIF_HDR_EXPOSURE_TYPE_SHORT HDR 短曝 E_MI_VIF_HDR_EXPOSURE_TYPE_MEDIUM HDR 中曝 E_MI_VIF_HDR_EXPOSURE_TYPE_LONG HDR 长曝 E_MI_VIF_HDR_EXPOSURE_TYPE_MAX HDR 曝光 Enum Max 值 -
注意事项
-
在 2Frame HDR 的时候,内部会强制设定成 0x1+ 0x4, 即长短曝
-
E_MI_VIF_HDR_EXPOSURE_TYPE_MEDIUM: 目前只有 Souffle 支持设置 HDR 中曝
-
-
相关数据类型及接口
3.21. MI_VIF_MetaDataType_e¶
-
说明
定义VIF额外功能类型
-
定义
typedef enum { E_MI_VIF_METADATA_NONE, E_MI_VIF_METADATA_PDAF = 0x01, E_MI_VIF_METADATA_HEADER = 0x02, E_MI_VIF_METADATA_AE_STAT = 0x04, E_MI_VIF_METADATA_AWB_STAT = 0x08, E_MI_VIF_METADATA_MAX } MI_VIF_MetaDataType_e;
-
成员
成员名称 描述 E_MI_VIF_METADATA_NONE 不代表任何功能 E_MI_VIF_METADATA_PDAF PDAF功能 E_MI_VIF_METADATA_HEADER 档头不压缩功能 E_MI_VIF_METADATA_AE_STAT STA统计功能AE统计 E_MI_VIF_METADATA_AWB_STAT STA统计功能AWB统计 E_MI_VIF_METADATA_MAX MetaData枚举最大值 -
相关数据类型及接口
3.22. MI_VIF_MetaDataAttr_t¶
-
说明
定义VIF额外功能属性结构体
-
定义
typedef struct MI_VIF_MetaDataAttr_s { MI_U32 u32MetaDataTypeMask; MI_SYS_WindowRect_t stCropRect; // For header usage only } MI_VIF_MetaDataAttr_t;
-
成员
成员名称 描述 u32MetaDataTypeMask 额外功能开关Mask值 stCropRect 档头不压缩功能的范围指定窗口 -
相关数据类型及接口
3.23. MI_VIF_CustCmd_e¶
-
说明
定义VIF客制化命令
-
定义
typedef enum { E_MI_VIF_CUSTCMD_PUTNUCDATA, E_MI_VIF_CUSTCMD_SETIRSTATUS, E_MI_VIF_CUSTCMD_MAX } MI_VIF_CustCmd_e;
-
成员
成员名称 描述 数据类型 E_MI_VIF_CUSTCMD_PUTNUCDATA 塞NUC数据到VIF的客制化命令 MI_VIF_PutDataAttr_t E_MI_VIF_CUSTCMD_SETIRSTATUS 设置IR灯状态到VIF的客制化命令 MI_U8 E_MI_VIF_CUSTCMD_MAX 客制化命令最大值 NA -
注意事项
- E_MI_VIF_CUSTCMD_PUTNUCDATA:只有前端输入为高德红外 sensor 时,才能使用该cmd,客户通过获取 sensor 输出的 AD 数据,进行NUC 算法校准,然后把NUC 校准数据通过这个指令下到VIF,VIF 在通过内部IP传输给sensor 进行调节。
- E_MI_VIF_CUSTCMD_SETIRSTATUS:该 cmd 用于 windows hello 功能,客户通过该 cmd 把当前 IR 亮灭状态(ON:1, OFF:0) 设置给 VIF,VIF 内部在把该 IR flag 存放到对应的 frame buffer 信息中,客户即可在后级取出 buffer 后知道该 buffer 对应的 IR 灯状态。
-
相关数据类型及接口
3.24. MI_VIF_PutDataAttr_t¶
-
说明
定义VIF输入数据结构体
-
定义
typedef struct MI_VIF_PutDataAttr_s { MI_U32 u32Stride; MI_U32 u32Buffsize; MI_PHY phyAddr; } MI_VIF_PutDataAttr_t;
-
成员
成员名称 描述 u32Stride 输入数据一行的byte数 u32Buffsize 输入数据的大小 phyAddr 输入数据的物理地址 -
相关数据类型及接口
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的使用状况以及Group/Dev/pipe/outport属性,可以动态地获取到这些信息,方便调试和测试。
-
参数说明
参数 描述 Group Attr GroupId Group号 Intf 输入数据的协议,请参考MI_VIF_IntfMode_e Work 工作模式,请参考MI_VIF_WorkMode_e Clkedge 时钟边沿触发模式,请参考MI_VIF_ClkEdge_e Hdr Hdr类型,请参考MI_VIF_HDRType_e HdrFusion Hdr 融合类型,请参考MI_VIF_HDRFusionType_e ExposureMask Hdr 曝光组合,请参考MI_VIF_HDRExposureType_e NUC 目前是否为 NUC Sensor,走NUC 流程 MetaDataType vif 格外功能打开情况,请参考MI_VIF_MetaDataType_e MetaDataCrop 档头不压缩功能的范围指定窗口,请参考MI_VIF_MetaDataAttr_t Dev Attr Dev Dev号 FsCnt Frame start 中断数量 FdCnt Frame done 中断数量 incrop Input Corp Size,请参考MI_VIF_DevAttr_t stInputRect infmt 输入数据格式,请参考MI_VIF_DevAttr_t eInputPixel capsel Field type选择,请参考MI_VIF_DevAttr_t Field rstcnt 分别对应(Fifo, Wdma, Fifo_Wdma) Reset 的次数 NucRdmaDone Nuc rdma done的次数 AsyncCnt/EnqCnt/ BarCnt/CheckCnt/ DequCnt MI 内部线程Callback接口执行次数 DropCnt 统计的丢帧数量 NucEnqCnt 应用层塞给mi vif 的nuc buffer 次数,亦为buffer塞到 nuc rdma 的次数 Pipe Attr PipeId Pipe号 PortId Port号 DevId Dev号 Hdn H2T1PMode使能,请参考MI_VIF_DevAttr_t bEnH2T1PMode crop Mhal设置输出裁剪区域 (DI Mode下Height减半) Dest Mhal设置输出大小(DI Mode下Height减半) Pixel Mhal 设置输出pixel格式,由MI pixel转换得到 wkmode Pipe工作模式,0: Realtime,1: FrameMode Compress 压缩模式,请参考MI_VIF_OutputPortAttr_t eCompressMode OutPort Attr Dev Device id Port Port id wFsNum Wdma Frame start 中断次数 wLCNum Wdma Line Count hit 中断次数 wDoneNum Wdma Done 中断次数 DvCnt Double vsync 发生次数 OsCnt Oversize 发生次数 LostFrame Wdma Frame start 中断丢失次数 Cap_size Port Crop Size,请参考MI_VIF_OutputPortAttr_t stCapRect Dest_size 输出size,请参考MI_VIF_OutputPortAttr_t stDestSize Fmt Output pixel format,请参考MI_VIF_OutputPortAttr_t ePixFormat Rate Frame rate type,请参考MI_VIF_OutputPortAttr_t eFrameRate CRC CRC校验开关状态 Atom 底层拿住buffer 数量 MetaInfo Frame id OutCount 输出frame count,done的张数 Addr0Cnt Frame地址0的次数,即skip frame的数量 FailCount 获取outputbuffer失败次数 EnqFailCount Enqueue时塞output buffer到wdma失败的次数 Fps Frame per second Recv_size Vif 硬件收到size Out_size port0 wdma配置output size SubOut_size port1 wdma 配置output size FifoDepth Wdma Fifo 的buffer数量 WdmaInactive Wdma 是否处于活跃状态,0: 活跃,1: 停止
5.2. cat debug_hal¶
5.2.1. vif_ints¶
-
调试信息
#cat /proc/mi_modules/mi_vif/debug_hal/vif0/vif_ints
-
调试信息分析
记录帧周期、当前VIF Channel/Wdma/Aff的使用状况以及统计相关的中断次数。
-
参数说明
参数 描述 VIF CH CH State CH当前状态 Interval(ns) 帧间隔时间 VREF_FALLING VSYNC 中断数量,并显示最近一次发生中断时间戳 LINE_CNT_0 Total line count hit 0 中断数量,并显示最近一次发生中断时间戳 LINE_CNT_1 Total line count hit 1 中断数量,并显示最近一次发生中断时间戳 TOTAL_PIX_CNT Total pixel count hit 中断数量,并显示最近一次发生中断时间戳 VIF WDMA WDMA State Wdma当前状态 FrameStart Frame start 中断数量,并显示最近一次发生中断时间戳 LINE_CNT Line count hit 中断数量,并显示最近一次发生中断时间戳 FrameDone Frame done 中断数量,并显示最近一次发生中断时间戳 VIF FIFO Aff State Afifo当前状态 AFF Count Fifo full 中断数量,并显示最近一次发生中断时间戳
5.2.2. vif_info¶
-
调试信息
#cat /proc/mi_modules/mi_vif/debug_hal/vif0/vif_info
-
调试信息分析
记录从暂存器获得的VIF基本设定。
-
参数说明
参数 描述 CH State CH当前状态 vg Group号 link 连结模式:
E_VIF_LINK_PATH_TYPE_FRAME_WDMA
E_VIF_LINK_PATH_TYPE_REAL_ISP
E_VIF_LINK_PATH_TYPE_REAL_SCLCH_EN 当前VIF channel号使能 SRC VIF来源选择 INPUT_FMT 数据格式 PIX_FMT 输出位宽 CROP_EN 裁剪使能 CROP_START_X 读取裁剪水平数据 CROP_START_Y 读取裁剪垂直数据 PIXEL_CNT VIF 裁剪像素数 LINE_CNT VIF 裁剪行数 TOTAL_PIXEL_CNT VIF 总像素数 TOTAL_LINE_CNT VIF 总行数
5.3. echo¶
# echo help >/proc/mi_modules/mi_vif/mi_vif0
Echo help 查看可用命令
功能 | Dump frame 到指定路径 |
---|---|
命令 | echo dump [devid portid path cnt dumpdrop] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id portid: port id path: 路径存放 cnt: 可选参数,设置要dump的张数,不设置默认为1 dumpdrop: 可选参数,设置为1只dump需要drop的frame,默认为0 |
举例 | echo dump 0 0 /tmp > /proc/mi_modules/mi_vif/mi_vif0 echo dump 0 0 /tmp 2 1 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 设置vif的atom 数量 |
---|---|
命令 | echo initatom [devid portid InitAtom] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id portid: port id InitAtom: Driver 最大持有buffer 数量 |
举例 | echo initatom 0 0 2 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 擦除vif缓存 |
---|---|
命令 | echo erasebuffer [devid portid bEraseBuffer] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id portid: port id EraseBuffer: 使能擦除缓存 |
举例 | echo erasebuffer 0 0 1 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 设置Dev Mask |
---|---|
命令 | echo devmask [devid bMask] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id bmask: 使能mask |
举例 | echo devmask 0 1 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 使能output port |
---|---|
命令 | echo enport [devid portid bEn] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id portid: port id bEn: 使能vif port |
举例 | echo enport 0 0 1 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 设置output port 属性 |
---|---|
命令 | echo cfgport [ devid portid crop(x,y,width,height) dest(width,height) pixel compress] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id portid: port id crop(x,y,width,height): output port crop的位置 dest(width,height): output size Pixel: 输出pixel format compress: 压缩模式 |
举例 | echo cfgport 0 0 0 0 1280 720 1280 720 14 5 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | Reset vif |
---|---|
命令 | echo resethw [devid eResetType] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id eResetType: 需要reset的位置。0:FIFO;1:wdma;2:AFIFO_WDMA_GROUP;3:FIFO_WDMA_DEV |
举例 | echo resethw 0 3 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 设置fps阀值,当运行时fps小于设置的阀值,就会打印出warning |
---|---|
命令 | echo fpsth [devid portid FpsTh FpsFloatTh] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id portid: port id FpsTh: fps整数位阀值 FpsFloatTh: fps小数点位阀值 |
举例 | echo enport 0 0 29 98 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 设置pts间隔阀值,当出现某个pts大于max或者小于min阀值,打印warning |
---|---|
命令 | echo ptsth [devid portid ptsmin ptsmax] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id portid: port id ptsmin: pts 间隔最小阀值(us) ptsmax: pts 间隔最大阀值(us) |
举例 | echo ptsth 0 0 25000 40000 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 触发fifo full reset流程 |
---|---|
命令 | echo fifofull [devid bNeedReset] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id bNeedReset: 设置 1 走fifo full reset流程 |
举例 | echo fifofull 0 1 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 使能crc 校验功能 |
---|---|
命令 | echo crc [devid portid enable] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id portid: port id enable: 设置 1 使能CRC校验 |
举例 | echo crc 0 0 1 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 设置MI VIF debug level |
---|---|
命令 | echo debuglv [devid debuglevel] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id debuglevel: MI VIF debug level, 默认为0,不打开 0x0001 Mhal_Buff_Dbg 0x0002 CHECK_LOOP 0x0004 CHECK_ISR 0x0008 CHECK_FLOW 0x0080 CHECK_LATENCY |
举例 | echo debuglv 0 3 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 打开VIF pattern gen |
---|---|
命令 | echo patgen [group width height fps pixel multi bFieldEn Enable] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | Group: group ID Width: pattern 宽度 Height: pattern 高度 Fps: 输出帧率设置 Pixel: pattern pixel 格式 Multi: 可以设置1chn/2chn/4chn,同BT656多路概念 bFieldEn: 使能DI 模式 Enable: 使能pattern |
举例 | echo patgen 0 1280 720 25 14 4 0 1 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 打开VIF data gen |
---|---|
命令 | echo datagen [group Enable] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | group: group ID Enable: 使能data gen |
举例 | echo datagen 0 1 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 配置参数强制deque buffer,在卡buffer的时候debug使用 |
---|---|
命令 | echo forcedeque [devid portid CurrentWriteAddr ValidCnt WdmaInactive] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id Portid: port id CurrentWriteAddr: wdma 当前正在写的地址 ValidCnt: wdma fifo 内还有的buffer数量 WdmaInactive: wdma状态,0: 活跃,1: 停止 |
举例 | echo forcedeque 0 0 0 0 1 > /proc/mi_modules/mi_vif/mi_vif0 |
功能 | 随机修改vif 输出buffer |
---|---|
命令 | echo changebuf [devid portid cnt bdump mode] > /proc/mi_modules/mi_vif/mi_vif0 |
参数说明 | devid: device id portid: port id Cnt: 需要修改的buffer数量 bdump: 可选参数,修改的buffer是否需要dump出来,默认0不dump Mode: 可选参数,buffer修改的模式,默认为mode 0 0: 随机修改整张buffer,修改数量为用户设置cnt 1: 压缩模式7(SFBC0)专用,只随机修改PPS位置,修改数量为用户设置cnt 2: 随机修改整张buffer,修改vif输出的每一张buffer,不参考cnt 3: 压缩模式7(SFBC0)专用,50%概率修改PPS,50%非PPS,修改vif输出的每一张buffer,不参考cnt |
举例 | echo changebuf 0 0 3 > /proc/mi_modules/mi_vif/mi_vif0 echo changebuf 0 0 3 1 2 > /proc/mi_modules/mi_vif/mi_vif0 |
6. MODPARAM 介绍¶
6.1. json文件内容示例¶
{ "E_MI_MODULE_ID_SYS" : { "cmdQBufSize" : 400 }, "E_MI_MODULE_ID_VIF" : { "bSupportIrq" : 1, "bUseReset" : 1, "u32threadPriority" : 98, "u32CpuMaskAffinity" : 0, "bIsrCheckLost" : 0, "b5MCaseOccupy" : 1, "bUseCurrentWrite" : 1, "bMultiPush" : 1, "u32DevDebugLevel": [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "u8DevNeedUsePipeId" : [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255], "u8DevNeedUseWdmaShareMemSize" : [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255], "bCrcEnable" : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "u8CompressMode" : [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255], "u8ChangeBufMode" : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "u32PatGen" : [0,0,0,0,0,0,0,0], "u8MetaDataPipe" : [0,0,0,0], "u8MetaDataMem" : [0,0,0,0], "bEnableOutputCrop" : [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "VifExternalConfig": "/config/sensor_v3.json" } }
modparam.json 文件在/config 目录下, "E_MI_MODULE_ID_VIF" 节点相关的参数会在 VIF 初始化阶段加载。
modparam.json 只需填写需要用到的参数,没写的参数内部会有默认值。
6.2. VIF常用参数以及参数解析¶
参数名 | 默认值 | 支持平台 | 是否支持客户配置 | 作用 |
---|---|---|---|---|
bSupportIrq | 1 | All Chip | N | 配置内部timer启动,0时启动内部timer,用于快起塞buffer |
bUseReset | 1 | All Chip | Y | 配置遇到fifo full时是否reset |
u32threadPriority | 98 | All Chip | N | 配置mi vif线程优先级 |
u32CpuMaskAffinity | 0 | All Chip | N | 配置mi vif线程挂在哪个cpu上,此参数为mask |
bIsrCheckLost | 0 | All Chip | N | 配置统计没塞buffer次数的方式,0 polling 统计,1 isr 统计 |
b5MCaseOccupy | 1 | All Chip | N | 配置是否参考分辨率 5M 分配 wdma share memory |
bUseCurrentWrite | 1 | All Chip | N | 配置内部check buffer done是否参考currentwrite,0是donebase |
bMultiPush | 1 | Souffle | N | 用于强制关闭multi-push,0 关闭 |
u32DevDebugLevel | 0 | All Chip | Y | 配置mi vif 调试日志的级别 |
u8DevNeedUsePipeId | 255 | All Chip | Y | 配置dev 使用的 pipe |
u8DevNeedUseWdmaShareMemSize | 255 | All Chip | Y | 配置dev 使用的 wdma share memory 大小 |
u64PmTimeoutLatencyNS | 1000000000 | All Chip | N | 配置rtpm 超时时间 |
bCrcEnable | 0 | Mochi/Maruko/Opera/Souffle | Y | 配置crc 使能 |
u8CompressMode | 255 | All Chip | Y | 配置压缩模式 |
u8ChangeBufMode | 0 | All Chip | N | 配置vif输出buffer的修改模式 |
u32PatGen | 0,0,0,0,0,0,0,0 | Mochi/Maruko/Opera/Souffle | N | 配置vif group pattern gen 属性 |
u8MetaDataPipe | 0,0,0,0 | Souffle | Y | 配置Metadata 使用的 pipe |
u8MetaDataMem | 0,0,0,0 | Souffle | Y | 配置Metadata 使用的 wdma share memory 大小 |
bEnableOutputCrop | 0 | Opera/Souffle | N | 配置pipe crop的使能 |
VifExternalConfig | "/config/sensor_v3.json" | All Chip | Y | 配置vif硬件属性的json文件路径 |