枚举
ColorSpace 灵活
类型:uint32
在 fuchsia.images2/image_format.fidl 中定义
表示用于解读视频像素值的色彩空间。
此列表针对色彩空间标准的每个变体都有一个单独的条目。
因此,如果我们添加对 709 的 RGB 变体的支持,则会为此变体向此列表添加一个单独的条目。2020 或 2100 的 RGB 变体也是如此。2020 的 YcCbcCrc 变体也是如此。2100 的 ICtCp 变体也是如此。
如需了解 PixelFormat 和 ColorSpace 的组合是否可能受支持,请参阅 ImageFormatIsSupportedColorSpaceForPixelFormat()。
通常,如果 PixelFormat 的每样本位数与色彩空间的规范不兼容,或者 PixelFormat 在 RGB 与 YUV 方面不匹配,则不支持 ColorSpace。
以下注释中的“有限范围”是指黑白(以及色度)的定义范围,但不应被解释为保证不会出现超出名义“有限范围”的值。 换句话说,“有限范围”并不一定意味着不会有任何值低于黑色或高于白色,或者超出“有限”色度范围。对于“全范围”,黑色为 0,白色为最大可能/允许的数值(色度也类似)。
| 名称 | 值 | 说明 |
|---|---|---|
无效 |
0 |
不是有效的色彩空间类型。 |
SRGB |
1 |
sRGB、伽玛转换函数和全范围(根据规范) |
REC601_NTSC |
2 |
601 NTSC(“525 行”)YCbCr 基色,有限范围 |
REC601_NTSC_FULL_RANGE |
3 |
601 NTSC(“525 行”)YCbCr 基色,全范围 |
REC601_PAL |
4 |
601 PAL(“625 行”)YCbCr 基色,有限范围 |
REC601_PAL_FULL_RANGE |
5 |
601 PAL(“625 行”)YCbCr 基色,全范围 |
REC709 |
6 |
709 YCbCr(非 RGB),有限范围 |
REC2020 |
7 |
2020 YCbCr(非 RGB,非 YcCbcCrc),根据 |
REC2100 |
8 |
2100 YCbCr(非 RGB,非 ICtCp),10 位或 12 位(根据 |
PASSTHROUGH |
9 |
像素格式不表示颜色,或者像素格式位于应用专属色彩空间中,无法通过此枚举中的其他条目进行描述。 |
DO_NOT_CARE |
4294967294 |
客户端明确表示其不关心选择/使用哪种色彩空间。 |
PixelFormat flexible
类型:uint32
在 fuchsia.images2/image_format.fidl 中定义
表示视频像素的编码方式。
格式名称中声道的顺序反映了声道的实际布局。
这些值中的每一个都对其中应包含的色彩空间有明确的规定(与 Vulkan 相比)。
| 名称 | 值 | 说明 |
|---|---|---|
无效 |
0 |
|
R8G8B8A8 |
1 |
仅限 RGB,每个 R/G/B/A 样本 8 位 如果 A 实际上是 X(未设置为有意义的值),则可以通过将 ['fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present'] 设置为 false 来指定。 如果已知 A 设置为有意义的值,则可以通过将 ['fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present'] 设置为 true 来指定。 与 VK_FORMAT_R8G8B8A8_UNORM 兼容。 |
R8G8B8X8 |
119 |
仅限 RGB,每个 R/G/B/X 样本 8 位 与 VK_FORMAT_R8G8B8A8_UNORM 兼容(当被视为不透明时)。 已弃用。请改用 已弃用:24 已添加:12
|
B8G8R8A8 |
101 |
32bpp BGRA,1 个平面。仅限 RGB,每个 B/G/R/A 样本 8 位。 与 VK_FORMAT_B8G8R8A8_UNORM 兼容。 如果 A 实际上是 X(未设置为有意义的值),则可以通过将 ['fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present'] 设置为 false 来指定。 如果已知 A 设置为有意义的值,则可以通过将 ['fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present'] 设置为 true 来指定。 在 sysmem(1) 中,此格式为 BGRA32。 |
B8G8R8X8 |
120 |
32bpp BGRA,1 个平面。仅限 RGB,每个 B/G/R/X 样本 8 位。 与 VK_FORMAT_B8G8R8A8_UNORM 兼容(当被视为不透明时)。 已弃用。请改用 已弃用:24 已添加:12
|
I420 |
102 |
仅限 YUV,每个 Y 样本 8 位 与 VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM 兼容。 |
M420 |
103 |
仅限 YUV,每个 Y 样本 8 位 与任何 Vulkan 格式都不兼容。 |
NV12 |
104 |
仅限 YUV,每个 Y 样本 8 位 与 VK_FORMAT_G8_B8R8_2PLANE_420_UNORM 兼容。 |
YUY2 |
105 |
仅限 YUV,每个 Y 样本 8 位 与 VK_FORMAT_G8B8G8R8_422_UNORM 兼容。 |
MJPEG |
106 |
此值已预留,目前未使用。 |
YV12 |
107 |
仅限 YUV,每个 Y 样本 8 位 与 VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM 兼容。U 平面可能位于图片的 B 或 R 平面中(V 平面也是如此);可以通过查看 |
B8G8R8 |
108 |
24bpp BGR,1 个平面。仅限 RGB,每个 B/G/R 样本 8 位 与 VK_FORMAT_B8G8R8_UNORM 兼容。 在 sysmem(1) 中,此格式为 BGR24。 |
R5G6B5 |
109 |
16bpp RGB,1 个平面。5 位 R、6 位 G、5 位 B 与 VK_FORMAT_R5G6B5_UNORM_PACK16 兼容。 在 sysmem(1) 中,此格式为 RGB565。 |
R3G3B2 |
110 |
8bpp RGB,1 个平面。3 位 R、3 位 G、2 位 B 与任何 Vulkan 格式都不兼容。 在 sysmem(1) 中,此格式为 RGB332。 |
R2G2B2X2 |
111 |
8bpp RGB,1 个平面。2 位 R、2 位 G、2 位 B 与任何 Vulkan 格式都不兼容。 如果 X 实际上是 X(未设置为有意义的值),则可以通过将 ['fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present'] 设置为 false 来指定。 如果已知 X 设置为有意义的值,则可以通过将 ['fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present'] 设置为 true 来指定。 在 sysmem(1) 中,此格式为 RGB2220。 |
L8 |
112 |
8bpp,仅亮度(红色、绿色和蓝色具有相同的值)。 与 VK_FORMAT_R8_UNORM 兼容。 大多数客户端更愿意改用 R8。 |
R8 |
113 |
8bpp,仅红色(绿色和蓝色应解读为 0)。 与 VK_FORMAT_R8_UNORM 兼容。 |
R8G8 |
114 |
16bpp RG,1 个平面。8 位 R,8 位 G。 与 VK_FORMAT_R8G8_UNORM 兼容。 |
A2R10G10B10 |
115 |
32bpp RGBA,1 个平面。2 位 A,10 位 R/G/B。 如果 A 实际上是 X(未设置为有意义的值),则可以通过将 ['fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present'] 设置为 false 来指定。 如果已知 A 设置为有意义的值,则可以通过将 ['fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present'] 设置为 true 来指定。 与 VK_FORMAT_A2R10G10B10_UNORM_PACK32 兼容。 |
A2B10G10R10 |
116 |
32bpp BGRA,1 个平面。2 位 A,10 位 R/G/B。 如果 A 实际上是 X(未设置为有意义的值),则可以通过将 ['fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present'] 设置为 false 来指定。 如果已知 A 设置为有意义的值,则可以通过将 ['fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present'] 设置为 true 来指定。 与 VK_FORMAT_A2B10G10R10_UNORM_PACK32 兼容。 |
P010 |
117 |
仅限 YUV,每个 Y 样本 16 位 这类似于 NV12,但具有 16 位样本,每个样本的底部 6 位设置为零和/或被忽略。每个 16 位样本的字节序为主机字节序(LE 系统上为 LE,BE 系统上为 BE)。CbCr 平面首先具有 16 位 Cb,然后是 16 位 Cr,交错 Cb Cr Cb Cr 等。 与 VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 兼容。 |
R8G8B8 |
118 |
24bpp RGB,1 个平面。仅限 RGB,每个 R/G/B 样本 8 位 与 VK_FORMAT_R8G8B8_UNORM 兼容。 |
DO_NOT_CARE |
4294967294 |
客户端明确表示其不关心选择/使用哪种像素格式。设置此值时,客户端不得设置 |
PixelFormatModifier flexible
类型:uint64
在 fuchsia.images2/format_modifier.fidl 中定义
高 8 位是供应商代码。低 56 位由供应商定义。
定义的 PixelFormatModifier 值是具体、完整且有效的值(INVALID 和 DO_NOT_CARE 除外,它们有自己的含义)。
一些其他有效或可能有效的 pixel_format_modifier 值未定义为 PixelFormatModifier 值,这通常是因为该值在实践中未使用(或者可能是新使用的,但尚未在 PixelFormatModifier 中定义)。尽管缺少相应的已定义 PixelFormatModifier 值,但允许在 pixel_format_modifier 字段中将此类值指定为 PixelFormatModifier 值。如果此类值在测试代码之外使用,请考虑将其作为已定义的值添加到 PixelFormatModifier 中。所有此类值都必须符合高 8 位供应商代码(请勿定义/使用适当供应商代码之外的值)。
单独定义的 FORMATMODIFIER* uint64 值是供应商专属的位字段值,其本身并非完整的有效值。这些 uint64 值可用于根据供应商专用位字段创建或解释 PixelFormatModifier 值。
当 pixel_format_modifier 设置为受支持的值(不包括 DO_NOT_CARE、INVALID、LINEAR)时,pixel_format 字段指定的像素数据排列方式会被“修改”,通常是为了允许进行平铺、压缩(通常是无损压缩,通常是为了减少内存带宽,而不是减少帧缓冲区大小)、事务消除、脏跟踪等操作,但通常不会修改 pixel_format 的位深度。在某些情况下,会涉及每个图片或每个图块的标头或类似内容。pixel_format 字段通常仍需要设置为与 pixel_format_modifier 结合使用的有效支持的值,并且该 pixel_format 值也可以对 ImageFormat 的整体含义做出贡献。换句话说,名称中的“修饰符”部分比“替换”更准确。
| 名称 | 值 | 说明 |
|---|---|---|
DO_NOT_CARE |
72057594037927934 |
|
无效 |
72057594037927935 |
|
线性 |
0 |
|
INTEL_I915_X_TILED |
72057594037927937 |
|
INTEL_I915_Y_TILED |
72057594037927938 |
|
INTEL_I915_YF_TILED |
72057594037927939 |
|
INTEL_I915_Y_TILED_CCS |
72057594054705154 |
|
INTEL_I915_YF_TILED_CCS |
72057594054705155 |
|
ARM_AFBC_16X16 |
576460752303423489 |
|
ARM_AFBC_32X8 |
576460752303423490 |
|
ARM_LINEAR_TE |
576460752303427584 |
|
ARM_AFBC_16X16_TE |
576460752303427585 |
|
ARM_AFBC_32X8_TE |
576460752303427586 |
|
ARM_AFBC_16X16_YUV_TILED_HEADER |
576460752303431697 |
|
ARM_AFBC_16X16_SPLIT_BLOCK_SPARSE_YUV |
576460752303423601 |
|
ARM_AFBC_16X16_SPLIT_BLOCK_SPARSE_YUV_TE |
576460752303427697 |
|
ARM_AFBC_16X16_SPLIT_BLOCK_SPARSE_YUV_TILED_HEADER |
576460752303431793 |
|
ARM_AFBC_16X16_SPLIT_BLOCK_SPARSE_YUV_TE_TILED_HEADER |
576460752303435889 |
|
GOOGLE_GOLDFISH_OPTIMAL |
7421932185906577409 |
|
PVR_FBCDC_8X8_V14 |
10520408729537478690 |
PowerVR 帧缓冲区压缩 (FBCDC / PVRIC) 8x8 图块,V14 (FBCDC v4/v5)。 添加:33
|
PVR_FBCDC_16X4_V14 |
10520408729537478695 |
PowerVR 帧缓冲区压缩 (FBCDC / PVRIC) 16x4 图块,V14 (FBCDC v4/v5)。 添加:33
|
TABLES
ImageFormat
在 fuchsia.images2/image_format.fidl 中定义
描述图片格式。
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
1 |
pixel_format |
PixelFormat
|
描述像素的编码方式。 |
2 |
pixel_format_modifier |
PixelFormatModifier
|
供应商专用像素格式修饰符。请参阅 format_modifier.fidl。 |
3 |
color_space |
ColorSpace
|
表示用于解读像素值的色彩空间。 |
4 |
size |
fuchsia.math/SizeU
|
图片的尺寸(以像素为单位)。 另请参阅 缓冲区中并非所有可寻址像素位置都必须填充有效的像素数据。请参阅 图片的右侧和底部可能有一些不应显示的有效像素。请参阅 |
5 |
bytes_per_row |
uint32
|
每行的字节数。对于多平面 YUV 格式,这是 Y 平面中每行的字节数。 如果未设置此字段,则每行像素的末尾不会有任何填充。换句话说,如果未设置,则步幅等于“每个宽度像素的步幅字节数”乘以 设置后,此字段中的值必须大于或等于“每个宽度像素的跨距字节数”乘以 当“pixel_format_modifier”不是“PixelFormatModifier::Linear”时,此字段没有指定含义。相反,参与者应隐式知道,平铺(非线性)格式将包含 这不是“以像素为单位的行跨度”,也不是“每像素跨度”(它们本身是两个不同的概念,都不同于 bytes_per_row)。 此字段中的数字也称为“以字节为单位的行跨度”“以字节为单位的行到行偏移量”“以字节为单位的行到行偏移量”以及这些名称的其他变体,有时简称为“跨度”,但仅在理解为以字节为单位时。 关于“行跨距(以像素为单位)”与 当 |
6 |
display_rect |
fuchsia.math/RectU
|
帧内用于显示的矩形。这是在界面显示意义上显示“整个图片”时,应显示的像素矩形的位置和大小(以像素为单位)。
对于视频解码器的输出,display_rect 之外的像素绝不会显示(测试程序之外),但必须保留,以确保解码器正常运行。如果设置了 下游纹理过滤操作应避免让 display_rect 之外的任何像素影响任何显示像素的视觉外观,以避免右边缘或下边缘可能泄露由解码过程定义但并非用于显示的任意像素。 未设置此字段时的行为取决于协议。在某些协议中,可能会实现回退到 警告:fuchsia.sysmem.Images2 (V1) 不会处理非零 x、y,因此此处 (V2) 的任何非零 x、y 都会阻止转换为 V1。由于在实践中很少出现非零 x、y,因此即使已迁移到 V2 的组件在某些情况下也可能仍会假设 x 和 y 均为 0,直到有实际理由实现和测试非零 x、y 的处理。如果将非零 x、y 发送到假定为 0、0 的下游渲染和/或显示流水线,则会导致显示不正确,但不会导致崩溃,因为假定 x、y 为 0、0 不会导致读取超出缓冲区边界。 新增:18
|
7 |
valid_size |
fuchsia.math/SizeU
|
帧的大小,以在视频解码方面具有有效像素数据的像素数表示,而不是以用于显示的像素数表示。 如需将 valid_size 转换为可直接与 对于视频解码器, |
8 |
pixel_aspect_ratio |
fuchsia.math/SizeU
|
视频预期显示时单个像素的宽高比。 对于 YUV 格式,这是亮度(也称为 Y)样本的像素宽高比(也称为样本宽高比,即 SAR)。 生产者应确保宽度和高度值互质,必要时可化简分数(分子和分母同时除以最大公约数)。 使用方应将此字段未设置解读为像素宽高比未知。在某些情况下,默认值 1:1 可能比较合适,但使用方可以通过 OOB 方式确定实际像素宽高比。 |