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 位設定為零,如下圖所示。

顯示 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 程式碼中的第二個字元是由色度取樣所決定,如下表所示。

    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陣列,如下圖所示。

顯示 p016 和 p010 圖元版面配置的圖表

如果合併的 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陣列,如下圖所示。

顯示 p216 和 p210 圖元版面配置的圖表

如果將合併的 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的陣列,如下圖所示。

顯示 y216 和 y210 圖元版面配置的圖表。

陣列中的第一個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 ,其中包含下圖所示的記憶體配置。

顯示 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 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 格式。 (物件可能支援此處未列出的其他格式。)

視訊轉譯的建議 8 位 YUV 格式

影片子類型 GUID

視訊媒體類型