AVStream 分割器
AVStream 迷你驅動程式可以使用 AVStream 類別驅動程式功能,將資料流程分割成數個複本,因為資料流程通過指定的針腳。 如果您的驅動程式需要複製輸入資料流程來產生兩個相同的輸出資料流程,此分割程式會很有用。
若要這樣做,請在針腳KSPIN_DESCRIPTOR_EX結構的Flags成員中設定KSPIN_FLAG_SPLITTER。 在針腳上設定此旗標時,針腳會做為自動分隔器。 AVStream 會自動複製分割資料流程所需的所有資料。
在 DirectX8.0 之後的版本中,KSPIN_FLAG_SPLITTER旗標適用于 以篩選為中心的 和 釘選中心 篩選準則上的針腳。 舊版僅針對篩選中心篩選準則上的針腳支援此旗標。
下圖顯示輸入針腳將資料流程分割成兩個輸出針腳的篩選組態。 此輸出針腳的下游篩選會 就地變更資料。
畫面格會抵達輸入針腳,並放入輸入佇列中。 minidriver 只會與輸入佇列和原始針腳的輸出佇列互動。 AVStream 會自動將資料從第一個釘選的佇列複製到第二個針腳的佇列。
為了簡單起見,此圖表不會顯示如何將畫面提供給輸出針腳。 例如,為了提供畫面到輸出針腳,可能會有一個要求者和配置器與每個佇列相關聯的配置器,並屬於此管道區段。 或者,框架可能來自下游篩選準則。
在 KSFILTER_DISPATCH 結構中,minidriver 會指定廠商提供的 AVStrMiniFilterProcess 回呼常式的指標。 這個回呼常式是 minidriver 接收 KSPROCESSPIN_INDEXENTRY 結構的指標,其中包含以下所述的 KSPROCESSPIN 結構陣列。
下圖顯示 minidriver 如何區分進程針腳清單中的兩個輸出針腳:
在此圖中,DB 是指KSPROCESSPIN結構的DelegateBranch成員,而 CS 則參考CopySource成員。 輸入針腳的 DelegateBranch 和 CopySource 成員和第一個輸出針腳都是 Null。 這表示迷你驅動程式負責處理這些針腳上的畫面。
不過,第二個輸出針腳具有指向第一個輸出針腳的 CopySource 。 這表示第二個輸出針腳位於與第一個輸出針腳不同的管道中,而且 AVStream 會自動將任何放入第一個輸出針腳佇列的資料複製到第二個輸出針腳的佇列中。
當兩個輸出針腳內建在相同的管道中時,可能會發生更複雜的分割器案例。 迷你驅動程式可以在相同的管道中包含兩個以分割器為基礎的輸出針腳,例如,只要下游篩選不會變更從這些針腳傳送的資料。 因為資料未修改,所以輸出針腳會被視為唯讀;這兩個下游篩選都會接收相同的緩衝區。
您也可以讓某些下游篩選準則自動附加至分割器針腳來變更資料,而其他篩選器則不會變更資料。
在此情況下,篩選配置可能類似下圖,其描述包含分割輸出針腳三個實例的篩選:
釘選 A 和 B 會指派給相同的管道,因為下游篩選不會變更資料;A 和 B 的下游篩選會接收相同的緩衝區指標。
minidriver 只會與輸入佇列和單一輸出佇列互動。 AVStream 會自動從 A/B 佇列和 C 佇列複製。 它也會建立分割器物件,以透過釘選 A 和釘選 B 傳送相同的資料框架, (請注意,資料流程標頭) 不同。
KSPROCESSPIN結構的陣列如下所示:
迷你驅動程式在正常情況下必須與之互動的唯一針腳是 pin A。
為了簡化上述圖表,要求者和配置器會從圖表中省略。 圖表旨在只示範框架分割程式。