Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
Il pin deve includere un singolo nodo nella relativa catena di nodi per rappresentare ogni effetto hardware che deve essere incorporato nel grafico. I tipi di nodo KS per gli effetti AEC e NS sono specificati dai seguenti GUID: KSNODETYPE_ACOUSTIC_ECHO_CANCELKSNODETYPE_NOISE_SUPPRESS
I nodi AEC e NS sul pin devono supportare il set di proprietà KSPROPSETID_General e devono fornire informazioni sul produttore quando viene eseguita una query per la proprietà KSPROPERTY_GENERAL_COMPONENTID .
I nodi AEC e NS nel pin devono supportare il set di proprietà KSPROPSETID_TopologyNode e le due proprietà seguenti:
KSPROPERTY_TOPOLOGYNODE_ENABLE abilita un effetto.
KSPROPERTY_TOPOLOGYNODE_RESET reimposta l'effetto sullo stato predefinito.
I nodi AEC e NS nel pin devono supportare le proprietà seguenti del set di proprietà KSPROPSETID_Audio: KSPROPERTY_AUDIO_CPU_RESOURCES KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
Il pin deve supportare le proprietà seguenti del set di proprietà KSPROPSETID_Audio: KSPROPERTY_AUDIO_POSITIONKSPROPERTY_AUDIO_LATENCY
Il pin deve esporre le sue funzionalità relative all'intervallo di dati (vedere Pin Data-Range e proprietà di intersezione).
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_ACOUSTIC_ECHO_CANCEL
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.
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.