次の方法で共有


IMF2DBuffer::Lock2D メソッド (mfobjects.h)

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

構文

HRESULT Lock2D(
  [out] BYTE **ppbScanline0,
  [out] LONG *plPitch
);

パラメーター

[out] ppbScanline0

画像内のピクセルの先頭行の最初のバイトへのポインターを受け取ります。 上部の行は、画像がビューアーに表示されるときに先頭行として定義され、メモリ内の最初の行ではない可能性があります。

[out] plPitch

サーフェスストライドをバイト単位で受け取ります。 ストライドは負の値になる可能性があり、画像がメモリの下端から上に向かっていることを示します。

戻り値

このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。

リターン コード 説明
S_OK
メソッドが成功しました。
D3DERR_INVALIDCALL
Direct3D サーフェスをロックできません。
MF_E_INVALIDREQUEST
この時点では、バッファーをロックできません。

注釈

p がピクセル行の最初のバイトへのポインターである場合、p + (*plPitch) はピクセルの次の行の最初のバイトを指します。 バッファーにはピクセルの各行の後にパディングが含まれる可能性があるため、ストライドはイメージの幅 (バイト単位) よりも広くなることがあります。 埋め込みバイト用に予約されているメモリには、読み取りアクセスできないか、書き込みアクセスできない可能性があるため、アクセスしないでください。 詳細については、「 イメージストライド」を参照してください。

pbScanline0 で返されるポインターは、呼び出し元がロックを保持している限り有効です。 メモリへのアクセスが完了したら、 IMF2DBuffer::Unlock2D を呼び出してバッファーのロックを解除します。 Lock2D の呼び出しごとに Unlock2D を 1 回呼び出す必要があります。 バッファーのロックを解除すると、 pbScanline0 で返されるポインターは無効になり、使用しないでください。 一般に、 Lock2D を呼び出すのは、以前ではなくバッファー メモリにアクセスする必要がある場合にのみ行うのが最善です。

IMFMediaBuffer::GetCurrentLength メソッドと IMFMediaBuffer::GetMaxLength メソッドによって返される値は、Lock2D メソッドによって返されるバッファーには適用されません。 同じ理由から、Lock2D メソッドによって返されるバッファー内のデータを操作した後、IMFMediaBuffer::SetCurrentLength を呼び出す必要はありません。

LOCK2D ロックが保持されている間は IMFMediaBuffer::Lock メソッドが失敗し、その逆も同様です。 アプリケーションでは、これらのメソッドの 1 つだけを一度に使用する必要があります。

基になるバッファーが Direct3D サーフェスの場合、サーフェスがロックできない場合、メソッドは失敗します。

要件

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

こちらもご覧ください

IMF2DBuffer

メディア バッファー

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