10 ビットおよび 16 ビットの YUV ビデオ形式

このトピックでは、Microsoft Windows オペレーティング システムでのビデオのキャプチャ、処理、および表示に推奨される 10 ビットと 16 ビットの YUV 形式について説明します。

このトピックは、次のセクションで構成されています。

概要

これらの形式では、luma チャネルとクロマ (C'b および C'r) チャネルの両方に固定小数点表現が使用されます。 サンプル値は、2^(n - 8) のスケーリング係数を使用して 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 ビットは 0 に設定されます。

10 ビット表現を示す図

同じ YUV 形式の 10 ビットと 16 ビットの表現は同じメモリ レイアウトを持つため、精度を失う必要なく 10 ビット表現を 16 表現にキャストできます。 16 ビット表現を 10 ビット表現にキャストすることもできます。 (ただし、Y416 形式と Y410 形式は同じメモリ レイアウトを共有しないため、この一般的なルールの例外です)。

グラフィックス ハードウェアが 10 ビット表現を含むサーフェスを読み取る場合は、各チャネルの下位 6 ビットを無視する必要があります。 ただし、サーフェスに有効な 16 ビット データが含まれている場合は、16 ビット サーフェスとして識別する必要があります。

アルファを含む形式では、完全に透明なピクセルのアルファ値は 0 で、完全に不透明なピクセルのアルファ値は (2^n) – 1 で、n はアルファ ビットの数です。 アルファは、コンポーネントが正規化された線形形式に変換された後に、各コンポーネントに適用される線形値であると見なされます。

ビデオ メモリ内の画像の場合、グラフィックス ドライバーはサーフェスのメモリ配置を選択します。 サーフェスは DWORD で整列する必要があります。 つまり、サーフェス内の個々の行は、32 ビット境界から開始することが保証されますが、アラインメントは 32 ビットを超える可能性があります。 原点 (0,0) は、常にサーフェスの左上隅です。

このドキュメントの目的上、 U という用語は Cb に相当し、 V という用語は Cr に相当 します

10 ビットおよび 16 ビット YUV の FOURCC コード

ここで説明する形式の FOURCC コードでは、次の規則を使用します。

  • 形式が平面の場合、FOURCC コードの最初の文字は 'P' です。 書式がパックされている場合、最初の文字は 'Y' になります。

  • FOURCC コードの 2 番目の文字は、次の表に示すように、クロマ サンプリングによって決定されます。

    クロマ サンプリング FOURCC コード文字
    4:4:4 '4'
    4:2:2 '2'
    4:2:1 '1'
    4:2:0 '0'

     

  • FOURCC の最後の 2 文字は、チャネルあたりのビット数を示します。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 から定義されています。 「ビデオ サブタイプ GUID」を参照してください。

サーフェス定義

このセクションでは、各形式のメモリ レイアウトについて説明します。 以降の説明では、 WORD という用語はリトル エンディアン 16 ビット値を指し、 用語 DWORD はリトル エンディアン 32 ビット値を参照します。

4:2:0 形式

FOURCC コード P016 と P010 を使用して、2 つの 4:2:0 形式が定義されています。 これらは同じメモリ レイアウトを共有しますが、P016 ではチャネルあたり 16 ビットを使用し、P010 はチャネルあたり 10 ビットを使用します。

P016 と P010

これら 2 つの形式では、すべての Y サンプルが、偶数行の WORDの配列としてメモリ内で最初に表示されます。 サーフェスストライドは、Y 平面の幅よりも大きくすることができます。 この配列の直後には、次の図に示すように、インターリーブされた you サンプルと V サンプルを含む WORDの配列が続きます。

p016 および p010 ピクセル レイアウトを示す図

結合された U-V 配列が DWORDの配列としてアドレス指定されている場合、最下位ワード (LSW) には U 値が含まれており、最も重要な単語 (MSW) には V 値が含まれます。 結合された U-V 平面のストライドは、Y 平面のストライドと等しくなります。 U-V 平面には、Y 平面の半分の線があります。

