RK3588s RGA库使用

2023-11-22 14:50
文章标签 使用 rk3588s rga

本文主要是介绍RK3588s RGA库使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、 RGA库简介

ISP输出的图像在像素、格式是固定的,有时无法满足后端算法的要求,这时需要对图像进行裁剪、缩放或格式转换等二次处理。RGA (Raster Graphic Acceleration Unit)官方提供的独立的2D硬件加速器,可用于加速点/线绘制、执行图像缩放、旋转、格式转换等常见的2D图形操作,且其不占用CPU计算资源,因此可用于图像的二次处理。
RGA模块支持库为librga.so,通过对图像缓冲区结构体struct rga_info进行配置,实现相应的2D图形操作。为了获得更友好的开发体验,在此基础上进一步封装常用的2D图像操作接口RAG_API。RAG_API包含以下特点:
1、接口参考opencv/matlab中常用的2D图形接口定义,以减少二次开发的学习成本。
2、为消除RGA硬件版本差异带来的兼容问题,加入RGA query查询功能。查询内容主要包括版本信息,输入输出大分辨率及图像格式的支持。
3、对于2D图像复合操作,增加improcess接口。通过传入一系列预定义的usage执行复合操作。
4、执行图像操作之前,需要对输入输出图像缓冲区进行处理。调用wrapbuffer_T接口将输入输出图像信息填充到结构体struct rga_buffer_t,结构体中包含分辨率及图像格式等信息。

二、RGA库调用

在调用RGA时,程序需要包含头文件和库文件两部分,具体如下:
1、头文件引用:
调用librga:include/RockchipRga.h
调用im2d api:im2d_api/im2d.hpp
2、库文件:librga.so

具体实现流程如下图:
在这里插入图片描述
在实际应用中,RAG_API包含以下函数:

  • querystring: 查询获取当前芯片平台RGA硬件版本与功能支持信息,以字符串的形式返回。
  • importbuffer_T: 将外部buffer导入RGA驱动内部,实现硬件快速访问非连续物理地址(dma_fd、虚拟地址)。
  • releasebuffer_handle: 将外部buffer从RGA驱动内部解除引用与映射。
  • wrapbuffer_handle速封装图像缓冲区结构(rga_buffer_t)。
  • imcopy: 调用RGA实现快速图像拷贝操作。
  • imresize: 调用RGA实现快速图像缩放操作。
  • impyramind: 调用RGA实现快速图像金字塔操作。
  • imcrop: 调用RGA实现快速图像裁剪操作。
  • imrotate: 调用RGA实现快速图像旋转操作。
  • imflip: 调用RGA实现快速图像翻转操作。
  • imfill: 调用RGA实现快速图像填充操作。
  • imtranslate: 调用RGA实现快速图像平移操作。
  • imblend: 调用RGA实现双通道快速图像合成操作。
  • imcomposite: 调用RGA实现三通道快速图像合成操作。
  • imcolorkey: 调用RGA实现快速图像颜色键操作。
  • imcvtcolor: 调用RGA实现快速图像格式转换。
  • imquantize: 调用RGA实现快速图像运算点前处理(量化)操作。
  • imrop: 调用RGA实现快速图像光栅操作。
  • improcess: 调用RGA实现快速图像复合处理操作。
  • imcheck: 校验参数是否合法,以及当前硬件是否支持该操作。
  • imsync: 用于异步模式时,同步任务完成状态。
  • imconfig: 向当前线程上下文添加默认配置。

三、颜色空间转换示例

以下是我写的一段示例代码-原始图像数据输出的是YUV格式,用RGA库从YUV转为RGB,用htop命令显示每秒30帧速处理,3588单核cpu只占30%左右。
rga示例
参考:
1、RGA官方开发指南:Rockchip_Developer_Guide_RGA_CN.pdf
2、官方FAQ:Rockchip_FAQ_RGA_CN.pdf
3、sdk中示例程序: linux_librga

这篇关于RK3588s RGA库使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410917

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景