Méthode IMiniportWaveRTStream ::AllocateAudioBuffer (portcls.h)

La méthode AllocateAudioBuffer alloue une mémoire tampon cyclique pour les données audio.

Syntaxe

NTSTATUS AllocateAudioBuffer(
  ULONG               RequestedSize,
  PMDL                *AudioBufferMdl,
  ULONG               *ActualSize,
  ULONG               *OffsetFromFirstPage,
  MEMORY_CACHING_TYPE *CacheType
);

Paramètres

RequestedSize

Spécifie la taille demandée, en octets, de la mémoire tampon audio.

AudioBufferMdl

Pointeur de sortie pour une liste de descripteurs mémoire (MDL) qui décrit la mémoire tampon audio. Ce paramètre pointe vers une variable de pointeur allouée par l’appelant dans laquelle la méthode écrit un pointeur vers le MDL. Pour plus d’informations générales sur les DLL du noyau Windows, consultez Utilisation de MDL.

ActualSize

Pointeur de sortie pour la taille réelle, en octets, de la mémoire tampon allouée. Ce paramètre pointe vers une variable ULONG dans laquelle la méthode écrit la valeur de taille.

OffsetFromFirstPage

Pointeur de sortie pour le décalage de la mémoire tampon, en octets, à partir du début de la première page du MDL. Ce paramètre pointe vers une variable ULONG allouée par l’appelant dans laquelle la méthode écrit la valeur de décalage.

CacheType

Spécifie le type de mise en cache que le client demande pour la mémoire tampon audio. Ce paramètre est une valeur d’énumération MEMORY_CACHING_TYPE. Pour plus d’informations, consultez la section Remarques ci-dessous.

Valeur retournée

Cette méthode retourne NTSTATUS. AllocateAudioBuffer retourne STATUS_SUCCESS si l’appel a réussi. Sinon, la méthode retourne une erreur appropriée status code. Le tableau suivant présente quelques-uns des codes d’erreur possibles status.

Code de retour Description
STATUS_UNSUCCESSFUL Le pilote ne prend pas en charge la combinaison spécifiée d’attributs de mémoire tampon.
STATUS_INSUFFICIENT_RESOURCES La mémoire disponible est insuffisante pour allouer la mémoire tampon.
STATUS_DEVICE_NOT_READY Le périphérique n’est pas prêt.

Remarques

Remarque : Les miniports pour les codecs audio haute définition Intel doivent spécifier un CacheType de MmWriteCombined pour garantir la cohérence du cache. Cela est dû au fait que le contrôleur audio haute définition Intel peut être configuré pour une opération non snoop.

Après avoir reçu une demande de KSPROPERTY_RTAUDIO_BUFFER du client, le pilote de port appelle la méthode AllocateAudioBuffer pour allouer une mémoire tampon cyclique que le pilote de port peut mapper ultérieurement à l’espace d’adressage virtuel du client.

Pendant l’appel à AllocateAudioBuffer, le pilote miniport alloue la mémoire tampon cyclique en appelant IPortWaveRTStream ::AllocatePagesForMdl ou IPortWaveRTStream ::AllocateContiguousPagesForMdl. Le pilote miniport programme également le matériel audio à lire à partir de ou à enregistrer dans cette mémoire tampon, mais il ne démarre pas les transferts DMA tant que le pilote de port n’appelle pas IMiniportWaveRTStream ::SetState avec State=KSSTATE_RUN. Les paramètres de sortie de la méthode AllocateAudioBuffer incluent le MDL pour la mémoire tampon audio, la taille réelle de la mémoire tampon allouée par le pilote et le décalage du début de la mémoire tampon à partir du début de la première page de la MDL.

RequestedSize est un paramètre d’entrée qui indique la taille demandée par le client pour la mémoire tampon audio. ActualSize est un paramètre de sortie qui indique la taille réelle de la mémoire tampon audio.

Le périphérique audio peut nécessiter que la mémoire tampon audio commence et se termine sur des exemples de limites ou pour répondre à d’autres types de contraintes d’alignement dépendantes du matériel. Si la mémoire disponible est suffisante, la taille réelle de la mémoire tampon est la taille demandée arrondie (haut ou bas) à l’exemple le plus proche ou à une autre limite matérielle contrainte. La taille réelle doit être au moins la taille demandée ; sinon, le moteur audio WASAPI (Audio Session API) n’utilise pas la mémoire tampon et la création de flux échoue.

Configuration requise

Condition requise Valeur
En-tête portcls.h
IRQL PASSIVE_LEVEL

Voir aussi

IMiniPortWaveRTStream