Informazioni sul driver di porta WaveRT
Il driver di porta WaveRT combina la semplicità del driver di porta WaveCyclic precedente con le prestazioni accelerate hardware del driver di porta WavePci.
Il driver di porta WaveRT elimina la necessità di eseguire continuamente il mapping e copiare dati audio fornendo il client principale (in genere, il motore audio) con accesso diretto al buffer dei dati. Questo accesso diretto elimina anche la necessità del driver di modificare i dati nel flusso audio. Il driver di porta WaveRT consente quindi di soddisfare le esigenze dei controller DMA (Direct Memory Access) che alcuni dispositivi audio hanno.
Per distinguersi da altri dispositivi di rendering onda e acquisizione onda, il driver di porta WaveRT si registra in KSCATEGORY_REALTIMEoltre a KSCATEGORY_AUDIO, KSCATEGORY_RENDER e KSCATEGORY_CAPTURE. Questa registrazione automatica si verifica durante l'installazione del driver dell'adattatore.
In Windows Vista e nei sistemi operativi successivi, quando il sistema operativo viene avviato e il motore audio viene inizializzato, il motore audio enumera i filtri KS che rappresentano i dispositivi audio. Durante l'enumerazione, il motore audio crea un'istanza dei driver per i dispositivi audio trovati. Questo processo comporta la creazione di oggetti filtro per questi dispositivi. Per i dispositivi audio WaveRT, l'oggetto filtro risultante include i componenti seguenti:
Istanza del driver di porta WaveRT per gestire le funzioni di sistema generico per il filtro
Istanza del driver miniport WaveRT per gestire tutte le funzioni specifiche hardware del filtro
Dopo aver creato l'oggetto filtro, il motore audio e il driver miniport WaveRT sono pronti per aprire un flusso audio per il tipo di elaborazione audio necessaria. Per preparare il filtro KS per il rendering audio (riproduzione), ad esempio, il motore audio e il driver miniport WaveRT eseguire le operazioni seguenti per aprire un flusso di riproduzione:
Il motore audio apre un pin sul filtro KS e il driver miniport WaveRT crea un'istanza del pin. Quando il motore audio apre il pin, passa anche il formato dell'onda del flusso al driver. Il driver usa le informazioni sul formato onda per selezionare le dimensioni del buffer appropriate nel passaggio successivo.
Il motore audio invia una richiesta al driver miniport per creare un buffer ciclico di una determinata dimensione. Il termine buffer ciclico fa riferimento al fatto che quando il registro della posizione del buffer raggiunge la fine del buffer in un'operazione di riproduzione o record, il registro di posizione può eseguire automaticamente il wrapping intorno all'inizio del buffer. A differenza del driver miniport WaveCyclic che configura un blocco contiguo di memoria fisica, il driver miniport WaveRT non necessita di un buffer contiguo nella memoria fisica. Il driver usa la proprietà KSPROPERTY_RTAUDIO_BUFFER per allocare spazio per il buffer. Se l'hardware del dispositivo audio non può trasmettere da un buffer delle dimensioni richieste, il driver funziona all'interno delle limitazioni delle risorse del dispositivo audio per creare un buffer più vicino alle dimensioni richieste originariamente. Il driver esegue quindi il mapping del buffer nel motore DMA del dispositivo audio e rende il buffer accessibile al motore audio in modalità utente.
Il motore audio pianifica un thread per scrivere periodicamente dati audio nel buffer ciclico.
Se l'hardware del dispositivo audio non fornisce supporto diretto per i buffer ciclici, il driver miniport riprogramma periodicamente il dispositivo audio per mantenere lo stesso buffer. Ad esempio, se l'hardware non supporta il ciclo del buffer, il driver deve impostare nuovamente l'indirizzo DMA all'inizio del buffer ogni volta che raggiunge la fine del buffer. Questo aggiornamento può essere eseguito in una routine del servizio di interruzione (ISR) o in un thread con priorità elevata.
La configurazione risultante fornisce un segnale audio resiliente aglitch sull'hardware del dispositivo audio che supporta buffer ciclici o funziona con il driver miniport per aggiornarne regolarmente l'hardware.
Per preparare un filtro KS per l'acquisizione audio (registrazione), il motore audio e il driver miniport WaveRT usano passaggi simili per aprire un flusso di record.
Uno dei miglioramenti delle prestazioni forniti dal driver di porta WaveRT è una riduzione del ritardo nell'elaborazione end-to-end del flusso audio durante il rendering onda o l'acquisizione di onda. Questo ritardo viene definito latenza di flusso.
Per altre informazioni su questi due tipi di latenza di flusso, vedere gli argomenti seguenti.
Per informazioni su come sviluppare un driver miniport WaveRT che integra il driver di porta WaveRT, vedere l'argomento Sviluppo di un driver miniport WaveRT .