Modello pull

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

Nell'interfaccia IMemInputPin il filtro upstream determina i dati da inviare e inserisce i dati nel filtro downstream. Per alcuni filtri, un modello pull è più appropriato. In questo caso, il filtro downstream richiede i dati dal filtro upstream. I campioni continuano a spostarsi a valle, dal pin di output al pin di input, ma il filtro downstream avvia il flusso di dati. Questo tipo di connessione usa l'interfaccia IAsyncReader .

L'uso tipico per il modello pull è nella riproduzione di file. Ad esempio, in un grafico di riproduzione AVI, il filtro Origine file asincrona esegue operazioni di lettura di file generiche e distribuisce i dati come flusso di byte, senza informazioni sul formato. Il filtro AVI Splitter legge le intestazioni AVI e analizza il flusso in esempi video e audio. Avi Splitter può determinare i dati necessari meglio del filtro Origine file asincrona e quindi usa IAsyncReader invece di IMemInputPin.

Per richiedere dati dal pin di output, il pin di input chiama uno dei metodi seguenti:

Il primo metodo è asincrono, per supportare più letture sovrapposte. Gli altri sono sincroni.

In teoria, qualsiasi filtro può supportare IAsyncReader, ma in pratica è progettato per i filtri di origine che si connettono ai filtri parser. Il parser agisce molto come un filtro di origine nel modello push. Quando viene sospesa, crea un thread di streaming che esegue il pull dei dati dalla connessione IAsyncReader e ne esegue il push downstream. I pin di output usano IMemInputPin e il resto del grafico usa il modello di push standard.

Flusso di dati nel grafico dei filtri