音视频概要

news2025/1/10 3:21:11

YUV原理的讲解

YUV是一种常见的视频像素格式,经常用在视频编解码上面,YUV分别由Y分量和U、V分量(红色投影Cr)组成。Y分量指的是亮度分量,也就是我们经常说的灰阶值,相当于一副灰色的图像。而U分量和V分量表示的是色度分量,它的作用就是用于影像的色彩以及饱和度,常用于指定像素的颜色,U分量是图像蓝色部分去掉亮度Y,V分量是图像红色部分去掉亮度Y。换言之如果一副图像只有Y分量,没有UV分量就相当于我们看黑白电视一样,没有颜色,所以现在大部分彩色电视都引用了YUV像素格式。

YUV采样格式

YUV444

相当于Y、U、V三个分量采用相同的采样比例进行采样。所以用YUV444采样生成的图像,YUV三个分量的信息是完整的,都是8bit,也就是一个字节。这里的YUV444顾名思义就是4个Y分量、4个U分量、4个V分量。Y分量大小:w * h;U分量大小:w * h;V分量大小:w * h。所以,我们用YUV444格式去采样一个1920 * 1080的图像的时候,得到的大小等于:(1920 * 1080 * 8 + 1920 * 1080 * 8 + 1920 * 1080 * 8)/8/1024/1024 ~= 5.94M。从计算公式可以看出,YUV444每一帧图像大小和RGB差不多,所以在真正开发中很少会用到。

YUV422

相当于U、V分量是以Y分量采样的一半进行采样,Y分量和UV分量按照2:1的比例进行采样(也可以理解为两个Y分量对应一个UV分量)。就比方说,若一个水平方向有8个像素点,那么采样了8个Y分量,那么UV分量只有4个。这里采样用的是4个Y分量、2个U分量、2个V分量进行采样。Y分量大小:w * h;U分量:w * h /2;V分量:w * h /2。所以,用YUV422采样的大小是:(1920 * 1080 * 8 + (1920 * 1080)/2 * 8 + (1920 * 1080)/2 * 8)/8/1024/1024 ~= 3.96M。

YUV420

相当于每一行扫描的时候只扫描一种色度分量(U分量或者V分量),和Y分量按照2:1的方式进行采样(也可以理解为四个Y分量对应一个UV分量)。就比方说,在第一行扫描的时候,YV分量按照2:1的方式进行采样,那么YU分量也是用2:1的方式采样,所以对于每个色度分量来说,它的水平方向和垂直方向的采样比都是2:1。这里采用的是4个Y分量、2个U分量、0个V分量采集,而下一行的则是用4个Y分量、0个U分量、2个V分量采样。所以,Y分量大小:w * h;U分量:w * h /4;  V分量:w * h/4。所以用YUV420采集一个1920 * 1080的图像大小:(1920 * 1080 * 8 + (1920 * 1080)/4 * 8 + (1920 * 1080)/4 * 8)/8/1024/1024 ~=2.97M 。可以看到用YUV420采样的图像比YUV444和YUV422都节省空间,因此它是目前最主流的采样格式。

YUV存储格式

Planar指的是平面格式

它的特点是先连续存储所有的Y像素点,然后再存储所有的U像素点,最后存储所有的V像素点。换言之它分三个数组存储三个分量,比方说data[0]存储所有的Y分量、data[1]存储所有的U分量、data[2]存储所有的V分量。

Packed指的是打包格式

它的特点是所有像素点的YUV分量都是连续存储,并且所有的数据都存储在data[0]里面。

YUV打包格式

YUV4202采样格式

NV12

这种方式使用的是平面格式来存储数据,换言之就是先存储Y分量、 然后UV交替存储。

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 U0 V0...

NV21

这种方式使用的是平面格式来存储数据,换言之就是先存储Y分量、 然后VU交替存储。

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 V0 U0...

YV12

这种方式使用的是平面格式来存储数据,换言之就是先存储Y分量、 然后存V分量、 最后存U分量,Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 V0 U0...

YU12

这种方式使用的是平面格式来存储数据,换言之就是先存储Y分量、 然后存U分量、 最后存V分量,Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 U0 V0...

