Jetson Orin MultiMedia 使用总结

news2024/11/25 16:27:42

1.Jetson Orin /Xavier 对于图片的输入以及输出处理有一套特定的API。代码存放在/usr/src/jetson_multimedia_api中。

2.其中最主要的几个头文件:缓存管理申请 nvbufsurface.h 缓存转换 nvbufsurftransform.h 显示 nvosd.h 以及显示模块。

3.YUV转RGB来分析一下各个头文件是的使用。

先展示一下 YUV转换效果图:视频原始文件来源 squirrel-720x576-422P.yuv

从输入开始

YUV片源是422P的格式。这个格式说明YUV三个分量是分开存放。因此解析时候要注意图片的格式。【422相对420格式只有一个plane,420的格式会有三个plane分别存放Y U V 分量】

YUV422P 存放在文件中其实也有两种格式:左图UV 左右结构,右图为上下结构。具体要按照YUV片源读取后判断格式形状。

知道代码格式后就是从YUV源文件读取数据,读取的内容如下:

std::ifstream *stream

stream->read(sufaceList->mappedAddr.addr[plane] + surfaceList->planeParams.pitch[plane],

width*bytesPerPix);

解释一下pitch和width的区别:

首先是按照格式参数 YUV422 YUV420 YUV444等,具体按照图片的长宽来分配具体的缓存大小。对于422而言 pitch = width x 2 + margin。pitch 多少是实际的输入参数宽度对齐的结果。值得注意的是V4L2框架分配的缓存对齐的效果和nvsurface是相同的。这些会在后续文章会详细介绍。

有了图片同样有了输入的缓存大小以及形状,后面就可以处理YUV的数据了。

处理通过CUDA来处理,说明一点 这里的处理后的outbuf 是cudaMallocHost的分配结果,CPU和GPU可以共享,不需要额外的映射 Map的操作。输入的YUV数据缓存是nvsurface分配而来,分配后需要注册到GPU空间,即CUDA可以访问。同时也要通过surface的映射函数映射到CPU空间。应为该区域通过文件操作输入YUV数据。这块内容后续文章详细介绍。

核函数分析:

首先分析了一下 720 x 576 读取后的图片格式为 1440 x 576 如上图所示。特别需要注意的是 U V 分量开始的点 分别为 288 和 432,高 / 2 和 高度 3/4的起点。

大循环 288 次 图片  

for(int row = 0;row < height/2; ++row)

{

        if(idx > 720)

                return;

        Y0 = SRC[p*row+idx*2 + 0] ;

        Y1 = SRC[p*row+idx*2 + 1] ;

        if(row%2 == 0)

        {

        U  = SRC[p*row+ p*height/2 + idx]; 

        V  = SRC[p*row+ p*height*3/4 + idx];

        } else {

        U  = SRC[p*row+ p*height/2 + width + idx]; 

        V  = SRC[p*row+ p*height*3/4 + width + idx];

        UV_ROW++;

        }

       //偶数行 对应 720个 RGB ,如果当idx > 360 后换行存放在奇数行

        dst[2*row*width*3 + idx * 6 + 0] = R1;

        dst[2*row*width*3 + idx * 6 + 1] = G1;

        dst[2*row*width*3 + idx * 6 + 2] = B1;

        dst[2*row*width*3 + idx * 6 + 3] = R2;

        dst[2*row*width*3 + idx * 6 + 4] = G2;

        dst[2*row*width*3 + idx * 6 + 5] = B2;

        if(idx > 360)

       {

        dst[(2*row+1)*width*3 + (idx-360) * 6 + 0] = R1;

        dst[(2*row+1)*width*3 + (idx-360) * 6+ 1] = G1;

        dst[(2*row+1)*width*3 + (idx-360) * 6 + 2] = B1;

        dst[(2*row+1)*width*3 + (idx-360) * 6 + 3] = R2;

        dst[(2*row+1)*width*3 + (idx-360) * 6 + 4] = G2;

        dst[(2*row+1)*width*3 + (idx-360) * 6 + 5] = B2;

        }

}

