使用ndk20/cmake编译android平台上使用的mpp动态库

发布于:2022-12-10 ⋅ 阅读:(788) ⋅ 点赞:(0)

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中
在这里插入图片描述