Connessione intelligente

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine 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, FMMediaEngine e Audio/Video Capture 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 compilare grafici di filtro. È costituito da diversi algoritmi correlati che selezionano filtri e li aggiungono al grafico del filtro.

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 scrive il proprio filtro e si vuole renderlo disponibile per la compilazione automatica del grafico.

Intelligent Connect prevede i metodi IGraphBuilder seguenti:

IGraphBuilder::AddSourceFilter

Il metodo IGraphBuilder::AddSourceFilter aggiunge un filtro di origine che può eseguire il rendering di un file specificato. In primo luogo, il Registro di sistema corrisponde al protocollo (ad esempio https://), l'estensione del nome file o un set di byte di controllo predeterminati, che sono byte in base a 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 di tale filtro, la aggiunge al grafico e chiama il metodo IFileSourceFilter::Load del filtro con il nome del file.

IGraphBuilder::Render

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

Per connettere ogni pin di output, il metodo Render esegue 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 presuppone la responsabilità di creare il resto del grafico, fino al renderer. Tuttavia, pochi pin supportano questa interfaccia.

  2. Filter Graph Manager tenta di usare i 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 nel processo. Vedere Anche La compilazione dinamica del grafico.

  3. Se il grafico del filtro contiene eventuali filtri con pin di input non connessi, Filter Graph Manager li prova successivamente. È possibile forzare il metodo Rendering per provare un determinato filtro aggiungendo tale filtro al grafico prima di chiamare Rendering.

  4. A partire da Windows 7, DirectShow include un elenco di filtri preferiti per determinati sottotipi multimediali. Se è disponibile un filtro preferito per il tipo di supporto che viene eseguito il rendering, Filter Graph Manager prova a filtrare successivamente. Un'applicazione può modificare l'elenco dei filtri preferiti usando l'interfaccia IAMPluginControl . 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 il Registro di sistema usando il metodo IFilterMapper2::EnumMatchingFilters . Prova a corrispondere ai tipi di supporti preferiti del pin di output rispetto ai tipi di supporti elencati nel Registro di sistema.

    Ogni filtro viene registrato con un valore numerico che indica come preferibile il filtro, rispetto ad altri filtri. Il metodo EnumMatchingFilters restituisce filtri in ordine di merito, con un valore minimo di 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 di filtri bloccati usando l'interfaccia IAMPluginControl . Le modifiche apportate a questo elenco influiscono sul processo corrente dell'applicazione e vengono rimosse al termine del processo.

Per riepilogare, il metodo Rendering 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 Rendering 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 metodo Render :

  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 filtro

Merito

Simulazione della compilazione di graph con GraphEdit

Compilazione del grafico dei filtri