次の方法で共有


IMFDXGIDeviceManager::LockDevice メソッド (mfobjects.h)

呼び出し元に Microsoft Direct3D デバイスへの排他的アクセス権を付与します。

構文

HRESULT LockDevice(
  [in]  HANDLE hDevice,
  [in]  REFIID riid,
  [out] void   **ppUnkDevice,
  [in]  BOOL   fBlock
);

パラメーター

[in] hDevice

Direct3D デバイスへのハンドル。 デバイス ハンドルを取得するには、 IMFDXGIDeviceManager::OpenDeviceHandle を呼び出します。

[in] riid

要求したインターフェイスのインターフェイス ID (IID: Interface Identifier)。 Direct3D デバイスでは、次のインターフェイスがサポートされます。

[out] ppUnkDevice

要求されたインターフェイスへのポインターを受け取ります。 呼び出し元はインターフェイスを解放する必要があります。

[in] fBlock

デバイス ロックを待機するかどうかを指定します。 デバイスが既にロックされていて、このパラメーターが TRUE の場合、メソッドはデバイスのロックが解除されるまでブロックします。 それ以外の場合、デバイスがロックされていて、このパラメーターが FALSE の場合、メソッドはエラー コード DXVA2_E_VIDEO_DEVICE_LOCKEDと共に直ちにを返します。

戻り値

このメソッドは、これらの値のいずれかを返すことができます。

リターン コード 説明
S_OK
正常終了しました。
E_HANDLE
指定したハンドルは Direct3D デバイス ハンドルではありません。
MF_E_DXGI_DEVICE_NOT_INITIALIZED
DXGI デバイス マネージャーが初期化されませんでした。 デバイスの所有者は、 IMFDXGIDeviceManager::ResetDevice を呼び出す必要があります。
MF_E_DXGI_NEW_VIDEO_DEVICE
デバイス ハンドルが無効です。
MF_E_DXGI_VIDEO_DEVICE_LOCKED
デバイスがロックされ、 fBlockFALSE です

注釈

Direct3D デバイスの使用が完了したら、 IMFDXGIDeviceManager::UnlockDevice を呼び出してデバイスのロックを解除します。

メソッドが MF_E_DXGI_NEW_VIDEO_DEVICEを返す場合は、 IMFDXGIDeviceManager::CloseDeviceHandle を呼び出してハンドルを閉じ、もう一度 OpenDeviceHandle を呼び出して新しいハンドルを取得します。 IMFDXGIDeviceManager::ResetDevice メソッドは、開いているすべてのデバイス ハンドルを無効にします。

fBlockTRUE の場合、このメソッドはデッドロックの可能性があります。 たとえば、スレッドが LockDevice を呼び出し、LockDevice を呼び出す別のスレッドで待機すると、デッドロック が発生します。 また、スレッドが LockDevice を 2 回呼び出しても、その間に UnlockDevice を呼び出さずにデッドロックします。

要件

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

こちらもご覧ください

IMFDXGIDeviceManager