Freigeben über


Zwischenspeichern von Pininformationen für DirectShow

Eine Anwendung kann die DirectShow IFilterMapper2-Schnittstelle verwenden, um automatisch nach Filtern zu suchen, die bestimmte Kriterien erfüllen. Diese Anwendung kann die Liste der vorgeschlagenen Filter verwenden, die IFilterMapper2 zurückgibt, um automatisch Filterdiagramme mit Filtern zu erstellen, die Fernsehsignale empfangen und rendern. Um schnell Filter zu finden, die die angegebenen Kriterien erfüllen, verwendet IFilterMapper2 Informationen zu einem Filter und seinen Pins, die zuvor in einen Cache eingegeben wurden. Die Diskussion in den folgenden Absätzen bezieht sich auf diesen Cache als Pindatencache.

Die im Pindatencache enthaltenen Informationen enthalten eine Liste der Medien und Medientypen für jeden Pin, den der Filter verfügbar machen kann. IFilterMapper2 verwendet diese Cacheinformationen, um zu bestimmen, ob ein möglicher Filter eine Verbindung mit einem Pin für einen Filter herstellen kann, der sich bereits im Diagramm befindet. Durch diese Bestimmung wird der Aufwand beim Erstellen einer instance eines Filters beseitigt, nur um festzustellen, dass eine Verbindung mit dem Filter verhindert wird, da ein Medium oder Medientyp nicht übereinstimmt. Wenn der Pindatencache für einen Filter nicht auf dem neuesten Stand ist, kann ein Filter fälschlicherweise als Verbindungskandidat in einem Filterdiagramm entfernt werden.

Wenn ein BDA-Minidriver feststellt, dass sein von DirectShow verwendeter Pindatencache nicht auf dem neuesten Stand ist, muss dieser Minidriver den Pindatencache aktualisieren, damit Pininformationen für BDA-Filterinstanzen der BDA-Komponente des Minidrivers in einem Filterdiagramm genau verfügbar gemacht werden. Ein BDA-Minidriver aktualisiert den Pindatencache von DirectShow wie in den folgenden Szenarien beschrieben:

  • Möglicherweise ist ein BDA-Minidriver erforderlich, um den Pindatencache von DirectShow zu aktualisieren, wenn der Minidriver anfänglich BDA-Filterinstanzen erstellt, je nachdem, wie dieser Minidriver BDA-Filter als DirectShow-Filter im Benutzermodus darstellt. Die INF-Datei (Information) einer BDA-Minidriver-Datei gibt den Mechanismus an, den der Minidriver verwendet, um seine BDA-Filter als DirectShow-Filter darzustellen.

    BDA-Minidriver verwenden in der Regel das Kernel-Streaming(KS)-Proxymodul (Ksproxy.ax), um ihre BDA-Filter als DirectShow-Filter darzustellen. Der KS-Proxy aktualisiert automatisch den Pindatencache von DirectShow, um Pininformationen für BDA-Filter verfügbar zu machen, wenn Instanzen dieser Filter anfänglich erstellt werden. Daher müssen BDA-Minidriver, die den KS-Proxy verwenden, keine Aktion ausführen, um den Pindatencache von DirectShow zu aktualisieren, wenn sie anfänglich Instanzen von Filtern erstellen. Wenn ein BDA-Filter über den KS-Proxy für den Benutzermodus verfügbar gemacht wird, enthalten die zwischengespeicherten Informationen automatisch die Medien und Medientypen für die Pin-Fabriken, die in der Filter-instance unmittelbar nach der Rückgabe der Erstellungsroutine des Filters vorhanden sind.

    Einige BDA-Minidriver verwenden keinen KS-Proxy, um ihre BDA-Filter als DirectShow-Filter darzustellen. Beispielsweise verwenden BDA-Empfänger-Minidriver, die BDA-Filter zum Empfangen oder Verarbeiten analoger Fernsehsignale implementieren, entweder die KSTVTune.ax - oder KSXBar.ax-Module , um diese BDA-Filter als DirectShow-Filter darzustellen. Da diese Module keine Standardmethoden der KS-Proxyschnittstelle verwenden, um den Pindatencache von DirectShow zu aktualisieren, müssen BDA-Minidriver für diese Arten von BDA-Filtern den Pindatencache von DirectShow aktualisieren, wenn diese Minidriver anfänglich Instanzen von Filtern erstellen. Um sicherzustellen, dass der Pindatencache von DirectShow aktualisiert wird, wenn Instanzen dieser Filter erstellt werden, ruft ein BDA-Minidriver die BdaFilterFactoryUpdateCacheData-Funktion sofort nach dem Aufruf der BdaInitFilter-Funktion innerhalb der Implementierung der Create Dispatch-Routine des Filters auf. In diesem Aufruf übergibt der Minidriver Pin-Informationen, um alle anfänglichen Pins für den Filter zu aktualisieren.

  • Pins können dynamisch für einen BDA-Filter erstellt werden, nachdem die Erstellungsroutine des Filters abgeschlossen ist. Wenn der anfänglich erstellte instance eines BDA-Filters nicht Instanzen aller Pins verfügbar macht, die in der Vorlagentopologie des BDA-Filters (BDA_FILTER_TEMPLATE) aufgeführt sind, muss der BDA-Minidriver BdaFilterFactoryUpdateCacheData aufrufen, um Informationen zu allen in der Vorlagentopologie des Filters aufgeführten Pins zu erzwingen.

Hinweis Das Aktualisieren des Pindatencaches von DirectShow verursacht erheblichen Mehraufwand, da die Registrierung berührt und geändert wird. Darüber hinaus wirkt sich das Aktualisieren des Pindatencaches von DirectShow auf die Zeit aus, die DirectShow zum automatischen Erstellen von Filterdiagrammen benötigt. Daher sollte ein BDA-Minidriver BdaFilterFactoryUpdateCacheData nur für alle möglichen Pins aufrufen, wenn er feststellt, dass der von DirectShow verwendete Pindatencache nicht auf dem neuesten Stand ist.

Wenn möglich, sollte ein BDA-Minidriver BdaFilterFactoryUpdateCacheData aufrufen, wenn ein Treiber, eine Firmware oder ein Hardwareupdate aufgetreten ist.