一、mpp交叉编译
MPP(Media Process Platform )是Rockchip提供的一款硬件编解码媒体处理软件平台,适用于Rockchip芯片系列。它屏蔽了有关芯片的复杂底层处理,屏蔽了不同芯片的差异,为使用者提供了一组MPI统一接口。如果想达到最好的效果,必须要通过librockchip_mpp来直接编码实现编解码。我们可以通过gstreamer和ffmpeg的mpp插件来使用mpp硬件加速,但是这两种应用程序都会因为兼容api的原因,徒增几次无用的帧拷贝动作,并且使用的都是虚拟地址。我们知道纯物理连续地址的硬件操作是非常快的,转到虚拟地址后效率就会降低。如果想榨干芯片的性能,开发最完美的代码,纯连续的物理buffer和mpp+rga是离不开的。 Mpp的API思路其实跟目前绝大多数的编解码库是一致的,都是queue/dequeue的队列操作方式,先设置好编解码状态,然后不停的queue/dequeue input/output buffer就可以实现编解码控制了
1、源码下载
https://github.com/rockchip-linux/mpp
2、编译脚本修改
- 进入build/linux目录,找到对应的硬件架构,rk3568选用aarch64位
- 修改 arm.linux.cross.cmake 文件,指定交叉编译器
cmake_minimum_required( VERSION 2.6.3 )
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER "/opt/atk-dlrk356x-toolchain/bin/aarch64-linux-gcc")
SET(CMAKE_CXX_COMPILER "/opt/atk-dlrk356x-toolchain/bin/aarch64-linux-g++")
#SET(CMAKE_SYSTEM_PROCESSOR "armv7-a")
SET(CMAKE_SYSTEM_PROCESSOR "armv8-a")
#设置安装目录
SET(CMAKE_INSTALL_PREFIX "/home/dhl/winShare/rk3568/lib/source-compile/mpp-1.0.4/install")
add_definitions(-fPIC)
add_definitions(-DARMLINUX)
add_definitions(-Dlinux)
- 修改 make-Makefiles.bash ,修改交叉编译
3、交叉编译
sudo ./make-Makefiles.bash
sudo make
sudo make install
二、demo程序测试
1、解码器测试
解码器 demo 为 mpi_dec_test 系列程序,包括使用 decode_put_packet 和 decode_get_frame 接口的单线程 mpi_dec_test,多线程的 mpi_dec_mt_test 以及多实例的 mpi_dec_multi_test
MPP 解码器的 MPI 接口是线程安全的,可以在多线环境下使用。单线程工作模式如 mpi_dec_test 的demo 所示,多线程工作模式如 mpi_dec_mt_test 的 demo 所示。
下面为 mpi_dec_test 程序使用说明:(注:输出的打印信息需要通过 syslog才能看到!!!)
mpi_dec_test 的命令参数中,输入文件(i),码流类型(t)为强制要求的参数,其他参数如输出文件(o),图像宽度(w)图像高度(h),解码帧数(n)等为可选参数,影响不大
- -i:输入文件
- -t:输入码流类型,7位H264、16777220位H265
- -w:图像宽度
- -h:图像高度
- -n:要解码的帧数
以解码H265文件为例:
mpi_dec_test -i 0.h265 -t 16777220 -n 10
注:解码的H265文件必须是带有PPS、VPS等头部数据的,不然会报如下错
2、编码器测试
编码器 demo 为 mpi_enc_test 系列程序,包括单线程的 mpi_enc_test,及多实例的 mpi_enc_multi_test
下面为mpi_enc_test程序使用说明
以编码yuv文件为例:
mpi_enc_test -i yuv420p_1280x720.yuv -w 1280 -h 720 -f 4 -t 7 -o yuv420p_1280x720.h264
mpi_enc_test -i yuv420p_1280x720.yuv -w 1280 -h 720 -f 4 -t 16777220 -o yuv420p_1280x720.h265
mpi_enc_test -i yuv420p_1280x720.yuv -w 1280 -h 720 -f 4 -t 8 -o jpegout.jpg
mpi_enc_test 的命令参数中,图像宽度(w)图像高度(h),码流类型(t)为强制要求参数,其他参数如输入文件(i),输出文件(o),编码帧数(n)等为可选参数。如果没有指定输入文件,mpi_enc_test会生成默认彩条图像进行编码
- -i:输入文件
- -w:图像宽度
- -h:图像高度
- -f:输入图像格式,很关键,可取值为
如果不知道yuv文件的图像格式,可用通过 yuvplayer 播放器查看
- -t:输出码流类型,可取值为
这里常用的就两种:H.264(7)、H.265(16777220)
使能其他功能:
export osd_enable=1
export user_data_enable=0
export roi_enable=0
export osd_mode=1