Udostępnij przez


Buforowanie informacji o przypinaniu dla directshow

Aplikacja może używać interfejsu DirectShow IFilterMapper2 , aby automatycznie wyszukiwać filtry spełniające określone kryteria. Ta aplikacja może użyć listy proponowanych filtrów, które IFilterMapper2 powraca do automatycznego kompilowania grafów filtrów z filtrami odbieranymi i renderujących sygnały telewizyjne. Aby szybko znaleźć filtry spełniające określone kryteria, IFilterMapper2 używa informacji o filtrze i jego pinezkach, które zostały wcześniej wprowadzone w pamięci podręcznej. Dyskusja w poniższych akapitach odnosi się do tej pamięci podręcznej jako pamięci podręcznej danych pin.

Informacje zawarte w pamięci podręcznej danych pinów zawierają listę nośników i typów mediów dla każdego pinu, które filtr może wystawiać. IFilterMapper2 używa tych informacji pamięci podręcznej, aby określić, czy możliwy filtr może łączyć się z pinem w filtrze, który znajduje się już w grafie. Ustalenie to eliminuje koszty związane z tworzeniem wystąpienia filtru tylko po to, aby stwierdzić, że połączenie z filtrem jest zablokowane, ponieważ typ nośnika lub typu mediów nie jest zgodny. Jeśli pamięć podręczna danych przypinania filtru nie jest up-to-date, filtr może zostać błędnie wyeliminowany jako kandydat na połączenie na wykresie filtru.

Za każdym razem, gdy minidriver BDA określa, że jego pamięć podręczna danych pin używanych przez directshow nie jest up-to-date, że minidriver musi zaktualizować pamięć podręczną danych pin, aby przypiąć informacje o wystąpieniach filtrów BDA minidrivera składnika BDA jest dokładnie uwidoczniony w grafie filtru. Minidriver BDA aktualizuje cache danych pin DirectShow, zgodnie z opisem w następujących scenariuszach:

  • Może być wymagane lub nie wymagane, aby minidriver BDA zaktualizował pamięć podręczną danych pin DirectShow w momencie, gdy początkowo tworzy wystąpienia filtrów BDA, w zależności od sposobu, w jaki minidriver przedstawia filtry BDA jako filtry DirectShow w trybie użytkownika. Plik informacyjny minidrivera BDA (INF) określa mechanizm, którego minidriver używa do prezentowania filtrów BDA jako filtrów DirectShow.

    Minidrivery BDA zwykle używają modułu proxy przesyłania strumieniowego jądra (KS) (Ksproxy.ax) do prezentacji swoich filtrów BDA jako filtrów DirectShow. Serwer proxy KS automatycznie aktualizuje pamięć podręczną danych pin DirectShow, aby ujawniać informacje o pinach filtrów BDA przy każdorazowym utworzeniu instancji tych filtrów. W związku z tym minidrivery BDA używające serwera proxy KS nie są wymagane do wykonania żadnej akcji w celu zaktualizowania pamięci podręcznej danych pin directShow podczas początkowego tworzenia wystąpień filtrów. Jeśli filtr BDA jest uwidoczniony w trybie użytkownika za pośrednictwem serwera proxy KS, buforowane informacje automatycznie zawierają nośniki i typy multimediów dla fabryk pin, które istnieją w wystąpieniu filtru natychmiast po powrocie procedury wysyłania przez filtr.

    Niektóre minidrivery BDA nie używają proxiego KS do przedstawienia swoich filtrów BDA jako filtrów DirectShow. Na przykład minidrivery odbiornika BDA, które implementują filtry BDA do odbierania lub przetwarzania sygnałów telewizji analogowych, używają modułów KSTVTune.ax lub KSXBar.ax do prezentowania tych filtrów BDA jako filtrów DirectShow. Ponieważ te moduły nie używają standardowych metod interfejsu serwera proxy KS do aktualizowania pamięci podręcznej danych pin directShow, minidrivery BDA dla tych typów filtrów BDA muszą zaktualizować pamięć podręczną danych pin DirectShow, gdy te minidrivery początkowo tworzą wystąpienia filtrów. Aby upewnić się, że pamięć podręczna danych pin directShow jest aktualizowana podczas tworzenia wystąpień tych filtrów, minidriver BDA wywołuje funkcję BdaFilterUpdateCacheData natychmiast po wywołaniu funkcji BdaInitFilter wewnątrz implementacji procedury tworzenia wysyłania filtru. W tym wywołaniu minidriver przekazuje informacje o pinach w celu zaktualizowania wszystkich początkowych pinów na filtrze.

  • Pinezki można utworzyć w filtrze BDA dynamicznie po zakończeniu procedury wysyłania filtru. Jeśli początkowo utworzone wystąpienie filtru BDA nie uwidacznia wystąpień wszystkich numerów PIN wymienionych w topologii szablonu filtru BDA (BDA_FILTER_TEMPLATE), minidriver BDA musi wywołać funkcję BdaFilterFactoryUpdateCacheData , aby wymusić informacje o wszystkich pinach wymienionych w topologii szablonu filtru.

Uwaga Aktualizowanie pamięci podręcznej danych pinów DirectShow wiąże się ze znacznym obciążeniem, ponieważ odnosi się do i modyfikuje rejestr. Ponadto aktualizacja pamięci podręcznej danych pinów DirectShow wpływa na czas wymagany przez DirectShow do automatycznego tworzenia grafów filtrów. W związku z tym minidriver BDA powinien wywołać BdaFilterFactoryUpdateCacheData tylko wtedy, gdy ustali, że jego pamięć podręczna danych pin używanych przez directshow nie jest up-to-date.

Jeśli to możliwe, minidriver BDA powinien wywołać BdaFilterFactoryUpdateCacheData za każdym razem, gdy wystąpi sterownik, oprogramowanie układowe lub aktualizacja sprzętu.