IDirect3DDeviceManager9::LockDevice メソッド (dxva2api.h)
呼び出し元に Direct3D デバイスへの排他的アクセス権を付与します。
構文
HRESULT LockDevice(
[in] HANDLE hDevice,
[out] IDirect3DDevice9 **ppDevice,
[in] BOOL fBlock
);
パラメーター
[in] hDevice
Direct3D デバイスへのハンドル。 デバイス ハンドルを取得するには、 IDirect3DDeviceManager9::OpenDeviceHandle を呼び出します。
[out] ppDevice
デバイスの IDirect3DDevice9 インターフェイスへのポインターを受け取ります。
[in] fBlock
デバイス ロックを待機するかどうかを指定します。 デバイスが既にロックされていて、このパラメーターが TRUE の場合、メソッドはデバイスのロックが解除されるまでブロックします。 それ以外の場合、デバイスがロックされていて、このパラメーターが FALSE の場合、メソッドはエラー コード DXVA2_E_VIDEO_DEVICE_LOCKEDを使用して直ちにを返します。
戻り値
このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。
リターン コード | 説明 |
---|---|
|
メソッドが成功しました。 |
|
デバイス ハンドルが無効です。 |
|
Direct3D デバイス マネージャーが初期化されませんでした。 デバイスの所有者は 、IDirect3DDeviceManager9::ResetDevice を呼び出す必要があります。 |
|
デバイスがロックされ、 fBlock が FALSE です。 |
|
指定したハンドルは Direct3D デバイス ハンドルではありません。 |
解説
Direct3D デバイスの使用が完了したら、 IDirect3DDeviceManager9::UnlockDevice を呼び出してデバイスのロックを解除します。
メソッドが DXVA2_E_NEW_VIDEO_DEVICEを返す場合は、 IDirect3DDeviceManager9::CloseDeviceHandle を呼び出してハンドルを閉じ、もう一度 OpenDeviceHandle を呼び出して新しいハンドルを取得します。 IDirect3DDeviceManager9::ResetDevice メソッドは、開いているすべてのデバイス ハンドルを無効にします。
fBlock が TRUE の場合、このメソッドはデッドロックの可能性があります。 たとえば、スレッドが LockDevice を呼び出し、LockDevice を呼び出す別のスレッドで待機すると、デッドロック が発生します。 また、スレッドが UnlockDevice を呼び出さずに LockDevice を 2 回呼び出した場合にもデッドロックが発生します。
例
HRESULT LockDevice(
IDirect3DDeviceManager9 *pDeviceManager,
BOOL fBlock,
IDirect3DDevice9 **ppDevice, // Receives a pointer to the device.
HANDLE *pHandle // Receives a device handle.
)
{
*pHandle = NULL;
*ppDevice = NULL;
HANDLE hDevice = 0;
HRESULT hr = pDeviceManager->OpenDeviceHandle(&hDevice);
if (SUCCEEDED(hr))
{
hr = pDeviceManager->LockDevice(hDevice, ppDevice, fBlock);
}
if (hr == DXVA2_E_NEW_VIDEO_DEVICE)
{
// Invalid device handle. Try to open a new device handle.
hr = pDeviceManager->CloseDeviceHandle(hDevice);
if (SUCCEEDED(hr))
{
hr = pDeviceManager->OpenDeviceHandle(&hDevice);
}
// Try to lock the device again.
if (SUCCEEDED(hr))
{
hr = pDeviceManager->LockDevice(hDevice, ppDevice, TRUE);
}
}
if (SUCCEEDED(hr))
{
*pHandle = hDevice;
}
return hr;
}
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | dxva2api.h |