音视频概要

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之后,就会中止程序

相关推荐
LNTON羚通3 小时前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
小屁孩大帅-杨一凡7 小时前
Python-flet实现个人视频播放器
开发语言·python·音视频
EasyCVR10 小时前
私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
大数据·网络·音视频·h.265
天空中的野鸟10 小时前
Android音频采集
android·音视频
计算机毕设孵化场11 小时前
计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)
java·spring boot·计算机外设·音视频·课程设计·高校网上缴费综合务系统视频·计算机毕设ppt
简鹿办公18 小时前
如何提取某站 MV 视频中的音乐为 MP3 音频
音视频·简鹿视频格式转换器·视频提取mp3音频
yufengxinpian18 小时前
集成了高性能ARM Cortex-M0+处理器的一款SimpleLink 2.4 GHz无线模块-RF-BM-2340B1
单片机·嵌入式硬件·音视频·智能硬件
runing_an_min20 小时前
ffmpeg视频滤镜:替换部分帧-freezeframes
ffmpeg·音视频·freezeframes
runing_an_min1 天前
ffmpeg视频滤镜:提取缩略图-framestep
ffmpeg·音视频·framestep
小曲曲1 天前
接口上传视频和oss直传视频到阿里云组件
javascript·阿里云·音视频