mpp 介绍
mpp全称(Media Process Platform)是屏蔽了不同操作系统和不同芯片平台(瑞芯微,海思等)的差异的一层c接口。能调用APU(视频处理芯片)的强大编解码和视频处理能力。
顺便提一下:libvpu.so 库是用来与 librk_vpuapi.so 配合进行前向兼容,以支持旧的 API。
现在推荐使用 mpp 库处理,默认就是硬编码,mpp 里没有软件编码实现。放心大胆使用。
编译mpp库的目的
Firefly(飞凌,风火轮,萤火虫)工控板上安装有Android系统,公司需要开发一套适用与该平台的推流器。使用CPU编解码性能台低了,GPU性能也有限,只好使用APU.
问:为什么使用ndk20编译呢。
答因为我司项目使用的ndk版本就在18以上,在使用官方Android demo时编译不过。需要重编译。
编译工具
编译环境:ubuntu 16
编译工具:ndk r20
cmake:版本 3.10.2,其实只要3.6.0以上都可以,但也别太高
mpp 源码:源码地址:https://github.com/rockchip-linux/mpp.git
升级cmake
Ubuntu默认apt安装的cmake版本为3.5.1.可以自己升级安装为更高版本。
步骤推荐这篇博客:Ubuntu16.04 升级cmake
开始编译mpp库
编译脚本说明:
注意在12行 source “…/env_setup.sh” 这里引用了上级目录中的env_setup.sh.主要是根据ndk版本设置一些变量的路径,脚本阅读不算很难,可以进去看一下。我们不必做修改。
编译之前需要稍微修改一下脚本,因为,原脚本是默认使用gcc编译的。ndk18之后就不怎么支持gcc了。这里换成clang/clang++编译。
这里设置了ndk路径和cmake编译工具 去掉了 -DANDROID_STL设置项。
-DCMAKE_TOOLCHAIN_FILE这一项会去调用ndk中的cmake工具链。
运行脚本:
sudo bash ./make-Android.bash
按道理到这里应该是能直接编译的。但是坑就坑在这里。
脚本他执行有问题。
容我一一道来。
如果编译出现这种现象:
这是因为 Ubuntu 不支持bash指令运行脚本。文件名后缀改成.sh,运行改成:
sudo sh ./make-Android.bash
如果遇到如下这种情况:
原因是直接从window将文件拷贝到Ubuntu虚拟机上时,文本格式不纯粹了。文本末尾的“\r”也当作指令本身。
解决:创建一个新的sh脚本。
#test.sh
#!/bin/bash
echo "hello world"
执行chmod 指令赋予权限
chmod 777 test.sh
执行成功之后将原本的make-Android.bash中的内容复制进去。就可以了。
上级目录中的env_setup.sh 也需要如此操作一次。
最后执行成功样子:
。。。。。
libvpu.so在目录编译生成的文件夹中/mpp/legacy下。
头文件全部在项目根目录mpp/inc中