共用方式為


DirectShow 的快取釘選資訊

應用程式可以使用 DirectShow IFilterMapper2 介面自動搜尋符合特定準則的篩選。 此應用程式可以使用 IFilterMapper2 傳回的建議篩選清單,使用接收和轉譯電視訊號的篩選準則自動建置篩選圖表。 為了快速尋找符合指定準則的篩選準則, IFilterMapper2 會使用先前輸入快取之篩選及其釘選的相關資訊。 下列段落的討論將這個快取稱為 釘選資料快取

釘選資料快取中包含的資訊包含篩選可以公開之每個針腳的媒體和媒體類型清單。 IFilterMapper2 會使用此快取資訊來判斷可能的篩選準則是否可以連線到圖形中已存在之篩選上的釘選。 進行這項判斷可消除建立篩選實例的額外負荷,只決定因為媒體或媒體類型不相符而無法連線到篩選。 如果篩選準則的釘選資料快取不是最新狀態,篩選準則可能會錯誤地排除為篩選圖表中連線的候選項目。

每當 BDA minidriver 判斷 DirectShow 使用的針腳資料快取不是最新狀態時,該迷你驅動程式必須更新針腳資料快取,以便迷你驅動程式 BDA 篩選元件的 BDA 篩選實例的針腳資訊在篩選圖形中正確公開。 BDA 迷你驅動程式會更新 DirectShow 的針腳資料快取,如下列案例所述:

  • 當 minidriver 最初建立 BDA 篩選實例時,可能需要或可能不需要更新 DirectShow 的釘選資料快取,視迷你驅動程式在使用者模式中如何將 BDA 篩選呈現為 DirectShow 篩選準則而定。 BDA minidriver 的資訊 (INF) 檔案會指定 minidriver 用來呈現其 BDA 篩選器做為 DirectShow 篩選的機制。

    BDA minidrivers 通常會使用 核心串流 (KS) Proxy 模組 (Ksproxy.ax) 呈現其 BDA 篩選器作為 DirectShow 篩選。 KS Proxy 會在一開始建立這些篩選準則的實例時,自動更新 DirectShow 的 Pin 資料快取,以公開 BDA 篩選的釘選資訊。 因此,使用 KS Proxy 的 BDA 迷你驅動程式不需要執行任何動作,才能在一開始建立篩選實例時更新 DirectShow 的釘選資料快取。 如果 BDA 篩選是透過 KS Proxy 向使用者模式公開,則快取的資訊會自動在篩選實例建立分派常式傳回之後,立即包含存在於篩選實例上的媒體和媒體類型。

    某些 BDA 迷你驅動程式不會使用 KS Proxy 將其 BDA 篩選呈現為 DirectShow 篩選。 例如,實作 BDA 篩選以接收或處理類比電視訊號的 BDA 接收者迷你驅動程式會使用 KSTVTune.axKSXBar.ax 模組,將這些 BDA 篩選器呈現為 DirectShow 篩選。 由於這些模組不會使用標準 KS Proxy 介面方法來更新 DirectShow 的針腳資料快取,所以這些類型 BDA 篩選器的 BDA 迷你驅動程式一開始建立篩選準則實例時,必須更新 DirectShow 的釘選資料快取。 為了確保 DirectShow 的釘選資料快取會在建立這些篩選的實例時更新,BDA minidriver 會在呼叫篩選準則建立分派常式的實作內立即呼叫BdaFilterFactoryUpdateCacheData函式。 在此呼叫中,minidriver 會傳遞釘選資訊,以更新篩選上的所有初始針腳。

  • 在篩選的建立分派常式完成之後,可以在 BDA 篩選上動態建立針腳。 如果最初建立的 BDA 篩選實例不會公開 BDA 篩選範本拓撲中所列所有針腳的實例, (BDA_FILTER_TEMPLATE) ,則 BDA minidriver 必須呼叫 BdaFilterFactoryUpdateCacheData ,以強制篩選範本拓撲中所列所有針腳的相關資訊。

注意 更新 DirectShow 的釘選資料快取有顯著的額外負荷,因為它會觸碰並修改登錄。 此外,更新 DirectShow 的釘選資料快取會影響 DirectShow 自動建置篩選圖形所需的時間量。 因此,只有當 BDA minidriver 判斷 DirectShow 所使用的釘選資料快取不是最新狀態時, BdaFilterFactoryUpdateCacheData 才應該呼叫所有可能針腳的釘選。

可能的話,每當發生驅動程式、韌體或硬體更新時,BDA 迷你驅動程式應該呼叫 BdaFilterFactoryUpdateCacheData