Partager via


Développement d’un pilote WaveRT Miniport

Cette rubrique présente les points liés au logiciel et au matériel que vous devez prendre en compte lorsque vous décidez de développer votre propre pilote de miniport WaveRT.

Microsoft a développé un ensemble d’instructions de conception matérielle pour une architecture audio universelle (UAA) et les instructions incorporent les fonctionnalités que nous recommandons pour un appareil audio WaveRT. Les directives UAA sont étroitement basées sur la spécification audio haute définition (HD) développée par Intel.

Windows Vista et les systèmes d’exploitation Windows ultérieurs fournissent un pilote audio HD pour les périphériques audio conformes à l’UAA. Par conséquent, si votre périphérique audio est conforme à l’UAA, vous n’avez pas besoin de développer votre propre pilote de miniport WaveRT. Toutefois, pour les périphériques audio qui ont des fonctionnalités matérielles propriétaires non-UAA, vous devez développer votre propre pilote de miniport WaveRT pour prendre en charge les fonctionnalités propriétaires.

Pour vous aider à développer votre propre pilote de miniport WaveRT, nous vous recommandons d’examiner d’abord l’exemple de pilote d’adaptateur, puis de passer en revue les fonctionnalités UAA de WaveRT.

Exemple de pilote d’adaptateur

Pour plus d’informations sur l’exemple de pilote, consultez Exemples de pilotes audio.

Fonctionnalités compatibles avec WaveRT

