10 位和 16 位 YUV 視訊格式
本主題描述建議在 Microsoft Windows作系統中擷取、處理及顯示視訊的 10 位和 16 位 YUV 格式。
本主題包含下列各節:
概述
這些格式會針對 luma 通道和色度 (C'b 和 C'r) 信道使用固定點表示法。 根據 SMPTE 274M 的區段 7.7-7.8 和 7.11-7.12 區段,範例值會縮放 8 位值,其縮放比例為 2^(n ~ 8),其中 n 是 10 或 16。 精確度轉換可以使用簡單的位移來執行。 例如,如果 8 位格式的白色點是 235,則對應的 10 位格式在 940 的白色點(235 × 4)。
此處所述的16位表示法會針對每個通道使用位元組 WORD 值。 10 位格式也會針對每個通道使用 16 位,最低 6 位設定為零,如下圖所示。
顯示10位表示法的圖表
由於相同 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 程式代碼中的第二個字元是由色度取樣所決定,如下表所示。
色度取樣 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 | 已封裝,4:2:2,16 位。 |
Y210 | 包裝,4:2:2,10 位。 |
Y416 | 包裝,4:4:4,16 位 |
Y410 | 包裝,4:4:4,10 位。 |
子類型 GUID 也已從這些 FOURC 定義;請參閱 Video Subtype 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陣列,如下圖所示。
顯示 p016 和 p010 像素版面配置圖表
如果合併的U-V數位是以 DWORD的數位搜尋址,則最小有效字 (LSW) 包含 U 值,而最重要的單字 (MSW) 則包含 V 值。 合併U-V 平面的步幅等於Y平面的步幅。 U-V 平面有一半的線路,與 Y 平面一樣多。
這兩種格式是慣用的 4:2:0 平面圖元格式,用於更高的精確度 YUV 表示法。 它們必須是支援10位或16位4:2:0視訊的 DirectX 影片加速 (DXVA) 加速器的中繼詞彙需求。
4:2:2 格式
已定義四個 4:2:2 格式、兩個平面和兩個包裝格式。 他們具有下列 FOURCC 程式代碼:
- P216
- P210
- Y216
- Y210
P216 和 P210
在這兩個平面格式中,所有 Y 樣本都會先以 WORD 陣列的形式出現在記憶體中,且行數為偶數行的 word陣列。 表面步幅可以大於 Y 平面的寬度。 此陣列緊接著包含交錯您和 V 範例的 WORD陣列,如下圖所示。
顯示 p216 和 p210 像素版面配置圖表
如果合併的U-V陣列是以 DWORD的數位搜尋址,LSW 會包含U值,而 MSW 包含 V 值。 合併U-V 平面的步幅等於Y平面的步幅。 U-V 平面的行數與 Y 平面相同。
這兩種格式是慣用的 4:2:2 平面圖元格式,用於更高的精確度 YUV 表示法。 它們必須是支援10位或16位4:2:2視訊的 DirectX 影片加速 (DXVA) 加速器的中繼詞彙需求。
Y216 和 Y210
在這兩種封裝格式中,每對像素都會儲存為四個 WORD的陣列,如下圖所示。
數位中的第一個 WORD 包含配對中的第一個 Y 範例、第二個 WORD 包含 U 範例、第三個 WORD 包含第二個 Y 範例,第四個 WORD 包含 V 範例。
Y210 與 Y216 相同,不同之處在於每個範例只包含 10 位的重要數據。 最小有效 6 位會設定為零,如先前所述。
4:4:4 格式
已定義兩種 4:4:4 格式,其中四個CC 代碼為 Y410 和 Y416。 兩者都是包裝格式。
Y410
此格式是一種包裝的10位表示法,其中包含2位Alpha。 每個像素都會編碼為單一 DWORD,如下圖所示的記憶體配置。
顯示 y410 像素版面配置
位 0-9 包含 U 樣本、位 10-19 包含 Y 範例、位 20-29 包含 V 樣本,而位 30-31 則包含 Alpha 值。 若要指出圖元完全不透明,應用程式必須將兩個 Alpha 位設定為等於0x03。
Y416
此格式是一個包裝的16位表示法,其中包含16位Alpha。 每個像素都會編碼為一對 DWORDs,如下圖所示。
顯示 y416 像素版面配置的圖表
位 0-15 包含 U 樣本、位 16-31 包含 Y 樣本、位 32-47 包含 V 樣本,而位 48-63 則包含 Alpha 值。
若要指出圖元完全不透明,應用程式必須將兩個 Alpha 位元組設定為等於0xFFFF。 此格式主要是在圖像處理期間做為中繼格式,以避免累積錯誤。
慣用 YUV 格式
下表列出慣用的 YUV 格式,包括 8 位格式。
格式 | 色度取樣 | 包裝或平面 | 每個通道的位數 |
---|---|---|---|
AYUV | 4:4:4 | 包裝好的 | 8 |
Y410 | 4:4:4 | 包裝好的 | 10 |
Y416 | 4:4:4 | 包裝好的 | 16 |
AI44 | 4:4:4 | 包裝好的 | Palettized |
YUY2 | 4:2:2 | 包裝好的 | 8 |
Y210 | 4:2:2 | 包裝好的 | 10 |
Y216 | 4:2:2 | 包裝好的 | 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 格式。 (物件可能支援此處未列出的其他格式。
相關主題