Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Das dieser Seite zugeordnete Feature DirectShow-ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngineund Audio/Video Capture in Media Foundationersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code MediaPlayer-, IMFMediaEngine und Audio-/Videoaufnahme in Media Foundation anstelle von DirectShow-verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, um die neuen APIs zu verwenden, falls möglich umgeschrieben werden.]
Plug-In-Distributoren (PIDs) sind eine Möglichkeit, die Funktionalität des Filterdiagramm-Managers zu erweitern. Ein Plug-In-Verteiler ist ein COM-Objekt, das der Filterdiagramm-Manager zur Laufzeit aggregiert. Anwendungen erhalten Zugriff auf die PID über den Filterdiagramm-Manager.
Wenn der Filterdiagramm-Manager für eine Schnittstelle abgefragt wird, die nicht unterstützt wird, durchsucht er die Registrierung nach einem Schlüssel mit dem folgenden Formular:
HKEY_CLASSES_ROOT\Interface\IID\Distributor
IID ist eine Zeichenfolge, die den Schnittstellenbezeichner enthält. Wenn der Registrierungseintrag vorhanden ist, definiert der Wert des Eintrags den Klassenbezeichner (CLSID) einer PID, die die Schnittstelle unterstützt. Der Filterdiagramm-Manager aggregiert die PID und gibt einen Schnittstellenzeiger zurück und fungiert damit als äußere IUnknown- für die PID. Wenn die Anwendung Methoden auf der Schnittstelle aufruft, wird sie tatsächlich für die PID aufgerufen. Das Vorhandensein der PID ist jedoch für die Anwendung transparent.
Der Begriff Verteiler stammt aus der Tatsache, dass eine PID ihren äußeren IUnknown Zeiger für Schnittstellen im Filterdiagramm-Manager abfragen kann. Durch Aufrufen der IFilterGraph::EnumFilters Methode kann die PID die Filter im Diagramm aufzählen und Methodenaufrufe an diese Filter verteilen. Auf diese Weise kann eine PID als einzelner Kontrollpunkt für die Anwendung dienen, um Methoden für Filter aufzurufen.
Wenn der Filterdiagramm-Manager eine PID aggregiert, fragt er die PID für die IDistributorNotify Schnittstelle ab. Wenn die PID diese Schnittstelle unterstützt, verwendet der Filterdiagramm-Manager sie, um die PID über Änderungen im Diagramm zu benachrichtigen:
- Wenn das Filterdiagramm zwischen ausführungs-, angehaltenen und angehaltenen Zuständen wechselt, wird IDistributorNotify::Run, IDistributorNotify::P auseoder IDistributorNotify::Stopaufgerufen.
- Wenn eine Referenzuhr festgelegt wird, ruft der Filterdiagramm-Manager IDistributorNotify::SetSyncSourceauf.
- Wenn Filter hinzugefügt oder entfernt werden oder Pinverbindungen geändert werden, ruft der Filterdiagramm-Manager IDistributorNotify::NotifyGraphChangeauf.
Um eine benutzerdefinierte PID zu implementieren, erstellen Sie ein COM-Objekt, das Aggregation unterstützt. Es muss eine Schnittstelle unterstützen, die der Filterdiagramm-Manager noch nicht unterstützt. Optional kann die IDistributorNotify Schnittstelle unterstützt werden.
Wenn die PID Schnittstellenzeiger aus dem Filterdiagramm-Manager abruft, sollte sie sofort freigegeben werden. Andernfalls kann eine Zirkelbezugsanzahl erstellt werden, wodurch verhindert werden kann, dass der Filterdiagramm-Manager zerstört wird. Das Halten einer Verweisanzahl für den Filterdiagramm-Manager ist in jedem Fall unnötig, da der Filterdiagramm-Manager die Lebensdauer der PID steuert.
Da eine PID speziell für die Aggregation durch den Filterdiagramm-Manager entwickelt wurde, sollten Sie dies in der Konstruktormethode der PID erzwingen. Überprüfen Sie, ob der äußere IUnknown Zeiger NULL-ist, und geben Sie ggf. den Fehlercode VFW_E_NEED_OWNER zurück. (Siehe Fehler- und Erfolgscodes.) Um zu verhindern, dass andere Objekte die PID aggregieren, können Sie den äußeren IUnknown Zeiger für die IGraphBuilder--Schnittstelle abfragen. Zurückgeben eines Fehlercodes, wenn das Objekt IGraphBuilder-nicht verfügbar macht.