Descripción del controlador de puerto waveRT

El controlador de puerto WaveRT combina la simplicidad del controlador de puerto WaveCíclico anterior con el rendimiento acelerado por hardware del controlador de puerto WavePci.

El controlador de puerto waveRT elimina la necesidad de asignar y copiar continuamente los datos de audio proporcionando su cliente principal (normalmente, el motor de audio) con acceso directo al búfer de datos. Este acceso directo también elimina la necesidad de que el controlador manipule los datos de la secuencia de audio. El controlador de puerto WaveRT ajusta así las necesidades de los controladores de acceso directo a memoria (DMA) que tienen algunos dispositivos de audio.

Para distinguirse de otros dispositivos de representación de ondas y captura de ondas, el controlador de puerto waveRT se registra en KSCATEGORY_REALTIME además de KSCATEGORY_AUDIO, KSCATEGORY_RENDER y KSCATEGORY_CAPTURE. Este autoregistro se produce durante la instalación del controlador del adaptador.

En Windows Vista y sistemas operativos posteriores, cuando se inicia el sistema operativo y se inicializa el motor de audio, el motor de audio enumera los filtros KS que representan los dispositivos de audio. Durante la enumeración, el motor de audio crea una instancia de los controladores de los dispositivos de audio que encuentra. Este proceso da como resultado la creación de objetos de filtro para estos dispositivos. En el caso de los dispositivos de audio WaveRT, el objeto de filtro resultante tiene los siguientes componentes:

  • Una instancia del controlador de puerto waveRT para administrar las funciones genéricas del sistema para el filtro.

  • Una instancia del controlador de miniporte waveRT para controlar todas las funciones específicas del hardware del filtro.

Una vez creado el objeto filter, el motor de audio y el controlador de miniporte waveRT están listos para abrir una secuencia de audio para el tipo de procesamiento de audio necesario. Para preparar el filtro KS para la representación de audio (reproducción), por ejemplo, el motor de audio y el controlador de miniporte waveRT hacen lo siguiente para abrir una secuencia de reproducción:

  1. El motor de audio abre un pin en el filtro KS y el controlador de miniporte waveRT crea una instancia del pin. Cuando el motor de audio abre la patilla, también pasa el formato de onda de la secuencia al controlador. El controlador usa la información de formato de onda para seleccionar el tamaño de búfer adecuado en el paso siguiente.

  2. El motor de audio envía una solicitud al controlador de minipuerto para crear un búfer cíclico de un tamaño determinado. El término búfer cíclico hace referencia al hecho de que cuando el registro de posición del búfer alcanza el final del búfer en una operación de reproducción o registro, el registro de posición se puede ajustar automáticamente al principio del búfer. A diferencia del controlador de miniporte WaveCíclico que configura un bloque contiguo de memoria física, el controlador de miniporte waveRT no necesita un búfer contiguo en la memoria física. El controlador usa la propiedad KSPROPERTY_RTAUDIO_BUFFER para asignar espacio para el búfer. Si el hardware del dispositivo de audio no puede transmitir desde un búfer del tamaño solicitado, el controlador funciona dentro de las limitaciones de recursos del dispositivo de audio para crear un búfer que sea el tamaño más cercano al tamaño solicitado originalmente. A continuación, el controlador asigna el búfer al motor DMA del dispositivo de audio y hace que el búfer sea accesible para el motor de audio en modo de usuario.

  3. El motor de audio programa un subproceso para escribir periódicamente datos de audio en el búfer cíclico.

  4. Si el hardware del dispositivo de audio no proporciona compatibilidad directa con búferes cíclicos, el controlador de miniporte programa periódicamente el dispositivo de audio para seguir usando el mismo búfer. Por ejemplo, si el hardware no admite el bucle de búfer, el controlador debe volver a establecer la dirección DMA en el inicio del búfer cada vez que llegue al final del búfer. Esta actualización se puede realizar en una rutina de servicio de interrupción (ISR) o en un subproceso de alta prioridad.

La configuración resultante proporciona una señal de audio resistente a problemas en el hardware del dispositivo de audio que admite búferes cíclicos o funciona con el controlador de miniporte para actualizar periódicamente su hardware.

Para preparar un filtro KS para la captura de audio (grabación), el motor de audio y el controlador de miniporte WaveRT usan pasos similares para abrir una secuencia de registros.

Una de las mejoras de rendimiento proporcionadas por el controlador de puerto WaveRT es una reducción del retraso en el procesamiento de un extremo a otro de la secuencia de audio durante la representación de onda o la captura de onda. Este retraso se conoce como latencia de flujo.

Para obtener más información sobre estos dos tipos de latencia de flujo, consulte los temas siguientes.

Para obtener información sobre cómo desarrollar un controlador de miniporte waveRT que complemente el controlador de puerto waveRT, consulte el tema Developing a WaveRT Miniport Driver .