Freigeben über


IGraphConfig::Reconnect-Methode (strmif.h)

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Die Reconnect -Methode führt eine dynamische Erneute Verbindung zwischen zwei Pins durch.

Syntax

HRESULT Reconnect(
  [in] IPin                *pOutputPin,
  [in] IPin                *pInputPin,
  [in] const AM_MEDIA_TYPE *pmtFirstConnection,
  [in] IBaseFilter         *pUsingFilter,
  [in] HANDLE              hAbortEvent,
  [in] DWORD               dwFlags
);

Parameter

[in] pOutputPin

Zeiger auf die IPin-Schnittstelle eines Ausgabestifts. Kann NULL sein, wobei pInputPin nicht NULL sein darf.

[in] pInputPin

Zeigen Sie die IPin-Schnittstelle auf einen Eingabenadel. Kann NULL sein, in diesem Fall darf pOutputPin nicht NULL sein.

[in] pmtFirstConnection

Zeiger auf eine AM_MEDIA_TYPE-Struktur , die den Medientyp für die erste Pinverbindung angibt, die während der erneuten Verbindung hergestellt wurde. Wenn dieser Parameter NULL ist, kann die erste Verbindung einen beliebigen Medientyp aufweisen.

[in] pUsingFilter

Zeiger auf einen optionalen Filter, der bei der Wiederherstellung der Verbindung verwendet werden soll. Der Filter muss bereits im Diagramm vorhanden sein. Kann NULL sein.

[in] hAbortEvent

Handle für ein Ereignis. Wenn der Aufrufer ein Filter ist, der einen seiner Datenverarbeitungsthreads aufruft, sollte dieser Parameter ein Handle für ein Ereignis sein, das signalisiert wird, wenn der Filter in einen beendeten Zustand versetzt wird. Andernfalls kann dieser Parameter NULL sein. Weitere Informationen finden Sie in den Hinweisen.

[in] dwFlags

Kombination von Flags aus der AM_GRAPH_CONFIG_RECONNECT_FLAGS Enumeration, die angeben, wie die Erneute Verbindung ausgeführt werden soll.

Rückgabewert

Gibt bei erfolgreicher Ausführung S_OK zurück. Gibt andernfalls einen Fehlercode zurück, der einer der folgenden Werte sein kann, oder andere, die nicht aufgeführt sind.

Rückgabecode Beschreibung
E_INVALIDARG
Ungültiges Argument. (Beispielsweise sind sowohl pInputPin als auch pOutputPinNULL.)
E_NOINTERFACE
Der Eingabenadel unterstützt IPinConnection nicht.
VFW_E_CANNOT_CONNECT
Filter kann nicht verbunden werden.
VFW_E_STATE_CHANGED
Der Status des Filters hat sich geändert. Der Vorgang konnte nicht abgeschlossen werden.

Hinweise

Wenn Sie nur einen Pin angeben, sucht die Methode nach dem anderen Pin. Standardmäßig schlägt die Suche jedoch fehl, wenn sie einen Filter erreicht, der dem Diagramm mithilfe der IFilterGraph::AddFilter-Methode hinzugefügt wurde. Um dieses Verhalten zu überschreiben, rufen Sie IGraphConfig::SetFilterFlags auf, und legen Sie das AM_FILTER_FLAGS_REMOVABLE-Flag für den Filter fest.

Der Prozess der Wiederherstellung umfasst mehrere Schritte, von denen die meisten innerhalb dieser Methode verarbeitet werden:

  1. Stellen Sie zunächst vor dem Aufrufen der -Methode sicher, dass Sie den Datenfluss entlang des Pfads blockieren, der neu konfiguriert wird. Anwendungen sollten dazu die IPinFlowControl::Block-Methode aufrufen. Wenn es sich bei dem Aufrufer um einen Filter und nicht um eine Anwendung handelt, kann der Filter den Datenfluss möglicherweise intern steuern.
  2. Die angegebenen Ausgabe- und Eingabenadeln definieren die Start- und Endpunkte für die erneute Verbindung. Der Eingabenadel muss die IPinConnection-Schnittstelle unterstützen. Wenn Sie einen dieser Pins nicht angegeben lassen (indem Sie einen NULL-Parameter übergeben), durchsucht die Methode das Filterdiagramm, um einen Kandidatenpin für die erneute Verbindung zu finden. (Um einen Eingabenadel zu finden, sucht es nach dem Ausgabepin. Um einen Ausgabepin zu finden, sucht es Upstream über den Eingabenadel.)
  3. Die Methode pusht alle ausstehenden Daten über das Filterdiagramm (über einen internen Aufruf von IGraphConfig::P ushThroughData).
  4. Wenn Sie einen Filter angegeben haben, der in das Diagramm eingefügt werden soll, verbindet die Methode den Startausgabepin mit dem Eingabestift des Filters und den Ausgabestift des Filters mit dem endgültigen Eingabestift. Wenn Sie keinen Filter angeben, verbindet die Methode einfach den Ausgabenadel mit dem Eingabenadel. In beiden Fällen fügt die Methode alle Transformationsfilter ein, die zum Abschließen der Verbindungen erforderlich sind. (Sie können dieses Verhalten jedoch überschreiben, indem Sie das entsprechende Flag festlegen. Weitere Informationen finden Sie in der Beschreibung des dwFlags-Parameters .)
  5. Schließlich versetzt die -Methode die neuen Filter in den Ausführungszustand. Es liegt am Aufrufer, den Datenfluss neu zu starten. Anwendungen können dies tun, indem sie IPinFlowControl::Block ohne Flags aufrufen.
Wenn ein Filter diese Methode in einem seiner eigenen Datenverarbeitungsthreads aufruft, entsteht das Potenzial für einen Deadlock. Die -Methode ruft eine Sperre für das Filterdiagramm ab, die verhindern kann, dass der Filter beim Empfangen eines Aufrufs von IMediaFilter::Stop beendet wird. Um diese Situation zu verhindern, verwendet die -Methode ein Handle für ein vom Filter bereitgestelltes Ereignisobjekt. Der Filter sollte das Ereignis signalisieren, wenn er einen Aufruf der Stop-Methode empfängt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile strmif.h (include Dshow.h)
Bibliothek Strmiids.lib

Weitere Informationen

Fehler- und Erfolgscodes

IGraphConfig-Schnittstelle