2.7.1.2. 平面 YUV 格式

平面格式将亮度 (luma) 和色度 (chroma) 数据分割在不同的内存区域中。它们有两种变体:

  • 半平面格式使用两个平面。第一个平面是亮度平面,存储 Y 分量。第二个平面是色度平面,存储 Cb 和 Cr 分量,它们是交错存储的。

  • 全平面格式使用三个平面分别存储 Y、Cb 和 Cr 分量。

在平面内,分量按像素顺序存储,可以是线性的或平铺的。行尾可能支持填充,并且色度平面的行跨度可能受亮度平面的行跨度约束。

某些平面格式允许将平面放置在独立的内存位置。它们的名称中带有“M”后缀(例如 V4L2_PIX_FMT_NV12M)。这些格式仅供支持多平面 API 的驱动程序和应用程序使用,该 API 在 单平面和多平面 API 中描述。除非明确记录为支持非连续平面,否则格式要求平面在内存中彼此紧跟。

2.7.1.2.1. 半平面 YUV 格式

这些格式通常被称为 NV 格式(NV12、NV16...)。它们使用两个平面,在第一个平面中存储亮度分量,在第二个平面中存储色度分量。Cb 和 Cr 分量在色度平面中交错存储,Cb 和 Cr 始终成对存储。色度顺序以不同的格式公开。

对于内存连续格式,色度线末尾的填充像素数与亮度线的填充相同。在没有水平子采样的情况下,色度行跨度(以字节为单位)因此等于亮度行跨度的两倍。水平子采样为 2 时,色度行跨度等于亮度行跨度。垂直子采样不影响行跨度。

对于非连续格式,该格式不对亮度线和色度线的填充和跨度之间的关系强制执行任何约束。

所有分量都以每个分量相同的位数存储。

半平面 YUV 格式概述

标识符

代码

每个分量的位数

子采样

色度顺序 [1]

连续 [2]

平铺 [3]

V4L2_PIX_FMT_NV12

‘NV12’

8

4:2:0

8

4:2:0

Cb,Cr

线性

8

4:2:0

V4L2_PIX_FMT_NV21

4:2:0

Cb,Cr

‘NV21’

8

8

4:2:0

8

4:2:0

Cb,Cr

Cr,Cb

8

4:2:0

V4L2_PIX_FMT_NV21

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_NV12M

8

4:2:0

8

4:2:0

‘NM12’

8

4:2:0

Cb,Cr

8

4:2:2

8

4:2:0

线性

V4L2_PIX_FMT_NV21M

10

4:2:0

8

4:2:0

Cb,Cr

‘NM21’

8

10

4:2:0

8

4:2:0

4:2:0

Cr,Cb

12

4:2:0

8

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_NV12MT

12

4:2:0

8

4:2:0

Cb,Cr

‘TM12’

8

15

4:2:0

8

4:2:0

4:2:0

4:2:0

Cb,Cr

15

4:2:0

8

4:2:0

64x32 瓦片

水平 Z 顺序

15

4:2:0

8

4:2:0

V4L2_PIX_FMT_NV12MT_16X16

‘VM12’

8

8

4:2:2

8

4:2:0

Cb,Cr

4:2:0

Cb,Cr

8

4:2:2

V4L2_PIX_FMT_NV21

4:2:0

Cb,Cr

16x16 瓦片

8

4:2:2

8

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_P010

8

4:2:2

V4L2_PIX_FMT_NV21

4:2:0

Cb,Cr

‘P010’

10

8

4:4:4

8

4:2:0

Cb,Cr

4:2:0

Cb,Cr

8

4:4:4

V4L2_PIX_FMT_NV21

4:2:0

Cb,Cr

‘T010’

10

4:2:0

Cb,Cr

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_P012M

‘PM12’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

4:2:0

Cb,Cr

4x4 瓦片

线性

V4L2_PIX_FMT_MT2110T

‘MT2T’

10

4:2:0

Cb,Cr

16x32 / 16x16 瓦片,低位平铺

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

线性

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_MT2110R

‘PM12’

12

4:2:0

Cb,Cr

‘MT2R’

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

10

Cb,Cr

4x4 瓦片

线性

4:2:0

‘MT2T’

10

4:2:0

Cb,Cr

Cb,Cr

16x32 / 16x16 瓦片,栅格低位

线性

nv12mt.svg

V4L2_PIX_FMT_NV16

nv12mt_example.svg

‘NV16’

8

4:2:2

Cb,Cr

线性

V4L2_PIX_FMT_NV61

‘NV61’

8

