Recherche

Les filtres prennent en charge la recherche via l’interface IMediaSeeking . L’application interroge le Filtre Graph Manager pour IMediaSeeking et l’utilise pour émettre des commandes seek. Le gestionnaire de filtre Graph distribue chaque commande seek à tous les filtres du renderer dans le graphique. Chaque renderer transmet la commande en amont, via les broches de sortie des filtres en amont, jusqu’à ce qu’il atteigne un filtre qui peut exécuter la recherche. En règle générale, un filtre source ou un filtre d’analyseur, tel que le fractionneur AVI, effectue l’opération de recherche.

Lorsqu’un filtre effectue une opération de recherche, il vide toutes les données en attente. Le résultat est de réduire la latence des commandes seek, car les données existantes sont vidées à partir du graphique. Après une commande de recherche, le temps de flux est réinitialisé à zéro.

Le diagramme suivant illustre la séquence d’événements.

sequence of events

Si un filtre d’analyseur a plusieurs broches de sortie, il désigne généralement l’un d’eux pour accepter les commandes de recherche. Les autres broches rejettent ou ignorent les commandes de recherche qu’elles reçoivent. De cette façon, l’analyseur conserve tous ses flux synchronisés. Toutefois, toutes les broches de sortie doivent implémenter IMediaSeeking::GetCapabilities et IMediaSeeking::CheckCapabilities pour retourner les fonctionnalités de recherche du filtre. Cela garantit que le Gestionnaire de filtre Graph retourne la valeur correcte à l’application.

L’interface IMediaPosition a été déconseillée pour les filtres. Les clients Automation doivent toujours utiliser cette interface sur le Gestionnaire de filtre Graph, car IMediaSeeking n’est pas compatible Avec Automation, mais le Gestionnaire de filtre Graph traduit tous les appels IMediaPosition en appels IMediaSeeking.

Rinçage

Heure et horloges dans DirectShow