Freigeben über


IMediaControl::GetState-Methode (control.h)

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Die GetState -Methode ruft den Status des Filterdiagramms ab – angehalten, ausgeführt oder beendet.

Zustandsübergänge sind nicht unbedingt synchron. Wenn Sie diese Methode aufrufen, befindet sich das Filterdiagramm daher möglicherweise im Übergang zu einem neuen Zustand. In diesem Fall blockiert die -Methode, bis der Übergang abgeschlossen ist oder das angegebene Timeout verstrichen ist.

Syntax

HRESULT GetState(
  [in]  LONG          msTimeout,
  [out] OAFilterState *pfs
);

Parameter

[in] msTimeout

Dauer des Timeouts in Millisekunden oder INFINITE, um ein unbegrenztes Timeout anzugeben.

[out] pfs

Empfängt einen Member der FILTER_STATE-Enumeration .

Rückgabewert

Gibt einen HRESULT-Wert zurück. Die folgenden Werte sind möglich.

Rückgabecode BESCHREIBUNG
S_OK
Erfolg.
VFW_S_STATE_INTERMEDIATE
Das Filterdiagramm befindet sich noch im Übergang zum angegebenen Zustand.
VFW_S_CANT_CUE
Das Filterdiagramm ist angehalten, kann jedoch keine Daten abrufen.
E_FAIL
Fehler.

Hinweise

Anwendungen können diese Methode verwenden, um zu bestimmen, ob die Wiedergabe nach einem Aufruf von IMediaControl::Run gestartet wurde. Im Allgemeinen sollten Anwendungen über einen eigenen Mechanismus zum Nachverfolgen des Zustands verfügen, in den sie das Filterdiagramm eingefügt haben. Anwendungen verwenden in der Regel den aktuellen Zustand, um zu bestimmen, welche Benutzeroberflächensteuerelemente aktiviert oder deaktiviert sind. Wenn das Diagramm beispielsweise in den Ausführungszustand wechselt, kann die Anwendung eine Schaltfläche "Wiedergabe" deaktivieren und die Schaltflächen "Beenden" und "Anhalten" aktivieren.

Wenn sich das Filterdiagramm in einem Übergang zu einem neuen Zustand befindet, ist der zurückgegebene Zustand der neue Zustand, nicht der vorherige Zustand.

Diese Methode gibt einen Fehler zurück, wenn ein Aufruf eines anderen Threads erfolgt, um den Zustand zu ändern, während diese Methode blockiert wird.

Vermeiden Sie die Angabe eines Timeouts von INFINITE, da Threads während des Wartens in GetStatekeine Nachrichten verarbeiten können. Wenn Sie über den Thread aufrufen GetState , der Windows-Nachrichten verarbeitet, geben Sie kleine Wartezeiten für den Anruf an, um auf Benutzereingaben reagieren zu können. Dies ist besonders wichtig, wenn die Quelle über ein Netzwerk oder aus dem Internet gestreamt wird, da Zustandsübergänge in diesen Umgebungen deutlich mehr Zeit in Anspruch nehmen können.

Die FILTER_STATE-Enumeration . Sie können die Variable wie folgt umwandeln:


FILTER_STATE fs;
hr = pControl->GetState(msTimeOut, (OAFilterState*)&fs);

Weitere Informationen zu Filterdiagrammzuständen finden Sie unter Filterstatus.

Anforderungen

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

Weitere Informationen

Fehler- und Erfolgscodes

IMediaControl-Schnittstelle