Condividi tramite


Metodo IMediaControl::GetState (control.h)

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, FMMediaEngine e Audio/Video Capture in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Il GetState metodo recupera lo stato del grafico del filtro, sospeso, in esecuzione o arrestato.

Le transizioni di stato non sono necessariamente sincrone. Pertanto, quando si chiama questo metodo, il grafico del filtro potrebbe essere in transizione a un nuovo stato. In tal caso, il metodo blocca fino al completamento della transizione o fino al termine del timeout specificato.

Sintassi

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

Parametri

[in] msTimeout

Durata del timeout, in millisecondi o INFINITE per specificare un timeout infinito.

[out] pfs

Riceve un membro dell'enumerazione FILTER_STATE .

Valore restituito

Restituisce un valore HRESULT . Di seguito sono indicati alcuni valori possibili.

Codice restituito Descrizione
S_OK
Operazione completata.
VFW_S_STATE_INTERMEDIATE
Il grafico del filtro è ancora in transizione allo stato indicato.
VFW_S_CANT_CUE
Il grafico del filtro viene sospeso, ma non può creare dati.
E_FAIL
Esito negativo.

Commenti

Le applicazioni possono usare questo metodo per determinare se la riproduzione è stata avviata dopo una chiamata a IMediaControl::Run. In genere, le applicazioni devono avere il proprio meccanismo per tenere traccia dello stato in cui hanno inserito il grafico del filtro. Le applicazioni usano in genere lo stato corrente per determinare quali controlli dell'interfaccia utente sono abilitati o disabilitati. Ad esempio, una volta che il grafico entra nello stato in esecuzione, l'applicazione potrebbe disabilitare un pulsante "Play" e abilitare i pulsanti "Stop" e "Pause".

Se il grafico del filtro si trova in una transizione a un nuovo stato, lo stato restituito è il nuovo stato, non lo stato precedente.

Questo metodo restituisce un errore se è presente una chiamata su un altro thread per modificare lo stato mentre questo metodo è bloccato.

Evitare di specificare un timeout infinito, perché i thread non possono elaborare i messaggi durante l'attesa in GetState. Se si chiama GetState dal thread che elabora i messaggi di Windows, specificare tempi di attesa di piccole dimensioni nella chiamata per rimanere reattivi all'input utente. Ciò è particolarmente importante quando l'origine è in streaming su una rete o da Internet perché le transizioni di stato in questi ambienti possono richiedere molto più tempo per completare.

Enumerazione FILTER_STATE . È possibile eseguire il cast della variabile come indicato di seguito:


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

Per altre informazioni sugli stati del grafico di filtro, vedere Stati di filtro.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione control.h (includere Dshow.h)
Libreria Strmiids.lib

Vedi anche

Codici errore e esito positivo

Interfaccia IMediaControl