opencl色域变换,处理传递显存数据
在使用ffmpeg解码后的多路解码数据非常慢,还要给AI做行的加速方式是在显存处理数据,在视频拼接融合产品的产品与架构设计中,提出了比较可靠的方式是使用cuda,那么没有cuda的显卡如何处理呢
,比较好的方式是使用opencl来提高数据传输效率
核函数
在OpenCL中,将NV12格式转换为BGR格式通常涉及到对UV分量的处理,nv12 是使用ffmpeg等解码后的直接数据,注意linesize对齐
#define GROUP_SIZE 16// OpenCL kernel to convert NV12 to BGR
__kernel void nv12_to_bgr(__global const uchar *nv12,__global uchar *bgr,int width, int height) {int x = get_global_id(0);int y = get_global_id(1);// Make sure we are not out of boundsif (x < width && y < height) {// Calculate Y, U, and V indicesint yIndex = y * width + x;int uvIndex = width * height + (y / 2) * (width) + (x & ~1); // Use '& ~1' to get even X indices for U/V// Load Y, U, and V valuesuchar yValue = nv12[yIndex];uchar uValue = nv12[uvIndex];uchar vValue = nv12[uvIndex + 1];// Convert YUV to RGBuchar bValue = (uchar)((yValue + 1.732446 * (uValue - 128));uchar gValue = (uchar)((yValue - 0.344134 * (vValue - 128) - 0.714136 * (uValue - 128));uchar rValue = (uchar)((yValue + 1.402225 * (vValue - 128));// Pack BGR valuesuchar bgrValue = (bValue << 2) | (gValue >> 4) | (rValue << 6);// Store BGR valuebgr[yIndex] = bgrValue;}
}
cpu上继续
注意错误处理
// 设置OpenCL内核参数
size_t global_work_size[2] = {width, height};
cl_kernel nv12_to_bgr_kernel = ...; // 获取你编译的内核// 设置内核参数
clSetKernelArg(nv12_to_bgr_kernel, 0, sizeof(cl_mem), &nv12_buffer);
clSetKernelArg(nv12_to_bgr_kernel, 1, sizeof(cl_mem), &bgr_buffer);
clSetKernelArg(nv12_to_bgr_kernel, 2, sizeof(int), &width);
clSetKernelArg(nv12_to_bgr_kernel, 3, sizeof(int), &height);// 执行内核
cl_event event;
clEnqueueNDRangeKernel(command_queue, nv12_to_bgr_kernel, 2, NULL, global_work_size, NULL, 0, NULL, &event);// 等待命令执行完毕
clWaitForEvents(1, &event);
针对arm,非显存
用128位的寄存器进行处理。
vld1_u8 从内存中读取88位数据到寄存器
vld1q_u8 从内存中读取168位数据到寄存器
vld3q_u8 从内存中读取3个168位数据到寄存器中
vst3q_u8 将三个128位寄存器的数据写到内存中
vld4_u8 从内存中读取4个88位数据到寄存器中
vmull_u8 执行两个8*8位无符号整数的乘法操作
vshrn_n_u16 16位无符号整数右移指定的位数
vst1_u8 将128位寄存器中的8位无符号整数元素存储到内存中
vshrq_n_s16 16位整数右移指定的位数
举例
void bgr_to_rgb(uint8_t *bgr, uint8_t *rgb, int width, int height)
{// Ensure BGR and BGR buffers are 16-byte aligned for NEONuint8_t *bgr_aligned = (uint8_t *)(((uintptr_t)bgr + 15) & ~15);uint8_t *rgb_aligned = (uint8_t *)(((uintptr_t)rgb + 15) & ~15);for (int q = 0; q < height * width / 16; q++){// Calculate the index for the current pixelint index = q * 16 * 3;// Load 16 BGR pixels into three vectors.uint8x16x3_t bgr_vector = vld3q_u8(bgr_aligned + index);// Shuffle the bytes to convert from BGR to BGR.uint8x16_t b = bgr_vector.val[2]; // Blueuint8x16_t g = bgr_vector.val[1]; // Greenuint8x16_t r = bgr_vector.val[0]; // Red// Combine the shuffled bytes into a single vector.uint8x16x3_t rgb_vector = {b, g, r};// Store the result.vst3q_u8(rgb_aligned + index, rgb_vector);}
}
使用gstreamer
使用gstremaer pipeline技术写好插件,直接操作显存
相关文章:
opencl色域变换,处理传递显存数据
在使用ffmpeg解码后的多路解码数据非常慢,还要给AI做行的加速方式是在显存处理数据,在视频拼接融合产品的产品与架构设计中,提出了比较可靠的方式是使用cuda,那么没有cuda的显卡如何处理呢 ,比较好的方式是使用opencl来…...
COD论文笔记 Boundary-Guided Camouflaged Object Detection
动机 挑战性任务:伪装物体检测(COD)是一个重要且具有挑战性的任务,因为伪装物体往往与背景高度相似,使得准确识别和分割非常困难。现有方法的不足:现有的深度学习方法难以有效识别伪装物体的结构和细节&am…...
java内存模型介绍
Java内存模型(Java Memory Model,JMM)是一种规范,它定义了Java虚拟机(JVM)如何在内存中存储和访问Java对象的方式,以及多个线程如何访问这些对象时的规则。它的主要目标是定义程序中的各个线程如…...
CSS语法介绍
文章目录 前言一、CSS引入方式1.行内操作2.内部操作3.外部操作 二、常用选择器1.标签选择器2.类选择器3.id选择器4.群组选择器5.后代选择器 三、字体常用设置1.字体类型2.字体大小3.字体样式4.字体粗细 四、div盒子模型1.盒子边框2.外边距3.内边距4.浮动 综合实战案例 前言 以…...
Jeecg | 完成配置后,如何启动整个项目?
前端启动步骤: 1. 以管理员身份打开控制台,切换到前端项目目录。 2. 输入 pnpm install 3. 输入 pnpm dev 4. 等待前端成功运行。 可以看到此时前端已经成功启动。 后端启动步骤: 1. 启动 mysql 服务器。 管理员身份打开控制台&#…...
Kubectl 的使用——k8s陈述式资源管理
一、kebuctl简介: kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径。 对资源的增、删、查操作比较方便&…...
多天线技术
多天线技术可以分为两类:分集技术和空间复用技术。分集技术利用多天线接收或者发射载有同一信息的信号,提高传输的可靠性。分集技术是将瑞利衰落无线信道换成更加稳定的信道。 发射端未知CSI时的信道容量 发射端已知CSI时的信道容量 信道估计ÿ…...
Meta发布Chameleon模型预览,挑战多模态AI前沿
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
声压级越大,STIPA 越好,公共广播就越清晰吗?
在公共广播中,有些朋友经常问到是不是声压越大,广播清晰度就越高,下面我从搜集了一些专业技术资料,供大家参考。 一、声压级越大,STIPA 越好吗? 不完全是。最初,人们认为当声压级达到 60 dBA 以…...
基于springboot+vue的4S店车辆管理系统
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...
深入理解 HTTP 缓存
浏览器缓存不是本地存储,要分清。浏览器缓存分为强缓存和协商缓存。本篇文章参考:使用 HTTP 缓存防止不必要的网络请求 讲解之前,我画了个简图来解释浏览器从缓存中获取资源的过程。 1. 强缓存 强缓存是浏览器缓存机制中的一种,…...
upload-labs 通关方法
目录 Less-1(JS前端验证) Less-2(MIME验证) Less-3(黑名单,特殊过滤) Less-4(黑名单验证,.htaccess) Less-5(黑名单,点空格点绕过…...
5-26 Cpp学习笔记
1、如果子类实现了基类的函数,返回值、参数都相同,就覆盖了基类的函数。 2、使用作用域解析运算符来调用基类的函数。myDinner.Swim(); —— 调用子类的。myDinner.Fish::Swim(); —— 调用基类的(基类是Fish) 3、在子类中使用关键字using解除对Fish::…...
YOLOv8_pose的训练、验证、预测及导出[关键点检测实践篇]
1.关键点数据集划分和配置 从上面得到的数据还不能够直接训练,需要按照一定的比例划分训练集和验证集,并按照下面的结构来存放数据,划分代码如下所示,该部分内容和YOLOv8的训练、验证、预测及导出[目标检测实践篇]_yolov8训练测试验证-CSDN博客是重复的,代码如下: …...
架构师必考题--软件系统质量属性
软件系统质量属性 1.质量属性2.质量属性场景描述3.系统架构评估 这个知识点是系统架构师必考的题目,也是案例分析题第一题, 有时候会出现在选择题里面,考的分数也是非常高的。 1.质量属性 属性说明可用性错误检测/恢复/避免性能资源需求/管理…...
使用AWR对电路进行交流仿真---以整流器仿真为例
使用AWR对电路进行交流仿真—以整流器仿真为例 生活不易,喵喵叹气。马上就要上班了,公司的ADS的版权紧缺,主要用的软件都是NI 的AWR,只能趁着现在没事做先学习一下子了,希望不要裁我。 本AWR专栏只是学习的小小记录而…...
在UbuntuLinux系统上安装MySQL和使用
前言 最近开始计划在Ubuntu上写一个webserver的项目,看到一些比较好的类似的项目使用了MySQL,我就打算先把环境搞好跑一下试试,方便后面更进一步的学习。其实在本机windows上我已经有一个mysql,不过 在Unbuntu上安装MySQL 首先…...
React 如何自定义 Hooks
自定义 Hooks React 内部自带了很多 Hooks 例如 useState、useEffect 等等,那么我们为什么还要自定义 Hooks?使用 Hooks 的好处之一就是重用,可以将代码从组件中抽离出来定义为 Hooks,而不用每个组件中重复去写相同的代码。首先是…...
智能家居完结 -- 整体设计
系统框图 前情提要: 智能家居1 -- 实现语音模块-CSDN博客 智能家居2 -- 实现网络控制模块-CSDN博客 智能家居3 - 实现烟雾报警模块-CSDN博客 智能家居4 -- 添加接收消息的初步处理-CSDN博客 智能家居5 - 实现处理线程-CSDN博客 智能家居6 -- 配置 ini文件优化设备添加-CS…...
双指针用法练习题(2024/5/26)
1三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元…...
嵌入式C语言宏配置技巧与实战应用
1. 嵌入式C语言宏配置的核心价值在嵌入式开发中,资源受限是常态。我曾参与过一个智能家居网关项目,FLASH只有128KB,RAM仅32KB。在这种环境下,传统的配置文件解析库根本装不下。这时宏配置就展现出独特优势——零运行时开销、编译期…...
工业级音频响应式分形火焰生成器:从算法到工程实践
1. 项目概述1.1 背景与动机分形火焰(Fractal Flame)是一种基于迭代函数系统(IFS)的生成艺术,能够产生绚丽多彩、无限复杂的图案。传统实现通常只依赖随机性,缺乏与外部世界的交互。音频信号作为丰富的信息源…...
OpenClaw 核心概念关系与配置指南
文章目录🏗️ 一、核心概念关系图🔄 二、核心概念关系详解1. Gateway(网关)- 控制中枢2. Agent(智能体)- 执行单元3. Skills(技能)- 功能模块4. Tools(工具)-…...
[特殊字符]️cv_resnet101_face-detection_cvpr22papermogface模型可解释性:Grad-CAM人脸热力图可视化
MogFace 人脸检测模型可解释性:Grad-CAM 热力图可视化实战 1. 引言 人脸检测技术已经相当成熟,但很多时候我们只是看到了检测框和置信度分数,却不知道模型到底“看”到了什么。为什么模型能在一张复杂的照片里找到人脸?它关注的…...
以考促学、以练固基:一体化在线考试学习平台设计与实践
在数字化培训与考核普及的背景下,考试、学习、练习一体化已成为企事业单位、教育、政府、金融、电力等行业提升培训效率、规范考核流程的核心需求。传统模式下学习、练习、考试相互割裂,存在组织成本高、监管难度大、数据不互通、效果难追踪等问题&#…...
turbo迁移vite-plus实践逞
认识Pass层级结构 Pass范围从上到下一共分为5个层级: 模块层级:单个.ll或.bc文件 调用图层级:函数调用的关系。 函数层级:单个函数。 基本块层级:单个代码块。例如C语言中{}括起来的最小代码。 指令层级:单…...
、SEATA分布式事务——XA模式奖
MySQL 中的 count 三兄弟:效率大比拼! 一、快速结论(先看结论再看分析) 方式 作用 效率 一句话总结 count(*) 统计所有行数 最高 我是专业的!我为统计而生 count(1) 统计所有行数 同样高效 我是 count(*) 的马甲兄弟…...
Phi-4-mini-reasoning保姆级教程:从零配置Ubuntu服务器到Gradio界面可用
Phi-4-mini-reasoning保姆级教程:从零配置Ubuntu服务器到Gradio界面可用 1. 准备工作 在开始之前,我们需要准备好以下内容: 一台运行Ubuntu 22.04 LTS的服务器(建议至少16GB内存)NVIDIA显卡(建议RTX 409…...
3D Hough变换在自动驾驶点云平面检测中的优化实践
1. 3D Hough变换在自动驾驶中的核心价值 当激光雷达扫描周围环境时,会产生数百万个三维空间中的离散点,这就是我们常说的点云数据。想象一下,你站在城市街头,眼前所有物体都被转化为密密麻麻的彩色点,就像星空中的繁星…...
景区气象站是什么
景区气象站监测项目包含负氧离子、pm2.5、pm10、温度、湿度、气压、含氧量、噪音、风速、风向等,是一款用于林业、景区、公园、环保、气象、农业等领域的实时环境气象监测与发布的监测系统,主要针对景区、湿度公园空气质量环境进行集中监控和管理&#x…...
