RK3568中,使用cmake搭建C++工程进行RGA开发

在 RK3568 平台上使用 C++ 配合 RGA (Raster Graphics Acceleration) 进行图像加速开发,以下是详细的配置步骤和示例:


1. 环境准备

  • 安装 RK3568 SDK
    确保已安装 Rockchip 官方提供的 SDK(如 Linux SDK),RGA 头文件和库通常位于 SDK 的以下路径:

    • 头文件:/path/to/sdk/include/rga/
    • 库文件:/path/to/sdk/lib/librga.so
  • 安装依赖工具
    确保已安装 CMake、交叉编译工具链(如 aarch64-linux-gnu-g++)和必要的开发库。


2. 项目结构

your_project/
├── CMakeLists.txt
├── main.cpp
└── third_party/└── rga/           # 可选:如果需本地拷贝 RGA 文件├── include/└── lib/

3. 配置 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(rga_demo)# 设置交叉编译工具链(若需交叉编译)
# set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
# set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)# 添加 RGA 头文件路径
include_directories(/path/to/sdk/include/rga/# 或第三方库路径# ${CMAKE_SOURCE_DIR}/third_party/rga/include
)# 添加 RGA 库路径
link_directories(/path/to/sdk/lib/# 或第三方库路径# ${CMAKE_SOURCE_DIR}/third_party/rga/lib
)# 生成可执行文件
add_executable(rga_demo main.cpp)# 链接动态库
target_link_libraries(rga_demoPRIVATErga          # 通常库名为 librga.sodl           # 用于动态加载库
)

4. 编写 C++ 代码示例 (main.cpp)

#include <iostream>
#include <rga/RgaApi.h>  // RGA 主头文件
#include <cstdlib>int main() {// 初始化 RGAint ret = c_RkRgaInit();if (ret != 0) {std::cerr << "RGA init failed!" << std::endl;return -1;}// 定义图像参数int src_width = 1920;int src_height = 1080;int dst_width = 1280;int dst_height = 720;int src_format = RK_FORMAT_RGBA_8888;int dst_format = RK_FORMAT_RGBA_8888;// 创建源和目标缓冲区char *src_buf = (char *)malloc(src_width * src_height * 4);char *dst_buf = (char *)malloc(dst_width * dst_height * 4);// 填充测试数据(此处示例填充红色)memset(src_buf, 0xFF, src_width * src_height * 4);  // RGBA 全红// 配置 RGA 任务rga_info_t src_info = {0};rga_info_t dst_info = {0};src_info.fd = -1;  // 表示使用虚拟地址src_info.virAddr = src_buf;src_info.mmuFlag = 1;rga_set_rect(&src_info.rect, 0, 0, src_width, src_height, src_width, src_height, src_format);dst_info.fd = -1;dst_info.virAddr = dst_buf;dst_info.mmuFlag = 1;rga_set_rect(&dst_info.rect, 0, 0, dst_width, dst_height, dst_width, dst_height, dst_format);// 执行缩放操作ret = c_RkRgaBlit(&src_info, &dst_info, NULL);if (ret != 0) {std::cerr << "RGA blit failed: " << ret << std::endl;free(src_buf);free(dst_buf);return -1;}std::cout << "RGA operation succeeded!" << std::endl;// 释放资源free(src_buf);free(dst_buf);return 0;
}

5. 编译与运行

mkdir build
cd build
cmake ..
make -j4# 将生成的可执行文件拷贝到 RK3568 设备
scp rga_demo user@rk3568_ip:/home/user/# 在设备上运行(需确保 RGA 驱动已加载)
./rga_demo

6. 常见问题解决

  1. 头文件或库找不到

    • 检查 CMakeLists.txt 中的路径是否正确。
    • 使用 find_libraryfind_path 动态查找库路径。
  2. RGA 初始化失败

    • 确认设备上已加载 RGA 内核驱动(检查 /dev/rga 是否存在)。
    • 确保程序有访问 /dev/rga 的权限(可能需要 root 权限)。
  3. 图像处理错误

    • 检查输入/输出图像的格式(如 RK_FORMAT_*)是否支持。
    • 确保缓冲区大小与图像尺寸匹配。
  4. 性能优化

    • 使用物理地址(fd)代替虚拟地址(virAddr)提升 DMA 效率。
    • 复用 RGA 上下文减少初始化开销。

