MPP层屏蔽了不同操作系统和不同芯片平台的差异。当前一些主流的芯片的sdk中都提供了这一层,目的是使客户能够快速的开发自己的多媒体应用。常见的如:瑞星微,海思等平台以下分别以海思和瑞芯微的芯片作为对比,比较他们的主要内容以及使用。
海思mpp参考:https://blog.csdn.net/oqqhutu12345678/article/details/82843617
如下为海思的mpp的处理流程图:
一、视屏输入(VI)
视频输入,主要是指视频的输入接口,包括mipi-rx,lvds,HISPI,bt1120,bt656等接受视频数据。
视频的输入不仅是指camera的输入数据,以及SD卡上面的视频文件数据。vi将接受到的数据存入到制定的内存区域,再次过程中可以对接受到的原始数据视频图像数据进行裁剪等处理。
二、视频处理子系统(VPSS)
支持的功能FRC(frame rate control),crop,sharpen,3dnr,scale,像素格式转换,ldc,鱼眼角正,hdr,Spread、 固定角度旋转、 任意角度旋转、Cover/Coverex、 Overlayex、Mosaic、 Mirror/Flip、压缩解压等
三、视频编码(VENC)
主要关注的是视频编码的最大分辨率和最小分辨率,以及编码性能。和编码的算法,如h.264、h.265、mjpegd等
四、视频解码(VDEC)
关注的点基本同视频的编码一样。
五。视频输出(VO)
视频输出,主要是指模块主动的从内存的相应区域读取视频或者是图片数据,并通过显示设备显示出来。
瑞芯微mpp参考:https://www.cnblogs.com/xue0708/p/10088451.html
https://max.book118.com/html/2018/0922/7123201132001150.shtm
瑞芯微的mpp提供的功能包括:
视频解码:H.265 / H.264 / H.263 / VP9 / VP8 / MPEG-4 / MPEG-2 / MPEG-1 / VC1 / MJPEG
视频编码:H.264 / VP8 / MJPEG
视频处理:视频拷贝,缩放,色彩空间转换,场视频解交织(Deinterlace)
瑞芯微mpp的系统架构:
硬件层:芯片平台的视频编解码硬件加速模块,包括 VPU, rkvdec, rkvenc 等不同类型,不同功能的硬件加速器。
内核驱动层 Kernel driver:Linux 内核的编码器硬件设备驱动,以及相关的 mmu,内存,时钟,电源管理模块等。 支持的平台
主要是 Linux kernel 3.10 和 4.4 两个版本。 MPP 库对于内核驱动有依赖。
MPP 层:用户态的 MPP 层屏蔽了不同操作系统和不同芯片平台的差异,为上层使用者提供统一的 MPI 接口。MPP 层包括 MPI 模块, OSAL 模块, HAL 模块以及视频编解码器(Video Decoder / Video Encoder)和视频处理功能模块(Video Process)。
操作系统层:MPP 用户态的运行平台,如 Android 以及 Debian 等 Linux 发行版
应用层:MPP 层通过 MPI 对接各种中间件软件,如 OpenMax, ffmpeg 和 gstreamer,或者直接对接客户的上层应用。
下图为mpi的主要的数据结构: