Compartir a través de


Implementación del controlador de audio descargado de hardware

Al implementar un controlador para el audio descargado, desarrolla un controlador que puede procesar secuencias de audio descargadas y exponer esa capacidad al sistema de audio de Windows.

En este tema se presentan los detalles de implementación de un controlador de audio desarrollado para un adaptador de audio capaz de procesar secuencias de audio descargadas por hardware.

En estos temas adicionales de esta sección se describen los problemas que debe tener en cuenta al desarrollar un controlador de audio para un adaptador de audio que implementa un motor de audio de hardware para controlar las secuencias de audio descargadas.

Interfaces auxiliares de Portcls para el procesamiento de audio descargado

Informes de problemas para audio descargado

Descarga de hardware: topología de filtro KS

Windows admite el uso de un adaptador de audio que puede usar un motor de audio de hardware incorporado para procesar secuencias de audio. Al desarrollar este tipo de adaptador de audio, el controlador de audio asociado debe exponer este hecho al sistema de audio en modo de usuario de una manera específica, para que el sistema de audio pueda detectar, usar y exponer correctamente las características de este adaptador y su controlador.

Diagrama que muestra un sistema equipado con DSP que implementa efectos en hardware.

GUID de KSNODETYPE_AUDIO_ENGINE para descriptores de nodo

Si un adaptador de audio es capaz de procesar secuencias de audio descargadas, el controlador de audio del adaptador expone esta funcionalidad mediante un nodo en el filtro KS para el adaptador.

Si un adaptador de audio es capaz de procesar secuencias de audio descargadas, el controlador de audio del adaptador expone esta funcionalidad mediante un nodo específico en el filtro KS para el adaptador.

Cada nodo de la ruta de acceso de la secuencia de audio tiene un descriptor de nodo, para la carga de hardware, el controlador debe establecer el GUID de tipoen KSNODETYPE_AUDIO_ENGINE.

Este es un ejemplo de cómo el controlador podría configurar el descriptor de nodo para este nodo:

typedef struct _KSNODE_DESCRIPTOR {
  const KSAUTOMATION_TABLE *AutomationTable;    // drv specific
  const GUID               *Type;       // must be set to KSNODETYPE_AUDIO_ENGINE
  const GUID               *Name;       // drv specific (KSNODETYPE_AUDIO_ENGINE?)  
} KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;

Si el GUID de nombre se establece en KSNODETYPE_AUDIO_ENGINE, debe crear una cadena de nombre predeterminada para este nodo. A continuación, agregue esa cadena a ks.inf, para que durante la instalación del controlador, la cadena se pueda usar para rellenar la clave del Registro MediaCategories .

La definición del GUID para el tipo de nodo, KSNODETYPE_AUDIO_ENGINE, es la siguiente:

Code style
#define STATIC_KSNODETYPE_AUDIO_ENGINE\
    0x35caf6e4, 0xf3b3, 0x4168, 0xbb, 0x4b, 0x55, 0xe7, 0x7a, 0x46, 0x1c, 0x7e
DEFINE_GUIDSTRUCT("35CAF6E4-F3B3-4168-BB4B-55E77A461C7E", KSNODETYPE_AUDIO_ENGINE);
#define KSNODETYPE_AUDIO_ENGINE DEFINE_GUIDNAMED(KSNODETYPE_AUDIO_ENGINE)

Para obtener más información, vea el archivo de encabezado ksmedia.h .

Y en función de la información anterior, un descriptor para un nodo de minipuerto podría tener un aspecto similar al siguiente:

PCNODE_DESCRIPTOR MiniportNodes[] =
{
    // KSNODE_WAVE_AUDIO_ENGINE
    {
        0,                          // Flags
        NULL,                       // AutomationTable
        &KSNODETYPE_AUDIO_ENGINE,   // Type  KSNODETYPE_AUDIO_ENGINE
        NULL                        // Name
    }
};

