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