亚马逊跨境电商平台官网/北京网站seowyhseo

亚马逊跨境电商平台官网,北京网站seowyhseo,创意广告图片及文字解析,年轻人最喜欢的网页一、Buffer API 简介 在瑞芯微官方的 librga 库的手册中,有两组配置 buffer 的API: importbuffer 方式: importbuffer_virtualaddr importbuffer_physicaladdr importbuffer_fd wrapbuffer 方式: wrapbuffer_virtualaddr wrapb…

一、Buffer API 简介

        在瑞芯微官方的 librga 库的手册中,有两组配置 buffer 的API:

importbuffer 方式:

importbuffer_virtualaddr
importbuffer_physicaladdr
importbuffer_fd

wrapbuffer 方式:

wrapbuffer_virtualaddr
wrapbuffer_physicaladdr
wrapbuffer_fd
wrapbuffer_handle

以及一个释放函数:

releasebuffer_handle

二、使用流程

方式1:图像数据导入RGA驱动内部

        这种方式是官方 librga demo频繁使用的方式,主要用于单张图像或者转换频率小的场景。

(1)使用 importbuffer 函数导入外部内存,返回值为 handle 句柄;

(2)使用 wrapbuffer_handle 包装为 rga_buffer_t 结构;

(3)将 rga_buffer_t 结构传递给 RGA 处理函数;

(4)处理完成后,使用 releasebuffer_handle 释放资源.

这里放一个我修改的 resize demo:

/*** @Description: 将图像导入 RGA 内部统一管理内存,而不是用户自己管理* @param {Mat} &image: * @param {Mat} &resized_image: * @param {Size} &target_size: * @return {*}*/
int RGA_handle_resize(const cv::Mat &image, cv::Mat &resized_image) {/* 8位无符号三通道彩色图像 */ if (image.type() != CV_8UC3) {printf("source image type is %d!\n", image.type());return -1;}rga_buffer_t src_img, dst_img;rga_buffer_handle_t src_handle, dst_handle;size_t src_width = image.cols;size_t src_height = image.rows;size_t dst_width = resized_image.cols;size_t dst_height = resized_image.rows;int src_buf_size, dst_buf_size;int src_format = RK_FORMAT_RGB_888;int dst_format = RK_FORMAT_RGB_888;memset(&src_img, 0, sizeof(src_img));memset(&dst_img, 0, sizeof(dst_img));src_buf_size = src_width * src_height * get_bpp_from_format(src_format);dst_buf_size = dst_width * dst_height * get_bpp_from_format(dst_format);/* 将缓冲区对应的物理地址信息映射到RGA驱动内部,并获取缓冲区相应的地址信息 */// 直接操作Mat.data内存,减少数据复制开销src_handle = importbuffer_virtualaddr(image.data, src_buf_size);dst_handle = importbuffer_virtualaddr(resized_image.data, dst_buf_size);if (src_handle == 0 || dst_handle == 0) {printf("importbuffer failed!\n");return -1;}/* 封装为RGA图像结构 */src_img = wrapbuffer_handle(src_handle, src_width, src_height, src_format);dst_img = wrapbuffer_handle(dst_handle, dst_width, dst_height, dst_format);IM_STATUS STATUS;/*STATUS = imcheck(src_img, dst_img, {}, {});if (IM_STATUS_NOERROR != STATUS) {printf("%d, check error! %s", __LINE__, imStrError(STATUS));return -1;}*//* 执行缩放操作 */ STATUS = imresize(src_img, dst_img);/* 释放内存(正确和错误均执行) */ if (src_handle)releasebuffer_handle(src_handle);if (dst_handle)releasebuffer_handle(dst_handle);if (IM_STATUS_SUCCESS != STATUS) {fprintf(stderr, "rga resize error! %s", imStrError(STATUS));return -1;}return 0;
}

        其中 get_bpp_from_format 函数用于获取对应格式所占用的大小。imcheck 函数用于检查转换后的结构体格式,在验证初期建议开启,在发行版中建议去除,提高效率。

方式2:使用原始图像数据

        这种方式比第一种相对简单和方便,并且速度更快,不需要数据的拷贝。但是需要注意,传入的图像需要提前申请地址空间和大小,堆和栈都可以,如果传入空对象会报错,我这里使用的是 cv::Mat 对象进行数据传输,所以在调用 RGA 函数接口前,需要设置 Mat 对象的大小,或者使用 create 进行大小修正:

