MPP (Media Process Platform) design (2016.10.12) ================================================================================ The mpp is a middleware library for Rockchip SoC's cross platform media process. The main purpose of mpp is to provide very high performance, high flexibility and expansibility on multimedia (mainly video and image) process. The design target of mpp is to connect different Rockchip hardware kernel driver and different userspace application. Rockchip has two sets of hardware kernel driver. The first one is vcodec_service/vpu_service/mpp_service which is a high performance stateless frame base hardware kernel driver. This driver supports all available codecs that hardware can provide. This driver is used on Android/ Linux. The second one is v4l2 driver which is developed for ChromeOS. It currently supports H.264/H.265/vp8/vp9. This driver is used on ChomeOS/Linux. Mpp plans to support serval userspace applications including OpenMax, FFmpeg, gstreamer, libva. Feature explaination ================================================================================ 1. Cross Platform The target OS platform including Android, Linux, ChromeOS and windows. Mpp uses cmake to compile on different platform. 2. High Performance Mpp supports sync / async interface to reduce the time blocked in interface. And mpp internally make hardware and software run parallelly. When hardware is running sofware will prepare next hardware task at the same time. 3. High Flexibility mpi (Media Process Interface) is easy to extend by different control function. The input/output element packet/frame/buffer is easy to extend different components. System Diagram ================================================================================ +---------------------------------------+ | | | ffmpeg / OpenMax / gstreamer / libva | | | +---------------------------------------+ +-------------------- MPP ----------------------+ | | | +-------------------------+ +--------+ | | | | | | | | | MPI / MPP | | | | | | buffer queue manage | | | | | | | | | | | +-------------------------+ | | | | | | | | +-------------------------+ | | | | | | | | | | | codec | | OSAL | | | | decoder / encoder | | | | | | | | | | | +-------------------------+ | | | | | | | | +-----------+ +-----------+ | | | | | | | | | | | | | parser | | HAL | | | | | | control | | reg_gen | | | | | | | | | | | | | +-----------+ +-----------+ +--------| | | | +-------------------- MPP ----------------------+ +---------------------------------------+ | | | kernel | | RK vcodec_service / v4l2 | | | +---------------------------------------+ Mpp is composed of four main sub-modules: OSAL (Operation System Abstraction Layer) This module shutters the differences between different operation systems and provide basic components including memory, time, thread, log and hardware memory allocator. MPI (Media Process Interface) / MPP This module is on charge of interaction with external user. Mpi layer has two ways for user. The simple way - User can use put/get packet/frame function set. The advanced way - User has to config MppTask and use dequeue/enqueue funciton set to communicate with mpp. MppTask can carry different meta data and complete complex work. Codec (encoder / decoder) This module implements the high efficiency internal work flow. The codec module provides a general call flow for different video format. Software process will be separated from hardware specified process. The software will communicate with hardware with a common task interface which combines the buffer information and codec specified infomation. Parser/Controller and hal (Hardware Abstraction Layer) This layer provides the implement function call of different video format and different hardware. For decoder parser provide the video stream parse function and output format related syntax structure to hal. The hal will translate the syntax structure to register set on different hardware. Current hal supports vcodec_service kernel driver and plan to support v4l2 driver later.