转换示意图:

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

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

相关文章

开发人员应考虑使用 Edge浏览器的 8 个理由

1.无限访问ChatGPT 这是正确的。您可以通过 Bing 访问 GPT-4。但与 2021 年后没有数据的 ChatGPT 不同&#xff0c;必应通过从自己的搜索引擎中提取最新数据来对其进行补偿。 首先&#xff0c;点击Edge 浏览器左上角的Bing 小图标 Bing 具有三个选项卡&#xff1a;Chat、Compo…

VMware虚拟机安装黑苹果10.15 || AMD R7 5800处理器

VMwar版本&#xff1a;16Pro 链接&#xff1a;https://pan.baidu.com/s/1qGHEynWSV4YS9WSNonxiuA?pwdazvh 提取码&#xff1a;azvh macOS链接&#xff0c;版本为Catalina 10.5。这个版本后&#xff0c;os安装包就过10G了&#xff0c;会特别卡。 链接&#xff1a;https://pan…

YOLOv1代码复现1:辅助功能实现

YOLOv1代码复现1&#xff1a;辅助功能实现 前言 ​ 在经历了Faster-RCNN代码解读的摧残后&#xff0c;下决心要搞点简单的&#xff0c;于是便有了本系列的博客。如果你苦于没有博客详细告诉你如何自己去实现YOLOv1&#xff0c;那么可以看看本系列的博客&#xff0c;也许可以帮助…

操作指南|如何创建x-chain DAO

DAO是一个去中心化组织&#xff0c;大体与任何其他组织一样&#xff0c;但它是由智能合约中编码的规则所管理&#xff0c;并使DApps等能够完全去中心化且自主运行。 &#x1f4c4; 查看MoonbeamDocs 这与通常的分步教程不同&#xff0c;该推文旨在分享关于运行去中心化自治组…

delta.io 2.3.0 overwrite模式 overwriteSchema df覆盖table的表schema