// 创建时设置大小
cv::Mat rgb_img(orig_img.rows, orig_img.cols, CV_8UC3);// 先申明
cv::Mat rgb_img;
// 调用前设置大小
rgb_img.create(orig_img.rows, orig_img.cols, CV_8UC3);

一共就两个关键步骤:

(1)将 cv::Mat 对象的 data 数据传递给 wrapbuffer_virtualaddr 函数,得到 rga_buffer_t 结构体;

(2)将 rga_buffer_t 结构传递给 RGA 处理函数;

这里同样是 resize demo:

/*** @Description: 直接内存映射图像数据,图像的生命周期由用户管理* @param {Mat} &image: 输入的源图像,使用 OpenCV 的 Mat 结构表示* @param {Mat} &resized_image: 输出的目标图像,经过缩放处理后的图像* @return {*} 返回 0 表示成功*/
int RGA_resize(const cv::Mat &image, cv::Mat &resized_image)
{if (image.type() != CV_8UC3) // 8位无符号三通道彩色图像{printf("source image type is %d!\n", image.type());return -1;}rga_buffer_t src_img;rga_buffer_t dst_img;size_t img_width = image.cols;size_t img_height = image.rows;size_t target_width = resized_image.cols;size_t target_height = resized_image.rows;memset(&src_img, 0, sizeof(src_img));memset(&dst_img, 0, sizeof(dst_img));// 将源图像和目标图像的数据填充至 rga_buffer_t 结构体(函数内部就是填充 rga_buffer_t)// 该函数用于用户自己管理的图像内存// OpenCV 的 MAT 格式为 RGB888,没有 A 通道src_img = wrapbuffer_virtualaddr((void *)image.data, img_width, img_height, RK_FORMAT_RGB_888);// 创建的 RGA 缓冲区,它直接引用了 resized_image.data 的内存地址,这意味着 dst_img 和 resized_image 共享同一块内存dst_img = wrapbuffer_virtualaddr((void *)resized_image.data, target_width, target_height, RK_FORMAT_RGB_888);IM_STATUS STATUS;STATUS = imresize(src_img, dst_img);if (IM_STATUS_SUCCESS != STATUS) {fprintf(stderr, "rga resize error! %s", imStrError(STATUS));return -1;}// printf("resizing .... %s\n", imStrError(STATUS));return 0;
}

三、importbuffer 系列函数

        这些函数用于将外部内存导入RGA驱动内部,实现硬件快速访问物理连续/非物理连续的内存:

1、importbuffer_virtualaddr

rga_buffer_handle_t importbuffer_virtualaddr(void *va, int size);
rga_buffer_handle_t importbuffer_virtualaddr(void *va, int width, int height, int format);
rga_buffer_handle_t importbuffer_virtualaddr(void *va, im_handle_param_t *param);
  • 作用:将虚拟地址(VA)内存导入RGA驱动
  • 参数:
    • va: 虚拟地址指针
    • size: 内存大小(字节)
    • width/height/format: 图像参数
    • param: 包含详细参数的im_handle_param_t结构体

2、importbuffer_physicaladdr

rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int size);
rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, int width, int height, int format);
rga_buffer_handle_t importbuffer_physicaladdr(uint64_t pa, im_handle_param_t *param);
  • 作用:将物理地址(PA)内存导入RGA驱动
  • 参数与virtualaddr版本类似,但使用物理地址

3、importbuffer_fd

rga_buffer_handle_t importbuffer_fd(int fd, int size);
rga_buffer_handle_t importbuffer_fd(int fd, int width, int height, int format);
rga_buffer_handle_t importbuffer_fd(int fd, im_handle_param_t *param);
  • 作用:将DMA-BUF文件描述符(fd)内存导入RGA驱动
  • 参数与virtualaddr版本类似,但使用文件描述符

性能比较:physical address > fd > virtual address,一般推荐使用fd作为buffer类型

四、wrapbuffer 系列函数

这些函数用于将输入输出的图像参数转化为统一的rga_buffer_t结构:

1、wrapbuffer_virtualaddr

rga_buffer_t wrapbuffer_virtualaddr(void* vir_addr, int width, int height, int format, int wstride, int hstride);
  • 作用:包装虚拟地址内存为RGA缓冲区结构
  • 参数:
    • vir_addr: 虚拟地址
    • width/height: 图像宽高
    • format: 像素格式
    • wstride/hstride: 宽高步长(可选)