La propiedad KSPROPSETID_AudioEngine KS establecida para motores de audio

El conjunto de propiedades KSPROPSETID_AudioEngine se usa para admitir motores de audio de hardware y procesamiento de audio descargado por hardware. Por lo tanto, el controlador de un adaptador que puede procesar secuencias de audio descargadas debe admitir las propiedades de este nuevo conjunto de propiedades.

El conjunto de propiedades, KSPROPSETID_AudioEngine, se define de la siguiente manera:

#define STATIC_KSPROPSETID_AudioEngine\
    0x3A2F82DCL, 0x886F, 0x4BAA, 0x9E, 0xB4, 0x8, 0x2B, 0x90, 0x25, 0xC5, 0x36
DEFINE_GUIDSTRUCT("3A2F82DC-886F-4BAA-9EB4-082B9025C536", KSPROPSETID_AudioEngine);
#define KSPROPSETID_AudioEngine DEFINE_GUIDNAMED(KSPROPSETID_AudioEngine)

Los nombres de las propiedades de este conjunto de propiedades se definen en la enumeración KSPROPERTY_AUDIOENGINE y el controlador debe admitir estos nombres.

Estas son las propiedades del conjunto de propiedades KSPROPSETID_AudioEngine :

KSPROPERTY_AUDIOENGINE_BUFFER_SIZE_RANGE

KSPROPERTY_AUDIOENGINE_DESCRIPTOR

KSPROPERTY_AUDIOENGINE_DEVICEFORMAT

KSPROPERTY_AUDIOENGINE_GFXENABLE

KSPROPERTY_AUDIOENGINE_LFXENABLE

KSPROPERTY_AUDIOENGINE_LOOPBACK_PROTECTION

KSPROPERTY_AUDIOENGINE_MIXFORMAT

KSPROPERTY_AUDIOENGINE_SUPPORTEDDEVICEFORMATS

KSPROPERTY_AUDIOENGINE_VOLUMELEVEL

Propiedades necesarias en el conjunto de propiedades KSPROPSETID_ Audio

Además de admitir las propiedades del conjunto de propiedades KSPROPSETID_AudioEngine , el controlador también debe admitir las siguientes propiedades existentes en el conjunto de propiedades KSPROPSETID_Audio :

KSPROPERTY_AUDIO_MUTE

KSPROPERTY_AUDIO_PEAKMETER2

KSPROPERTY_AUDIO_VOLUMELEVEL

Y para completar la implementación de la compatibilidad del controlador con el procesamiento de audio descargado por hardware, las propiedades están disponibles para el conjunto de propiedades KSPROPSETID_ Audio .

KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION

KSPROPERTY_AUDIO_PRESENTATION_POSITION

KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION

Informes de problemas y actualizaciones de controladores de clase de puerto

Además de la compatibilidad descrita en las secciones anteriores para el procesamiento de audio descargado por hardware, el controlador de clase de puerto de Windows proporciona "interfaces auxiliares" para facilitar el desarrollo de un controlador que pueda trabajar con secuencias de audio descargadas. Y cuando este controlador detecta problemas, existe un mecanismo para permitir que el controlador notifique los errores de problemas. En los temas siguientes se proporcionan más detalles sobre las interfaces auxiliares y los informes de problemas:

Interfaces auxiliares de Portcls para el procesamiento de audio descargado Además de la compatibilidad descrita en las secciones anteriores para el procesamiento de audio descargado por hardware, el controlador de clase de puerto de Windows también incluye "interfaces auxiliares" para facilitar el desarrollo de un controlador que pueda trabajar con secuencias de audio descargadas. Y cuando este controlador detecta problemas, existe un mecanismo para permitir que el controlador notifique los errores de problemas. En los temas siguientes se proporcionan más detalles sobre las interfaces auxiliares y los informes de problemas:

Implementación del controlador de audio descargado de hardware

Objetos de procesamiento de audio de Windows