RK3568基于mpp实现硬解码(一):mpp库的编译使用
最近工作任务需要解码ipc摄像头传来的码流数据。要求用到mpp库实现硬解码以降低解码过程中cpu使用率。记录一下mpp的使用过程。
一、mpp介绍
以下内容来自mpp官方介绍:
瑞芯微提供的媒体处理软件平台(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 / AV1
视频编码
H.265 / H.264 / VP8 / MJPEG
视频处理
视频拷贝,缩放,色彩空间转换,场视频解交织(Deinterlace)
可以理解为mpp是rockchip专门为硬件编解码提供的接口
二、mpp源码下载
https://github.com/rockchip-linux/mpp
下载后在doc目录下的《Rockchip_Developer_Guide_RGA_CN.md》文档可以查看mpp的开发使用教程。
三、编译
mpp的编译在文档中有介绍
5.2.2 Unix/Linux平台编译
先配置build/linux/arm/目录下arm.linux.cross.cmake文件里的工具链,再运行make-Makefiles.bash脚本通过cmake生成Makefile,最后运行make –j16进行编译。MPP也支持直接在开发板运行的Debian上编译。
因为项目是运行在RK3568的开发板(aarch64)上,而程序的开发环境是虚拟机的ubuntu22.04,所以要想在开发板上使用mpp需要交叉编译mpp源码。
1、配置交叉编译工具链
可以修改arm.linux.cross.cmake文件设置C/C++编译器的路径,再运行bash脚本
SET(CMAKE_SYSTEM_NAME Linux) #告诉编译器目标平台为Linux
SET(CMAKE_C_COMPILER "/opt/toolchains/aarch64-linux-gnu-gcc") #C编译器
SET(CMAKE_CXX_COMPILER "/opt/toolchains/aarch64-linux-gnu-g++") #C++编译器
SET(CMAKE_SYSTEM_PROCESSOR "armv8-a") #目标系统的cpu架构add_definitions(-fPIC)
add_definitions(-DARMLINUX)
add_definitions(-Dlinux)
或者直接运行bash脚本
Bash make-Makefiles.bash --toolchain /opt/toolchains/aarch64-linux-gnu-
2、编译后相关文件所在路径
编译后头文件所在路径/usr/local/include/rockchip/
库文件所在路径/usr/local/lib/
文件保存路径可以通过Makefile文件查看或者修改。
3、将文件导入到项目
因为项目是使用QT进行开发,所以在pro文件中加上
##mmp
INCLUDEPATH += $$PWD/mmp/include #头文件我复制到项目当中了
LIBS += -lrockchip_mpp #系统会自动在/usr/local/lib/路径下搜索相关库文件
至此mpp的编译与导入完毕,可以在项目中使用mpp的接口了。