API变动说明
1. 35x 相对于33x 的主要变动¶
1.1. VIF修改¶
VIF 模块创建task是以Device为单位,一个Device只能处理一种信号,所以需要引入group的概念。一个group 对应一个sensorpad,而一个sensorpad可以接收多种信号。以BT656为例,一个SensorPad可能会有多种信号,这时以Group对应一个Sensor Pad,Group包含的Device分别处理不同的信号。
1.2. SCL 及ISP修改¶
VPE拆分为ISP SCL,divp 删除。
1.3. DSIP修改¶
目的是方便disp device0 数据拿出来做零通道编码。
1.4. GFX/VENC/VDEC修改¶
GFX/VENC/VDEC添加DeviceID,SYS/RGN 添加SocID。
2. VIF¶
2.1. VIF框图对比¶
主要差异:
-
新增Group概念,一个Sensor pad中有可能会混合多种信号, 所以一个 Sensor pad 需要一个Group来对应接收
-
一个Group包含4个Device,且对应关系固定,Device处理单独一种信号
-
总共16个Device,最多可以使用8个,其中2个Device 0 和Device4可以设定Realtime
-
每个Device只有一个Chn ID0 用于MI_SYS bind后端
-
MIPI 4Sensor Dev使用如下
linear mode: dev0/dev4/dev8/dev12,
hdr frame mode: dev0/1, dev⅘, dev8/9, dev12/13
-
BT656 接口2个Sensor分别用到:sensor pad0/2
-
Sensor Pad 和VIF Group , Device和PlaneId 有默认的对应关系
SensorPad0-Group0-Device0-3
SensorPad2-Group1-Device4-7
SensorPad1-Group2-Device8-11
SensorPad3-Group3-Device12-15
如果需要改变这个关系, 可以通过MI_VIF_CreateDevGroupExt
设置Group 接收对应Sensor Pad信号, Device 接收对应Plane信号。
注意:35X系列芯片不支持改Group 和sensor pad的对应关系。
2.2. VIF流程对比¶
-
33x是在call 第一个Vif Api时创建;35x新增CreateDevGroup,根据Group主动创建Dev。
-
33x设置Chn参数,35x无Chn参数,直接设置GroupDev下Port属性
-
35x可以使用User Sensor,通过接口Cus_xxx获取Pad以及Plane Info
-
33x WorkMode用于表明VIF-VPE连接模式。35x中只用来表示Group中有几路信号。VIF-VPE 连接模式由bind信息自动推导。35x 具体的api 的使用参考MI VIF API。
3. ISP¶
3.1. ISP框图对比¶
-
33x MI_VPE 包含ISP LDC 可以把SCL也包进去, 35x将MI_VPE拆分为MI_ISP、MI_SCL,不再可以将LDC放在MI_VPE内部,需要主动在MI_ISP-MI_SCL之间bind。MI_ISP MI_SCL也需要主动bind;
-
33x ISP有多种组合输出情景:
情景1:ISP-SCL realtime
情景2:ISP buffer写出,
情景3:ISP- LDC buffer写出
情景4:ISP IR buffer写出
35x 移除各组合后分为三种:
情景1:ISP-SCL realtime
情景2:ISP YUV buffer写出
情景3:ISP IR buffer写出;
3.2. ISP流程对比¶
-
33x是在调用 第一个VPE Api时创建Device;35x需主动CreateDevice;
-
33x通过MI_VPE_EnableInputPort设定不同的Pass,35x不需要设定,由上层bind不同模块串接PipeLine;
-
33x可以包含LDC, 35x不再包含。MI_LDC为独立模块,需要手动bind;
-
35x不再保留MI_VPE_SetChannelAttr 函数;
-
35X ISP跟前级bind 时,走framemode的时候,可以通过MI_ISP_SetInputPortCrop在输入端做Crop;
-
35x MI_ISP作为独立模块,串PipeLine时需要进行bind;
4. SCL新增¶
4.1. SCL框图对比¶
差异:
-
33x
VPE通过Input Port确认SCL的输入源
Input port0:ISP-SCL Realtime
Input port1:Scl 从Dram读取
Input port2:MI_VIF YUV Realtime
-
35x
MI_SCL按照输入源划分Device
Device0: ISP Output Port0 Realtime连接,scl 的dev0 只能跟前级bind,并且只能走realtime。
Device1: Scl dev1 从Dram读取,SCL dev1 只能跟前级走frame mode;跟 MI_Jpeg bind 可以RealTime连接。
Device2: 只支持和MI_VIF YUV Realtime 连接
Device3: 只支持Scl从Dram读取,只支持HWSCL5,只有 HWSCL5 能注册进Dev3,支持Rotation
35x注意事项:
-
相同HWSclID不可以跨Device使用,即如果CreateDevcie指定使用了SCL2和SCL3 则其他Devcie不可再使用;
-
Output portid按照MI_SCL_CreateDevice 时设置u32NeedUseHWOutPortMask从低位到高位依次和HWSCLID 映射
EX:stCreateDevAttr.u32NeedUseHWOutPortMask = E_MI_SCL_HWSCL2| E_MI_SCL_HWSCL3; 则port0->HWSCL2; port1->HWSCL3;
-
Output port和后端realtime/ring/hw_autosync 绑定时,后端仅支持和一个Output port id 连接;
-
有MI_VDEC使用场景时Device3会被MI_VDEC创建占用,其他Device不能再使用HWSCL5;
4.2. SCL流程¶
35x对比差异如下
-
33x SCL无Device概念,35x需要主动创建Device;
-
33x通过设置ChnPortMode来区分SCL的输入源,35x不再需要,Device代表不同输入源;
-
33x MI_VPE_SetPortMode设定VPE Output port属性, 35x MI_SCL_SetOutputPortParam设定SCL Output port属性;
-
35x当输入源是Dram时 SCL可以通过MI_SCL_SetInputPortCrop接口,在输入端做crop;
-
35x MI_SCL作为独立模块,串PipeLine时需要进行bind;
5. DIVP 取消¶
-
取消DIVP模块
33x 上DIVP 就是一个独占的SCL,支持Crop, Rotation 等功能;
-
35x Stretch buf 功能通过调用mi_scl 来实现;
接口:
MI_S32 MI_SCL_StretchBuf(MI_SCL_DirectBuf_t *pstSrcBuf, MI_SYS_WindowRect_t *pstSrcCrop,
MI_SCL_DirectBuf_t *pstDstBuf, MI_SCL_FilterType_e eFilterType)
注意事项:
-
该API使用Device3,使用前需要创建Device3;
-
该API是阻塞的,只有该帧数据做完才会结束。
-
-
其他(参考API模块介绍)
使用范例可参考Demo:sdk\verify\mi_demo\source\vpe\ST_TestStritchBuff
6. RGN¶
-
接口修改
所有接口添加形参:
MI_S32 MI_RGN_Xxx(MI_U16 u16SocId, XXX, …);
-
删除枚举
typedef enum { E_MI_RGN_MODID_VPE = 0, E_MI_RGN_MODID_DIVP, E_MI_RGN_MODID_LDC, E_MI_RGN_MODID_MAX }MI_RGN_ModId_e;
-
结构体修改
33x 结构体
typedef struct MI_RGN_ChnPort_s { MI_RGN_ModId_e eModId; MI_S32 s32DevId; MI_S32 s32ChnId; MI_S32 s32OutputPortId; }MI_RGN_ChnPort_t;
35x 结构体
typedef struct MI_RGN_ChnPort_s { MI_ModuleId_e eModId; MI_S32 s32DevId; MI_S32 s32ChnId; MI_S32 s32PortId; }MI_RGN_ChnPort_t;
7. VENC¶
-
删除api
MI_VENC_GetChnDevid MI_VENC_SetModParam MI_VENC_GetModParam
-
改动API
MI_VENC_InitDev ->MI_VENC_CreateDev MI_VENC_DeInitDev-> MI_VENC_DestroyDev MI_VENC_CreateChn ……. MI_VENC_GetIntraRefresh
以上接口加上device id 的形参MI_VENC_DEV VeDev
-
增加device id define
MI_VENC_DEV_ID_H264_H265_0 MI_VENC_DEV_ID_H264_H265_1 MI_VENC_DEV_ID_JPEG_0 MI_VENC_DEV_ID_JPEG_1
新增的 dev_id提供给用户调用api 时使用。33x系列是要用户调用MI_VENC_GetChnDevid api 获取编码器类型。
8. SYS¶
-
接口修改
所有接口添加形参:
MI_S32 MI_SYS_Xxx(MI_U16 u16SocId, XXX, …);