Condividi tramite


Intelligent Connect

[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 di usare un nuovo codice 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.

Intelligent Connect è il meccanismo usato da Filter Graph Manager per creare grafici di filtro. È costituito da diversi algoritmi correlati che selezionano i filtri e li aggiungono al grafico dei filtri.

Leggere questo argomento se si verificano problemi durante la creazione di un determinato grafico di filtro e si vuole risolvere il problema oppure se si sta scrivendo un filtro personalizzato e si vuole renderlo disponibile per la compilazione automatica del grafico.

Intelligent Connect include i metodi diIGraphBuilderseguenti:

IGraphBuilder::AddSourceFilter

Il metodo IGraphBuilder::AddSourceFilter aggiunge un filtro di origine in grado di eseguire il rendering di un file specificato. Prima di tutto cerca nel Registro di sistema e corrisponde al protocollo (ad esempio https://), l'estensione del nome file o un set di byte di controllo predeterminato byte, che sono byte in corrispondenza di determinati offset nel file che corrispondono a determinati modelli. Per informazioni dettagliate, vedere Registrazione di un tipo di file personalizzato. Supponendo che il metodo individua un filtro di origine appropriato, crea quindi un'istanza del filtro, la aggiunge al grafo e chiama il metodo IFileSourceFilter::Load con il nome del file.

IGraphBuilder::Render

Il metodo IGraphBuilder::Render compila una sottosezione di un grafo. Inizia da un pin di output non connesso e funziona a valle, aggiungendo nuovi filtri in base alle esigenze. Il filtro iniziale deve essere già presente nel grafico. A ogni passaggio, il metodo Render cerca un filtro in grado di connettersi al filtro precedente. Il flusso può diramare se un filtro di connessione ha più pin di output. La ricerca si arresta quando ogni flusso ha un renderer. Se il metodo render viene bloccato, è possibile che venga eseguito il backup e riprovare, usando un set di filtri diverso.

Per connettere ogni pin di output, il metodorenderesegue le operazioni seguenti:

  1. Se il pin supporta l'interfaccia IStreamBuilder, Filter Graph Manager delega l'intero processo al metodo IStreamBuilder::Render del pin. Esponendo questa interfaccia, il pin assume la responsabilità di compilare il resto del grafico, fino al renderer. Tuttavia, pochissimi pin supportano questa interfaccia.

  2. Filter Graph Manager tenta di usare filtri memorizzati nella cache in memoria, se presenti. Durante il processo Intelligent Connect, Filter Graph Manager può memorizzare nella cache i filtri dei passaggi precedenti del processo. Vedere anche dynamic graph building.)

  3. Se il grafico del filtro contiene filtri con pin di input non connessi, Il gestore filtri prova successivamente. È possibile forzare il metodorenderper provare un determinato filtro aggiungendo tale filtro al grafo prima di chiamare Render.

  4. A partire da Windows 7, DirectShow include un elenco di filtri preferiti per determinati sottotipi multimediali. Se è presente un filtro preferito per il tipo di supporto di cui viene eseguito il rendering, Filter Graph Manager prova a filtrare successivamente. Un'applicazione può modificare l'elenco dei filtri preferiti usando l'interfacciaIAMPluginControl. Le modifiche apportate all'elenco influiscono sul processo corrente dell'applicazione e vengono rimosse al termine del processo.

  5. Infine, se non è stato trovato alcun filtro appropriato, Filter Graph Manager cerca nel Registro di sistema usando il metodo IFilterMapper2::EnumMatchingFilters. Prova a trovare la corrispondenza con i tipi di supporti preferiti del pin di output rispetto ai tipi di supporti elencati nel Registro di sistema.

    Ogni filtro viene registrato con un merito, un valore numerico che indica quanto preferibile è il filtro, rispetto ad altri filtri. Il metodoEnumMatchingFiltersrestituisce filtri in ordine di merito, con un minimo di merito MERIT_DO_NOT_USE + 1. Ignora i filtri con un merito di MERIT_DO_NOT_USE o meno. I filtri vengono raggruppati anche in categorie, definite dal GUID. Le categorie stesse hanno merito e il metodo EnumMatchingFilters ignora qualsiasi categoria con un merito di MERIT_DO_NOT_USE o meno, anche se i filtri in tale categoria hanno valori di merito più elevati.

    A partire da Windows 7, DirectShow include un elenco di filtri bloccati per determinati sottotipi multimediali. Filter Graph Manager ignora i filtri in questo elenco. Un'applicazione può modificare l'elenco dei filtri bloccati usando l'interfacciaIAMPluginControl. Le modifiche apportate a questo elenco influiscono sul processo corrente dell'applicazione e vengono rimosse al termine del processo.

Per riepilogare, il metodo Render prova i filtri nell'ordine seguente:

  1. Usare IStreamBuilder.
  2. Provare i filtri memorizzati nella cache.
  3. Provare i filtri nel grafico.
  4. Windows 7 o versione successiva: provare il filtro preferito per il tipo di supporto, se presente.
  5. Cercare i filtri nel Registro di sistema.

IGraphBuilder::RenderFile

Il metodo IGraphBuilder::RenderFile compila un grafico di riproduzione predefinito da un nome file. Internamente, questo metodo usa AddSourceFilter per individuare il filtro di origine corretto e Render per compilare il resto del grafico.

IGraphBuilder::Connect

Il metodo IGraphBuilder::Connect connette un pin di output a un pin di input. Questo metodo aggiunge filtri intermedi, se necessario, usando una variante dell'algoritmo descritto per il metodorender:

  1. Provare una connessione diretta tra i filtri, senza filtri intermedi.
  2. Provare i filtri memorizzati nella cache.
  3. Provare i filtri nel grafico.
  4. Windows 7 o versione successiva: provare il filtro preferito per il tipo di supporto, se presente.
  5. Cercare i filtri nel Registro di sistema.

categorie di filtri

Merit

simulazione della compilazione di gragrafi con GraphEdit

Compilazione del grafico dei filtri