Condividi tramite


Memorizzazione nella cache delle informazioni sui pin per DirectShow

Un'applicazione può usare l'interfaccia DirectShow IFilterMapper2 per cercare automaticamente filtri che soddisfano determinati criteri. Questa applicazione può usare l'elenco dei filtri proposti restituiti da IFilterMapper2 per creare automaticamente grafici di filtro con filtri che ricevono ed eseguono il rendering dei segnali televisivi. Per trovare rapidamente i filtri che soddisfano i criteri specificati, IFilterMapper2 usa informazioni su un filtro e sui relativi pin immessi in precedenza in una cache. La discussione nei paragrafi seguenti fa riferimento a questa cache come cache dei dati dei pin.

Le informazioni contenute nella cache dei dati dei pin includono un elenco di supporti e tipi di supporti per ogni pin che il filtro può esporre. IFilterMapper2 usa queste informazioni della cache per determinare se un possibile filtro può connettersi a un pin su un filtro già presente nel grafico. Questa determinazione elimina il sovraccarico della creazione di un'istanza di un filtro solo per determinare che la connessione al filtro viene impedita perché un tipo di supporto o medio non corrisponde. Se la cache dei dati dei pin per un filtro non è aggiornata, un filtro potrebbe essere eliminato erroneamente come candidato per la connessione in un grafico di filtro.

Ogni volta che un minidriver BDA determina che la cache dei dati pin usata da DirectShow non è aggiornata, tale minidriver deve aggiornare la cache dei dati dei pin in modo che le informazioni sui pin per le istanze di filtro BDA del componente BDA del minidriver vengano esposte in modo accurato in un grafico di filtro. Un minidriver BDA aggiorna la cache dei dati dei pin di DirectShow come descritto negli scenari seguenti:

  • Un minidriver BDA può o non essere necessario per aggiornare la cache dei dati dei pin di DirectShow quando il minidriver crea inizialmente istanze di filtro BDA a seconda del modo in cui il minidriver presenta i filtri BDA come filtri DirectShow in modalità utente. Un file di informazioni (INF) di un minidriver BDA specifica il meccanismo usato dal minidriver per presentare i filtri BDA come filtri DirectShow.

    I minidriver BDA usano in genere il modulo proxy di streaming del kernel (KS) (Ksproxy.ax) per presentare i filtri BDA come filtri DirectShow. Il proxy KS aggiorna automaticamente la cache dei dati pin di DirectShow per esporre le informazioni sui pin per i filtri BDA ogni volta che vengono create istanze di tali filtri. Pertanto, i minidriver BDA che usano il proxy KS non devono eseguire alcuna azione per aggiornare la cache dei dati dei pin di DirectShow quando creano inizialmente istanze di filtri. Se un filtro BDA viene esposto alla modalità utente tramite il proxy KS, le informazioni memorizzate nella cache includono automaticamente i supporti e i tipi di supporto per le pin factory presenti nell'istanza del filtro immediatamente dopo la restituzione della routine di invio di creazione del filtro.

    Alcuni minidriver BDA non usano il proxy KS per presentare i filtri BDA come filtri DirectShow. Ad esempio, i minidriver del ricevitore BDA che implementano filtri BDA per ricevere o elaborare segnali televisivi analogici usano i moduli KSTVTune.ax o KSXBar.ax per presentare questi filtri BDA come filtri DirectShow. Poiché questi moduli non usano metodi di interfaccia proxy KS standard per aggiornare la cache dei dati dei pin di DirectShow, i minidriver BDA per questi tipi di filtri BDA devono aggiornare la cache dei dati dei pin di DirectShow quando questi minidriver creano inizialmente istanze di filtri. Per assicurarsi che la cache dei dati pin di DirectShow venga aggiornata quando vengono create istanze di questi filtri, un minidriver BDA chiama la funzione BdaFilterFactoryUpdateCacheData immediatamente dopo aver chiamato la funzione BdaInitFilter all'interno dell'implementazione della routine di invio di creazione del filtro. In questa chiamata, il minidriver passa le informazioni sui pin per aggiornare tutti i pin iniziali nel filtro.

  • I pin possono essere creati in modo dinamico in un filtro BDA al termine della creazione della routine dispatch del filtro. Se l'istanza creata inizialmente di un filtro BDA non espone istanze di tutti i pin elencati nella topologia del modello del filtro BDA (BDA_FILTER_TEMPLATE), il minidriver BDA deve chiamare BdaFilterFactoryUpdateCacheData per forzare le informazioni su tutti i pin elencati nella topologia del modello del filtro.

Nota L'aggiornamento della cache dei dati dei pin di DirectShow comporta un sovraccarico significativo perché tocca e modifica il Registro di sistema. Inoltre, l'aggiornamento della cache dei dati dei pin di DirectShow influisce sulla quantità di tempo necessaria per DirectShow per compilare automaticamente i grafici dei filtri. Pertanto, un minidriver BDA deve chiamare BdaFilterFactoryUpdateCacheData per tutti i pin possibili solo quando determina che la cache dei dati dei pin utilizzata da DirectShow non è aggiornata.

Se possibile, un minidriver BDA deve chiamare BdaFilterFactoryUpdateCacheData ogni volta che si è verificato un driver, un firmware o un aggiornamento hardware.