Récupération d’événements

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est 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.]

Le Gestionnaire de graphes de filtre expose trois interfaces qui prennent en charge la notification d’événement.

Filtre les notifications d’événements en appelant la méthode IMediaEventSink::Notify sur le Gestionnaire de graphes 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. Selon le code d’événement, les paramètres peuvent contenir des pointeurs, des codes de retour, des heures 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 de la file d’attente, l’application appelle la méthode IMediaEvent::GetEvent sur le Gestionnaire de graphes de filtre. Cette méthode bloque jusqu’à ce qu’un événement soit retourné ou jusqu’à ce qu’un temps spécifié s’écoule. En supposant qu’il existe un événement mis en file d’attente, la méthode retourne avec le code d’événement et les deux paramètres d’événement. Après avoir appelé GetEvent, une application doit toujours appeler la méthode IMediaEvent::FreeEventParams pour libérer toutes les ressources associées aux paramètres d’événement. Par exemple, un paramètre peut être une valeur BSTR allouée par le graphe de filtre.

L’exemple de code suivant fournit un aperçu de la façon de récupérer les événements de la file d’attente.

long evCode;
LONG_PTR param1, param2;
HRESULT hr;
while (hr = pEvent->GetEvent(&evCode, &param1, &param2, 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 Gestionnaire de graphes de filtre pour un événement, appelez la méthode IMediaEvent::CancelDefaultHandling avec le code d’événement comme paramètre. Vous pouvez rétablir la gestion par défaut en appelant la méthode IMediaEvent::RestoreDefaultHandling . Si le graphe 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.

Notification d’événement dans DirectShow