2、wrapbuffer_physicaladdr

rga_buffer_t wrapbuffer_physicaladdr(uint64_t phy_addr, int width, int height, int format, int wstride, int hstride);
  • 作用:包装物理地址内存为RGA缓冲区结构
  • 参数与virtualaddr版本类似,但使用物理地址

3、wrapbuffer_fd

rga_buffer_t wrapbuffer_fd(int fd, int width, int height, int format, int wstride, int hstride);
  • 作用:包装DMA-BUF文件描述符为RGA缓冲区结构
  • 参数与virtualaddr版本类似,但使用文件描述符

4、wrapbuffer_handle

rga_buffer_t wrapbuffer_handle(rga_buffer_handle_t handle, int width, int height, int format, int wstride = width, int hstride = height);
  • 作用:包装已导入的RGA缓冲区句柄为rga_buffer_t结构
  • 参数:
    • handle: 由importbuffer_*函数返回的句柄
    • 其他参数与上述wrapbuffer函数类似

五、releasebuffer_handle

IM_STATUS releasebuffer_handle(rga_buffer_handle_t handle);
  • 作用:释放由importbuffer_*函数导入的缓冲区
  • 参数:handle - 要释放的缓冲区句柄
  • 返回值:成功返回IM_STATUS_SUCCESS,否则返回错误码

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

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

相关文章

Linux线程池实现

1.线程池实现 全部代码&#xff1a;whb-helloworld/113 1.唤醒线程 一个是唤醒全部线程&#xff0c;一个是唤醒一个线程。 void WakeUpAllThread(){LockGuard lockguard(_mutex);if (_sleepernum)_cond.Broadcast();LOG(LogLevel::INFO) << "唤醒所有的休眠线程&q…

微信小程序逆向开发

一.wxapkg文件 如何查看微信小程序包文件&#xff1a; 回退一级 点击进入这个目录 这个就是我们小程序对应的文件 .wxapkg概述 .wxapkg是微信小程序的包文件格式&#xff0c;且其具有独特的结构和加密方式。它不仅包含了小程序的源代码&#xff0c;还包括了图像和其他资源文…

多输入多输出 | Matlab实现CPO-LSTM冠豪猪算法优化长短期记忆神经网络多输入多输出预测

多输入多输出 | Matlab实现CPO-LSTM冠豪猪算法优化长短期记忆神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现CPO-LSTM冠豪猪算法优化长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现CPO-LSTM冠豪猪算法优化长短期…

视频编码器的抉择:x264、x265、libaom、vvenc 对比测试实验

264、x265、libaom、vvenc 对比测试实验 测试机器配置&#xff1a;Apple M1 Pro -16G编码器版本&#xff08;选择自己编译&#xff09;&#xff1a;所有源码都是当前最新更新的状态&#xff0c;此外各类编码具体的编译过程可参考我的相关系列博客。 编码器GitHubx264git clon…

【二刷代码随想录】双指针-数组相关题型、推荐习题

一、双指针-数组 相关题型与常用思路 1、单个数组 &#xff08;1&#xff09;原地移除元素类 如推荐习题中的&#xff08;1&#xff09;、&#xff08;2&#xff09;、&#xff08;3&#xff09;&#xff0c;都属于此类。引入双指针 pre、last &#xff0c;用 pre 指针表明数…

搜索-BFS

马上蓝桥杯了&#xff0c;最近刷了广搜&#xff0c;感觉挺有意思的&#xff0c;广搜题类型都差不多&#xff0c;模板也一样&#xff0c;大家写的时候可以直接套模板 这里给大家讲一个比较经典的广搜题-迷宫 题目问问能否走到 (n,m) 位置&#xff0c;假设最后一个点是我们的&…

SSM中药分类管理系统

&#x1f345;点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345; 项目视频 SS…

epoch、batch、batch size、step、iteration深度学习名词含义详细介绍

卷积神经网络训练中的三个核心概念&#xff1a;Epoch、Batch Size 和迭代次数 在深度学习中&#xff0c;理解一些基本的术语非常重要&#xff0c;这些术语对模型的训练过程、效率以及最终性能都有很大影响。以下是一些常见术语的含义介绍&#xff1a; 1. Epoch&#xff08;周…

React(七):Redux

