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 |