10 位和 16 位 YUV 視訊格式
本主題描述建議在 Microsoft Windows 作業系統中擷取、處理及顯示視訊的 10 位和 16 位 YUV 格式。
本主題包含下列幾節:
概觀
這些格式會針對 luma 通道和 chroma (C'b 和 C'r) 通道使用固定點標記法。 範例值是縮放 8 位值,使用縮放比例 2^ (n - 8) ,其中 n 是 10 或 16,根據 SMPTE 274M 的 7.7-7.8 和 7.11-7.12 節。 精確度轉換可以使用簡單的位移來執行。 例如,如果 8 位格式的白點為 235,對應的 10 位格式的白色點位於 940 (235 × 4) 。
此處所述的 16 位標記法會針對每個通道使用位元組尾 WORD 值。 10 位格式也會針對每個通道使用 16 位,並將最低 6 位設定為零,如下圖所示。
由於相同 YUV 格式的 10 位和 16 位標記法具有相同的記憶體配置,因此可以將 10 位表示轉換成 16 位標記法,且不會遺失有效位數。 您也可以將 16 位表示轉換成 10 位標記法。 (Y416 和 Y410 格式是此一般規則的例外狀況,因為它們不會共用相同的記憶體配置。)
當圖形硬體讀取包含 10 位標記法的介面時,應該忽略每個通道的低序 6 位。 不過,如果表面包含有效的 16 位資料,則應將其識別為 16 位表面。
在包含 Alpha 的格式中,完全透明圖元的 Alpha 值為零,而完全不透明圖元的 Alpha 值則為 (2^n) – 1,其中 n 是 Alpha 位的數目。 Alpha 假設為線性值,這個值會在元件轉換成其標準化線性形式之後套用至每個元件。
對於視訊記憶體中的影像,圖形驅動程式會選取表面的記憶體對齊方式。 表面必須對齊 DWORD 。 也就是說,雖然對齊方式可以大於 32 位,但介面內的個別線條保證是從 32 位界限開始。 原點 (0,0) 一律是表面的左上角。
為了本檔的目的, U 一詞相當於 Cb,而 V 一詞相當於 Cr。
10 位和 16 位 YUV 的 FOURCC 代碼
此處描述之格式的 FOURCC 程式碼會使用下列慣例:
如果格式是平面格式,FOURCC 程式碼中的第一個字元是 'P'。 如果格式已封裝,則第一個字元為 'Y'。
FOURCC 程式碼中的第二個字元是由色度取樣所決定,如下表所示。
Chroma 取樣 FOURCC 代碼號 4:4:4 '4' 4:2:2 '2' 4:2:1 '1' 4:2:0 '0' FOURCC 的最後兩個字元表示每個通道的位數,16 位為 '16' 或 10 位的 '10'。
使用此配置,已定義下列 FOURCC 程式碼。 目前未定義 10 位或 16 位 YUV 的 4:2:1 格式。
FOURCC | 描述 |
---|---|
P016 | 平面,4:2:0,16 位。 |
P010 | 平面,4:2:0,10 位。 |
P216 | 平面、4:2:2、16 位。 |
P210 | 平面,4:2:2,10 位。 |
Y216 | Packed、4:2:2、16 位。 |
Y210 | Packed、4:2:2、10 位。 |
Y416 | Packed、4:4:4、16 位 |
Y410 | Packed、4:4:4、10 位。 |
子類型 GUID 也已從這些 FOURC 定義;請參閱 影片子類型 GUID。
Surface 定義
本節描述每個格式的記憶體配置。 在下列描述中, WORD 一詞是指小端 16 位值,而 DWORD 一詞則是指小到尾 32 位值。
4:2:0 格式
定義了兩種 4:2:0 格式,其中具有 FOURCC 代碼 P016 和 P010。 它們共用相同的記憶體配置,但 P016 會針對每個通道使用 16 位,而 P010 則每個通道使用 10 位。
P016 和 P010
在這兩種格式中,所有 Y 範例都會先在記憶體中顯示為 WORD陣列,並包含偶數行。 表面步進可以大於 Y 平面的寬度。 此陣列會緊接著包含交錯您和 V 範例的 WORD陣列,如下圖所示。
如果合併的 U-V 陣列是以 DWORD的陣列定址,則最不重要的單字 (LSW) 包含 U 值,而 MSW) (最重要的單字則包含 V 值。 合併 U-V 平面的步進等於 Y 平面的步進。 U-V 平面有 Y 平面的一半行。
這兩種格式是慣用的 4:2:0 平面像素格式,用於較高的精確度 YUV 標記法。 它們必須是 DirectX 視訊加速的中繼詞彙需求, (DXVA) 加速器支援 10 位或 16 位 4:2:0 視訊。
4:2:2 格式
已定義四個 4:2:2 格式,兩個平面和兩個封裝格式。 它們具有下列 FOURCC 代碼:
- P216
- P210
- Y216
- Y210
P216 和 P210
在這兩個平面格式中,所有 Y 樣本都會先出現在記憶體中,做為 WORD陣列,並包含偶數行。 表面步進可以大於 Y 平面的寬度。 此陣列會緊接著包含交錯您和 V 範例的 WORD陣列,如下圖所示。
如果將合併的 U-V 陣列定址為 DWORD的陣列,LSW 會包含 U 值,而 MSW 則包含 V 值。 合併 U-V 平面的步進等於 Y 平面的步進。 U-V 平面的行數與 Y 平面相同。
這兩種格式是慣用的 4:2:2 平面像素格式,用於較高的精確度 YUV 標記法。 它們必須是 DirectX 影片加速的中繼詞彙需求, (DXVA) 支援 10 位或 16 位 4:2:2 視訊的加速器。
Y216 和 Y210
在這兩種封裝格式中,每組圖元都會儲存為四個 WORD的陣列,如下圖所示。
陣列中的第一個WORD包含配對中的第一個 Y 範例、第二個 WORD 包含 U 範例、第三個WORD包含第二個 Y 範例,而第四個WORD則包含 V 範例。
Y210 與 Y216 相同,不同之處在于每個樣本只包含 10 位的顯著資料。 最不重要的 6 位會設定為零,如先前所述。
4:4:4 格式
定義了兩種 4:4:4 格式,其中具有 FOURCC 代碼 Y410 和 Y416。 這兩者都是封裝格式。
Y410
此格式是封裝的 10 位標記法,其中包含 2 位 Alpha。 每個圖元都會編碼為單一 DWORD ,其中包含下圖所示的記憶體配置。
位 0-9 包含 U 樣本、位 10-19 包含 Y 樣本、位 20-29 包含 V 樣本,而位 30-31 則包含 Alpha 值。 若要指出圖元完全不透明,應用程式必須將兩個 Alpha 位設定為等於 0x03。
Y416
此格式是封裝的 16 位標記法,其中包含 16 位 Alpha。 每個圖元都會編碼為一對 DWORDs,如下圖所示。
位 0-15 包含 U 樣本、位 16-31 包含 Y 樣本、位 32-47 包含 V 樣本,而位 48-63 則包含 Alpha 值。
若要指出圖元完全不透明,應用程式必須將兩個 Alpha 位元組設定為等於0xFFFF。 此格式主要是在影像處理期間作為中繼格式,以避免累積錯誤。
慣用 YUV 格式
下表列出慣用的 YUV 格式,包括 8 位格式。
格式 | 色度取樣 | 已封裝或平面 | 每個通道的位數 |
---|---|---|---|
AYUV | 4:4:4 | Packed | 8 |
Y410 | 4:4:4 | Packed | 10 |
Y416 | 4:4:4 | Packed | 16 |
AI44 | 4:4:4 | Packed | Palettized |
YUY2 | 4:2:2 | Packed | 8 |
Y210 | 4:2:2 | Packed | 10 |
Y216 | 4:2:2 | Packed | 16 |
P210 | 4:2:2 | 平面 | 10 |
P216 | 4:2:2 | 平面 | 16 |
NV12 | 4:2:0 | 平面 | 8 |
P010 | 4:2:0 | 平面 | 10 |
P016 | 4:2:0 | 平面 | 16 |
NV11 | 4:1:1 | 平面 | 8 |
建議物件支援指定的位深度和色度取樣配置,它應該支援此表格中所列的對應 YUV 格式。 (物件可能支援此處未列出的其他格式。)
相關主題