MPP 开发参考
File Status:
[ ] Draft
[ ] Beta
[√] Release
Project:
Version:
Author:
Date:
MPP
0.3
陈恒明
05/07/2018
Revision
Date
Description
Author
陈恒明
0.1
0.2
0.3
04/18/2018 初始版本
05/07/2018 增加解码器 control 命令说明,编码器部分说明和
陈恒明
demo 部分说明
05/22/2018 修正一些笔误和说明错误,重新编排页码
陈恒明
谢雄斌(精英智通)
文档目录
MPP 开发参考 ................................................................................................................................................ 1
文档目录 ......................................................................................................................................................... 2
图表目录 ......................................................................................................................................................... 4
第一章 MPP 介绍 .......................................................................................................................................... 5
1.1 概述 .............................................................................................................................................................. 5
1.2 系统架构 ...................................................................................................................................................... 5
1.3 平台支持 ...................................................................................................................................................... 6
1.3.1 软件平台支持 ...................................................................................................................................... 6
1.3.2 硬件平台支持 ...................................................................................................................................... 6
1.4 功能支持 ...................................................................................................................................................... 6
1.5 注意事项 ...................................................................................................................................................... 6
第二章接口设计说明 ...................................................................................................................................... 7
2.1 接口结构概述 .............................................................................................................................................. 7
2.1 内存封装 MPPBUFFER .................................................................................................................................... 8
2.2 码流封装 MPPPACKET .................................................................................................................................. 10
2.3 图像封装 MPPFRAME .................................................................................................................................. 11
2.4 高级任务封装 MPPTASK .............................................................................................................................. 13
2.5 实例上下文封装 MPPCTX ........................................................................................................................... 14
2.6 API 封装 MPPAPI(MPI) ............................................................................................................................ 14
第三章 MPI 接口使用说明 ........................................................................................................................... 17
3.1 解码器接口 ................................................................................................................................................ 17
3.1.1 decode_put_packet .............................................................................................................................. 17
3.1.2 decode_get_frame ............................................................................................................................... 18
3.1.3 decode .................................................................................................................................................. 19
3.1.4 control .................................................................................................................................................. 19
3.2 解码器使用要点 ........................................................................................................................................ 20
3.2.1 解码器单/多线程使用方式 ............................................................................................................... 20
3.2.2 图像内存分配以及交互模式 ............................................................................................................ 20
3.3 编码器接口 ................................................................................................................................................ 23
3.3.1 control 编码配置命令 ......................................................................................................................... 23
3.3.2 encode_put_frame ................................................................................................................................27
3.3.3 encode_get_packet .............................................................................................................................. 28
3.3.4 encode .................................................................................................................................................. 28
3.3.5 control 其他命令 ................................................................................................................................. 28
第四章 MPP DEMO 说明 .............................................................................................................................. 30
4.1 解码器 DEMO .............................................................................................................................................. 30
4.2 编码器 DEMO .............................................................................................................................................. 31
4.3 实用工具 .................................................................................................................................................... 32
第五章 MPP 库编译与使用 .......................................................................................................................... 33
5.1 下载源代码 ................................................................................................................................................ 33
5.2 编译 ............................................................................................................................................................ 33
5.2.1 Android 平台交叉编译 ........................................................................................................................ 33
5.2.2 Unix/Linux 平台编译 ........................................................................................................................... 33
第六章 常见问题 FAQ ................................................................................................................................... 34
Fuzhou Rockchip Electronics Co., Ltd.
图表目录
图表 1 MPP 系统框架 ........................................................................................................................... 5
图表 2 MPI 接口使用的数据结构 ........................................................................................................ 7
图表 3 使用简单接口实现视频解码 .................................................................................................... 7
图表 4 MppBuffer 的常规使用方式 ..................................................................................................... 8
图表 5 MppBuffer 外部导入使用方式 ................................................................................................. 9
图表 6 MppPacket 重要参数说明 ....................................................................................................... 10
图表 7 MppFrame 重要参数说明 ....................................................................................................... 11
图表 8 使用 MppTask 来进行输入输出 ............................................................................................ 13
图表 9 MppTask 支持的数据类型与关键字类型 .............................................................................. 14
图表 10 MppCtx 使用过程 .................................................................................................................. 14
图表 11 MPI 接口范围 ........................................................................................................................ 17
图表 12 解码器单线程与多线程使用方式 ....................................................................................... 20
图表 13 解码器图像内存纯内部分配模式示意图 ........................................................................... 21
图表 14 解码器图像内存纯内部分配模式代码流程 ........................................................................ 21
图表 15 解码器图像内存半内部分配模式代码流程 ........................................................................ 22
图表 16 解码器图像内存纯外部分配模式示意图 ........................................................................... 22
图表 17 解码器图像内存纯外部分配模式代码流程 ........................................................................ 22
图表 18 编码器基本代码流程 ............................................................................................................ 23
Rockchip Confidential
4/ 34
Fuzhou Rockchip Electronics Co., Ltd.
第一章 MPP 介绍
1.1 概述
瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的
通用媒体处理软件平台。该平台对应用软件屏蔽了芯片相关的复杂底层处理,其目的是为了屏蔽不
同芯片的差异,为使用者提供统一的视频媒体处理接口(Media Process Interface,缩写 MPI)。MPP
提供的功能包括:
视频解码
H.265 / H.264 / H.263 / VP9 / VP8 / MPEG-4 / MPEG-2 / MPEG-1 / VC1 / MJPEG
视频编码
H.264 / VP8 / MJPEG
视频处理
视频拷贝,缩放,色彩空间转换,场视频解交织(Deinterlace)
本文档描述了 MPP 框架以及组成模块,以及供用户使用的 MPI 接口。本文档适合于上层应用开发
人员以及技术支持人员阅读。
1.2 系统架构
MPP 平台在系统架构的层次图如下图:
图表 1 MPP 系统框架
硬件层 Hardware
硬件层是瑞芯微系列芯片平台的视频编解码硬件加速模块,包括 VPU,rkvdec,rkvenc 等不同类型,
不同功能的硬件加速器。
内核驱动层 Kernel driver
Rockchip Confidential
5/ 34
Fuzhou Rockchip Electronics Co., Ltd.
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,或者直接对接客户的上
层应用。
1.3 平台支持
1.3.1 软件平台支持
MPP 支持在各种版本的 Android 平台和纯 Linux 平台上运行。
支持瑞芯微 Linux 内核 3.10 和 4.4 版本,需要有 vcodec_service 设备驱动支持以及相应的 DTS 配置
支持。
1.3.2 硬件平台支持
支持瑞芯微主流的各种系列芯片平台:
RK3188 系列,RK3288 系列,RK3368 系列,RK3399 系列
RK30xx 系列,RK312x 系列芯片,RK322x 系列芯片,RK332x 系列
RV1108 / RV1107 系列
1.4 功能支持
MPP 支持的编解码功能随运行的芯片平台规格不同区别很大,请查询对应芯片的《Multimedia
Benchmark》。
1.5 注意事项
如果想快速了解 MPP 的使用和 demo,请直接转至——第四章 MPP demo 说明。
如果想快速编译和使用 MPP 代码,请直接转至——第五章 MPP 库编译与使用。
如果想了解 MPP 设计细节与设计思路,请参考 MPP 代码根目录的 readme.txt,doc 目录下的 txt 文
档以及头文件的注释说明。
Rockchip Confidential
6/ 34
Fuzhou Rockchip Electronics Co., Ltd.
第二章接口设计说明
本章节描述了用户在使用 MPP 过程中会直接接触到的数据结构,以及这些数据结构的使用说明。
由于视频编解码与视频处理过程需要处理大量的数据交互,包括码流数据,图像数据以及内存数据,
同时还要处理与上层应用以及内核驱动的交叉关系,所以 MPP 设计了 MPI 接口,用于与上层交互。
本章节说明了 MPI 接口使用的数据结构,以及设计思路。
2.1 接口结构概述
下图为 MPI 接口使用的主要数据结构:
图表 2 MPI 接口使用的数据结构
MppMem 为 C 库 malloc 内存的封装。
MppBuffer 为硬件用的 dmabuf 内存的封装。
MppPacket 为一维缓存封装,可以从 MppMem 和 MppBuffer 生成,主要用于表示码流数据。
MppFrame 为二维帧数据封装,可以从 MppMem 和 MppBuffer 生成,主要用于表示图像数据。
使用 MppPacket 和 MppFrame 就可以简单有效的完成一般的视频编解码工作。
以视频解码为例,码流输入端把地址和大小赋值给 MppPacket,通过 put_packet 接口输入,在输出
端通过 get_frame 接口得到输入图像 MppFrame,即可完成最简单的视频解码过程。
图表 3 使用简单接口实现视频解码
MppMeta 和 MppTask 为输入输出用任务的高级组合接口,可以支持指定输入输出方式等复杂使用方
式,较少使用。
Rockchip Confidential
7/ 34
Fuzhou Rockchip Electronics Co., Ltd.
注意:以上这些接口数据结构都是使用 void*句柄来引用使用,其目的是为了方便扩展和前向兼容。
本段落中的提到的成员都是通过形如 mpp_xxx_set/get_xxx 的接口来访问。
2.1 内存封装 MppBuffer
MppBuffer 主要用于描述供硬件使用的内存块,提供了内存块的分配,释放,加减引用等功能。目
前支持 ion/drm 两种分配器,几个重要的参数成员如下:
成员名称 成员类型
int
fd
在解码过程中,解码图像的缓存通常需要在固定的缓存池里进行轮转,为了实现这一点,MPP 在
MppBuffer 基础之上又定义了 MppBufferGroup,两者的使用方式有两种,如下图:
ptr
size
void *
size_t
描述说明
表示内存块的起始虚拟地址。
表示内存块的大小。
表示内存块的用户态空间文件句柄。
其流程伪代码如下图:
图表 4 MppBuffer 的常规使用方式
Rockchip Confidential
8/ 34