V4L2_PIX_FMT_NV12M_10BE_8L128 类似于 V4L2_PIX_FMT_NV12M,但它将 10 位像素存储在 2D 8x128 瓦片中,并且在内存中线性存储瓦片。数据以大端序排列。图像高度必须对齐为 128 的倍数。亮度 (luma) 和色度 (chroma) 平面的布局是相同的。注意,瓦片大小是 8 字节乘以 128 字节,这意味着一个像素的低位和高位可能位于不同的瓦片中。10 位像素被打包,因此 5 个字节包含 4 个 10 位像素,布局如下(对于亮度):字节 0:Y0(位 9-2)字节 1:Y0(位 1-0)Y1(位 9-4)字节 2:Y1(位 3-0)Y2(位 9-6)字节 3:Y2(位 5-0)Y3(位 9-8)字节 4:Y3(位 7-0)

V4L2_PIX_FMT_NV12_10BE_8L128 类似于 V4L2_PIX_FMT_NV12M_10BE_8L128,但将两个平面存储在一个内存中。

V4L2_PIX_FMT_MT2110T 是联发科 (Mediatek) 打包的 10 位 YUV 4:2:0 格式之一。它是一种完全打包的 10 位 4:2:0 格式,类似于 NV15(每个像素 15 位),只是较低的两位数据存储在单独的分区中。该格式由 16x32 亮度瓦片和 16x16 色度瓦片组成。每个瓦片长 640 字节,分为 8 个 80 字节的分区。分区的第一个 16 字节表示像素数据的 2 个最低有效位。其余 64 字节表示像素数据的 8 个最高有效位。

mt2110t.svg

MT2110T 色度瓦片布局

过滤掉每个分区的上部会产生一个有效的 V4L2_PIX_FMT_MM21 帧。一个分区是大小为 16 x 4 的子瓦片。较低的两位被认为是平铺的,因为每个字节包含与相同索引匹配的像素列的较低两位。色度瓦片只有 4 个分区。

MT2110T LSB 位布局

开始 + 1

. . .

开始 + 15

位 1:0

Y’0:0

Y’0:1

. . .

Y’0:15

位 3:2

Y’1:0

Y’1:1

. . .

Y’1:15

位 5:4

Y’2:0

Y’2:1

. . .

Y’2:15

位 7:6

Y’3:0

Y’3:1

. . .

Y’3:15

V4L2_PIX_FMT_MT2110RV4L2_PIX_FMT_MT2110T 相同,只是最低有效两位布局采用光栅顺序。这意味着第一个字节包含第一行的 4 个像素,每行 4 个字节。

MT2110R LSB 位布局

字节 0

...

字节 3

7:6

5:4

3:2

1:0

...

7:6

5:4

3:2

1:0

Y’0:3

Y’0:2

Y’0:1

Y’0:0

...

Y’0:15

Y’0:14

Y’0:13

Y’0:12

12

Y’1:3

Y’1:2

Y’1:1

Y’1:0

...

Y’1:15

Y’1:14

Y’1:13

Y’1:12

V4L2_PIX_FMT_P012M

Y’2:3

Y’2:2

Y’2:1

Y’2:0

...

Y’2:15

Y’2:14

Y’2:13

Y’2:12

开始 + 12

Y’3:3

Y’3:2

Y’3:1

Y’3:0

...

Y’3:15

Y’3:14

Y’3:13

Y’3:12

2.7.1.2.1.4. NV16、NV61、NV16M 和 NV61M

半平面 YUV 4:2:2 格式。色度平面在水平方向上进行 2 倍的二次采样。色度行包含的像素数量是亮度行的一半,字节数与亮度行相同,并且色度平面包含的行数与亮度平面相同。

4x4 NV16 图像示例

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_P012M

‘PM12’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

4:2:0

Cb,Cr

4x4 瓦片

线性

V4L2_PIX_FMT_MT2110T

‘MT2T’

10

4:2:0

Cb,Cr

开始 + 24

Cb20

Cr20

Cb21

Cr21

开始 + 28

Cb30

Cr30

Cb31

Cr31

4x4 NV16M 图像示例

16x32 / 16x16 瓦片,低位平铺

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

线性

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_MT2110R

‘PM12’

12

4:2:0

Cb,Cr

‘MT2R’

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

10

Cb,Cr

Cb02

Cr02

4:2:0

‘MT2T’

10

Cb12

Cr12

开始 1 + 8

Cb20

Cr20

Cb22

Cr22

开始 1 + 12

Cb30

Cr30

Cb32

Cr32

2.7.1.2.1.5. NV24 和 NV42

半平面 YUV 4:4:4 格式。色度平面不进行二次采样。色度行包含的像素数量与亮度行相同,字节数是亮度行的两倍,并且色度平面包含的行数与亮度平面相同。