Après avoir examiné l’exemple de pilote d’adaptateur et commencé à concevoir votre pilote miniport WaveRT, vous devez vérifier qu’il prend en charge les fonctionnalités logicielles et matérielles suivantes. Par conséquent, le pilote miniport que vous générez devient alors compatible avec le pilote de port WaveRT fourni par le système et avec le mode de fonctionnement du moteur audio Windows Vista.

  • Faible latence matérielle. Un pilote de miniport WaveRT doit fournir une implémentation entièrement fonctionnelle de la méthode IMiniportWaveRTStream ::GetHWLatency . Cette méthode est nécessaire pour prendre en charge la propriété KSPROPERTY_RTAUDIO_HWLATENCY .

  • Interruptions FIFO. Un pilote de miniport WaveRT doit générer automatiquement des interruptions en cas de dépassements et de sous-exécutions FIFO. Cette fonctionnalité permet de détecter les problèmes dans le flux audio lorsque vous exécutez des tests sur le périphérique audio et le logiciel pilote. Sans prise en charge matérielle (en d’autres termes, interruptions FIFO), il n’existe aucune méthode pratique et fiable pour obtenir des informations sur les problèmes.

  • Scatter-Gather DMA et le bouclage de la mémoire tampon. Lorsque votre pilote miniport prend en charge un contrôleur DMA qui dispose de fonctionnalités de collecte de points, il permet de déplacer les données dans et hors de la mémoire tampon cyclique sans avoir à intervenir de la part de votre pilote de miniport.

    Lorsque votre pilote miniport prend en charge un contrôleur DMA qui peut effectuer des boucles de mémoire tampon, le contrôleur DMA peut automatiquement encapsuler jusqu’au début de la mémoire tampon une fois qu’elle a atteint la fin de la mémoire tampon avec une opération de lecture ou d’écriture. Il peut effectuer le wrap around sans intervention de votre pilote miniport.

    Notez que le pilote de port WaveRT prend en charge les conceptions matérielles existantes qui n’ont pas la possibilité d’effectuer des transferts de collecte de points ou des boucles de mémoire tampon automatiques.

    Si un périphérique audio ne dispose pas de capacité de collecte de points, le pilote de miniport WaveRT doit d’abord allouer des mémoires tampons cycliques qui se composent de pages physiquement contiguës en mémoire. Le pilote miniport utilise ensuite des fonctions d’assistance dans le pilote de port WaveRT pour effectuer les transferts de données et le bouclage automatique de la mémoire tampon. L’inconvénient est qu’à mesure que le pool de mémoire non paginé d’un système devient de plus en plus fragmenté, une demande d’allocation d’un grand bloc de mémoire physique contiguë est plus susceptible d’échouer. Un appareil doté d’une fonctionnalité de collecte de points n’est pas affecté par la fragmentation de la mémoire.

    Si un périphérique audio ne peut pas effectuer automatiquement des boucles de mémoire tampon lorsque le canal DMA atteint la fin de la mémoire tampon cyclique, le pilote miniport WaveRT doit intervenir et configurer le canal pour commencer le transfert de données au début de la mémoire tampon.

  • Registres de position. Pour les nouvelles conceptions, les implémenteurs matériels doivent inclure un registre de position pour chaque canal DMA. Un registre de position indique la position actuelle de la mémoire tampon en tant que décalage d’octets par rapport au début de la mémoire tampon cyclique. La lecture du registre de position est égale à zéro au début de la mémoire tampon. Lorsque le registre de position atteint la fin de la mémoire tampon cyclique, il encapsule automatiquement jusqu’au début de la mémoire tampon (réinitialise à zéro) et continue à s’incrémenter à mesure que la position de la mémoire tampon avance.

    Les registres de position peuvent être mappés à la mémoire virtuelle afin que les clients puissent lire les registres directement.

    Dans l’idéal, les registres de position doivent indiquer la position de la mémoire tampon des échantillons qui se déplacent actuellement dans les convertisseurs numérique-analogique et analogique-numérique (DAC et ADC) de l’appareil audio.

    Toutefois, ces informations peuvent ne pas être directement disponibles à partir d’un circuit de puces audio qui divise les fonctions numériques et analogiques en puces distinctes de contrôleur de bus et d’encodeur/décodeur (codec). En règle générale, les registres de position se trouvent dans la puce du contrôleur de bus, et chaque registre indique la position des données audio que le contrôleur écrit ou lit à partir des codecs.

    Après avoir obtenu une lecture à partir de ce type de registre de positions, le client peut estimer la position actuelle des échantillons qui se déplacent dans les DAC ou les ADC en ajoutant ou en soustrayant le délai via le codec. Le client obtient le délai de codec à partir de la demande de propriété KSPROPERTY_RTAUDIO_HWLATENCY . Pour cette raison, un pilote miniport WaveRT doit signaler avec précision le délai de codec lorsque le pilote de port appelle la méthode IMiniportWaveRTStream ::GetHardwareLatency en réponse à ce type de demande de propriété.

    Notez que le pilote de port WaveRT prend en charge les conceptions matérielles existantes qui ne disposent pas de registres de position. Pour un appareil avec cette limitation, le pilote miniport WaveRT doit échouer à appeler la méthode IMiniportWaveRTStream ::GetPositionRegister en retournant le code d’erreur STATUS_NOT_SUPPORTED , ce qui force le pilote de port à échouer KSPROPERTY_RTAUDIO_POSITIONREGISTER demandes de propriété. Dans ce cas, les clients doivent obtenir la position actuelle via la propriété KSPROPERTY_AUDIO_POSITION , ce qui entraîne la surcharge d’une transition entre le mode utilisateur et le mode noyau pour chaque lecture de position.

  • Registre de l’horloge. Un registre d’horloge est une fonctionnalité matérielle facultative mais utile pour un périphérique audio compatible WaveRT. Les programmes d’applications audio peuvent utiliser des registres d’horloge pour synchroniser les flux audio dans au moins deux périphériques audio indépendants qui ont des horloges matérielles distinctes et non synchronisées. Sans registres d’horloge, une application ne peut pas détecter et compenser la dérive entre les horloges matérielles.

    L’exemple d’horloge utilisé par le matériel audio pour l’horloge des données audio via les convertisseurs numérique-analogique ou analogique-numérique doit être dérivé de l’horloge interne qui incrémente le registre d’horloge. Un registre d’horloge qui s’incrémente à une vitesse asynchrone par rapport à l’exemple d’horloge n’est pas d’une utilité pour la synchronisation et ne doit pas être exposé.

    À l’instar des registres de position, le registre de l’horloge peut être mappé à la mémoire virtuelle afin que les clients puissent lire le registre directement.

  • Objets de traitement audio. Un pilote de miniport WaveRT bien conçu ne doit jamais toucher les données audio dans la mémoire tampon cyclique d’un périphérique audio. Le matériel doit être conçu de sorte que les données audio circulent directement entre le client et le matériel audio sans intervention du logiciel pilote audio.

Les API peuvent être utilisées uniquement avec des flux audio en mode partagé. Pour les flux en mode exclusif, les applications échangent des données directement avec les périphériques matériels WaveRT via des mémoires tampons cycliques, et aucun autre composant ne peut toucher les données dans les mémoires tampons.

Pour plus d’informations, consultez Objets de traitement audio Windows.