Partager via


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

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

La GetState méthode récupère l’état du graphique de filtre ( suspendu, en cours d’exécution ou arrêté).

Les transitions d’état ne sont pas nécessairement synchrones. Par conséquent, lorsque vous appelez cette méthode, le graphique de filtre peut être en transition vers un nouvel état. Dans ce cas, la méthode se bloque jusqu’à la fin de la transition ou jusqu’à ce que le délai d’attente spécifié soit écoulé.

Syntaxe

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

Paramètres

[in] msTimeout

Durée du délai d’attente, en millisecondes, ou INFINITE pour spécifier un délai d’attente infini.

[out] pfs

Reçoit un membre de l’énumération FILTER_STATE .

Valeur retournée

Retourne une valeur HRESULT . Les valeurs possibles sont les suivantes.

Code de retour Description
S_OK
Réussite.
VFW_S_STATE_INTERMEDIATE
Le graphe de filtres est toujours en transition vers l’état indiqué.
VFW_S_CANT_CUE
Le graphe de filtre est suspendu, mais ne peut pas faire référence aux données.
E_FAIL
Échec.

Remarques

Les applications peuvent utiliser cette méthode pour déterminer si la lecture a démarré après un appel à IMediaControl ::Run. En règle générale, les applications doivent avoir leur propre mécanisme pour suivre l’état dans lequel elles ont placé le graphique de filtre. Les applications utilisent généralement l’état actuel pour déterminer quels contrôles d’interface utilisateur sont activés ou désactivés. Par exemple, une fois que le graphique passe à l’état d’exécution, l’application peut désactiver un bouton « Lecture » et activer les boutons « Arrêter » et « Suspendre ».

Si le graphique de filtre est en transition vers un nouvel état, l’état retourné est le nouvel état, et non l’état précédent.

Cette méthode retourne une erreur s’il existe un appel sur un autre thread pour modifier l’état pendant que cette méthode est bloquée.

Évitez de spécifier un délai d’expiration d’INFINITE, car les threads ne peuvent pas traiter les messages en attente dans GetState. Si vous appelez GetState à partir du thread qui traite les messages Windows, spécifiez de petits temps d’attente sur l’appel afin de rester réactif aux entrées de l’utilisateur. Cela est particulièrement important lorsque la source diffuse en continu sur un réseau ou à partir d’Internet, car les transitions d’état dans ces environnements peuvent prendre beaucoup plus de temps.

Énumération FILTER_STATE . Vous pouvez caster la variable comme suit :


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

Pour plus d’informations sur les états de graphe de filtre, consultez Filtrer les états.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête control.h (include Dshow.h)
Bibliothèque Strmiids.lib

Voir aussi

Codes d’erreur et de réussite

IMediaControl, interface