logo资料库

RK3399 MPP 开发参考.pdf

第1页 / 共34页
第2页 / 共34页
第3页 / 共34页
第4页 / 共34页
第5页 / 共34页
第6页 / 共34页
第7页 / 共34页
第8页 / 共34页
资料共34页,剩余部分请下载后查看
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
分享到:
收藏