Compartir a través de


Latencia wavecíclica

Si el controlador de miniporte WaveCíclico proporciona combinación de hardware de una secuencia de reproducción de audio, DirectSound envía un IRP al controlador de puerto WaveCíclico que contiene toda la secuencia de onda de DirectSound en un único búfer cíclico. El controlador de puerto WaveCíclico recibe el IRP y alimenta los datos de onda por pieza en el búfer DMA que expone el controlador. WaveCíclico intenta mantener el puntero de escritura del búfer DMA unos 40 milisegundos por delante del puntero de lectura. Incluso cuando el controlador realiza la combinación de hardware con DirectSound, puede esperar aproximadamente 40 milisegundos de datos adicionales en el búfer DMA.

El hecho de que el controlador de puerto WaveCíclico intente acumular hasta 40 milisegundos de datos en el búfer cíclico no significa que el controlador de puerto WaveCíclico agregue 40 milisegundos a la latencia de la secuencia. De hecho, el controlador de puerto agrega muy poca latencia. Justo antes de que comience a reproducirse una nueva secuencia, mientras que el controlador de puerto sigue escribiendo los datos iniciales al principio del búfer cíclico, el controlador de puerto continúa escribiendo hasta que no haya más datos disponibles o el búfer contiene 40 milisegundos completos de datos. Sin embargo, si hay menos de esta cantidad de datos disponible inmediatamente, el controlador de puerto no forzará que el controlador de miniporte espere. En su lugar, permite que el controlador de miniporte empiece a reproducir los datos ya almacenados en búfer inmediatamente. Más adelante, a medida que haya más datos disponibles, el controlador de puerto continúa escribiendo los datos en el búfer hasta que no haya más datos disponibles o la cantidad de datos almacenados en búfer entre los punteros de lectura y escritura alcanza los 40 milisegundos.

Después de un período de casi hambre, una secuencia de KMixer puede contener intervalos de silencio. Si WaveCíclico ha recibido solo suficientes datos de onda de KMixer para mantener treinta en lugar de cuarenta milisegundos de datos adicionales en el búfer DMA, WaveCíclico comienza a escribir silencio en el búfer DMA después del final de los datos válidos de KMixer. Esta directiva garantiza que si se produce un colapso y el dispositivo lee más allá del final de los datos válidos, el dispositivo de audio representa el silencio en lugar de datos obsoletos o no inicializados.

La cantidad de silencio escrito en el búfer DMA se mantiene bastante pequeña y, si KMixer tiene éxito en proporcionar el controlador de puerto WaveCíclico con datos adicionales antes de que se haya reproducido el silencio, esos datos sobrescriben el silencio en el búfer. En ausencia de hambre, el dispositivo de audio recibe una secuencia continua de datos mixtos sin intervalos de silencio forzado. Sin embargo, al depurar el controlador, es posible que vea que se llama al método IMiniportWaveStream::Silence del controlador de minipuerto, aunque el representador de audio no esté muerto.