当前位置: 首页 > news >正文

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的接口了。

http://www.dtcms.com/a/301563.html

相关文章:

  • [每周一更]-(第151期):Go语言中的Map、Slice、Array和Hash原理详解
  • 博士招生 | 香港大学 招收人工智能和网络安全方向 博士生
  • 7.27 状态机dp|质数线性筛|序列化树
  • Linux网络-------2.应⽤层⾃定义协议与序列化
  • SpringBoot实现Serverless:手撸一个本地函数计算引擎
  • mcu trace工具调研
  • elasticsearch 倒排索引原理详解
  • SpringBoot3整合Redis
  • 零基础学习性能测试第五章:性能瓶颈分析与调优-网络资源瓶颈分析与优化建议
  • Python调用大模型api并部署到前端的主流技术栈以及具体框架对比
  • 【牛客网C语言刷题合集】(四)
  • Java类加载器与双亲委派模型
  • n8n “Run Once for All Items“和“Run Once for Each Item“区别
  • 深度学习中的计算图与自动微分原理:静态图与动态图的实现差异
  • sd Function 学习笔记
  • BeautifulSoup 使用详解与实战示例
  • WAIC 2025 热点解读:如何构建 AI 时代的“视频神经中枢”?
  • WordPress 网站中的“mu-plugins”隐藏后门
  • [每周一更]-(第152期):Go中的CAS(Compare-And-Swap)锁原理详解
  • Java面试宝典:MySQL性能优化
  • ES6模块详解:核心语法与最佳实践
  • 编码器和解码器风格的Transformer架构
  • 使用vue2和 element-ui 做一个点餐收银台系统前端静态项目
  • 数据江湖的“三国演义”:数据仓库、数据湖与湖仓一体的全景对比
  • Gradio全解8——ChatInterfaceChatbot:聊天界面类与聊天机器人(4)——返回复杂响应与直接修改Chatbot值
  • Java Ai(day03)
  • 【秋招笔试】7月26日科大讯飞秋招第一题
  • 【最新最完整】SpringAI-1.0.0开发MCP Server,搭建MCP Client 实战笔记(进阶+详细+完整代码)
  • AI Agent学习
  • MyBatis-Plus IService 接口全量方法实现与测试(续)