Condividi tramite


Panoramica della creazione di grafici

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

Per creare un grafico di filtro, iniziare creando un'istanza di Filter Graph Manager:

IGraphBuilder* pIGB;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
    NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
    (void **)&pIGB);

Filter Graph Manager supporta i metodi di compilazione del grafo seguenti:

  • IFilterGraph::ConnectDirect tenta di stabilire una connessione diretta tra due pin. Se i pin non possono connettersi, il metodo ha esito negativo.
  • IGraphBuilder::Connect connette due pin. Se possibile, crea una connessione diretta. In caso contrario, usa filtri intermedi per completare la connessione.
  • IGraphBuilder::Render inizia da un pin di output e compila il resto del grafico. Questi metodi aggiungono filtri in base alle esigenze, lavorando a valle, fino a raggiungere un filtro renderer.
  • IGraphBuilder::RenderFile costruisce un grafico di riproduzione del file completo.
  • IFilterGraph::AddFilter aggiunge un filtro al grafico. Non connette il filtro. È necessario creare il filtro prima di chiamare questo metodo chiamando CoCreateInstance oppure usando Filter Mapper o System Device Enumerator.

Questi metodi forniscono tre approcci di base alla creazione del grafico:

  1. Filter Graph Manager compila l'intero grafico.
  2. Filter Graph Manager compila parte del grafico.
  3. L'applicazione compila l'intero grafico.

Filter Graph Manager costruisce il grafico completo

Se vuoi semplicemente riprodurre un file creato in un formato riconosciuto, ad esempio AVI, MPEG, WAV o MP3, usa il metodo RenderFile. L'articolo Come riprodurre un file illustra come eseguire questa operazione.

Il metodo RenderFile inizia cercando nel Registro di sistema un filtro di origine in grado di analizzare il file. Usa il protocollo (ad esempio " https:// " nell'URL), l'estensione del file o i modelli di byte predefiniti nel file per determinare il filtro di origine. Per informazioni dettagliate, vedere Registrazione di un tipo di file personalizzato.

Per compilare il resto del grafico, Filter Graph Manager usa un processo iterativo in cui accetta i tipi di supporto supportati da un filtro sui pin di output e cerca nel Registro di sistema i filtri che accetteranno tale tipo di supporto come input. Usa diversi criteri per restringere la ricerca e classificare in ordine di priorità i filtri:

  • La categoria di filtro identifica la funzionalità generale del filtro.
  • Il tipo di supporto descrive il tipo di dati che il filtro può accettare come input o recapitare come output.
  • Il merito determina l'ordine in cui vengono tentati i filtri. Se due filtri nella stessa categoria di filtro supportano entrambi gli stessi tipi di input, Filter Graph Manager seleziona quello con il valore di merito più alto. Alcuni filtri hanno un valore basso perché sono progettati per scopi specializzati e devono essere aggiunti solo al grafico dall'applicazione.

Filter Graph Manager usa l'oggetto Filter Mapper per eseguire ricerche nel Registro di sistema.

Man mano che viene aggiunto ogni filtro, Filter Graph Manager tenta di connetterlo al pin di output del filtro precedente. I filtri negoziano per determinare se possono connettersi e, in tal caso, quale tipo di supporto usare per la connessione. Se il nuovo filtro non è in grado di connettersi, Filter Graph Manager lo rimuove e prova un altro filtro. Questo processo continua fino a quando viene eseguito il rendering di ogni flusso.

Il Filter Graph Manager costruisce parte del graph

Per eseguire un'operazione oltre alla semplice riproduzione di un file, l'applicazione deve eseguire almeno alcune operazioni di compilazione del grafo. Ad esempio, un'applicazione di acquisizione video deve selezionare un filtro di origine di acquisizione e aggiungerlo al grafico. Se si scrivono dati in un file AVI, è necessario aggiungere i filtri AVI Mux e File Writer al grafico. Tuttavia, spesso è possibile consentire a Filter Graph Manager di completare il grafico. Ad esempio, è possibile eseguire il rendering di un pin per l'anteprima chiamando il metodo render.

L'applicazione costruisce l'intero grafico

In alcuni scenari, l'applicazione potrebbe dover compilare il grafico aggiungendo e connettendo ogni filtro. In questo caso, probabilmente si conoscono in modo specifico i filtri da aggiungere al grafico. Con questo approccio, l'applicazione aggiunge ogni filtro chiamando AddFilter, enumera i pin nei filtri e li connette chiamando Connect o ConnectDirect.

Costruzione di grafici con il Capture Graph Builder

Enumerazione di Dispositivi e Filtri

L'enumerazione di Oggetti in un Grafico di Filtro

Generali Graph-Building Tecniche

Compilazione del grafico dei filtri