音视频多媒体开发基础概述之颜色格式(2)YUV颜色格式
1. YUV存储格式
YUV格式通常有两大类:打包(packed)格式和平面(planar)格式。
打包(packed)格式将YUV分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel);
平面(planar)格式使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。
常见的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等。YUY2到Y211都是打包格式,而IF09到YVU9都是平面格式
2. YUV主要的采样格式
(1)YUV 4:4:4
YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节。
下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的码流为: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3 (12字节/4像素)
映射出像素点为: [Y0 U0 V0] [Y1 U0 V1] [Y2 U2 V2] [Y3 U2 V3]
(2)YUV 4:2:2
每个色差信道U和V水平方向的抽样率是亮度信道Y的一半,所以水平方向的色度抽样率只是4:4:4的一半。对非压缩的8比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用4字节内存。
下面的四个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的码流为:Y0 U0 Y1 V1 Y2 U2 Y3 V3 (8字节/4像素)
映射出像素点为:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]
(3)YUV 4:1:1
4:1:1的色度抽样,是在水平方向上对色度U和V进行4:1抽样。对于低端用户和消费类产品这仍然是可以接受的。对非压缩的8比特量化的视频来说,每个由4个水平方向相邻的像素组成的宏像素需要占用6字节内存。
下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
存放的码流为: Y0 U0 Y1 Y2 V2 Y3 (6字节/4像素)
映射出像素点为:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]
(4)YUV4:2:0
4:2:0并不意味着只有Y,U而没有V分量,它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是2:1,所以可以说色度的抽样率是4:1。对非压缩的8比特量化的视频来说,每个由2x2个2行2列相邻的像素组成的宏像素需要占用6字节内存
下面八个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
[Y5 U5 V5] [Y6 U6 V6] [Y7 U7 V7] [Y8 U8 V8]
存放的码流为:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8 (12字节/8像素)
映射出的像素点为:[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]
[Y5 U0 V5] [Y6 U0 V5] [Y7 U2 V7] [Y8 U2 V7]
YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量。
3. 存储方式
用图的形式给出常见的YUV码流的存储方式,并附有取样每个像素点的YUV数据的方法,其中,Cb、Cr的含义等同于U、V
(1) YUYV 格式 (属于YUV422)
YUYV为YUV422采样的存储格式中的一种,相邻的两个Y共用其相邻的两个Cb、Cr,对于像素点Y'00、Y'01 而言,其Cb、Cr的值均为 Cb00、Cr00,其他的像素点的YUV取值依次类推。
(2) YUV422P(属于YUV422)
YUV422P也属于YUV422的一种,它是一种Plane模式,即平面模式,并不是将YUV数据交错存储,而是先存放所有的Y分量,然后存储所有的U(Cb)分量,最后存储所有的V(Cr)分量,如图所示。其每一个像素点的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即两个Y共用一个UV。比如,对于像素点Y'00、Y'01 而言,其Cb、Cr的值均为 Cb00、Cr00。
(3)YV12,YU12格式(属于YUV420)
YU12和YV12属于YUV420格式,也是一种Plane模式,将Y、U、V分量分别打包,依次存储。其每一个像素点的YUV数据提取遵循YUV420格式的提取方式,即4个Y分量共用一组UV。
(4)NV12、NV21(属于YUV420)
NV12和NV21属于YUV420格式,是一种two-plane模式,Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane,即Y分量平面格式,UV打包格式,内存布局如图所示。其提取方式与上一种类似,即Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00。
(5)YUY2
在 YUY2 格式中,数据可被视为一个不带正负号的 char 值组成的数组,其中第一个字节包含第一个 Y 样例,第二个字节包含第一个 U (Cb) 样例,第三个字节包含第二个 Y 样例,第四个字节包含第一个 V (Cr) 样例,
(6)UYVY
此格式与 YUY2 相同也是YUV422采样的存储格式中的一种,只是字节顺序是与之相反的,色度字节和灯光字节是翻转的。如果该图像被看作由两个 little-endian WORD 值组成的数组,则第一个 WORD 在 LSB 中包含 U,在 MSB 中包含 Y0,第二个 WORD 在 LSB 中包含 V,在 MSB 中包含 Y1。
(7)IMC1
所有 Y 样例都会作为不带正负号的 char 值组成的数组首先显示在内存中。后面跟着所有 V (Cr) 样例,然后是所有 U (Cb) 样例。V 和 U 平面与 Y 平面具有相同的跨距,从而生成如图所示的内存的未使用区域。
(8)IMC2
此格式与 IMC1 相同,只是 V (Cr) 和 U (Cb) 行在半跨距边界处进行了交错。换句话说,就是色度区域中的每个完整跨距行都以一行 V 样例开始,然后是一行在下一个半跨距边界处开始的 U 样例。此布局与 IMC1 相比,能够更加高效地利用地址空间。它的色度地址空间缩小了一半,因此整体地址空间缩小了 25%。在各个 4:2:0 格式中,IMC2 是第二首选格式,排在 NV12 之后。
(9)IMC3
此格式与 IMC1 相同,只是 U 和 V 平面进行了交换
(10)IMC4
此格式与 IMC2 相同,只是 U (Cb) 和 V (Cr) 行进行了交换
- 分享
- 举报
-
浏览量:4196次2020-11-06 17:11:49
-
2020-10-21 11:35:55
-
浏览量:3503次2020-10-21 11:25:37
-
浏览量:767次2023-10-23 16:21:43
-
浏览量:3519次2020-08-03 19:28:14
-
浏览量:2066次2020-08-04 20:27:13
-
浏览量:5280次2020-07-31 11:54:44
-
浏览量:2573次2020-08-03 19:57:19
-
浏览量:1531次2023-11-07 15:38:56
-
浏览量:1991次2022-11-21 17:11:41
-
浏览量:1374次2023-01-12 17:45:30
-
浏览量:4661次2021-04-23 14:10:09
-
2024-01-17 10:40:55
-
浏览量:1238次2024-02-22 15:52:02
-
浏览量:1086次2023-12-26 16:33:04
-
浏览量:1120次2023-12-21 17:20:27
-
浏览量:614次2023-10-24 17:47:15
-
浏览量:751次2024-03-01 16:04:36
-
2020-08-03 19:14:56
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
free-jdx
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明