YUV422采样格式

YUYV

采用的是打包方式存储,它的特点是每个像素点采用Y分量存储,但是每隔一个像素点用UV分量采样Y0 U0 Y1 V0 Y2 U2 Y3 V2

UYVY

采用的是打包方式存储,它的特点是每个像素点采用U分量再采样Y分量

U0 Y0 V0 Y1 U2 Y2 V2 Y3

YUV422P

采用的是平面方式存储,它的特点是先存储所有的Y分量、然后在存储U分量、最后存储V分量Y0

Y0 Y1 Y2 Y3 U0 U1 V0 V1

VI模块

vi模块重要参数

VI捕捉视频的类型,这里面有两种。一种是DMA模式(VI_CHN_BUF_TYPE_DMA)、另外一种是MMAP模式(VI_CHN_BUF_TYPE_MMAP):

**DMA指的是直接访问内存的方式,相当于音视频数据直接从硬件传输到内存里面。这种方式的优点就是两边传输的速度非常之快,但缺点就是非常消耗硬件资源,对硬件外设资源要求较高。

MMAP

RV1126的VI模块初始化API

 

注意,这里管道和通道的关系有可能是一对一或者是一对多

多线程获取VI模块的YUV数据

 代码演示

宏定义

结构体的初始化

设置VI模块并使能

启动VI模块

使用多线程的方式去采集

中止

while循环中一直使用的是!false,当变成true之后就会直接退出循环,也就是当用户按Ctrl+c之后,就会中止程序

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

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

相关文章

搭建高可用OpenStack(Queen版)集群(九)之部署nova计算节点

一、搭建高可用OpenStack(Queen版)集群之部署计算节点 一、部署nova 1、安装nova-compute 在全部计算节点安装nova-compute服务 yum install python-openstackclient openstack-utils openstack-selinux -y yum install openstack-nova-compute -y 若yu…

