Présentation du pilote de port WaveRT
Le pilote de port WaveRT combine la simplicité du pilote de port WaveCyclique précédent avec les performances matérielles accélérées du pilote de port WavePci.
Le pilote de port WaveRT élimine la nécessité de mapper et de copier continuellement des données audio en fournissant à son client main (généralement, le moteur audio) un accès direct à la mémoire tampon de données. Cet accès direct élimine également la nécessité pour le pilote de manipuler les données dans le flux audio. Le pilote de port WaveRT prend donc en charge les besoins des contrôleurs d’accès direct à la mémoire (DMA) dont disposent certains périphériques audio.
Pour se distinguer des autres appareils de rendu d’ondes et de capture d’ondes, le pilote de port WaveRT s’inscrit sous KSCATEGORY_REALTIME en plus des KSCATEGORY_AUDIO, KSCATEGORY_RENDER et KSCATEGORY_CAPTURE. Cette inscription automatique se produit lors de l’installation du pilote de l’adaptateur.
Dans Windows Vista et les systèmes d’exploitation ultérieurs, lorsque le système d’exploitation démarre et que le moteur audio est initialisé, le moteur audio énumère les filtres KS qui représentent les périphériques audio. Pendant l’énumération, le moteur audio instancie les pilotes pour les périphériques audio qu’il trouve. Ce processus entraîne la création d’objets de filtre pour ces appareils. Pour les appareils audio WaveRT, l’objet de filtre résultant comporte les composants suivants :
Une instance du pilote de port WaveRT pour gérer les fonctions système génériques pour le filtre
Une instance du pilote miniport WaveRT pour gérer toutes les fonctions spécifiques au matériel du filtre
Une fois l’objet filtre créé, le moteur audio et le pilote de miniport WaveRT sont prêts à ouvrir un flux audio pour le type de traitement audio nécessaire. Pour préparer le filtre KS pour le rendu audio (lecture), par exemple, le moteur audio et le pilote de miniport WaveRT effectuent les opérations suivantes pour ouvrir un flux de lecture :
Le moteur audio ouvre une broche sur le filtre KS et le pilote miniport WaveRT crée une instance de la broche. Lorsque le moteur audio ouvre la broche, il transmet également le format d’onde du flux au pilote. Le pilote utilise les informations de format d’onde pour sélectionner la taille de mémoire tampon appropriée à l’étape suivante.
Le moteur audio envoie une demande au pilote miniport pour qu’une mémoire tampon cyclique d’une taille particulière soit créée. Le terme tampon cyclique fait référence au fait que lorsque le registre de position de la mémoire tampon atteint la fin de la mémoire tampon dans une opération de lecture ou d’enregistrement, le registre de position peut automatiquement encapsuler jusqu’au début de la mémoire tampon. Contrairement au pilote de miniport WaveCyclique qui configure un bloc contigu de mémoire physique, le pilote de miniport WaveRT n’a pas besoin d’une mémoire tampon contiguë en mémoire physique. Le pilote utilise la propriété KSPROPERTY_RTAUDIO_BUFFER pour allouer de l’espace à la mémoire tampon. Si le matériel du périphérique audio ne peut pas diffuser en continu à partir d’une mémoire tampon de la taille demandée, le pilote fonctionne dans les limites des ressources du périphérique audio pour créer une mémoire tampon de taille la plus proche de la taille demandée initialement. Le pilote mappe ensuite la mémoire tampon dans le moteur DMA du périphérique audio et rend la mémoire tampon accessible au moteur audio en mode utilisateur.
Le moteur audio planifie un thread pour écrire régulièrement des données audio dans la mémoire tampon cyclique.
Si le matériel du périphérique audio ne fournit pas de prise en charge directe des mémoires tampons cycliques, le pilote miniport reprogramme régulièrement le périphérique audio pour continuer à utiliser la même mémoire tampon. Par exemple, si le matériel ne prend pas en charge le bouclage de la mémoire tampon, le pilote doit remettre l’adresse DMA au début de la mémoire tampon chaque fois qu’elle atteint la fin de la mémoire tampon. Cette mise à jour peut être effectuée dans une routine de service d’interruption (ISR) ou dans un thread de priorité élevée.
La configuration résultante fournit un signal audio résistant aux problèmes sur le matériel du périphérique audio qui prend en charge les mémoires tampons cycliques ou fonctionne avec le pilote miniport pour mettre régulièrement à jour son matériel.
Pour préparer un filtre KS pour la capture audio (enregistrement), le moteur audio et le pilote miniport WaveRT utilisent des étapes similaires pour ouvrir un flux d’enregistrements.
L’une des améliorations de performances apportées par le pilote de port WaveRT est une réduction du délai de traitement de bout en bout du flux audio pendant le rendu des ondes ou la capture d’ondes. Ce délai est appelé latence de flux.
Pour plus d’informations sur ces deux types de latence de flux, consultez les rubriques suivantes.
Pour plus d’informations sur le développement d’un pilote miniport WaveRT qui complète le pilote de port WaveRT, consultez la rubrique Développement d’un pilote de miniport WaveRT .