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 |
---|---|
|
Erfolg. |
|
Das Filterdiagramm befindet sich noch im Übergang zum angegebenen Zustand. |
|
Das Filterdiagramm ist angehalten, kann jedoch keine Daten abrufen. |
|
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 GetState
keine 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 |