嵌入式音视频开发
-
-
- YUV原理
-
- 1.什么是YUV格式
- 2.YUV的优势
- 3.YUV采样格式
- 4.YUV存储格式
- VI模块
-
- 1.什么是VI模块
- 2.VI模块重要参数
-
- **VI视频节点**
- **VI_CHN_BUF_TYPE**
- 3.VI模块初始化API
-
- 1.RK_MPI_VI_SetChnAttr
- 2.RK_MPI_VI_EnableChn
- 多线程获取VI模块的YUV数据
-
- 初始化VI模块
- 启动VI模块
- 使用多线程的方式去采集
- RGA模块
-
- 1.RGA结构体的定义
- 2.RGA常用API
- 3.多线程获取RGA模块数据
-
嵌入式音视频指的是通过采集摄像头、麦克风等数据进行智能化、压缩化操作,从而达到商业化的效果。生活中常见的产品有很多:人脸考勤机、车载系统、移动直播设备、无人机等等。
常见的嵌入式音视频的芯片:瑞芯微RV1126/RK3399/RK3586、海思Hi3519AV100/Hi3559AV100、英伟达TX1/TX2芯片等等。三款芯片是目前市场上流行最火的音视频芯片,广泛运用在人工智能识别、音视频编解码、模型训练等高端领域。
RV1126是瑞芯微最新一代的智能视觉芯片。RV1126芯片主要支持4K 30fps、H264/H265视频编解码功能,并支持ISP2.0、HDR、麦克风阵列等最新技术。所以目前绝大部分公司都会用RV1126的芯片进行音视频项目的开发,学会了RV1126开发对音视频开发基本就有比较全的了解。
RV1126应用开发手册:
应用手册在开发中发挥着至关重要的作用,很多不懂的知识点可以在手册找到解决方法。着重学习以下内容:VI模块、RGA模块、VENC模块、VDEC模块、VO模块、AI模块、AENC模块、AO模块
YUV原理
1.什么是YUV格式
YUV是一种常见的视频像素格式,经常用在视频编解码上面,YUV分别由Y、U和V分量组成。Y分量指的是亮度分量,也就是经常说的灰阶值,相当于一副灰色的图像。而U分量和V分量表示的是色度分量, 它的作用就是用于影像的色彩以及饱和度,常用于指定像素的颜色,U分量是图像蓝色部分去掉亮度Y,V分量是图像红色部分去掉Y。换言之如果一副图像只有Y分量,没有UV分量就相当于看黑白电视一样没有颜色,所以现在彩电都引用了YUV像素格式。
2.YUV的优势
YUV和RGB是目前最流行的两套颜色格式,但是在音视频编解码和网络传输的时候基本都会用YUV,而非RGB。这是因为YUV在网络传输时只需要占用很少的带宽进行传输,这能大大节约存储空间、并且提高传输效率。比如YUV420P格式进行采样能够比RGB节约超过1/2存储空间
3.YUV采样格式
现在主流的YUV采样方式一般分三种:YUV444、YUV422、YUV420。
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都节省空间,因此它是目前最主流的采样格式。
4.YUV存储格式
YUV存储一般分为两大类,一种是 Planar,另一种是Packed
Planar指平面格式:它的特点是先连续存储所有的Y像素点,然后再存储所有的U像素点,最后存储所有的V像素点。即它分三个数组存储三个分量,比如data0[]存储所有Y分量、data1[]存储所有U分量、data2[]存储所有V分量。
Packed指的是打包格式:它的特点是所有像素点的YUV分量都是连续存储,并且所有的数据都存储在data0[]里面。
YUV420采样格式,就有这几种打包格式:NV12、NV21、YV12、YU12
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 … Y7 V0 … V7 U0…
YU12:这种方式使用的是平面格式来存储数据,换言之就是先存储Y分量、 然后存U分量、 最后存V分量,
Y0 … Y7 U0 … U7 V0…
YUV422