IDirect3DDeviceManager9::LockDevice, méthode (dxva2api.h)
Donne à l’appelant un accès exclusif à l’appareil Direct3D.
Syntaxe
HRESULT LockDevice(
[in] HANDLE hDevice,
[out] IDirect3DDevice9 **ppDevice,
[in] BOOL fBlock
);
Paramètres
[in] hDevice
Handle pour l’appareil Direct3D. Pour obtenir le handle d’appareil, appelez IDirect3DDeviceManager9::OpenDeviceHandle.
[out] ppDevice
Reçoit un pointeur vers l’interface IDirect3DDevice9 de l’appareil .
[in] fBlock
Spécifie s’il faut attendre le verrouillage de l’appareil. Si l’appareil est déjà verrouillé et que ce paramètre a la valeur TRUE, la méthode se bloque jusqu’à ce que l’appareil soit déverrouillé. Sinon, si l’appareil est verrouillé et que ce paramètre a la valeur FALSE, la méthode retourne immédiatement avec le code d’erreur DXVA2_E_VIDEO_DEVICE_LOCKED.
Valeur retournée
Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.
Code de retour | Description |
---|---|
|
S_OK |
|
Le handle d’appareil n’est pas valide. |
|
Le gestionnaire de périphériques Direct3D n’a pas été initialisé. Le propriétaire de l’appareil doit appeler IDirect3DDeviceManager9::ResetDevice. |
|
L’appareil est verrouillé et fBlock a la valeur FALSE. |
|
Le handle spécifié n’est pas un handle d’appareil Direct3D. |
Notes
Lorsque vous avez terminé d’utiliser l’appareil Direct3D, appelez IDirect3DDeviceManager9::UnlockDevice pour déverrouiller l’appareil.
Si la méthode retourne DXVA2_E_NEW_VIDEO_DEVICE, appelez IDirect3DDeviceManager9::CloseDeviceHandle pour fermer le handle, puis appelez à nouveau OpenDeviceHandle pour obtenir un nouveau handle. La méthode IDirect3DDeviceManager9::ResetDevice invalide tous les descripteurs d’appareil ouverts.
Si fBlock a la valeur TRUE, cette méthode peut potentiellement se bloquer. Par exemple, il se bloque si un thread appelle LockDevice , puis attend sur un autre thread qui appelle LockDevice. Elle interbloque également si un thread appelle LockDevice deux fois sans appeler UnlockDevice entre les deux.
Exemples
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;
}
Spécifications
Client minimal pris en charge | Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | dxva2api.h |