Exposición de efectos de captura de Hardware-Accelerated
En Windows XP y versiones posteriores, el marco de audio WDM admite la aceleración de hardware de efectos de captura de audio que se exponen a través de DirectSound. Estos efectos incluyen la cancelación acústica de eco (AEC) y la supresión de ruido (NS). Para obtener información sobre cómo una aplicación DirectSoundCapture permite el uso de AEC y NS acelerados por hardware, consulte la documentación de Microsoft Windows SDK.
Un controlador de minipuerto puede exponer la aceleración de hardware para cualquier subconjunto de estos efectos, en función de las funcionalidades del dispositivo subyacente. Para exponer las funcionalidades del hardware para los efectos AEC y NS, cada patilla del filtro AEC que implementa el controlador debe cumplir estos requisitos:
El pin debe incluir un nodo individual en su cadena de nodos para representar cada efecto de hardware que se va a incorporar en el gráfico. Los tipos de nodo KS para los efectos AEC y NS se especifican mediante los siguientes GUID: KSNODETYPE_ACOUSTIC_ECHO_CANCELKSNODETYPE_NOISE_SUPPRESS
Los nodos AEC y NS del pin deben admitir el conjunto de propiedades KSPROPSETID_General y deben proporcionar información sobre el fabricante cuando se consulte la propiedad KSPROPERTY_GENERAL_COMPONENTID .
Los nodos AEC y NS del pin deben admitir el conjunto de propiedades KSPROPSETID_TopologyNode y sus dos propiedades:
KSPROPERTY_TOPOLOGYNODE_ENABLE habilita un efecto.
KSPROPERTY_TOPOLOGYNODE_RESET restablece el efecto a su estado predeterminado.
Los nodos AEC y NS del pin deben admitir las siguientes propiedades del conjunto de propiedades de KSPROPSETID_Audio : KSPROPERTY_AUDIO_CPU_RESOURCESKSPROPERTY_AUDIO_ALGORITHM_INSTANCE
El pin debe admitir las siguientes propiedades del conjunto de propiedades de KSPROPSETID_Audio: KSPROPERTY_AUDIO_POSITIONKSPROPERTY_AUDIO_LATENCY
El pin debe exponer sus funcionalidades de intervalo de datos (consulte Pin Data-Range y Propiedades de intersección).
A continuación se presentan los requisitos específicos para exponer nodos AEC y NS acelerados por hardware.
Cancelación de eco acústico
Un controlador de minipuerto PCM expone la compatibilidad de hardware con AEC en forma de topología para las secuencias de captura y representación que cumplen este requisito adicional:
- El pin debe incluir un nodo AEC (KSNODETYPE_ACOUSTIC_ECHO_CANCEL), que debe especificarse en su posición adecuada en la cadena de nodos ordenada (consulte a continuación).
Supresión de ruido
Un controlador de minipuerto de PCM expone la compatibilidad de hardware con NS en forma de topología para la secuencia de captura que cumple este requisito adicional:
- El pin debe incluir un nodo NS (KSNODETYPE_NOISE_SUPPRESS), que debe especificarse en su posición adecuada en la cadena de nodos ordenada (consulte a continuación).
Ordenación de la cadena de nodos
Actualmente, la arquitectura de efectos de captura de DirectSound requiere que los nodos se especifiquen en el orden en que solicita la aplicación. Como resultado, el orden en el que el controlador de minipuerto especifica sus nodos debe coincidir con el orden utilizado por el filtro del sistema AEC (Aec.sys), que implementa los algoritmos AEC y NS en el software.
Para habilitar la aceleración de hardware, el controlador debe especificar los efectos implementados por el hardware en el orden siguiente:
KSNODETYPE_ACOUSTIC_ECHO_CANCEL
Tenga en cuenta que esta lista puede omitir los efectos no implementados siempre que se conserve el orden relativo.
Asignaciones de patillas de nodo de AEC
Un controlador de adaptador usa una matriz de estructuras de PCCONNECTION_DESCRIPTOR para especificar las conexiones dentro de un filtro. Cada elemento de matriz describe una conexión, que puede ser node-to-node, node-to-pin o pin-to-pin. Para más información, consulte Nodos y conexiones.
Para usar la estructura de PCCONNECTION_DESCRIPTOR, el escritor de controladores asigna patillas "lógicas" a los nodos. Se trata de "patillas" en los propios nodos y se usan únicamente para especificar las conexiones dentro del filtro. Esto contrasta con los patillas externas del filtro, que se usan para conectarse a otros filtros.
En la tabla siguiente se muestran los identificadores de patilla que el controlador del adaptador debe asignar a los cuatro pines lógicos del nodo AEC.
Nombre del parámetro de identificador de anclaje | Valor | Significado |
---|---|---|
KSNODEPIN_AEC_RENDER_IN |
1 |
Anclaje receptor (entrada de nodo) para la secuencia de representación |
KSNODEPIN_AEC_RENDER_OUT |
0 |
Pin de origen (salida del nodo) para la secuencia de representación |
KSNODEPIN_AEC_CAPTURE_IN |
2 |
Anclaje del receptor (entrada de nodo) para la secuencia de captura |
KSNODEPIN_AEC_CAPTURE_OUT |
3 |
Pin de origen (salida del nodo) para la secuencia de captura |
Los identificadores de pin de la tabla anterior se definen en el archivo de encabezado Ksmedia.h.
En el ejemplo de código siguiente se muestra cómo un controlador de adaptador puede especificar la topología interna de un filtro AEC que contiene un nodo AEC y un nodo NS:
// AEC Filter Topology
// Pin IDs for external pins on AEC filter
#define ID_CaptureOutPin 0 // microphone stream
#define ID_CaptureInPin 1
#define ID_RenderOutPin 2 // speaker stream
#define ID_RenderInPin 3
// Generic pin IDs for simple node with one input and one output
#define NODE_INPUT_PIN 1
#define NODE_OUTPUT_PIN 0
// Node IDs
#define NODE_ID_AEC 0 // acoustic echo cancellation
#define NODE_ID_NS 1 // noise suppression
// The array below defines the internal topology of an
// AEC filter that contains an AEC node and an NS node.
const PCCONNECTION_DESCRIPTOR AecConnections[] = {
{ PCFILTER_NODE, ID_RenderInPin, NODE_ID_AEC, KSNODEPIN_AEC_RENDER_IN },
{ NODE_ID_AEC, KSNODEPIN_AEC_RENDER_OUT, PCFILTER_NODE, ID_RenderOutPin },
{ PCFILTER_NODE, ID_CaptureInPin, NODE_ID_AEC, KSNODEPIN_AEC_CAPTURE_IN },
{ NODE_ID_AEC, KSNODEPIN_AEC_CAPTURE_OUT, NODE_ID_NS, NODE_INPUT_PIN },
{ NODE_ID_NS, NODE_OUTPUT_PIN, PCFILTER_NODE, ID_CaptureOutPin }
};
La matriz AecConnections del ejemplo de código anterior define la topología de filtro que se muestra en la ilustración siguiente.
La ilustración anterior representa cada conexión dentro del filtro con una flecha discontinua que apunta en la dirección del flujo de datos. Un total de cinco conexiones aparecen en la ilustración. Cada conexión corresponde a uno de los cinco elementos de la matriz AecConnections del ejemplo de código.