结构体
RectU
在 fuchsia.images2/math.fidl 中定义
二维笛卡尔空间中轴对齐的矩形区域 空间,包含无符号的 location 和距离字段。
该类型不指定单位。使用此类型的协议应 指定矢量空间的特性,包括方向和 单位。
字段 | 类型 | 说明 | 默认 |
---|---|---|---|
x |
uint32
|
矩形在 x 轴上的原点位置。 |
无默认设置 |
y |
uint32
|
矩形在 y 轴上的原点位置。 |
无默认设置 |
width |
uint32
|
沿 x 轴的距离。 该区域包含从 |
无默认设置 |
height |
uint32
|
沿 y 轴的距离。 该区域包含从 |
无默认设置 |
精英
ColorSpace 柔性
类型:uint32
在 fuchsia.images2/image_format.fidl 中定义
表示用于解释视频像素值的颜色空间。
此列表对于颜色空间标准的每个变体都有一个单独的条目。
因此,我们是否应添加对 RGB 变体 709 的支持, 那么我们会在此列表中添加该变体的单独条目。同理 对于 2020 或 2100 的 RGB 变体。对于 YcCbcCrc 变体的 YcCbcCrc 变体 2020 年。对于 2100 的 ICtCp 变体也是如此。
请参阅 ImageFormatIsSupportedColorSpaceForPixelFormat() 了解
可能支持 PixelFormat
和 ColorSpace
的组合。
通常,ColorSpace
不支持任何符合以下条件的 PixelFormat
:
每个样本的位数与颜色空间的规范不兼容,
PixelFormat
,在 RGB 与 YUV 方面不匹配。
“限制范围”指的是 定义为 (以及色度的 simlar),但不应解读为 保证不会出现超出标称“有限范围”的值。 换句话说,“范围有限”并不一定意味着 值低于黑色或高于白色,或者值超出了“受限”限制色度范围 对于“全范围”,黑色为 0,白色是可能/允许的最大数值 值(对于色度也类似)。
名称 | 值 | 说明 |
---|---|---|
无效 |
0 |
颜色空间类型无效。 |
SRGB |
1 |
sRGB、伽马转换函数和全范围(根据规范) |
REC601_NTSC |
2 |
601 NTSC(“525 line”)YCbCr 原色,范围有限 |
REC601_NTSC_FULL_RANGE |
3 |
601 NTSC(“525 line”)YCbCr 原色,全范围 |
REC601_PAL |
4 |
601 PAL(“625 line”)YCbCr 原色,范围有限 |
REC601_PAL_FULL_RANGE |
5 |
601 PAL(“625 line”)YCbCr 原色,全范围 |
REC709 |
6 |
709 YCbCr(非 RGB),范围有限 |
REC2020 |
7 |
2020 YCbCr(不是 RGB,不是 YcCbcCrc),10 或 12 位,
|
REC2100 |
8 |
2100 YCbCr(不是 RGB,不是 ICtCp),10 或 12 位,
|
过往 |
9 |
像素格式不代表颜色,或 特定于应用的颜色空间,无法由其他条目描述 。 |
DO_NOT_CARE |
4294967294 |
客户端明确指出,客户端并不关心 颜色空间。 |
PixelFormat 柔性
类型:uint32
在 fuchsia.images2/image_format.fidl 中定义
表示视频像素的编码方式。
格式名称中的渠道顺序反映了实际布局 频道本身
这些值中的每一个都是主观的。应该使用的颜色空间 (与 Vulkan 不同)。
名称 | 值 | 说明 |
---|---|---|
无效 |
0 |
|
R8G8B8A8 |
1 |
仅限 RGB,每个 R/G/B/A 样本 8 位 与 VK_FORMAT_R8G8B8A8_UNORM 兼容。 |
R8G8B8X8 |
119 |
仅限 RGB,每个 R/G/B/X 样本 8 位 在被视为不透明时与 VK_FORMAT_R8G8B8A8_UNORM 兼容。 |
B8G8R8A8 |
101 |
32bpp BGRA,1 个平面。仅限 RGB,每个 B/G/R/A 样本 8 位。 与 VK_FORMAT_B8G8R8A8_UNORM 兼容。 在 sysmem(1) 中,这是 BGRA32。 |
B8G8R8X8 |
120 |
32bpp BGRA,1 个平面。仅限 RGB,每个 B/G/R/X 样本 8 位。 在被视为不透明时与 VK_FORMAT_B8G8R8A8_UNORM 兼容。 |
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 平面也是如此);顺序可能是
取决于
|
8G8R8 |
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 格式都不兼容。 在 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。 与 VK_FORMAT_A2R10G10B10_UNORM_PACK32 兼容。 |
A2B10G10R10 |
116 |
32bpp BGRA,1 个平面。2 位 A、10 位 R/G/B。 与 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 柔性
类型:uint64
在 fuchsia.images2/format_modifier.fidl 中定义
高 8 位是供应商代码。低 56 位由供应商定义。
定义的 PixelFormatModifier
值具体、完整且有效
值(INVALID
和 DO_NOT_CARE
除外,它们有自己的
含义)。
一些其他有效或可能有效的 pixel_format_modifier
值无效
定义为 PixelFormatModifier
值,这通常是因为该值不是
(或可能在实践中使用,但尚未在
PixelFormatModifier
).可以将这样的值指定为
pixel_format_modifier
字段中的 PixelFormatModifier
值,尽管
缺少已定义的相应 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
的整体含义。换句话说,“修饰符”部分
部分名称比“override”更准确会是什么样子。
名称 | 值 | 说明 |
---|---|---|
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 |
表
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"乘以 这也称为“步长”“线到行偏移”“行到行” 偏移量”和其他名称。 作为一个具体例子,这种情况并不罕见(但也并非总是必要)
BGR24(每像素 3 个字节),在每个像素的末尾留出一些填充
行,以使每行像素都以 4 字节对齐的偏移量开始,
图片起始位置(左上方像素)。该内边距的大小是
不一定可被像素的大小(以字节为单位)整除(“步长字节”
所以我们使用此字段来表示内边距,而不是
与尝试将内边距合并为更大的“假”
|
6 |
display_rect |
fuchsia.math/RectU
|
帧内用于显示的矩形。这里指位置 尺寸(以像素为单位), 显示“整张图片”界面显示效果
对于视频解码器的输出,display_rect 之外的像素为
一律不显示(在测试程序之外),但必须保留
正确的解码器函数。 下游纹理过滤操作应避免让任何像素 影响任何显示区域 像素,以免右侧或底部边缘渗漏 由解码过程定义,但不适用于 。 未设置此字段时,行为因协议而异。在某些
协议,可以先回退到 警告:fuchsia.sysmem.Images2 (V1) 不处理非零 x、y,因此 此处的任何非零 x、y (V2) 均会阻止转换为 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 格式,这是像素宽高比(又称采样宽高比) 也称为 SAR)。 生产者应确保宽度值和高度值相对重要 根据需要减小比例(用 GCF 除以 9)。 消费者应将未设置的此字段解读为未知像素 宽高比。在某些情况下,默认 1:1 比较合适, 消费者可以通过 OOB 方式确定实际的像素宽高比。 |