AVStream 使用邏輯閘道作為控制流程機制。 每個邏輯閘道都以 KSGATE 結構表示。
AVStream 會使用單一 AND 閘初始化每個篩選器或連接埠。 接著,迷你驅動程式可以使用這個機制來判斷該特定物件何時可以處理數據。 若要擷取針腳的處理控制閘,迷你驅動程式會呼叫 KsPinGetAndGate。 若要擷取篩選的處理控制閘道,請呼叫 KsFilterGetAndGate。
若要建立新的邏輯網關,迷你驅動程式會呼叫 KsGateInitializeAnd 或 KsGateInitializeOr。 您可以使用一個閘道的輸出作為另一個閘道的輸入,藉此轉送狀態轉換。 若要這樣做,請在這些呼叫中提供 NextOrGate 或 NextAndGate 參數。
若要關閉邏輯閘道的現有輸入,您可以呼叫 KsGateTurnInputOff。 minidriver 可能會進行此呼叫來停止並關閉活動的端點,或暫停處理一段不確定的時間。
同樣地,呼叫 KsGateTurnInputOn 以開啟特定閘道的現有輸入。
當線程準備好處理時,它會嘗試擷取控制處理物件的 AND 閘道輸入。 若要這樣做,迷你驅動程式會呼叫 KsGateCaptureThreshold。
如果 AND 閘道已開啟,AVStream 會關閉該閘道的一個輸入,然後開始處理。 由於閘門現在在處理過程中關閉,因此沒有其他執行緒可以捕獲閘門的 on 輸入。 一次只能有一個執行緒處理資料。
若要在不修改閘道的情況下檢查其狀態,小型驅動程式可以呼叫 KsGateGetStateUnsafe。 不過請注意,此函式不會處理同步處理。
若要刪除邏輯閘道,請呼叫 KsGateTerminateAnd 或 KsGateTerminateOr。 您要刪除的閘門必須位於閘門鏈的開頭。
若要將引腳作為輸入附加至邏輯閘,然後將相同的邏輯閘作為輸入連接至篩選器的 AND 閘,請呼叫 KsPinAttachAndGate 或 KsPinAttachOrGate。
確定閘機狀態
對於 AND 閘道,KSGATE 結構的 Count 成員值是 1 減去 關閉 輸入數目:
計數值 = 1 - (off 輸入數)
如果此值小於或等於零,則閘門會關閉。 如果此值大於零,則閘門開啟。
對於 OR 閘道,KSGATE 的 Count 成員值是閘道的 on 輸入數目:
計數 = ( 開啟輸入 數)
如果此值等於零,則閘門關閉。 如果 Count 大於零,則閘門會開啟。
AND 閘門的有效 計數 範圍為 1 或更少,OR 閘門的有效 計數 範圍為零或更大。 請勿將 Count 設定為無效值; AVStream 不會確認迷你驅動程式已將閘道設定為有效狀態。