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 |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour