Freigeben über


Filtersteuerelement-Mutex in AVStream

Jeder AVStream-Filter instance verfügt über einen zugeordneten Filtersteuerelement-Mutex. Dieser Mutex wird verwendet, um den Zugriff auf die Objekthierarchie vom Filter nach unten mit einzelnen Pins zu synchronisieren. Die Erstellung und Zerstörung von Filtern und Pins wird mit diesem Mutex synchronisiert.

Die Objekthierarchie ist garantiert nur von einem bestimmten Filter instance nach unten stabil, während das Mutex des Filtersteuerelements gehalten wird. Dementsprechend muss der Minidriver den Mutex des Filtersteuerelements abrufen, bevor er die Objekthierarchie unterhalb der Filterebene mit den Funktionen KsXxxGetFirstChildXxx und KsXxxGetNextSiblingXxx durchläuft.

Der Mutex des Filtersteuerelements wird auch verwendet, um Zustandsübergänge zu synchronisieren.

AVStream ruft den Mutex des Filtersteuerelements ab, wenn es Eigenschaften verarbeitet, die erfordern, dass die Hierarchie stabil bleibt, z. B. beim Ändern des Deskriptors.

Beachten Sie, dass für die Objekthierarchie unter jedem einzelnen Filter ein einzelner Filtersteuerelement-Mutex verwendet wird. Dies bedeutet, dass ein Pinobjekt das Mutex des übergeordneten Filtersteuerelements verwendet, wenn ein Minidriver eine Funktion mit einem Pin-Objekt aufruft.

AVStream enthält den Mutex der Filtersteuerung im Namen des Minidrivers, wenn er die folgenden von Minitreibern bereitgestellten Routinen aufruft:

Ähnlich wie beim Gerätemutex darf der Mutex der Filtersteuerung nicht rekursiv abgerufen werden. Wenn AVStream z. B. einen Rückruf an einen Minitreiber für einen Create-Dispatch im Kontext von Thread A vornimmt und der Minitreiber später versucht, den Mutex aus Thread A abzurufen, wird thread A deadlocks mit sich selbst.

Ein Deadlock kann auftreten, wenn Sie eine der folgenden Aktionen ausführen:

  • Versuchen Sie, den Mutex des Filtersteuerelements innerhalb der Prozessroutine zu erhalten.

  • Versuchen Sie, den Mutex des Filtersteuerelements entweder innerhalb des Standby- oder Wake-Rückrufs abzurufen.

Verwenden Sie die folgenden Funktionen, um den Mutex des Filtersteuerelements zu bearbeiten:

KsAcquireControl, KsFilterAcquireControl, KsPinAcquireControl, KsReleaseControl, KsFilterReleaseControl, KsPinReleaseControl