IMF2DBuffer インターフェイス (mfobjects.h)

ビデオ フレームなどの 2 次元サーフェスを含むバッファーを表します。

継承

IMF2DBuffer インターフェイスは、IUnknown インターフェイスから継承されます。 IMF2DBuffer には、次の種類のメンバーもあります。

メソッド

IMF2DBuffer インターフェイスには、これらのメソッドがあります。

 
IMF2DBuffer::ContiguousCopyFrom

連続した形式のバッファーからこのバッファーにデータをコピーします。
IMF2DBuffer::ContiguousCopyTo

このバッファーを呼び出し元のバッファーにコピーし、データを連続した形式に変換します。
IMF2DBuffer::GetContiguousLength

バッファーの内容を連続した形式で格納するために必要なバイト数を取得します。
IMF2DBuffer::GetScanline0AndPitch

バッファー メモリとサーフェスストライドへのポインターを取得します。
IMF2DBuffer::IsContiguousFormat

バッファーがネイティブ形式で連続しているかどうかを照会します。
IMF2DBuffer::Lock2D

呼び出し元にバッファー内のメモリへのアクセス権を付与します。 (IMF2DBuffer.Lock2D)
IMF2DBuffer::Unlock2D

以前にロックされていたバッファーのロックを解除します。 IMF2DBuffer::Lock2D の呼び出しごとに、このメソッドを 1 回呼び出します。

注釈

このインターフェイスへのポインターを取得するには、メディア バッファーで QueryInterface を呼び出します。

2-D バッファーを使用するには、 ストライド (ピクセルの 1 行から次の行に移動するために必要なバイト数) を把握することが重要です。 サーフェスにはピクセルの各行の後に埋め込みバイトが含まれる可能性があるため、ストライドは画像の幅よりも大きくなる可能性があります。 ピクセルがメモリ内のボトムアップに向いている場合、ストライドは負の値になる場合もあります。 詳細については、「 イメージストライド」を参照してください。

すべてのビデオ形式は、 連続した 表現または パック された表現を定義します。 この表現は、追加のパディングなしで、システム メモリ内の DirectX サーフェスの標準レイアウトと互換性があります。 RGB ビデオの場合、連続した表現のピッチは、最も近い DWORD 境界に切り上げられた、画像の幅 (バイト単位) に等しくなります。 YUV ビデオの場合、連続した表現のレイアウトは YUV 形式によって異なります。 平面 YUV 形式の場合、Y 平面のピッチが、YOU および V 平面とは異なる場合があります。

メディア バッファーが IMF2DBuffer インターフェイスをサポートしている場合、基になるバッファーは、ピクセルの各行の後に追加の埋め込みバイトが存在する可能性があるため、連続した表現が保証されません。 バッファーが連続していない場合、Lock メソッドと Lock2D メソッドの動作は異なります。

  • Lock2D メソッドは、基になるバッファーへのポインターを返します。 バッファーが連続していない可能性があります。
  • Lock メソッドは、連続することが保証されているバッファーを返します。 基になるバッファーが連続していない場合、メソッドはデータを新しいバッファーにコピーし、 Unlock メソッドは元のバッファーにコピーし直します。
Lock2D メソッドを呼び出して、ネイティブ形式で 2-D バッファーにアクセスします。 ネイティブ形式が連続していない可能性があります。 バッファーの IMFMediaBuffer::Lock メソッドは、バッファーの連続した表現を返します。 ただし、ネイティブ形式の内部コピーが必要になる場合があります。 2-D バッファーの場合は、 Lock2D メソッドを使用し、 Lock メソッドを使用しないようにする必要があります。 Lock メソッドでは最大 2 つのバッファー コピーが発生する可能性があるため、通常は Lock2D メソッドの方が効率的であり、可能な場合は使用する必要があります。 基になるバッファーが連続しているかどうかを調べるには、 IMF2DBuffer::IsContiguousFormat を呼び出します。

非圧縮イメージの場合、バッファー内の有効なデータの量は、イメージの幅、高さ、およびピクセル レイアウトによって決まります。 このため、 Lock2D を呼び出してバッファーにアクセスする場合は、 IMFMediaBuffer::GetCurrentLength または IMFMediaBuffer::GetMaxLength によって返される値に依存しないでください。 同様に、バッファー内のデータを変更する場合、サイズを更新するために IMFMediaBuffer::SetCurrentLength を呼び出す必要はありません。 一般に、同じメディア バッファーで IMF2DBuffer メソッドと IMFMediaBuffer メソッドの呼び出しを混在させないようにする必要があります。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー mfobjects.h (Mfidl.h を含む)

こちらもご覧ください

メディア バッファー

メディア ファンデーション インターフェイス

圧縮されていないビデオ バッファー