fuchsia.images2

新增:12

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

色域類型無效。

1

sRGB、gamma 傳遞函數和完整範圍 (依規格)

2

601 NTSC (「525 行」) YCbCr 原色,有限範圍

3

601 NTSC (「525 行」) YCbCr 原色,全範圍

4

601 PAL (「625 線」) YCbCr 原色,有限範圍

5

601 PAL (「625 線」) YCbCr 原色,全範圍

6

709 YCbCr (非 RGB),有限範圍

7

2020 YCbCr (非 RGB,非 YcCbcCrc),根據 PixelFormat 採用 10 或 12 位元,具有原色、有限範圍 (非完整範圍)、傳遞函數 (「gamma」) 等,全部符合規格,廣色域 SDR

8

2100 YCbCr (非 RGB、非 ICtCp)、10 或 12 位元 (根據 PixelFormat)、BT.2020 原色 (與 REC2020 相同的廣色域)、有限範圍 (非完整範圍)、PQ (又稱 SMPTE ST 2084) HDR 傳遞函數 (非 HLG、非 REC2020 和 REC709 使用的 SDR「gamma」)、廣色域 HDR

9

像素格式不代表顏色,或位於應用程式專屬的色彩空間,無法由這個列舉中的其他項目描述。

4294967294

用戶端明確表示不介意選擇/使用哪種色域。

PixelFormat 彈性

類型:uint32

定義於 fuchsia.images2/image_format.fidl

表示影片像素的編碼方式。

格式名稱中的通道順序反映了管道的實際版面配置。

每個值都與應包含的色域有關 (與 Vulkan 相反)。

名稱值說明
0
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 相容。

119

僅限 RGB,每個 R/G/B/X 樣本 8 位元

與 VK_FORMAT_R8G8B8A8_UNORM 相容 (視為不透明時)。

已淘汰。請改用 R8G8B8A8,並將 ['fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present'] 設為 false。

已淘汰:24 已新增:12
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。

120

32bpp BGRA,1 個平面。僅限 RGB,每個 B/G/R/X 樣本 8 位元。

與 VK_FORMAT_B8G8R8A8_UNORM 相容 (視為不透明時)。

已淘汰。請改用 B8G8R8A8,並將 fuchsia.sysmem2/ImageFormatConstraints.is_alpha_present 設為 false。

已淘汰:24 已新增:12
102

僅限 YUV,每個 Y 樣本 8 位元

與 VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM 相容。

103

僅限 YUV,每個 Y 樣本 8 位元

與任何 Vulkan 格式都不相容。

104

僅限 YUV,每個 Y 樣本 8 位元

與 VK_FORMAT_G8_B8R8_2PLANE_420_UNORM 相容。

105

僅限 YUV,每個 Y 樣本 8 位元

與 VK_FORMAT_G8B8G8R8_422_UNORM 相容。

106

這個值為預留值,目前未使用。

107

僅限 YUV,每個 Y 樣本 8 位元

與 VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM 相容。U 平面可能位於圖片的 B 或 R 平面 (V 平面也一樣);排序方式可透過查看 VkBufferCollectionPropertiesFUCHSIA.samplerYcbcrConversionComponents 的成員來決定。

108

24bpp BGR,1 個平面。僅限 RGB,每個 B/G/R 樣本 8 位元

與 VK_FORMAT_B8G8R8_UNORM 相容。

在 sysmem(1) 中,這是 BGR24。

109

16bpp RGB,1 個平面。5 位元 R、6 位元 G、5 位元 B

與 VK_FORMAT_R5G6B5_UNORM_PACK16 相容。

在 sysmem(1) 中,這是 RGB565。

110

8bpp RGB,1 個平面。3 位元 R、3 位元 G、2 位元 B

與任何 Vulkan 格式都不相容。

在 sysmem(1) 中,這是 RGB332。

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。

112

8bpp,僅限亮度 (紅色、綠色和藍色具有相同的值)。

與 VK_FORMAT_R8_UNORM 相容。

大多數用戶端會偏好改用 R8。

113

8bpp,僅限紅色 (綠色和藍色應解讀為 0)。

與 VK_FORMAT_R8_UNORM 相容。

114

16bpp RG,1 個平面。8 位元 R、8 位元 G。

與 VK_FORMAT_R8G8_UNORM 相容。

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 相容。

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 相容。

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 相容。

118

24bpp RGB,1 個平面。僅限 RGB,每個 R/G/B 樣本 8 位元

