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 |
---|---|
|
Réussite. |
|
Le graphe de filtres est toujours en transition vers l’état indiqué. |
|
Le graphe de filtre est suspendu, mais ne peut pas faire référence aux données. |
|
É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 |