Condividi tramite


Esposizione di effetti di acquisizione Hardware-Accelerated

In Windows XP e versioni successive, il framework audio WDM supporta l'accelerazione hardware degli effetti di acquisizione audio esposti tramite DirectSound. Questi effetti includono l'annullamento dell'eco acustico (AEC) e l'eliminazione del rumore (NS). Per informazioni su come un'applicazione DirectSoundCapture consente l'uso di AEC e NS con accelerazione hardware, vedere la documentazione di Microsoft Windows SDK.

Un driver miniport può esporre l'accelerazione hardware per qualsiasi subset di questi effetti, a seconda delle funzionalità del dispositivo sottostante. Per esporre le funzionalità dell'hardware per gli effetti AEC e NS, ogni pin nel filtro AEC implementato dal driver deve soddisfare questi requisiti:

Di seguito sono riportati i requisiti specifici per l'esposizione dei nodi AEC e NS con accelerazione hardware.

Annullamento dell'eco acustico

Un driver miniport PCM espone il supporto hardware per AEC sotto forma di topologia sia per i flussi di acquisizione che di rendering che soddisfano questo requisito aggiuntivo:

  • Il pin deve includere un nodo AEC (KSNODETYPE_ACOUSTIC_ECHO_CANCEL), che deve essere specificato nella posizione corretta nella catena di nodi ordinata (vedere di seguito).

Eliminazione del rumore

Un driver miniport PCM espone il supporto hardware per NS sotto forma di topologia per il flusso di acquisizione che soddisfa questo requisito aggiuntivo:

  • Il pin deve includere un nodo NS (KSNODETYPE_NOISE_SUPPRESS), che deve essere specificato nella posizione corretta nella catena di nodi ordinata (vedere di seguito).

Node-Chain l'ordinamento

Attualmente, l'architettura degli effetti di acquisizione DirectSound richiede che i nodi vengano specificati nell'ordine in cui sono richiesti dall'applicazione. Di conseguenza, l'ordine in cui il driver miniport specifica i relativi nodi deve corrispondere all'ordine usato dal filtro di sistema AEC (Aec.sys), che implementa gli algoritmi AEC e NS nel software.

Per abilitare l'accelerazione hardware, il driver deve specificare gli effetti implementati dall'hardware nell'ordine seguente:

KSNODETYPE_ADC

KSNODETYPE_ACOUSTIC_ECHO_CANCEL

KSNODETYPE_NOISE_SUPPRESS

Si noti che questo elenco può omettere eventuali effetti non implementati, purché venga mantenuto l'ordinamento relativo.

Assegnazioni di pin del nodo AEC

Un driver di adattatore usa una matrice di strutture di PCCONNECTION_DESCRIPTOR per specificare le connessioni all'interno di un filtro. Ogni elemento della matrice descrive una connessione, che può essere da nodo a nodo, da nodo a pin o da pin a pin. Per informazioni dettagliate, vedere Nodi e connessioni.

Per usare la struttura PCCONNECTION_DESCRIPTOR, lo sviluppatore del driver assegna i pin "logici" ai nodi. Si tratta di "pin" sui nodi stessi e vengono usati esclusivamente per specificare le connessioni all'interno del filtro. Questo è in contrasto con i pin esterni sul filtro, che vengono usati per connettersi ad altri filtri.

La tabella seguente mostra gli ID pin che il driver dell'adattatore deve assegnare ai quattro pin logici nel nodo AEC.

Pin ID Parameter Name Valore Significato

KSNODEPIN_AEC_RENDER_IN

1

Pin di ricezione (input del nodo) per il flusso di rendering

KSNODEPIN_AEC_RENDER_OUT

0

Pin di origine (output del nodo) per il flusso di rendering

KSNODEPIN_AEC_CAPTURE_IN

2

Pin di sink (terminale del nodo) per il flusso di acquisizione

KSNODEPIN_AEC_CAPTURE_OUT

3

Pin di origine (output del nodo) per il flusso di acquisizione

Gli ID pin nella tabella precedente sono definiti nel "header file" Ksmedia.h.

L'esempio di codice seguente illustra come un driver di adattatore può specificare la topologia interna di un filtro AEC che contiene sia un nodo AEC che 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 matrice AecConnections nell'esempio di codice precedente definisce la topologia di filtro illustrata nella figura seguente.

Diagramma che illustra la topologia interna di un filtro AEC con nodi AEC e NS.

La figura precedente rappresenta ogni connessione all'interno del filtro con una freccia tratteggiata che punta nella direzione del flusso di dati. Nella figura vengono visualizzate un totale di cinque connessioni. Ogni connessione corrisponde a uno dei cinque elementi della matrice AecConnections nell'esempio di codice.