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

2. 名词解释¶
| 简称 | 全称 | 职责 |
|---|---|---|
| AI | Audio Input Interface | I2S audio input采集单元,支援16路x16bitx8k音频信号输入 |
| AO | Audio Output Interface | 支援1路16bit steroaudio output |
| DISP | Display Engine | DISP有两种实现: ①DISP0/DISP1对DIVP处理单元输出的图像做硬件拼图,并连同AO输出音频信号一起编码成HDMI/VGA/CVBS 输出信号的单元 ②Virtual DISP: 对DIVP 输出的图像做软拼图,并输出软件拼图的图像。软件拼图的图像主要用于支援零通道编码 |
| DIVP | Deinterlace&VideoPost ProcessEngine | DIVP Engine有两个主要的功能 ①对VIF输出的Interlace信号进行DeInterlace处理(*个别芯片才具备) ②对VDEC输出的视频帧图像做视频后处理 |
| FB | FrameBuffer | UI显示 |
| GFX | Graphics Engine | Graphic Engine提供对2D画图的基本硬件加速支援,降低CPU的负荷 |
| HDMI | High Definition Multimedia Interface | HDMI/VGA标准输出 |
| SYS | System | 实现MI系统初始化、内存管理、各个模块之间数据流的管理 |
| VDEC | Video Decoder | H264/H265/JPEG视频解码器 |
| VDISP | Vitrual Display | 软件拼图 |
| VENC | Video Encoder | H264/H265/MotionJpeg编码器,输入原始图像序列一般来自于VPE单元 |
| WLAN | Wireless Local Area Network | 提供简单的wifi信号的扫描,连接功能 |
3. MI SW TOP LEVEL ARCHITECTURE¶

4. 基本概念¶
-
数据流
各个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_DIVP, MI_VENC,virtual DISP,可支援多个channel
③对于不可分时复用之模组比如MI_DISP(0/1), 只能支援一个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 模块总类划分
需要处理数据流 无数据流概念 Driver模块(一般存在于kernel mode) MI_VDEC, MI_VPE, MI_DIVP,MI_VENC, MI_DISP, MI_AI, MI_AO MI_GFX -
无数据流概念的MI 模块,其处理数据模型比较简单,输入数据和返回数据都是其使用者模块直接调用该MI 模块的私有接口灌入数据和读回,没有统一模型
-
有数据流概念的模块,其数据输入输出都透过MI_SYS模块内部调度
-
-
各个MI 模块channel/port 概念
MI 模块 Channel数目及概念 Input Port数目及概念 Output Port数目及概念 MI_VDEC 16个channel(TBD)每个channel代表一路视频解码用例 1个input port,解码输入的RAW ES数据流 1个output 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 无
5. 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之间的数据流

6. 典型应用场景¶
