Compartir a través de


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:

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_ADC

KSNODETYPE_ACOUSTIC_ECHO_CANCEL

KSNODETYPE_NOISE_SUPPRESS

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.

Diagrama que ilustra la topología interna de un filtro AEC con nodos AEC y NS.

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.