Redux基本使用 纯函数&#xff1a;1.函数内部不能依赖函数外部变量&#xff1b;2.不能产生副作用&#xff0c;在函数内部改变函数外部的变量 React只帮我们解决了DOM的渲染过程&#xff0c;State还是要由我们自己来管理——redux可帮助我们进行管理 Redux三大特点 1.单一数…

STC89C52单片机学习——第38节: [17-2] 红外遥控红外遥控电机

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.03.30 51单片机学习——第38节: [17-2] 红外遥控&红外遥控电机 前言开发板说明引用…

【什么是机器学习——多项式逼近】

什么是机器学习——多项式逼近 机器学习可以分成三大类别,监督学习、非监督学习、强化学习。三大类别背后的数学原理不同。监督学习使用了数学分析中的函数逼近方法和概率统计中的极大似然方法;非监督学习使用聚类和EM算法;强化学习使用马尔可夫决策过程的想法。 机器学习的…

【Matlab】-- 基于MATLAB的灰狼算法优化支持向量机的回归算法

文章目录 文章目录 01 内容概要02 GWO-SVR模型03 部分代码04 运行结果05 参考文献06 代码下载 01 内容概要 GWOSVR&#xff08;基于灰狼算法优化的支持向量机回归&#xff09;是一种先进的机器学习技术&#xff0c;它结合了灰狼优化算法&#xff08;Grey Wolf Optimizer, GWO…

Google Play Games PC版即将正式上线!

早在 2021 年&#xff0c;谷歌就推出 Google Play Games PC 版&#xff0c;本质上是基于虚拟化创建安卓系统在 Windows 上运行 Google Play 平台的各种游戏。 在测试了 4 年后&#xff0c;谷歌准备在今年晚些时候正式上线该平台&#xff0c;谷歌将在下周举办 2025 游戏开发者大…

【SpringBoot】深入解析使用配置文件解决硬编码问题综合练习(三):解析验证码拓展问题

校验输入验证码接口 check( ) 5. 为什么要用静态内部类接收配置文件中的 Seisson 对象&#xff1f; 为什么我们接收配置文件的 Session 对象时&#xff0c;使用静态内部类给 Session 对象的 key&#xff0c;date 属性赋值呢&#xff1f;不加 static 可以吗&#xff1f; 在 Cap…

使用FastExcel时的单个和批量插入的问题

在我们用excel表进行插入导出的时候&#xff0c;通常使用easyexcel或者FastExcel&#xff0c;而fastexcel是easy的升级版本&#xff0c;今天我们就对使用FastExcel时往数据库插入数据的业务场景做出一个详细的剖析 场景1 现在我们数据库有一张组织表&#xff0c;组织表的字段…

Cannot find a valid baseurl for repo: centos-sclo-sclo/x86_64

​ rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-latest-5.0.el7.noarch.rpmyum clean allyum macache fast​ 编辑配置文件 /etc/yum.repos.d/zabbix.repo and enable zabbix-frontend repository. [zabbix-frontend]...enabled1... 下载相关…

【CSS】相对位置小练习

要求&#xff1a; 成果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>相对位置小练习</title><link rel"stylesheet" href"./css/style.css…

网络传输优化之多路复用与解复用

一、基本概念 多路复用 发送端将来自多个应用或进程的数据流合并到同一物理信道中传输的过程。核心目的是提高信道利用率&#xff0c;减少资源浪费。例如&#xff0c;多个网络应用&#xff08;如浏览器、邮件客户端&#xff09;通过不同端口将数据封装为报文段&#xff0c;共享…

【软考-架构】10.1、软件工程概述-CMM-软件过程模型-逆向工程

✨资料&文章更新✨ GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目录 软件工程基础知识软件工程概述能力成熟度模型能力成熟度模型CMM能力成熟度模型集成CMMI &#x1f4af;考试真题第一题第二题 软件过程模型瀑布模型&#xff08;SDLC&#…

车载以太网网络测试 -25【SOME/IP-报文格式-1】

1 摘要 本专题接着上一专题对SOME/IP进行介绍&#xff0c;主要对SOME/IP报文格式以及定义的字段进行详细介绍&#xff0c;有助于在实际项目过程中对SOME/IP报文的理解。 上文回顾&#xff1a; 车载以太网网络测试 -24【SOME/IP概述】 2 SOME/IP-报文格式 通过上个专题介绍&a…