ENUMS
彈性色彩空間
類型:uint32
定義於 fuchsia.images2/image_format.fidl
表示用於解讀影片像素值的色域。
這份清單會為每個色域標準變體提供個別項目。
因此,如果我們新增對 709 的 RGB 變體的支援,例如,我們會為該變體新增一個單獨的項目到此清單中。2020 或 2100 的 RGB 變體也是如此。2020 的 YcCbcCrc 變體也是如此。2100 的 ICtCp 變體也是如此。
請參閱 ImageFormatIsSupportedColorSpaceForPixelFormat(),瞭解是否可能支援 PixelFormat 和 ColorSpace 的組合。
一般來說,如果 PixelFormat 的每樣本位元數與色域規格不相容,或 PixelFormat 的 RGB 與 YUV 不相符,則不支援 ColorSpace。
下方註解中的「有限範圍」是指黑白 (和色度) 的定義位置,但不應解讀為保證不會有超出名義「有限範圍」的值。換句話說,「有限範圍」不一定代表不會有低於黑色或高於白色的值,或超出「有限」色度範圍的值。如果是「全範圍」,黑色為 0,白色則為可能/允許的最大數值 (色度也類似)。
| 名稱 | 值 | 說明 |
|---|---|---|
無效 |
0 |
色域類型無效。 |
SRGB |
1 |
sRGB、gamma 傳遞函數和完整範圍 (依規格) |
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 彈性
類型: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
|
影格中用於顯示的矩形。在 UI 顯示畫面中顯示「整張圖片」時,這是應顯示的像素矩形位置和大小 (以像素為單位)。
如果是影片解碼器的輸出內容,系統一律不會顯示 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 方式判斷實際像素顯示比例。 |