基于vue框架的《大学计算机》课程思政资源共享平台ac9s7(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:学生,教师,教研小组,章节分类,课程内容,资源类型,资源信息 开题报告内容 基于Vue框架的《大学计算机》课程思政资源共享平台 开题报告 一、引言 随着教育信息化的深入发展,高等教育领域对课程思政的重视程度日益提升。《大…

【kubernetes】pod控制器详解

一、pod控制器概述 1、Pod控制器作用 Pod控制器,是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效,则会重新新建pod的资源。 2、pod控制器…

Ethercat学习-SOEM主站源码解析(DC部分)

文章目录 SOEM DC模式源码简介示例用图ecx_porttimeecx_parentportecx_configdc如果从站不支持DC如果从站支持DC SOEM DC模式源码简介 示例用图 本文中都会围绕着这个图来讲,从站的port编号依次为0,3,1,2 在SOEM中,与…

C++11相关新特性(列表初始化、右值引用、可变参数模版)

目录 C11相关新特性 列表初始化 初始化简单变量 初始化容器 decltype关键字 C 11新增的容器 左值引用和右值引用 左值与右值 左值引用与右值引用 左值引用和右值引用的相互转化 右值引用的使用 拷贝构造函数与移动构造函数 赋值重载函数与移动赋值重载函数 元素插…

ZABBIX邮件监控发送信息

前言:本地邮箱,第三方邮箱,第三方邮箱加脚本 1、本地邮箱测试 #cd /home # ls laiyingx [rootzabbix ~]# vim /etc/postfix/main.cf /mydestination $myhostname, localhost.$mydomain, localhost,$mydomain [rootzabbix ~]# systemctl…

Python 函数返回yield还是return?这是个问题

如果你刚入门 Python,你可能之前没有遇到过yield。虽然它看起来很奇怪,但它是你编码工具库中的一个重要工具。在成为 Python 大师的道路上,你必须掌握它。 返回列表的函数 假设有一个函数,它可以一次性生成一系列值,…

代理服务器在HTTP请求中的应用:Ruby实例

摘要 在现代互联网架构中,代理服务器是不可或缺的组件,它提供了访问控制、数据加密、缓存和匿名访问等多种功能。本文将介绍代理服务器的基本概念,并以Ruby编程语言为例,展示如何在HTTP请求中使用代理服务器,包括设置…

树莓派4 AV没有视频输出

使用AV接口输出,没有画面 需要在config.txt文件中 增加配置 enable_tvout1config.txt 中的 dtoverlayvc4-kms-v3d 行末尾添加,composite: dtoverlayvc4-kms-v3d,composite默认情况下,输出 NTSC 复合视频。要选择不同的模式,请在…

python信息熵与信息增益

前言 最近在读几篇华为杯的优秀论文,都是关于数据预测相关的,准确来说是时间序列预测,在数据处理部分发现了一个有趣的内容“信息熵”,之前在周志华老师的西瓜书上决策树剪枝部分看到过,在数据降维的部分看到还是第一…

关于springboot的拦截器能力源码分析

首先你得有web环境,这个就不说了,springboot下很简单。 一、拦截器使用 我们先来使用一下拦截器。 步骤1、先创建一个Controller RestController RequestMapping("/test") public class MyController {GetMapping("/test/{name}"…

HAProxy原理及实例

目录 目录 haproxy简介 haproxy的基本信息 haproxy下载并查看版本 haproxy的基本配置信息 global配置 ​编辑多进程和多线程 启用多进程 启用多线程 haproxy开启多线程和多进程有什么用 proxies配置 defaults frontend backend listen socat工具 实例&#xff1a…

ESP32 SNTP 网络校时 钟表显示

8月12日(2) 例程环境:Windows 11、Visual Studio Code、IDF_V5.2.1、LVGL_V8.3.11、HelloBug ESP32 Pilot开发板 源码获取:https://item.taobao.com/item.htm?ftt&id652537645861 向商家索取对应源码 SNTP (Simple Network Time Protocol) 是一种简…

中科亿海微SoM模组——电机驱动板

电机驱动板 电机驱动板作为驱动电机的重要组成部分,被广泛应用于工业自动化、消费电子、汽车、家用电器等应用领域。在工业自动化中,电机驱动板主要用于控制机器人、数控机床、输送带等设备,确保其高效、精准地运行。在消费电子和家用电器中…

【ARM Coresight Debug 工具系列 -- Trace32 | ARM-DS5 | OpenOCD JLINK 关系与差】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 常用debug工具差异介绍Trace32ARM DS-5OpenOCDJ-Link 关系与差异差异 示例比较使用 Trace32 进行实时跟踪使用 ARM DS-5 进行高级调试使用 OpenOCD 进行开源调试 Summary 常用debug工具差异介绍 在嵌入式系统开发和…

阿里淘天校招校招开始啦,欢迎投递~

淘天校招&校招开始啦,欢迎投递~ 后续继续推出技术类面试资料,有问题也可咨询哦! 校招内推码(25年10月前均有效) 社招内推码(长期有效)

Tarjan(五)vDCC缩点

Tarjan(五) vDCC点双联通分量: 需要之前的前置知识,需要搞懂什么是割点。在tarjan(2)中有介绍到。 点双连通分量是指在一个无向图中,如果一个子图是点双连通的(即去掉该子图中的任意一个节点后,剩余的图仍然是连通的&a…

电商平台产品ID|CDN与预渲染|前端边缘计算

技术实现 都是通过ID拿到属性,进行预渲染html,通过 oss 分发出去 详情页这种基本都是通过 ssr 渲染出来,然后上缓存 CDN 分发到边缘节点来处理,具体逻辑可以参考 淘宝——EdgeRoutine边缘计算(CDNServerless 边缘计算…

深度解析HAProxy:构建高可用负载均衡的终极指南

目录 haproxy配置文件组成 实验环境 haproxy安装 haproxy的配置文件说明 全局配置段global 多进程和多线程配置 代理配置段proxies server配置说明 实验相关配置 测试效果: haproxy的状态页 socat命令 socat命令的一些常用示例 HAProxy的调度算法 静…

Oracle事务是怎么练成的

什么是事务 事务是数据库管理系统执行过程的一个逻辑单位,由一系列有限的数据库操作序列构成,事务必须满足‌ACID属性。ACID理论是数据库中最重要的概念之一,分别代表原子性(Atomicity)、一致性(Consisten…