Méthode IAudioClient ::GetCurrentPadding (audioclient.h)

La méthode GetCurrentPadding récupère le nombre d’images de remplissage dans la mémoire tampon du point de terminaison.

Syntaxe

HRESULT GetCurrentPadding(
  [out] UINT32 *pNumPaddingFrames
);

Paramètres

[out] pNumPaddingFrames

Pointeur vers une variable UINT32 dans laquelle la méthode écrit le nombre d’images (le nombre d’images audio de remplissage dans la mémoire tampon).

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_NOT_INITIALIZED
Le flux audio n’a pas été correctement initialisé.
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_POINTER
Le paramètre pNumPaddingFrames a la valeur NULL.

Remarques

Cette méthode nécessite une initialisation préalable de l’interface IAudioClient . Tous les appels à cette méthode échouent avec l’erreur AUDCLNT_E_NOT_INITIALIZED jusqu’à ce que le client initialise le flux audio en appelant correctement la méthode IAudioClient ::Initialize .

Cette méthode récupère une valeur de remplissage qui indique la quantité de données valides et non lues que la mémoire tampon du point de terminaison contient actuellement. Une application de rendu peut utiliser la valeur de remplissage pour déterminer la quantité de nouvelles données qu’elle peut écrire en toute sécurité dans la mémoire tampon du point de terminaison sans remplacer les données précédemment écrites que le moteur audio n’a pas encore lues à partir de la mémoire tampon. Une application de capture peut utiliser la valeur de remplissage pour déterminer la quantité de nouvelles données qu’elle peut lire en toute sécurité à partir de la mémoire tampon du point de terminaison sans lire les données non valides d’une région de la mémoire tampon dans laquelle le moteur audio n’a pas encore écrit de données valides.

La valeur de remplissage est exprimée sous la forme d’un nombre de trames audio. La taille d’une trame audio est spécifiée par le membre nBlockAlign de la structure WAVEFORMATEX (ou WAVEFORMATEXTENSIBLE) que le client a passée à la méthode IAudioClient ::Initialize . La taille en octets d’une trame audio est égale au nombre de canaux dans le flux multiplié par la taille de l’échantillon par canal. Par exemple, la taille d’image est de quatre octets pour un flux stéréo (2 canaux) avec des exemples 16 bits.

Pour un flux de rendu en mode partagé, la valeur de remplissage signalée par GetCurrentPadding spécifie le nombre d’images audio mises en file d’attente pour être lues dans la mémoire tampon du point de terminaison. Avant d’écrire dans la mémoire tampon du point de terminaison, le client peut calculer la quantité d’espace disponible dans la mémoire tampon en soustrayant la valeur de remplissage de la longueur de la mémoire tampon. Pour s’assurer qu’un appel ultérieur à la méthode IAudioRenderClient ::GetBuffer réussit, le client doit demander une longueur de paquet qui ne dépasse pas l’espace disponible dans la mémoire tampon. Pour obtenir la longueur de la mémoire tampon, appelez la méthode IAudioClient ::GetBufferSize .

Pour un flux de capture en mode partagé, la valeur de remplissage signalée par GetCurrentPadding spécifie le nombre de trames de données de capture disponibles dans le paquet suivant dans la mémoire tampon du point de terminaison. À un moment donné, zéro, un ou plusieurs paquets de données de capture peuvent être prêts à être lus par le client à partir de la mémoire tampon. Si aucun paquet n’est actuellement disponible, la méthode signale une valeur de remplissage de 0. Après l’appel GetCurrentPadding , un appel de méthode IAudioCaptureClient ::GetBuffer récupère un paquet dont la longueur est exactement égale à la valeur de remplissage signalée par GetCurrentPadding. Chaque appel à GetBuffer récupère un paquet entier. Un paquet contient toujours un nombre intégral d’images audio.

Pour un flux de capture en mode partagé, appeler GetCurrentPadding revient à appeler la méthode IAudioCaptureClient ::GetNextPacketSize . Autrement dit, la valeur de remplissage signalée par GetCurrentPadding est égale à la longueur de paquet signalée par GetNextPacketSize.

Pour un flux de rendu ou de capture en mode exclusif initialisé avec l’indicateur AUDCLNT_STREAMFLAGS_EVENTCALLBACK, le client n’a généralement aucune utilisation pour la valeur de remplissage signalée par GetCurrentPadding. Au lieu de cela, le client accède à une mémoire tampon entière pendant chaque passe de traitement. Chaque fois qu’une mémoire tampon est disponible pour traitement, le moteur audio avertit le client en signalant le handle d’événement du client. Pour plus d’informations sur cet indicateur, consultez IAudioClient ::Initialize.

Pour un flux de rendu ou de capture en mode exclusif qui n’a pas été initialisé avec l’indicateur AUDCLNT_STREAMFLAGS_EVENTCALLBACK, le client peut utiliser la valeur de remplissage obtenue à partir de GetCurrentPadding d’une manière similaire à celle décrite précédemment pour un flux en mode partagé. Les détails sont les suivants.

Tout d’abord, pour un flux de rendu en mode exclusif, la valeur de remplissage spécifie le nombre d’images audio mises en file d’attente pour être lues dans la mémoire tampon du point de terminaison. Comme précédemment, le client peut calculer la quantité d’espace disponible dans la mémoire tampon en soustrayant la valeur de remplissage de la longueur de la mémoire tampon.

Deuxièmement, pour un flux de capture en mode exclusif, la valeur de remplissage signalée par GetCurrentPadding spécifie la longueur actuelle du paquet suivant. Toutefois, cette valeur de remplissage est une instantané de la longueur du paquet, qui peut augmenter avant que le client appelle la méthode IAudioCaptureClient ::GetBuffer. Par conséquent, la longueur du paquet récupéré par GetBuffer est au moins égale à la valeur de remplissage signalée par l’appel GetCurrentPadding qui a précédé l’appel GetBuffer . En revanche, pour un flux de capture en mode partagé, la longueur du paquet obtenu à partir de GetBuffer est toujours égale à la valeur de remplissage signalée par l’appel GetCurrentPadding précédent.

Pour obtenir un exemple de code qui appelle la méthode GetCurrentPadding, consultez Rendu d’un Stream.

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

IAudioCaptureClient ::GetBuffer

IAudioCaptureClient ::GetNextPacketSize

IAudioClient, interface

IAudioClient ::Initialize

IAudioRenderClient ::GetBuffer