4x4 NV24 图像示例

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_P012M

‘PM12’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

4:2:0

Cb,Cr

4x4 瓦片

线性

Cb02

Cr02

Cb03

Cr03

开始 + 24

‘MT2T’

10

4:2:0

Cb,Cr

Cb12

Cr12

Cb13

Cr13

开始 + 32

Cb20

Cr20

Cb21

Cr21

Cb22

Cr22

Cb23

Cr23

开始 + 40

Cb30

Cr30

Cb31

Cr31

Cb32

Cr32

Cb33

Cr33

2.7.1.2.1.6. P010 和平铺 P010

P010 类似于 NV12,每个分量 10 位,扩展到 16 位。数据在高 10 位,低 6 位为零,以小端序排列。

4x4 P010 图像示例

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

V4L2_PIX_FMT_P012M

4:2:0

Cb,Cr

线性

4:2:0

‘PM12’

12

4:2:0

Cb,Cr

开始 + 24

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

开始 + 32

Cb,Cr

4x4 瓦片

线性

开始 + 40

‘MT2T’

10

4:2:0

Cb,Cr

2.7.1.2.1.7. P012 和 P012M

P012 类似于 NV12,每个分量 12 位,扩展到 16 位。数据在高 12 位,低 4 位为零,以小端序排列。

4x4 P012 图像示例

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

V4L2_PIX_FMT_P012M

4:2:0

Cb,Cr

线性

4:2:0

‘PM12’

12

4:2:0

Cb,Cr

开始 + 24

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

开始 + 32

Cb,Cr

4x4 瓦片

线性

开始 + 40

‘MT2T’

10

4:2:0

Cb,Cr

4x4 P012M 图像示例

16x32 / 16x16 瓦片,低位平铺

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

V4L2_PIX_FMT_MT2110R

4:2:0

Cb,Cr

线性

开始 0 + 16

‘PM12’

12

4:2:0

Cb,Cr

开始 0 + 24

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

10

Cb,Cr

4x4 瓦片

线性

开始 1 + 8

‘MT2T’

10

4:2:0

Cb,Cr

2.7.1.2.2. 完全平面 YUV 格式

这些格式将 Y、Cb 和 Cr 分量存储在三个单独的平面中。亮度平面排在第一位,两个色度平面的顺序因格式而异。两个色度平面始终使用相同的二次采样。

对于内存连续格式,色度行末尾的填充像素数与亮度行的填充数相同。因此,色度行的步幅(以字节为单位)等于亮度行的步幅除以水平二次采样因子。垂直二次采样不影响行步幅。

对于非连续格式,该格式不对亮度线和色度线的填充和跨度之间的关系强制执行任何约束。

所有分量都以每个分量相同的位数存储。

V4L2_PIX_FMT_P010_4L4 将像素存储在 4x4 瓦片中,并在内存中线性存储瓦片。行步幅必须对齐为 8 的倍数,图像高度必须对齐为 4 的倍数。亮度和色度平面的布局是相同的。

完全平面 YUV 格式概述

标识符

代码

每个分量的位数

子采样

平面顺序 [4]

连续 [5]

V4L2_PIX_FMT_YUV410

‘YUV9’

8

4:1:0

Y, Cb, Cr

4:2:0

V4L2_PIX_FMT_YVU410

‘YVU9’

8

4:1:0

Y, Cr, Cb

4:2:0

V4L2_PIX_FMT_YUV411P

‘411P’

8

4:1:1

Y, Cb, Cr

4:2:0

V4L2_PIX_FMT_YUV420M

‘YM12’

8

4:2:0

Y, Cb, Cr

4:2:0

V4L2_PIX_FMT_YVU420M

‘YM21’

8

4:2:0

Y, Cr, Cb

4:2:0

V4L2_PIX_FMT_YUV420

‘YU12’

8

4:2:0

Y, Cb, Cr

4:2:0

V4L2_PIX_FMT_YVU420

‘YV12’

8

4:2:0

Y, Cr, Cb

4:2:0

V4L2_PIX_FMT_YUV422P

‘422P’

8

4:2:2

Y, Cb, Cr

4:2:0

V4L2_PIX_FMT_YUV422M

‘YM16’

8

4:2:2

Y, Cb, Cr

4:2:0

V4L2_PIX_FMT_YVU422M

‘YM61’

8

4:2:2

Y, Cr, Cb

4:2:0

V4L2_PIX_FMT_YUV444M

‘YM24’

8

4:4:4

Y, Cb, Cr

4:2:0

V4L2_PIX_FMT_YVU444M

