Modalità di partecipazione dei dispositivi hardware al grafico dei filtri

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Questo articolo descrive come DirectShow interagisce con l'hardware audio e video.

Filtri wrapper

Tutti i filtri DirectShow sono componenti software in modalità utente. Per consentire a un dispositivo hardware in modalità kernel, ad esempio una scheda di acquisizione video, di aggiungere un grafico di filtro DirectShow, il dispositivo deve essere rappresentato come filtro in modalità utente. Questa funzione viene eseguita da filtri "wrapper" specializzati forniti con DirectShow. Questi filtri includono il filtro Acquisizione audio , il filtro acquisizione VFW , il filtro tuner TV , il filtro audio TV e il filtro barra incrociata video analogico . DirectShow fornisce anche un filtro denominato KsProxy, che può rappresentare qualsiasi tipo di dispositivo di streaming WDM (Windows Driver Model). I fornitori di hardware possono estendere KsProxy per supportare funzionalità personalizzate, fornendo un plug-in Ksproxy, che è un oggetto COM aggregato da KsProxy.

I filtri wrapper espongono interfacce COM che rappresentano le funzionalità del dispositivo. L'applicazione usa queste interfacce per passare informazioni da e verso il filtro. Il filtro converte le chiamate al metodo COM in chiamate del driver di dispositivo, passa tali informazioni al driver in modalità kernel e quindi converte nuovamente il risultato nell'applicazione. I filtri Tv Tuner, TV Audio, Analogico Video Crossbar e KsProxy supportano proprietà driver personalizzate tramite l'interfaccia IKsPropertySet . Il filtro acquisizione VFW e il filtro acquisizione audio non sono estendibili in questo modo.

Per gli sviluppatori di applicazioni, i filtri wrapper consentono all'applicazione di controllare i dispositivi così come controllano qualsiasi altro filtro DirectShow. Non è necessaria alcuna programmazione speciale; i dettagli della comunicazione con il dispositivo in modalità kernel vengono incapsulati all'interno del filtro.

Video per dispositivi Windows

Il filtro acquisizione VFW supporta le schede di acquisizione video per Windows (VfW) precedenti. Quando nel sistema di destinazione è presente una scheda VfW, può essere individuata e aggiunta al grafico dei filtri usando l'enumeratore dispositivo del sistema DirectShow. Per informazioni dettagliate, vedere Enumerazione di dispositivi e filtri.

Acquisizione e combinazione di dispositivi audio (schede audio)

Le schede audio più recenti hanno jack di input per microfoni e altri tipi di dispositivi. In genere queste schede hanno anche funzionalità di combinazione a bordo per controllare il volume, il treble e il basso di ogni singolo input. In DirectShow gli input e il mixer della scheda audio vengono avvolti dal filtro Acquisizione audio. Ogni scheda audio può essere individuata con l'enumeratore del dispositivo di sistema. Per visualizzare le schede audio nel sistema, eseguire GraphEdit e selezionare dalla categoria Origini acquisizione audio. Ogni filtro in tale categoria è un'istanza separata del filtro Di acquisizione audio. Vedere Uso di GraphEdit.

Dispositivi di streaming WDM

I decodificatori hardware e le schede di acquisizione più recenti sono conformi alla specifica WDM (Windows Driver Model). Questi dispositivi hanno una funzionalità maggiore rispetto ai dispositivi VfW. Le schede di acquisizione video WDM possono supportare funzionalità non disponibili in VfW, tra cui l'enumerazione dei formati di acquisizione, il controllo programmatico dei parametri video, ad esempio tonalità e luminosità, selezione di input a livello di codice e supporto di Tuner TV.

Per supportare i dispositivi di streaming WDM, DirectShow fornisce il filtro KsProxy (ksproxy.ax). KsProxy è stato chiamato "filtro coltello dell'esercito svizzero" perché fa così tante cose diverse. Il numero di pin nel filtro e il numero di interfacce COM esposte dal filtro dipendono dalle funzionalità del driver sottostante. KsProxy non viene visualizzato nel grafico del filtro sotto il nome "KsProxy". Accetta sempre il nome descrittivo del dispositivo, che si trova nel Registro di sistema. Per visualizzare i dispositivi WDM nel sistema, eseguire GraphEdit e selezionare le categorie WDM Streaming. Anche se nel sistema è presente una sola scheda WDM, tale scheda potrebbe contenere più di un dispositivo. Ogni dispositivo è rappresentato come filtro separato e ognuno di questi filtri è effettivamente KsProxy.

Un'applicazione usa l'enumeratore di dispositivi di sistema per trovare i moniker del dispositivo WDM nel sistema. KsProxy viene creata un'istanza chiamando BindToObject nel moniker. Poiché KsProxy può rappresentare tutti i tipi di dispositivi WDM, è necessario eseguire una query sul driver per determinare quale proprietà imposta il driver supportato. I set di proprietà sono raccolte di strutture di dati usate dai driver WDM e anche da alcuni filtri in modalità utente, ad esempio decodificatori software MPEG-2. KsProxy configura se stesso per esporre le interfacce COM che corrispondono a tali set di proprietà. KsProxy converte le chiamate del metodo COM in set di proprietà e li invia al driver. I fornitori di hardware possono estendere KsProxy fornendo plug-in, che sono interfacce specifiche del fornitore che espongono le funzionalità speciali di un dispositivo. Tutti questi dettagli sono nascosti dall'applicazione. L'applicazione controlla il dispositivo tramite KsProxy, allo stesso modo di qualsiasi altro filtro DirectShow.

Kernel Streaming

I dispositivi WDM supportano lo streaming del kernel, in cui i dati vengono trasmessi interamente in modalità kernel senza passare mai alla modalità utente. Il passaggio dalla modalità kernel alla modalità utente è dispendioso dal calcolo; Lo streaming del kernel consente frequenze di bit elevate senza sovraccaricare la CPU host. I filtri basati su WDM possono usare lo streaming del kernel per passare i dati multimediali direttamente da un dispositivo hardware a un altro, sulla stessa scheda o su una scheda diversa, senza copiare i dati nella memoria principale del sistema.

Dal punto di vista di un'applicazione, i dati vengono spostati da un filtro in modalità utente a quello successivo. In realtà, i dati potrebbero non passare mai alla modalità utente, ma potrebbero essere trasmessi direttamente da un dispositivo in modalità kernel a un altro finché non viene eseguito il rendering sulla scheda grafica video. Alcuni scenari, ad esempio l'acquisizione in un file, richiedono che i dati passino dalla modalità kernel alla modalità utente. Tuttavia, questa opzione non richiede necessariamente che i dati vengano copiati in una nuova posizione in memoria.

Gli sviluppatori di applicazioni in genere non devono preoccuparsi dei dettagli del flusso del kernel, ad eccezione delle informazioni in background. Per informazioni più dettagliate su WDM, streaming del kernel, KsProxy e argomenti correlati, vedere Microsoft DDK.

Grafico dei filtri e relativi componenti