初始化一张表 overwriteSchema 默认为false 图中注意事项: Note that the schema cant be overwritten when using replaceWhere. overwriteSchema 配置为true 可成功覆盖插入 overwriteSchema=true的配置项必须配置.mode("overwrite") 而不能是.mode("append…

( 栈和队列) 225. 用队列实现栈 ——【Leetcode每日一题】

❓225. 用队列实现栈 难度&#xff1a;简单 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MyStack 类&#xff1a; void push(int x) 将元素 x 压入…

国云筑基“翼”气风发,天翼云以科技创新绘就数字中国蓝图

科技云报道原创。 全球新一轮技术革命方兴未艾&#xff0c;特别是以数字技术为核心的信息技术革命&#xff0c;正在实现群体突破和加快广泛深度应用。 从2017年的“促进数字经济加快成长”&#xff0c;到2019年的“壮大数字经济”&#xff0c;到2020年的“全面推进‘互联网&am…

从0搭建Vue3组件库(八):使用 release-it 实现自动管理发布组件库

使用 release-it 实现自动管理发布组件库 上一篇文章已经打包好我们的组件库了,而本篇文章将介绍如何发布一个组件库。当然本篇文章介绍的肯定不单单只是发布那么简单。 组件库发布 我们要发布的包名为打包后的 easyest,因此在 easyest 下执行pnpm init生成package.json {&…

数字中国建设2522整体框架

作为影响中国未来发展的重磅文件&#xff0c;《数字中国建设整体布局规划》明确了两个重要时间节点&#xff1a; 到 2025 年&#xff0c;基本形成横向打通、纵向贯通、协调有力的一体化推进格局&#xff0c;数字中国建设取得重要进展&#xff1b; 到 2035 年&#xff0c;数字化…

Compiler- 尾调用

我们还是用例子来引入本次要探讨的问题--尾调用 #include <stdio.h>int fib(int a) {return a < 2 ? 1 : fib(a - 1) fib(a - 2); }int main() {int n,result;scanf("%d",&n);result fib(n);printf("result is %d.\n",result);return 0; …

JavaWeb02(Servlet页面跳转方式表单提交方式)

目录 一.servlet 1.1 什么是servlet? 1.2 实现接口,初始代码 1.3 学会配置和映射 1.4 掌握servlet的生命周期 生命周期的各个阶段 1.5 获取servlet初始化参数和上下文参数 1.5.1 初始代码 推荐使用 1.5.2 初始化参数 1.5.3 上下文参数 1.6 servlet应用:处理用户登…

多处理器的汇编编程

多处理器编程&#xff0c;本质上&#xff0c;就是把MR给每个处理器复制一份 每个处理器拿到MR&#xff0c;形成了自己的缓存内存空间&#xff0c;然后再在运行期间把运算结果写入共享内存 把i做成一条指令 使用asm嵌入汇编&#xff0c;向sum的寄存器直接写入1的值 把C语言转…

【Python入门第五十三天】Python丨NumPy 中的随机数

什么是随机数&#xff1f; 随机数并不意味着每次都有不同的数字。随机意味着无法在逻辑上预测的事物。 伪随机和真随机 计算机在程序上工作&#xff0c;程序是权威的指令集。因此&#xff0c;这意味着必须有某种算法来生成随机数。 如果存在生成随机数的程序&#xff0c;则…

10个必备的建筑可视化3dmax插件

当日复一日地处理项目时&#xff0c;很容易陷入舒适但效率不高的工作流程中。 插件是在不牺牲工作质量的情况下改进和加快工作流程的好方法。 尤其是在建筑可视化时&#xff0c;快节奏的行业往往需要艺术家灵活机智。 在本文中&#xff0c;我们将介绍 10 个最好的 3ds Max 插件…

Springboot 整合 JPA 及 Swagger2

首先是官方文档&#xff1a; Spring Data JPA - Reference Documentationhttps://docs.spring.io/spring-data/jpa/docs/2.2.4.RELEASE/reference/html/#repositories.query-methods 1、JPA相关概念 2、创建 Springboot 项目 修改 pom 文件&#xff0c;可以直接进行复制粘贴&a…

百度APP iOS端包体积50M优化实践(二) 图片优化

**一、前言删除线格式 ** 在上一篇文章&#xff0c;我们介绍了包体积优化的必要性、安装包组成部分和生成过程、国内外大厂APP包体积分析、百度APP包体积优化技术方案及各项收益&#xff0c;本文重点讲述图片优化&#xff0c;解压IPA包后发现&#xff0c;百度APP中asset和bund…

Seurat -- Normalize Data

brief seurat提供的教学里面包含了Standard pre-processing workflow,workflow包括QC&#xff0c;normalization&#xff0c;scale data &#xff0c;detection of highly variable features。其中 normalization就有蛮多方法的&#xff0c;seurat自己就提供了两种&#xff0c…

ChatGpt接入Word文档,让你秒变职场达人!

今天跟大家分享下我们如何使用VBA代码&#xff0c;将ChatGpt接入Word文档&#xff0c;操作非常的简单&#xff0c;但是开始之前我们需要做2项准备 1. 获取ChatGpt的API 2. 魔法上网 准备好这2件事后&#xff0c;我们就可以着手制作了: 一&#xff0c;设置代码 二&…

微软的“牛头怪时刻”

2014年&#xff0c;当萨提亚纳德拉接任微软CEO时&#xff0c;他面对的是一家停滞且难以在快速发展的技术领域保持竞争优势的公司。自那以后&#xff0c;纳德拉将其重点从传统操作系统和生产力软件&#xff0c;转向云计算和人工智能&#xff0c;被认为重振了微软。​ 让我们以O…

ThreadPoolExecutor源码阅读流程图

1.创建线程池 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultThreadFactory(), def…