Aggiungi connessioni

[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.

I filtri si connettono ai relativi pin, tramite l'interfaccia IPin . I pin di output si connettono ai pin di input. Ogni connessione pin ha un tipo di supporto, descritto dalla struttura AM_MEDIA_TYPE .

Un'applicazione connette i filtri chiamando i metodi in Filter Graph Manager, mai chiamando metodi sui filtri o sui pin stessi. L'applicazione può specificare direttamente i filtri da connettere chiamando il metodo IFilterGraph::ConnectDirect o IGraphBuilder::Connect ; oppure può connettere indirettamente i filtri usando un metodo di compilazione del grafo, ad esempio IGraphBuilder::RenderFile.

Affinché la connessione abbia esito positivo, entrambi i filtri devono trovarsi nel grafico dei filtri. L'applicazione può aggiungere un filtro al grafico chiamando il metodo IFilterGraph::AddFilter . Anche Filter Graph Manager può aggiungere filtri al grafico. Quando viene aggiunto un filtro, Filter Graph Manager chiama il metodo IBaseFilter::JoinFilterGraph del filtro per inviare una notifica al filtro.

La struttura generale del processo di connessione è la seguente:

  1. Filter Graph Manager chiama IPin::Connect sul pin di output, passando un puntatore al pin di input.
  2. Se il pin di output accetta la connessione, chiama IPin::ReceiveConnection sul pin di input.
  3. Se il pin di input accetta anche la connessione, il tentativo di connessione ha esito positivo e i pin sono connessi.

Alcuni pin possono essere disconnessi e riconnessi mentre il filtro è attivo. Questo tipo di riconnessione viene chiamato riconnessione dinamica . Per altre informazioni, vedere Compilazione dinamica del grafo. Tuttavia, la maggior parte dei filtri non supporta la riconnessione dinamica.

I filtri vengono in genere connessi in ordine downstream, ovvero i pin di input del filtro vengono connessi prima dei pin di output. Un filtro deve sempre supportare questo ordine di connessione. Alcuni filtri supportano anche le connessioni nell'ordine opposto, ovvero i pin di output per primi, seguiti dai pin di input. Ad esempio, potrebbe essere possibile connettere il pin di output di un filtro MUX al filtro del writer di file, prima di connettere i pin di input del filtro MUX.

Quando viene chiamato il metodo Connect o ReceiveConnection di un pin, il pin deve verificare che possa supportare la connessione. I dettagli dipendono dal filtro specifico. Le attività più comuni includono:

  • Verificare che il tipo di supporto sia accettabile
  • Negoziare un allocatore
  • Eseguire una query sull'altro pin per le interfacce necessarie.