これら 2 つの形式は、より高精度の YUV 表現に適した 4:2:0 平面ピクセル形式です。 これらは、10 ビットまたは 16 ビットの 4:2:0 ビデオをサポートする DirectX ビデオ アクセラレーション (DXVA) アクセラレータの中間的な要件であることが期待されます。

4:2:2 形式

4 つの 4:2:2 形式が定義され、2 つの平面と 2 つのパックが定義されます。 次の FOURCC コードがあります。

  • P216
  • P210
  • Y216
  • Y210

P216 と P210

これら 2 つの平面形式では、すべての Y サンプルが、偶数行の WORDの配列としてメモリ内に最初に表示されます。 サーフェスストライドは、Y 平面の幅よりも大きくすることができます。 この配列の直後には、次の図に示すように、インターリーブされた you サンプルと V サンプルを含む WORDの配列が続きます。

p216 および p210 ピクセル レイアウトを示す図

結合された U-V 配列が DWORDの配列としてアドレス指定されている場合、LSW には U 値が含まれており、MSW には V 値が含まれます。 結合された U-V 平面のストライドは、Y 平面のストライドと等しくなります。 U-V プレーンの行数は Y 平面と同じです。

これら 2 つの形式は、より高精度の YUV 表現のために推奨される 4:2:2 平面ピクセル形式です。 これらは、10 ビットまたは 16 ビットの 4:2:2 ビデオをサポートする DirectX ビデオ アクセラレーション (DXVA) アクセラレータの中間要件であることが期待されます。

Y216 と Y210

これら 2 つのパック形式では、ピクセルの各ペアは、次の図に示すように、4 つの WORDの配列として格納されます。

y216 と y210 ピクセルのレイアウトを示す図。

配列内の最初の WORD にはペアの最初の Y サンプルが含まれており、2 番目の WORD には U サンプルが含まれており、3 番目の WORD には 2 番目の Y サンプルが含まれており、4 番目の WORD には V サンプルが含まれています。

Y210 は Y216 と同じですが、各サンプルに含まれる重要なデータは 10 ビットのみです。 前に説明したように、下位 6 ビットは 0 に設定されます。

4:4:4 形式

FOURCC コード Y410 と Y416 を使用して、2 つの 4:4:4 形式が定義されています。 どちらもパック形式です。

Y410

この形式は、2 ビットのアルファを含むパックされた 10 ビット表現です。 各ピクセルは、次の図に示すメモリ レイアウトを使用して 1 つの DWORD としてエンコードされます。

y410 ピクセルレイアウトを示す図。

ビット 0 から 9 には U サンプルが含まれており、ビット 10 から 19 には Y サンプルが含まれており、ビット 20 から 29 には V サンプルが含まれており、ビット 30 から 31 にはアルファ値が含まれます。 ピクセルが完全に不透明であることを示すには、アプリケーションで 2 つのアルファ ビットを 0x03 に設定する必要があります。

Y416

この形式は、16 ビットのアルファを含むパックされた 16 ビット表現です。 次の図に示すように、各ピクセルは DWORDのペアとしてエンコードされます。

y416 ピクセルレイアウトを示す図。

ビット 0 から 15 には U サンプルが含まれており、ビット 16 から 31 には Y サンプルが含まれており、ビット 32 から 47 には V サンプルが含まれており、ビット 48 から 63 にはアルファ値が含まれます。

ピクセルが完全に不透明であることを示すには、アプリケーションで 2 つのアルファ バイトを 0xFFFF に設定する必要があります。 この形式は、エラーの蓄積を回避するために、主に画像処理中の中間形式として使用されます。

推奨される YUV 形式

次の表に、8 ビット形式を含む推奨される YUV 形式を示します。

フォーマット 彩度サンプリング パックまたは平面 チャネルあたりのビット数
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

ビデオ メディアの種類