补充说明

  • RGA 文档参考
    详细 API 说明请查阅 Rockchip 官方文档《RGA 开发指南》。

  • 高级功能
    RGA 支持旋转、裁剪、格式转换、混合等操作,可通过组合 rga_info_t 参数实现。

  • 跨平台兼容性
    若需在 x86 主机上调试,可使用 Rockchip 提供的模拟库,但最终需在真实设备测试。

希望以上内容能帮助您顺利集成 RGA 到项目中!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win11右击显示全部

正常&#xff1a; 输入&#xff1a; reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve 重启或刷新进程 刷新&#xff1a; taskkill /f /im explorer.exe & start explorer.exe 成功&#xff1a;

Redis基础--常用数据结构的命令及底层编码

零.前置知识 关于时间复杂度,按照以下视角看待. redis整体key的个数 -- O(N)当前key对应的value中的元素个数 -- O(N)当前命令行中key的个数 -- O(1) 一.string 1.1string类型常用命令 1.2string类型内部编码 二.Hash 哈希 2.1hash类型常用命令 2.2hash类型内部编码 2.3ha…

React 设计模式:实用指南

React 提供了众多出色的特性以及丰富的设计模式&#xff0c;用于简化开发流程。开发者能够借助 React 组件设计模式&#xff0c;降低开发时间以及编码的工作量。此外&#xff0c;这些模式让 React 开发者能够构建出成果更显著、性能更优越的各类应用程序。 本文将会为您介绍五…

Unity扩展编辑器使用整理(一)

准备工作 在Unity工程中新建Editor文件夹存放编辑器脚本&#xff0c; Unity中其他的特殊文件夹可以参考官方文档链接&#xff0c;如下&#xff1a; Unity - 手册&#xff1a;保留文件夹名称参考 (unity3d.com) 一、菜单栏扩展 1.增加顶部菜单栏选项 使用MenuItem&#xff…

Vue3+codemirror6实现公式(规则)编辑器

实现截图 实现/带实现功能 插入标签 插入公式 提示补全 公式验证 公式计算 需要的依赖 "codemirror/autocomplete": "^6.18.4","codemirror/lang-javascript": "^6.2.2","codemirror/state": "^6.5.2","cod…

4.PPT:日月潭景点介绍【18】

目录 NO1、2、3、4​ NO5、6、7、8 ​ ​NO9、10、11、12 ​ 表居中或者水平/垂直居中单元格内容居中或者水平/垂直居中 NO1、2、3、4 新建一个空白演示文稿&#xff0c;命名为“PPT.pptx”&#xff08;“.pptx”为扩展名&#xff09;新建幻灯片 开始→版式“PPT_素材.doc…

开源项目介绍-词云生成

开源词云项目是一个利用开源技术生成和展示词云的工具或框架&#xff0c;广泛应用于文本分析、数据可视化等领域。以下是几个与开源词云相关的项目及其特点&#xff1a; Stylecloud Stylecloud 是一个由 Maximilianinir 创建和维护的开源项目&#xff0c;旨在通过扩展 wordclou…

Redis双写一致性(数据库与redis数据一致性)

一 什么是双写一致性&#xff1f; 当修改了数据库&#xff08;MySQL&#xff09;中的数据&#xff0c;也要同时更新缓存&#xff08;redis&#xff09;中的数据&#xff0c;缓存中的数据要和数据库中的数据保持一致 双写一致性&#xff0c;根据业务对时间上的要求&#xff0c;…

C32.【C++ Cont】静态实现双向链表及STL库的list

目录 1.知识回顾 2.静态实现演示图 3.静态实现代码 1.初始双向链表 2.头插 3.遍历链表 4.查找某个值 4.任意位置之后插入元素 5.任意位置之前插入元素 6.删除任意位置的元素 4.STL库的list 1.知识回顾 96.【C语言】数据结构之双向链表的初始化,尾插,打印和尾删 97.【C…

二级C语言题解:矩阵主、反对角线元素之和,二分法求方程根,处理字符串中 * 号

