釘選中心處理

撰寫 AVStream 迷你驅動程式時,您會提供使用兩種處理範例之一的篩選:針腳中心處理或 篩選中心處理

以針腳為中心的處理表示當新的畫面抵達釘選佇列時,AVStream 會呼叫迷你驅動程式的針腳進程分派常式。

篩選中心處理表示當每個具現化針腳上有可用的資料框架時,AVStream 會呼叫 minidriver 的篩選程式分派常式。 請注意,這些定義會指定預設行為;minidrivers 可以藉由在 KSPIN_DESCRIPTOR_EX 結構中設定旗標來修改預設行為。

一般而言,軟體篩選器會使用以篩選為中心的處理,而硬體篩選準則會使用以針腳為中心的處理。 例如,轉換或轉譯資料的硬體可以在釘選中心篩選上路由傳送資料。 在某些情況下,這些角色可能會反轉。

為了提供以針腳為中心的篩選準則,minidriver 會在每個KSPIN_DISPATCH結構中提供AVStrMiniPinProcess回呼常式的指標;請勿在KSFILTER_DISPATCH結構中提供處理分派。

如果 minidriver 未修改KSPIN_DESCRIPTOR_EX結構中的旗標設定,AVStream 會在三種情況下呼叫廠商提供的 AVStrMiniPinProcess 回呼常式:

  • 針腳會轉換成最小處理狀態。 框架必須已存在於佇列中,而且針腳必須從最小處理狀態轉換為至少處理狀態。

  • 新的畫面送達。 針腳至少必須處於最低處理狀態,且前置邊緣前面不得有畫面格。

  • Minidriver 會明確呼叫 KsPinAttemptProcessing

根據預設,暫停是最小處理狀態。

此外,如果針腳的 AND 閘道關閉,AVStream 不會呼叫針腳進程分派。 如果您使用 KSGATEXxx 常式將額外的關閉輸入新增至針腳的 AND 閘道,例如,將不會呼叫您的進程分派。

AVStream 呼叫 AVStrMiniPinProcess時,它會提供具有可用資料的 pin 物件的指標。 接著,迷你驅動程式的處理分派可以藉由呼叫KsPinGetLeadingEdgeStreamPointer來取得前置邊緣指標。 接著,Minidrivers 會使用 資料流程指標 API 運算元據流資料。

使用釘選中心處理的迷你驅動程式可以在 AVStream 呼叫 AVStrMiniPinProcess 分派時修改,方法是在相關的 KSPIN_DESCRIPTOR_EX 結構中設定旗標。 KSPIN_DESCRIPTOR_EX參考頁面上的旗標描述與實作釘選中心篩選的廠商特別相關。

如果 minidriver 透過KsPinAcquireProcessingMutex保留處理 Mutex,處理嘗試可能會失敗。 如果迷你驅動程式直接使用KSGATE* 呼叫操作閘道,也可能會發生問題。

WINDOWS 驅動程式套件 範例中的 AVStream 模擬硬體範例驅動程式 (AVSHwS) 是模擬硬體的釘選中心擷取驅動程式。 Avshws 範例示範如何 透過 AVStream 實作 DMA