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

パーフェイス

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

概要

これらの形式では、ルミナンスとクロマ (C'b および C'r) チャネルに固定小数点表現が使用されます。サンプル値は、SMPTE 274M セクション 7.7 ~ 7.8 および 7.11 ~ 7.12 に従って、スケーリング係数 2^(n − 8) を使用してスケーリングされた 8 ビット値です。n は 10 または 16 です。単純なビット シフトを使用して正確な変換を実行できます。たとえば、8 ビット形式の白色点が 235 の場合、10 ビット形式の対応する白色点は 940 (235 × 4) です。

ここで説明する 16 ビット表現では、各チャネルのリトルエンディアンのバイト値が使用されます。次の図に示すように、10 ビット形式でもチャネルごとに 16 ビットが使用され、最下位の 6 ビットがゼロに設定されます。


同じ 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 の最後の 2 文字はチャネルごとのビット数を表し、「16」は 16 ビット、「10」は 10 ビットを表します。

このスキームを使用して、次の FOURCC コードが定義されます。10 ビットまたは 16 ビット YUV の 4:2:1 形式はまだ定義されていません。

表面の定義

このセクションでは、各フォーマットのメモリ配置について説明します。以下の説明では、WORD という用語はリトルエンディアンの 16 ビット値を指し、DWORD という用語はリトルエンディアンの 32 ビット値を指します。

4:2:0フォーマット

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

P016とP010

どちらの形式でも、最初にすべての Y サンプルが偶数行の WORD 配列としてメモリに表示されます。表面段差は、Y 平面の幅よりも大きくなる可能性があります。この配列の後には、次の図に示すように、インターリーブされた U サンプルと V サンプルを含む WORD 配列が続きます。


結合された UV 配列が DWORD 配列としてアドレス指定される場合、最下位ワード (LSW) には U 値が含まれ、最上位ワード (MSW) には V 値が含まれます。結合された UV プレーンのストライドは、Y プレーンのストライドと等しくなります。UV 平面のライン数は 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
  • ¥216
  • 210円

P216とP210

どちらのフラット フォーマットでも、最初にすべての Y サンプルが偶数行の WORD 配列としてメモリに表示されます。表面段差は、Y 平面の幅よりも大きくなる可能性があります。この配列の後には、次の図に示すように、インターリーブされた U サンプルと V サンプルを含む WORD 配列が続きます。

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

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

216円と210円

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


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

Y210 は、各サンプルに有効なデータが 10 ビットしか含まれていないことを除いて、Y216 と同じです。前述したように、最下位 6 ビットは 0 に設定されます。

4:4:4フォーマット

2 つの 4:4:4 フォーマットが定義されており、FOURCC コードは Y410 と Y416 です。どちらもパッケージ化された形式です。

410円

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


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

¥416

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

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

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

推奨される YUV 形式

次の表に、8 ビット形式を含む推奨される YUV 形式を示します。
ここに画像の説明を挿入します

オブジェクトが特定のビット深度およびクロマ サンプリング スキームをサポートする場合、この表にリストされている対応する YUV 形式をサポートすることをお勧めします。(オブジェクトは、ここにリストされていない他の形式をサポートしている場合があります。)

おすすめ

転載: blog.csdn.net/weixin_45264425/article/details/132797279