mpp介绍
MPP是Rockchip提供的媒体处理软件平台,适用于Rockchip芯片系列。它屏蔽了有关芯片的复杂底层处理,屏蔽了不同芯片的差异,为使用者提供了统一的视频媒体统一接口。如果想达到最好的效果,必须要通过librockchip_mpp来直接编码实现编解码。
我们可以通过gstreamer和ffmpeg的mpp插件来使用mpp硬件加速,但是这两种应用程序都会因为兼容api的原因,徒增几次无用的帧拷贝动作,并且使用的都是虚拟地址。我们知道纯物理连续地址的硬件操作是非常快的,转到虚拟地址后效率就会降低。如果想榨干芯片的性能,开发最完美的代码,纯连续的物理Buffer和mpp是离不开的。
Mpp的API思路其实跟目前绝大多数的编解码库是一致的,都是queue/dequeue的队列操作方式,先设置好编解码状态,然后不停的queue/dequeue input/output buffer就可以实现编解码控制了。如果大家熟悉FFMPEG,那学习MPP会非常容易,MPP和FFMPEG的api非常相像。
Mpp库自带了编解码的sample,但是相关文档和注释较少,本文在原有semple的基础上添加了注释,并将部分功能封装成型。
mpp开发环境配置
-
dnf 安装(详见wiki)
sudo dnf install librockchip_mpp-devel
复制代码 -
源码编译
MPP库源码下载地址
https://github.com/rockchip-linux/mpp
或 https://github.com/HermanChen/mpp
MPP兼容的gstreamer源码下载地址
https://github.com/rockchip-linux/gstreamer-rockchipMPP源码编译( 本文选择在板子上编译)
(1). cd到源码的根目录,执行cmake
cd “源码根目录”
cmake .
(2).上一步cmake会在build/linux/aarch64文件中生成makefile,cd进去编译
cd build/linux/aarch64
make
(3).上一步make以后就会生成mpp的lib和一些测试demo,这些demo就在 build/linux/aarch64/test里面,包括:
mpp_enc_test:读取和打印MPP库的版本信息。
mpp_dec_test:测试内核的内存分配器是否正常。
mpp_info_test:读取和打印MPP库的版本信息。
mpp_buffer_test:测试内核的内存分配器是否正常。
mpp_mem_test:测试C库的内存分配器是否正常。
mpp_runtime_test:测试一些软硬件运行时环境是否正常。
mpp_platform_test:读取和测试芯片平台信息是否正常。
我们可以测试运行mpp_dec_test来判断mpp安装情况:
其中
-i:输入文件;
-o:输出文件;
-w:图像宽度;
-h:图像高度;
-t:码流类型;
-f:输出帧类型;
-n:输出帧数;
按照上述输入即可进行解码测试。
这样mpp就算配置完成了,下一篇博客我们将讲解如何使用mpp进行视频编码。
参考文章:
1.https://t.rock-chips.com/forum.php?mod=viewthread&action=printable&tid=336
2.https://www.cnblogs.com/xue0708/p/10088451.html