Compartilhar via


Método IMediaControl::GetState (control.h)

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

O GetState método recupera o estado do grafo de filtro — pausado, em execução ou interrompido.

As transições de estado não são necessariamente síncronas. Portanto, quando você chama esse método, o grafo de filtro pode estar em transição para um novo estado. Nesse caso, o método bloqueia até que a transição seja concluída ou até que o tempo limite especificado se especifique.

Sintaxe

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

Parâmetros

[in] msTimeout

Duração do tempo limite, em milissegundos ou INFINITE para especificar um tempo limite infinito.

[out] pfs

Recebe um membro da enumeração FILTER_STATE .

Retornar valor

Retorna um valor HRESULT . Os possíveis valores incluem os seguintes.

Código de retorno Descrição
S_OK
Êxito.
VFW_S_STATE_INTERMEDIATE
O grafo de filtro ainda está em transição para o estado indicado.
VFW_S_CANT_CUE
O grafo de filtro está pausado, mas não pode sinalizar dados.
E_FAIL
Falha.

Comentários

Os aplicativos podem usar esse método para determinar se a reprodução foi iniciada após uma chamada para IMediaControl::Run. Geralmente, os aplicativos devem ter seu próprio mecanismo para rastrear em qual estado colocaram o grafo de filtro. Os aplicativos normalmente usam o estado atual para determinar quais controles de interface do usuário estão habilitados ou desabilitados. Por exemplo, depois que o grafo entrar no estado em execução, o aplicativo poderá desabilitar um botão "Reproduzir" e habilitar os botões "Parar" e "Pausar".

Se o grafo de filtro estiver em uma transição para um novo estado, o estado retornado será o novo estado, não o estado anterior.

Esse método retornará um erro se houver uma chamada em outro thread para alterar o estado enquanto esse método estiver bloqueado.

Evite especificar um tempo limite do INFINITE, pois os threads não podem processar mensagens enquanto aguardam no GetState. Se você chamar GetState do thread que processa mensagens do Windows, especifique pequenos tempos de espera na chamada para permanecer responsivo à entrada do usuário. Isso é especialmente importante quando a origem está transmitindo por uma rede ou pela Internet porque as transições de estado nesses ambientes podem levar muito mais tempo para serem concluídas.

A enumeração FILTER_STATE . Você pode converter a variável da seguinte maneira:


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

Para obter mais informações sobre estados de grafo de filtro, consulte Estados de filtro.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho control.h (inclua Dshow.h)
Biblioteca Strmiids.lib

Confira também

Códigos de erro e êxito

IMediaControl Interface