Récupération des événements
le gestionnaire de Graph de filtre expose trois interfaces qui prennent en charge la notification d’événements.
- IMediaEventSink contient la méthode pour les filtres pour la publication des événements.
- IMediaEvent contient des méthodes permettant aux applications de récupérer des événements.
- IMediaEventEx hérite de et étend l’interface IMediaEvent .
les filtres publient les notifications d’événements en appelant la méthode IMediaEventSink :: Notify sur le gestionnaire de Graph de filtre. Une notification d’événement se compose d’un code d’événement qui définit le type d’événement, et de deux paramètres qui fournissent des informations supplémentaires. En fonction du code d’événement, les paramètres peuvent contenir des pointeurs, des codes de retour, des temps de référence ou d’autres informations. Pour obtenir la liste complète des codes et paramètres d’événement, consultez codes de notification d’événement.
pour récupérer un événement à partir de la file d’attente, l’application appelle la méthode IMediaEvent :: GetEvent sur le gestionnaire de Graph de filtre. Cette méthode bloque jusqu’à ce qu’il y ait un événement à retourner ou jusqu’à ce qu’un délai spécifié se soit écoulé. En supposant qu’il existe un événement de mise en file d’attente, la méthode retourne avec le code d’événement et les deux paramètres d’événement. Après l’appel de GetEvent, une application doit toujours appeler la méthode IMediaEvent :: FreeEventParams pour libérer toutes les ressources associées aux paramètres de l’événement. Par exemple, un paramètre peut être une valeur BSTR qui a été allouée par le graphique de filtre.
L’exemple de code suivant montre comment récupérer des événements de la file d’attente.
long evCode;
LONG_PTR param1, param2;
HRESULT hr;
while (hr = pEvent->GetEvent(&evCode, ¶m1, ¶m2, 0), SUCCEEDED(hr))
{
switch(evCode)
{
// Call application-defined functions for each
// type of event that you want to handle.
}
hr = pEvent->FreeEventParams(evCode, param1, param2);
}
pour remplacer la gestion par défaut du filtre Graph Manager pour un événement, appelez la méthode IMediaEvent :: CancelDefaultHandling avec le code d’événement en tant que paramètre. Vous pouvez rétablir la gestion par défaut en appelant la méthode IMediaEvent :: RestoreDefaultHandling . Si le graphique de filtre n’effectue aucune gestion par défaut pour le code d’événement spécifié, l’appel de ces méthodes n’a aucun effet.