‘YM42’

8

4:4:4

Y, Cr, Cb

4:2:0

‘T010’

2.7.1.2.2.1. YUV410 和 YVU410

平面 YUV 4:1:0 格式。色度平面在每个方向上都进行 4 倍的二次采样。色度行包含的像素数和字节数是亮度行的四分之一,并且色度平面包含的行数是亮度平面的四分之一。

4x4 YUV410 图像示例

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_P012M

‘PM12’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

4:2:0

开始 + 17

Cb,Cr

2.7.1.2.2.2. YUV411P

平面 YUV 4:1:1 格式。色度平面在水平方向上进行 4 倍的二次采样。色度行包含的像素数和字节数是亮度行的四分之一,并且色度平面包含的行数与亮度平面相同。

4x4 YUV411P 图像示例

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_P012M

‘PM12’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

4:2:0

Cb,Cr

开始 + 17

‘MT2T’

开始 + 18

Cb20

开始 + 19

Cb30

V4L2_PIX_FMT_MT2110T

开始 + 21

10

开始 + 22

Cr20

开始 + 23

Cr30

2.7.1.2.2.3. YUV420、YVU420、YUV420M 和 YVU420M

平面 YUV 4:2:0 格式。色度平面在每个方向上都进行 2 倍的二次采样。色度行包含的像素数和字节数是亮度行的一半,并且色度平面包含的行数是亮度平面的一半。

4x4 YUV420 图像示例

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_P012M

‘PM12’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

4:2:0

线性

开始 + 18

10

Cb,Cr

V4L2_PIX_FMT_MT2110T

Cb,Cr

4x4 瓦片

开始 + 22

‘MT2T’

4:2:0

4x4 YUV420M 图像示例

16x32 / 16x16 瓦片,低位平铺

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

线性

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_MT2110R

‘PM12’

12

4:2:0

Cb,Cr

‘MT2R’

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

10

Cb,Cr

4x4 瓦片

开始 1 + 2

‘MT2T’

4:2:0

开始 2 + 0

线性

开始 2 + 2

10

Cb,Cr

2.7.1.2.2.4. YUV422P、YUV422M 和 YVU422M

平面 YUV 4:2:2 格式。色度平面在水平方向上进行 2 倍的二次采样。色度行包含的像素数和字节数是亮度行的一半,并且色度平面包含的行数与亮度平面相同。

4x4 YUV422P 图像示例

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_P012M

‘PM12’

12

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

4:2:0

Cb,Cr

4x4 瓦片

开始 + 18

‘MT2T’

4:2:0

V4L2_PIX_FMT_MT2110T

Cb20

Cb21

开始 + 22

Cb30

Cb31

开始 + 24

线性

开始 + 26

10

Cb,Cr

开始 + 28

Cr20

Cr21

开始 + 30

Cr30

Cr31

4x4 YUV422M 图像示例

16x32 / 16x16 瓦片,低位平铺

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

线性

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_MT2110R

‘PM12’

12

4:2:0

Cb,Cr

‘MT2R’

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

10

Cb,Cr

4x4 瓦片

开始 1 + 2

‘MT2T’

4:2:0

4:2:0

Cb20

Cb21

开始 1 + 6

Cb30

Cb31

开始 2 + 0

线性

开始 2 + 2

10

Cb,Cr

开始 2 + 4

Cr20

Cr21

开始 2 + 6

Cr30

Cr31

2.7.1.2.2.5. YUV444M 和 YVU444M

平面 YUV 4:4:4 格式。色度平面不进行二次采样。色度行包含的像素数和字节数与亮度行相同,并且色度平面包含的行数与亮度平面相同。

4x4 YUV444M 图像示例

16x32 / 16x16 瓦片,低位平铺

4x4 瓦片

线性

V4L2_PIX_FMT_P012

‘P012’

线性

4:2:0

Cb,Cr

线性

V4L2_PIX_FMT_MT2110R

‘PM12’

12

4:2:0

Cb,Cr

‘MT2R’

线性

V4L2_PIX_FMT_NV15_4L4

‘VT15’

10

10

Cb,Cr

4x4 瓦片

Cb02

Cb03

4:2:0

‘MT2T’

4:2:0

Cb12

Cb13

开始 1 + 8

Cb20

Cb21

Cb22

Cb23

开始 1 + 12

Cb20

Cb21

Cb32

Cb33

开始 2 + 0

线性

Cr02

Cr03

开始 2 + 4

10

Cb,Cr

Cr12

Cr13

开始 2 + 8

Cr20

Cr21

Cr22

Cr23

开始 2 + 12

Cr30

Cr31

Cr32

Cr33