IMFMediaBuffer::Lock メソッド (mfobjects.h)

読み取りまたは書き込みのために、呼び出し元にバッファー内のメモリへのアクセス権を付与します

構文

HRESULT Lock(
  [out] BYTE  **ppbBuffer,
  [out] DWORD *pcbMaxLength,
  [out] DWORD *pcbCurrentLength
);

パラメーター

[out] ppbBuffer

バッファーの先頭へのポインターを受け取ります。

[out] pcbMaxLength

バッファーに書き込むことができるデータの最大量を受け取ります。 このパラメーターは、NULL でもかまいません。 IMFMediaBuffer::GetMaxLength メソッドによって同じ値が返されます。

[out] pcbCurrentLength

バッファー内の有効なデータの長さをバイト単位で受け取ります。 このパラメーターは、NULL でもかまいません。 IMFMediaBuffer::GetCurrentLength メソッドによって同じ値が返されます。

戻り値

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

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

注釈

このメソッドは、 pcbMaxLength パラメーターで返される最大サイズまで、呼び出し元にバッファー全体へのアクセスを許可します。 pcbCurrentLength で返される値は、バッファー内に既に存在する有効なデータのサイズであり、合計バッファー サイズよりも小さい可能性があります。

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

バッファーをロックしても、他のスレッドが Lock を呼び出すのを妨げるわけではないため、このメソッドを使用してスレッドを同期しないでください。

このメソッドはメモリを割り当てることができますが、メモリの所有権を呼び出し元に転送しません。 メモリを解放または解放しないでください。メディア バッファーが破棄されると、メディア バッファーによってメモリが解放されます。

バッファーの内容を変更する場合は、 IMFMediaBuffer::SetCurrentLength を呼び出して現在の長さを更新します。

このメソッドは内部的にメモリを割り当てることがあるため、バッファーが IMF2DBuffer インターフェイスをサポートしている場合は、 代わりに IMF2DBuffer::Lock2D メソッドを使用してバッファーをロックする必要があります。 2-D バッファーの場合、Lock2DSize メソッドは、指定したMF2DBuffer_LockFlags値に応じて Lock メソッドよりも効率的です。 MF2DBuffer_LockFlags_Readを使用して Lock2DSize を呼び出しても、バッファーのロックが解除されたときにコピーが戻り、MF2DBuffer_LockFlags_Writeを使用して呼び出しても、内部バッファーからのコピーは発生しません。 LockFlags_ReadWriteを使用して Lock2DSize を呼び出すと、LockLock2D と同じように動作し、ロック解除時にコピー元とコピーバックの両方が発生します。 最高のパフォーマンスを得るための一般的なガイダンスは、可能な限り IMFMediaBufferIMF2DBuffer を使用しないようにし、代わりに必要最小限のロック フラグで IMF2DBuffer2 を 使用することです。 Lock2D を使用してバッファーがロックされている場合、Lock メソッドは MF_E_INVALIDREQUESTを返す可能性があることに注意してください。

このインターフェイスは、Windows Media Format 11 SDK 再頒布可能コンポーネントがインストールされている場合、次のプラットフォームで使用できます。

  • Service Pack 2 (SP2) 以降の Windows XP。
  • Windows XP Media Center Edition 2005 と KB900325 (Windows XP Media Center Edition 2005) とKB925766 (2006 年 10 月 Windows XP Media Center Edition の更新プログラムのロールアップ) がインストールされています。

要件

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

こちらもご覧ください

IMFMediaBuffer

メディア バッファー