Partager via


Latence wavecyclique

Si votre pilote de miniport WaveCyclic fournit un mixage matériel d’un flux de lecture audio, DirectSound envoie un IRP au pilote de port WaveCyclic qui contient l’ensemble du flux d’ondes DirectSound dans une mémoire tampon cyclique unique. Le pilote de port WaveCyclic reçoit l’IRP et alimente les données d’onde pièce par pièce dans la mémoire tampon DMA exposée par votre pilote. WaveCyclic tente de conserver le pointeur d’écriture de la mémoire tampon DMA environ 40 millisecondes avant le pointeur de lecture. Même lorsque votre pilote effectue le mélange de matériel avec DirectSound, il peut s’attendre à environ 40 millisecondes de données supplémentaires dans la mémoire tampon DMA.

Le fait que le pilote de port WaveCyclic tente d’accumuler jusqu’à 40 millisecondes de données dans la mémoire tampon cyclique ne signifie pas que le pilote de port WaveCyclic ajoute 40 millisecondes à la latence du flux. En fait, le pilote de port ajoute très peu de latence. Juste avant le début de la lecture d’un nouveau flux, alors que le pilote de port écrit encore les données initiales dans le début de la mémoire tampon cyclique, le pilote de port continue d’écrire jusqu’à ce qu’aucune autre donnée ne soit disponible ou que la mémoire tampon contienne un total de 40 millisecondes de données. Toutefois, si moins de cette quantité de données est immédiatement disponible, le pilote de port ne forcera pas le pilote miniport à attendre. Au lieu de cela, il permet au pilote miniport de commencer immédiatement à lire les données déjà mises en mémoire tampon. Plus tard, à mesure que davantage de données deviennent disponibles, le pilote de port continue d’écrire les données dans la mémoire tampon jusqu’à ce qu’aucune autre donnée ne soit disponible ou que la quantité de données mises en mémoire tampon entre les pointeurs de lecture et d’écriture atteigne 40 millisecondes.

Après une période de quasi-famine, un flux KMixer peut contenir des intervalles de silence. Si WaveCyclic n’a reçu que suffisamment de données d’onde de KMixer pour conserver trente millisecondes de données supplémentaires dans la mémoire tampon DMA, WaveCyclic commence à écrire le silence dans la mémoire tampon DMA après la fin des données valides de KMixer. Cette stratégie garantit que si une famine se produit et que l’appareil lit au-delà de la fin des données valides, l’appareil audio affiche le silence au lieu des données obsolètes ou non initialisées.

La quantité de silence écrite dans la mémoire tampon DMA est relativement faible, et si KMixer réussit à fournir au pilote de port WaveCyclic des données supplémentaires avant que le silence n’ait été lu, ces données remplacent le silence dans la mémoire tampon. En l’absence de famine, l’appareil audio reçoit un flux continu de données mixtes sans intervalles de silence forcé. Toutefois, lorsque vous déboguez votre pilote, la méthode IMiniportWaveCyclicStream::Silence de votre pilote miniport peut être appelée même si votre convertisseur audio ne manque pas.