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. 典型应用场景