Ablaufsteuerungsgates in AVStream

AVStream verwendet Logikgates als Steuerungsflussmechanismus. Jedes Logikgate wird durch eine KSGATE-Struktur dargestellt.

AVStream initialisiert jeden Filter oder Pin mit einem einzelnen AND-Gate. Ein Minidriver kann dann diesen Mechanismus verwenden, um zu bestimmen, wann dieses bestimmte Objekt Daten verarbeiten kann. Um das Verarbeitungssteuerungsgate für einen Pin abzurufen, ruft der Minidriver KsPinGetAndGate auf. Rufen Sie KsFilterGetAndGate auf, um das Verarbeitungssteuerungsgate für einen Filter abzurufen.

Um neue Logikgates zu erstellen, ruft der Minidriver KsGateInitializeAnd oder KsGateInitializeOr auf. Sie können die Ausgabe eines Gates als Eingabe für ein anderes Gate verwenden und dadurch Zustandsübergänge weiterleiten. Geben Sie hierzu in diesen Aufrufen einen NextOrGate - oder NextAndGate-Parameter an.

Um eine vorhandene Eingabe mit einem Logikgate zu schließen, können Sie KsGateTurnInputOff aufrufen. Der Minidriver kann diesen Aufruf ausführen, um einen aktiven Pin zu beenden und zu schließen oder die Verarbeitung auf unbestimmte Zeit anzuhalten.

Rufen Sie in ähnlicher Weise KsGateTurnInputOn auf , um eine vorhandene Eingabe für ein bestimmtes Gate zu öffnen.

Wenn ein Thread für die Verarbeitung bereit ist, versucht er, die Bei-Eingabe des AND-Gates zu erfassen, das die Verarbeitung für das Verarbeitungsobjekt steuert. Dazu ruft der Minidriver KsGateCaptureThreshold auf.

Wenn das AND-Gate geöffnet ist, deaktiviert AVStream eine Eingabe für das Gate, und die Verarbeitung beginnt. Da das Gate nun während der Verarbeitung geschlossen ist, kann kein anderer Thread die Eingabe des Gates erfassen. Nur ein Thread kann Daten gleichzeitig verarbeiten.

Um die status eines Gates zu überprüfen, ohne es zu ändern, kann der Minidriver KsGateGetStateUnsafe aufrufen. Beachten Sie jedoch, dass diese Funktion die Synchronisierung nicht verarbeitet.

Um ein Logic Gate zu löschen, rufen Sie KsGateTerminateAnd oder KsGateTerminateOr auf. Das Gate, das Sie löschen, muss sich am Anfang einer Gatekette befinden.

Rufen Sie KsPinAttachAndGate oder KsPinAttachOrGate auf, um einen Pin als Eingabe an ein Logikgate an ein Logikgate anzufügen und dann dasselbe Logikgate wie die Eingabe mit dem AND-Gate eines Filters zu verbinden.

Bestimmen des Gatestatus

Für ein AND-Gate ist der Wert des Count-Members der KSGATE-Struktur eins minus die Anzahl der Off-Eingaben :

Anzahl = 1 - (Anzahl der Off-Eingaben )

Wenn dieser Wert kleiner oder gleich 0 ist, wird das Gate geschlossen. Wenn dieser Wert größer als 0 ist, ist das Gate geöffnet.

Für ein OR-Gate ist der Wert des Count-Members von KSGATE die Anzahl von Eingaben für das Gate:

Count = (Anzahl von Eingaben )

Wenn dieser Wert gleich 0 ist, wird das Gate geschlossen. Wenn Count größer als 0 ist, ist das Gate geöffnet.

AND-Gates haben einen gültigen Count-Bereich von mindestens einem. OR-Gates haben einen gültigen Count-Bereich von 0 oder höher. Legen Sie Count nicht auf ungültige Werte fest. AVStream überprüft nicht, ob ein Minidriver das Gate auf einen gültigen Zustand festgelegt hat.