Partager via


Méthode IAudioRenderClient ::ReleaseBuffer (audioclient.h)

La méthode ReleaseBuffer libère l’espace tampon acquis lors de l’appel précédent à la méthode IAudioRenderClient ::GetBuffer .

Syntaxe

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesWritten,
  [in] DWORD  dwFlags
);

Paramètres

[in] NumFramesWritten

Nombre de trames audio écrites par le client dans le paquet de données. La valeur de ce paramètre doit être inférieure ou égale à la taille du paquet de données, comme spécifié dans le paramètre NumFramesRequested passé à la méthode IAudioRenderClient ::GetBuffer .

[in] dwFlags

Indicateurs de configuration de la mémoire tampon. L’appelant peut définir ce paramètre sur 0 ou sur la valeur d’énumération _AUDCLNT_BUFFERFLAGS suivante (un bit d’indicateur) :

AUDCLNT_BUFFERFLAGS_SILENT

Si ce bit d’indicateur est défini, le moteur audio traite le paquet de données comme s’il contenait du silence, quelles que soient les valeurs de données contenues dans le paquet. Cet indicateur élimine la nécessité pour le client d’écrire explicitement des données de silence dans la mémoire tampon de rendu.

Valeur retournée

Si la méthode réussit, retourne S_OK. En cas d’échec, les codes de retour possibles incluent, sans s’y limiter, les valeurs indiquées dans le tableau suivant.

Code de retour Description
AUDCLNT_E_INVALID_SIZE
La valeur NumFramesWritten dépasse la valeur NumFramesRequested spécifiée dans l’appel IAudioRenderClient ::GetBuffer précédent.
AUDCLNT_E_BUFFER_SIZE_ERROR
Le flux est en mode exclusif et utilise la mise en mémoire tampon pilotée par les événements, mais le client a tenté de libérer un paquet qui n’était pas de la taille de la mémoire tampon.
AUDCLNT_E_OUT_OF_ORDER
Cet appel n’a pas été précédé d’un appel correspondant à IAudioRenderClient ::GetBuffer.
AUDCLNT_E_DEVICE_INVALIDATED
Le périphérique de point de terminaison audio a été débranché, ou le matériel audio ou les ressources matérielles associées ont été reconfigurés, désactivés, supprimés ou autrement rendus indisponibles.
AUDCLNT_E_SERVICE_NOT_RUNNING
Le service audio Windows n’est pas en cours d’exécution.
E_INVALIDARG
Le paramètre dwFlags n’est pas une valeur valide.

Remarques

Le client doit libérer le même nombre de trames que celui demandé dans l’appel précédent à la méthode IAudioRenderClient ::GetBuffer . La seule exception à cette règle est que le client peut toujours appeler ReleaseBuffer pour libérer 0 images (sauf si le flux est en mode exclusif et utilise la mise en mémoire tampon basée sur les événements).

Ce comportement fournit un moyen pratique pour le client de « libérer » un paquet de longueur 0 précédemment demandé. Dans ce cas, l’appel à ReleaseBuffer est facultatif. Après avoir appelé GetBuffer pour obtenir un paquet de longueur 0, le client a la possibilité de ne pas appeler ReleaseBuffer avant d’appeler à nouveau GetBuffer .

En outre, si l’appel GetBuffer précédent a obtenu un paquet de taille différente de zéro, l’appel de ReleaseBuffer avec NumFramesRequested défini sur 0 réussit (sauf si le flux est en mode exclusif et utilise la mise en mémoire tampon pilotée par les événements). La signification de l’appel est que le client n’a écrit aucune donnée dans le paquet avant de le libérer. Ainsi, la méthode traite la partie de la mémoire tampon représentée par le paquet comme inutilisée et rend cette partie de la mémoire tampon à nouveau disponible pour le client dans le prochain appel GetBuffer .

Les clients doivent éviter les retards excessifs entre l’appel GetBuffer qui acquiert une mémoire tampon et l’appel ReleaseBuffer qui libère la mémoire tampon. L’implémentation du moteur audio suppose que l’appel GetBuffer et l’appel ReleaseBuffer correspondant se produisent dans la même période de traitement de la mémoire tampon. Les clients qui retardent la publication d’une mémoire tampon pendant plus d’une période risquent de perdre des exemples de données.

Pour obtenir des exemples de code qui appellent la méthode ReleaseBuffer , consultez les rubriques suivantes :

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau | applications UWP]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête audioclient.h

Voir aussi

IAudioClient ::Initialize

IAudioRenderClient, interface

IAudioRenderClient ::GetBuffer