與 VK_FORMAT_R8G8B8_UNORM 相容。

4294967294

用戶端明確指出,用戶端不在乎選擇/使用哪種像素格式。設定這個值時,用戶端不得設定 pixel_format_modifier。

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 的整體含義。換句話說,名稱中的「修飾符」部分比「覆寫」更準確。

名稱值說明
72057594037927934
72057594037927935
0
72057594037927937
72057594037927938
72057594037927939
72057594054705154
72057594054705155
576460752303423489
576460752303423490
576460752303427584
576460752303427585
576460752303427586
576460752303431697
576460752303423601
576460752303427697
576460752303431793
576460752303435889
7421932185906577409
10520408729537478690

PowerVR 影格緩衝區壓縮 (FBCDC/PVRIC) 8x8 圖塊,V14 (FBCDC v4/v5)。

新增:33
10520408729537478695

PowerVR 訊框緩衝區壓縮 (FBCDC/PVRIC) 16x4 圖塊,V14 (FBCDC v4/v5)。

新增:33

TABLES

ImageFormat

定義於 fuchsia.images2/image_format.fidl

說明圖片格式。

序數欄位類型說明
pixel_format PixelFormat

說明像素的編碼方式。

pixel_format_modifier PixelFormatModifier

供應商專屬像素格式修飾符。請參閱 format_modifier.fidl。

color_space ColorSpace

表示用於解讀像素值的色域。

size fuchsia.math/SizeU

圖片大小 (以像素為單位)。

另請參閱 bytes_per_row,這也是找出緩衝區中每個像素資料位置的必要項目 (以及 size)。

緩衝區中並非所有可定址的像素位置都必須填入有效的像素資料。如要查看可能較小的有效像素矩形,請參閱 valid_size。

圖片的右側和底部可能有一些不顯示的有效像素。詳情請參閱《display_rect》。

bytes_per_row uint32

每列的位元組數。如果是多平面 YUV 格式,則為 Y 平面中每列的位元組數。

如未設定這個欄位,每列像素的結尾就不會有邊框間距。換句話說,如果未設定,步幅會等於「每寬度像素的步幅位元組」乘以 size.width。

設定後,這個欄位的值必須大於或等於「每寬度像素的跨距位元組」乘以 size.width。如果相等,則每個像素列的結尾不會有任何邊框間距。如果較大,則差異為每個像素列結尾的邊框間距 (以位元組為單位)。

如果「pixel_format_modifier」不是「PixelFormatModifier::Linear」,這個欄位就沒有指派的意義。相反地,參與者應隱含地知道,平鋪 (非線性) 格式會包含 size 像素,方法是向上捨入到大於或等於寬度的最接近平鋪邊界,並分別對高度進行相同操作,且在任一方向上都沒有任何「額外」平鋪。平鋪 (非線性) 格式無法在任一方向指定比 size 隱含的區塊更多的區塊。當相關消費者支援 display_rect 時,size 可能會暗示比 display_rect 觸控更多的圖塊。

這不是「以像素為單位的資料列步幅」,也不是「每個像素的步幅」(這兩者本身是不同的事物,且都與 bytes_per_row 不同)。

這個欄位中的數字也稱為「以位元組為單位的資料列步幅」、「以位元組為單位的行與行偏移量」、「以位元組為單位的列與列偏移量」,以及這些名稱的其他變化版本,有時也稱為「步幅」,但只有在以位元組為單位時才適用。

關於「以像素為單位的資料列步幅」與 bytes_per_row,舉例來說,BGR24 (每個像素 3 個位元組) 在每列結尾處有一些邊框間距,因此每列像素會從圖片開頭處以 4 個位元組對齊的偏移量開始,這種情況並不少見。該邊框間距的大小不一定能被像素的位元組大小整除 (「每個寬度像素的步幅位元組」),因此我們使用這個欄位表示邊框間距,而不是嘗試將邊框間距納入為較大的「假」size.width。

當 pixel_format_modifier == PixelFormatModifier.Linear 時,這是平面 0 第 1 列第 0 個位元組的偏移量 (以位元組為單位),減去平面 0 第 0 列第 0 個位元組的偏移量 (以位元組為單位)。

display_rect fuchsia.math/RectU

影格中用於顯示的矩形。在 UI 顯示畫面中顯示「整張圖片」時,這是應顯示的像素矩形位置和大小 (以像素為單位)。

x + width 必須 <= size.width,y + height 必須 <= size.height。

如果是影片解碼器的輸出內容,系統一律不會顯示 display_rect 以外的像素 (測試程式除外),但必須保留這些像素,解碼器才能正常運作。設定 valid_size 時,display_rect 一律會落在從 (0, 0) 開始且大小為 valid_size 的矩形內。換句話說,display_rect 是 valid_size 的子集 (不一定是真子集),而 valid_size 是 size 的子集 (不一定是真子集)。

下游紋理篩選作業應避免讓 display_rect 以外的任何像素影響任何顯示像素的視覺外觀,以免右側或底部邊緣洩漏解碼程序定義但非用於顯示的任意像素。

如未設定這個欄位,系統會依據通訊協定採取特定行為。在某些通訊協定中,可能會先備用 valid_size,再備用 size。在其他情況下,則可能直接備用 size。在其他情況下,則必須設定這個欄位,否則管道會關閉。

警告: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
valid_size fuchsia.math/SizeU

影格大小,以影片解碼方面具有有效像素資料的像素數量表示,而非以要顯示的像素表示。

如要將 valid_size 轉換為可直接與 display_rect 比較的矩形,可以使用 (x: 0, y: 0, width: valid_size.width, height: valid_size.height) 建立矩形。

如果是影片解碼器,valid_size 可以包含 display_rect 以外的部分像素。這些額外的像素不應顯示,且不一定包含任何實際圖片資料。通常,這些區域中任何看起來像真實圖像資料的內容,都只是影片壓縮的產物,以及巨集區塊剩餘部分的存在,這些部分可以被後續影格參照,儘管不在顯示區域內,而且並非真正來自來源的任何額外「真實」像素。這個區域中的像素值是由轉碼器解碼程序定義,必須保留,解碼器才能正確運作。通常,位於 valid_size 內但位於 display_rect 之外的像素,最大尺寸為巨集區塊大小減 1。valid_size 可用於測試影片解碼器,以及特定轉碼情境。

pixel_aspect_ratio fuchsia.math/SizeU

影片預定顯示時,單一像素的顯示比例。

如果是 YUV 格式,這是亮度 (又稱 Y) 樣本的像素顯示比例 (又稱樣本顯示比例,或 SAR)。

製作者應確保寬度和高度值互質,必要時可約分 (兩者皆除以最大公因數)。

如果未設定這個欄位,消費者應將其解讀為未知的像素顯示比例。在某些情況下,預設值 1:1 可能合適,但消費者可以透過 OOB 方式判斷實際像素顯示比例。

常數

名稱值類型說明
FORMAT_MODIFIER_ARM_BCH_BIT 2048 uint64
FORMAT_MODIFIER_ARM_SPARSE_BIT 64 uint64
FORMAT_MODIFIER_ARM_SPLIT_BLOCK_BIT 32 uint64
FORMAT_MODIFIER_ARM_TE_BIT 4096 uint64
FORMAT_MODIFIER_ARM_TILED_HEADER_BIT 8192 uint64
FORMAT_MODIFIER_ARM_YUV_BIT 16 uint64
FORMAT_MODIFIER_INTEL_CCS_BIT 16777216 uint64

格式在圖塊資料後方有顏色控制介面

FORMAT_MODIFIER_VENDOR_ALLWINNER 648518346341351424 uint64
新增:19
FORMAT_MODIFIER_VENDOR_AMD 144115188075855872 uint64
新增:19
FORMAT_MODIFIER_VENDOR_AMLOGIC 720575940379279360 uint64
新增:19
FORMAT_MODIFIER_VENDOR_ARM 576460752303423488 uint64
新增:19
FORMAT_MODIFIER_VENDOR_BROADCOM 504403158265495552 uint64
新增:19
FORMAT_MODIFIER_VENDOR_GOOGLE 7421932185906577408 uint64
新增:19
FORMAT_MODIFIER_VENDOR_INTEL 72057594037927936 uint64
新增:19
FORMAT_MODIFIER_VENDOR_NVIDIA 216172782113783808 uint64
新增:19
FORMAT_MODIFIER_VENDOR_PVR 10520408729537478656 uint64
新增:33
FORMAT_MODIFIER_VENDOR_QCOM 360287970189639680 uint64
新增:19
FORMAT_MODIFIER_VENDOR_SAMSUNG 288230376151711744 uint64
新增:19
FORMAT_MODIFIER_VENDOR_VIVANTE 432345564227567616 uint64
新增:19