SDK架构介绍
1. 主要硬件示意图¶

2. 名词解释¶
| 简称 | 全称 | 职责 |
|---|---|---|
| VIF | VIDEO Input Interface | BT656/BT1120 /MIPI/DVP信号采集单元。同一路视频输入信号下,VIF可以同时输出预缩放图像和原始尺寸图像原始信号尺寸内容同时输出到DRAM上 只有个别芯片的VIF支援预缩放功能以在特定场景下减少系统频宽 |
| VDEC | Video Decoder | H264/H265/JPEG视频解码器 |
| VPE | Video Process Engine | 对VIF 输入的原始图像数据做缩放,旋转及图像增强的引擎 |
| DIVP | Deinterlace&VideoPost ProcessEngine | DIVP Engine有两个主要的功能 ①对VIF输出的Interlace信号进行DeInterlace处理(个别芯片才具备) ②对VDEC输出的视频帧图像做视频后处理 |
| DISP | Display Engine | DISP有两种实现: ①DISP0/DISP1对VPE/DIVP处理单元输出的图像做硬件拼图,并连同AO输出音频信号一起编码成HDMI/VGA/CVBS 输出信号的单元 ②Virtual DISP: 对VPE/DIVP 输出的图像做软拼图,并输出软件拼图的图像。软件拼图的图像主要用于支援零通道编码 |
| VENC | Video Encoder | H264/H265/MotionJpeg编码器,输入原始图像序列一般来自于VPE单元 |
| AI | Audio Input Interface | I2S audio input采集单元,支援16路x16bitx8k音频信号输入 |
| AO | Audio Output Interface | 支援1路16bit steroaudio output |
| RGN | REGION OVERLAY&COVERmodule | RGN模块提供两个功能: ①VPE/DIVP 上的图形层叠加功能 ②VPE/DIVP 上的视频层区域遮挡功能 |
| GFX | Graphics Engine | Graphic Engine提供对2D画图的基本硬件加速支援,降低CPU的负荷 |
| IVE | Intelligent Video Engine | 提供图形智能识别算法中的基本算子支援 |
| IAE | Intelligent Audio Engine | 提供语音AI算法的基本算子支援 |
| MD | Motion Detection | 基于IVE 算子库,提供运动侦测的算法模块 |
| OD | Overlap Detection | 基于IVE 算子库,提供遮挡侦测的算法模块 |
| VDF | Video Detection Framework | 整合各个视频算法识别库的中间件架构 |
3. 基本概念¶
-
数据流
各个MI Module 可以看成是一个纯数据处理单元,数据流推送由MI SYS内部统一调度。输入数据流表示该数据单元的input数据,输出数据流表示该处理单元处理过的output数据。
-
控制流
APP 对各个MI Module 数据处理过程进行参数控制的过程,比如设置MI_VENC编码参数,启动停止MI_VPE 通道,设置MI_VPE通道输出端口之分辨率及format等。
-
Data Stream(数据流)
①MI 模组的一个用例(instance)需要处理或者输出的连续的、上下文相关的数据流,比如VIF输出的原始视频帧序列,VDEC吃进的raw ES 数据序列以及VDEC输出的解码帧序列
②以之相反,MI_GFX需要处理的图形帧之间,则没有上下文相关性
-
Channel(通道)
①对于需要处理或者输出stream的MI模组,一个channel代表该MI 模组处理或者输出一路stream的分时复用的上下文(context)及相关控制流设定
②对于可分时复用之模组如MI_VDEC, MI_VPE, MI_DIVP, MI_VENC, MI_VDF,virtual DISP,可支援多个channel
③对于不可分时复用之模组比如MI_DISP(0/1), 只能支援一个channel
④VIF 模块特殊考虑,我们会认为VIF模块有32 channel 能力
-
Port(端口)
①Port分为2种,input port和output port。input port为channel输入数据流的位置,而output port则是channel输出数据流的位置。
②一个channel可以有多个input port及多个output port,比如一个MI_VENC channel有一个input port及一个output,而一个MI_VPE channel有一个input port及4个output port,而一个MI_DISP(0/1)有16个input port,却没有output port

-
MI 模块总类划分
需要处理数据流 无数据流概念 算法模块(一般存在于user mode) MI_VDF, MI_IAE MI_IVE,MI_MD,MI_OD Driver模块(一般存在于kernel mode) MI_VIF, MI_VDEC, MI_VPE, MI_DIVP,MI_VENC, MI_DISP, MI_AI, MI_AO MI_GFX, MI_IVE -
无数据流概念的MI 模块,其处理数据模型比较简单,输入数据和返回数据都是其使用者模块直接调用该MI 模块的私有接口灌入数据和读回,没有统一模型
-
有数据流概念的模块,其数据输入输出都透过MI_SYS模块内部调度
-
-
各个MI 模块channel/port 概念
MI 模块 Channel数目及概念 Input Port数目及概念 Output Port数目及概念 MI_VIF 16个channel,每个channel代表一路BT656/1120输入的图像信号 无 1或2个output port,一个原始尺寸输出和一个H/V half缩放输出
ipc芯片只能支持一个outputportMI_VDEC 16个channel(TBD)每个channel代表一路视频解码用例 1个input port,解码输入的RAW ES数据流 1个output port,解码输入帧序列 MI_VPE 2个channel(TBD)每个channel代表一路VPE视频处理用例 1个input port,输入的处理图像帧序列 3~4个output port,VPE 处理后输出不同分辨率的帧序列,每个port的输出大小,格式及帧率都独立控制 MI_DIVP 6个channel(TBD)每个channel代表一路DIVP视频处理用例 1个input port,输入的处理图像帧序列 1个output port,DIVP 图像增强处理及缩放后输出的帧序列 MI_VENC 16个channel,每个channel代表一路视频编码用例 1个input port,输入待编码的视频帧序列 1个output port,压缩后的ES RAW data数据流 MI_DISP(0/1) 1个channel,表示一个物理输出端口(HDMI, VGA,etc) 16个input port,可以同时显示的16路视频帧序列 无 MI_DISP(virtual DISP) 最大4个channel,每个channel表示一个SW 拼图用例 16个input port,待拼图的16路视频帧输入序列 1个output port,输出拼图后的1路视频帧序列
需要cpu资源MI_AI 16 channel,16路独立的音频输入 无 1个output port,输出audioPCM stream MI_AO 1 channel 1个input port,输出的audio PCM stream 无 MI_VDF 16个channel(TBD),每个channel表示视频流智能识别用例 1个input port,输入的视频流 1个output port,识别结果 MI_IAE 16个channel(TBD),每个channel表示音频智能识别用例 1个input port,输入的音频流 1个output port,识别结果
4. MI_SYS模块职责¶
-
管理各个MI Module的channel,inputport,及output port
-
各个MI Module在启动时向MI_SYS 模块注册channel/input port/output port数目,并要实现mi_sys_DevPassOpsInfo_t里面相关callback

-
-
提供不同MI Moduleinput port与output port串接(BIND)的功能
-
所谓串接(BIND),可以称之为SW PINPON 功能,即串接的output 端口输出的数据,MI_SYS 自动推送到与之串接的input port

-
MI_SYS 支援用户APP推送数据到channel 的input port

-
MI_SYS支援用户直接获取Channel output port的输出数据

-
MI_SYS支援自动计算channel output port 的输出频率来做sw FRC

-
MI_SYS提供utility function来串接kernel mode&user mode之间的数据流

5. 典型应用场景¶
5.1. DVR¶

5.2. NVR¶

5.3. IPC¶