目录 一、程序填空&#x1f4dd; --- 矩阵主、反对角线元素之和 题目&#x1f4c3; 分析&#x1f9d0; 二、程序修改&#x1f6e0;️ --- 二分法求方程根 题目&#x1f4c3; 分析&#x1f9d0; 三、程序设计&#x1f4bb; --- 处理字符串中 * 号 题目&#x1f…

采用idea中的HTTP Client插件测试

1.安装插件 采用idea中的HTTP Client插件进行接口测试,好处是不用打开post/swagger等多个软件,并且可以保存测试时的参数,方便后续继续使用. 高版本(2020版本以上)的idea一般都自带这个插件,如果没有也可以单独安装. 2.使用 插件安装完成(或者如果idea自带插件),会在每个Con…

探讨如何在AS上构建webrtc(2)从sdk/android/Build.gn开始

全文七千多字&#xff0c;示例代码居多别担心&#xff0c;没有废话&#xff0c;不建议跳读。 零、梦开始的地方 要发美梦得先入睡&#xff0c;要入睡得找能躺平的地方。那么能躺平编译webrtc-android的地方在哪&#xff1f;在./src/sdk/android/Build.gn。Build.gn是Build.nin…

Linux firewalld开启日志审计功能(2)

在Firewalld防火墙中启用和配置logdenied选项&#xff0c;记录被拒绝的数据包&#xff08;等同于开启日志功能&#xff09; 效果展示&#xff1a; 1.开启日志记录功能 firewall-cmd --set-log-deniedunicast #重新加载生效配置 firewall-cmd --reload 2.配置rsyslog捕获日志…

Spring Web MVC项目的创建及使用

一、什么是Spring Web MVC&#xff1f; Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从⼀开始就包含在 Spring 框架中&#xff0c;通常被称为Spring MVC。 1.1 MVC的定义 MVC 是 Model View Controller 的缩写&#xff0c;它是软件工程中的一种软件架构…

oracle:索引(B树索引,位图索引,分区索引,主键索引,唯一索引,联合索引/组合索引,函数索引)

索引通过存储列的排序值来加快对表中数据的访问速度&#xff0c;帮助数据库系统快速定位到所需数据&#xff0c;避免全表扫描 B树索引(B-Tree Index) B树索引是一种平衡树结构&#xff0c;适合处理范围查询和精确查找。它的设计目标是保持数据有序&#xff0c;并支持高效的插入…

android 适配 api 35(android 15) 遇到的问题

首先升级 targetSdkVersion 和 compileSdkVersion 到 35&#xff0c;升级后发生的报错 一、 解决方案: 升级 gradle 和 gradle 插件版本 com.android.tools.build:gradle -> 8.3.0-alpha02 gradle-wrapper.properties : distributionUrl -> gradle-8.6-bin.zip htt…

@Value属性读取系统变量错误

Value属性读取配置属性错误 场景 在测试Value读取yml配置文件属性时&#xff0c;发现系统配置属性优先级高于配置文件&#xff0c;导致注入异常值&#xff1a; 配置文件: user:name: yanxin测试类: RestController RequestMapping("/books") public class BookC…

BFS算法——广度优先搜索,探索未知的旅程(下)

文章目录 前言一. N叉树的层序遍历1.1 题目链接&#xff1a;https://leetcode.cn/problems/n-ary-tree-level-order-traversal/description/1.2 题目分析&#xff1a;1.3 思路讲解&#xff1a;1.4 代码实现&#xff1a; 二. 二叉树的锯齿形层序遍历2.1 题目链接&#xff1a;htt…

【Ubuntu】ARM交叉编译开发环境解决“没有那个文件或目录”问题

【Ubuntu】ARM交叉编译开发环境解决“没有那个文件或目录”问题 零、起因 最近在使用Ubuntu虚拟机编译ARM程序&#xff0c;解压ARM的GCC后想要启动&#xff0c;报“没有那个文件或目录”&#xff0c;但是文件确实存在&#xff0c;环境配置也检查过了没问题&#xff0c;本文记…

清理服务器/docker容器

清理服务器 服务器或docker容器清理空间。 清理conda环境 删除不用的conda虚拟环境&#xff1a; conda env remove --name python38 conda env remove --name python310清理临时目录&#xff1a;/tmp du -sh /tmp # 查看/tmp目录的大小/tmp 目录下的文件通常是可以直接删除…