MPP 硬编解码
MPP 是 Rockchip 提供的媒体处理软件平台,全称 Media Process Platform。它把芯片底层编解码差异封装起来,对上层提供统一的 MPI 接口,用来做视频硬解、硬编和部分视频处理。
官方项目:

MPP 位于应用和内核编解码驱动之间,上层通过 MPI 接口调用,底层由 MPP 处理编解码模块、系统适配和硬件访问。
适用场景
在 Neardi Pi 3 上,如果应用需要使用硬件编解码能力,而不是纯 CPU 编解码,一般就会用到 MPP。
常见场景:
- 解码 H.264 / H.265 等视频流,用于显示、AI 前处理或文件播放。
- 将摄像头图像编码成 H.264 / H.265 / MJPEG 码流。
- 开发低延迟视频应用,直接控制 Rockchip 编解码硬件。
- 和 GStreamer、FFmpeg 或自研 C/C++ 应用集成。
MPP 更偏底层。如果只是快速搭建媒体链路,GStreamer 通常更方便;如果需要精细控制 buffer、延迟、码率控制或零拷贝路径,直接使用 MPP 会更合适。
功能范围
具体编解码能力和 SoC、SDK 配置有关。MPP 通常提供:
| 功能 | 常见格式 |
|---|---|
| 视频解码 | H.265、H.264、VP9、VP8、MPEG-4、MPEG-2、MPEG-1、VC1、MJPEG、AV1 |
| 视频编码 | H.265、H.264、VP8、MJPEG |
| 视频处理 | 拷贝、缩放、色彩空间转换、去隔行 |
量产项目前,建议再结合 SDK release note 或 Rockchip multimedia benchmark 文档确认 RK3576 的实际能力。
核心概念
MPP 常用的数据结构包括:
MppCtx:编解码实例上下文。MppApi:MPI 操作接口。MppPacket:压缩码流包,常用于解码输入或编码输出。MppFrame:解码后的图像帧或编码前的原始帧。MppBuffer:硬件友好的 buffer,通常和 DMA-BUF 相关。MppTask:高级任务接口,用于更复杂的处理流程。
简单解码流程可以理解为:
bitstream -> MppPacket -> decode_put_packet()
decode_get_frame() -> MppFrame -> display / process / save
简单编码流程可以理解为:
raw image -> MppFrame -> encode_put_frame()
encode_get_packet() -> MppPacket -> file / network stream
源码和编译
SDK 中 MPP 一般在:
SDK/external/mpp
也可以从官方仓库获取:
git clone https://github.com/rockchip-linux/mpp.git
MPP 支持 CMake 构建。基于 SDK 开发时,优先使用 SDK 内置的编译流程,因为它和发布镜像中的 kernel driver、用户态库以及板级配置更匹配。
Demo 和工具
MPP 源码里包含 demo 和实用工具,常用于快速验证硬解、硬编链路。
调试时重点看:
- 输入码流格式和分辨率是否正确。
- 输出帧格式、stride 和 buffer 排布是否符合预期。
- 内核 video codec driver 是否启用。
- 应用是否有权限访问对应的编解码设备节点。
开发注意点
- MPP 依赖 Rockchip 内核编解码驱动和对应 DTS 配置。
- 需要性能时,尽量减少不必要的内存拷贝,优先考虑 DMA-BUF / 零拷贝路径。
- 注意图像 stride 和像素格式,硬件 buffer 通常有对齐要求,不一定等于可见宽度。
- 做推流时,需要根据延迟和带宽要求调整码率、GOP、帧率和码率控制模式。
- 调试建议先跑官方 demo,再逐步替换输入输出部分。