Horloges de référence
l’une des fonctions du gestionnaire de Graph de filtre consiste à synchroniser tous les filtres du graphique avec la même horloge, appelée horloge de référence.
Tout objet qui expose l’interface IReferenceClock peut agir comme l’horloge de référence. l’horloge de référence peut être fournie par un filtre de DirectShow, généralement le convertisseur audio, qui a accès à une horloge matérielle. en guise de solution de secours, le gestionnaire de Graph de filtre peut utiliser l’heure système.
De façon nominale, une horloge de référence mesure le temps en intervalles de 100 nanosecondes, bien que la précision réelle de l’horloge puisse être inférieure. Pour récupérer l’heure actuelle de l’horloge, appelez la méthode IReferenceClock :: getTime . La ligne de base de l’horloge (l’heure à partir de laquelle elle commence le comptage) dépend de l’implémentation. par conséquent, la valeur retournée par getTime n’est pas fondamentalement significative. Ce qui importe est le Delta à partir duquel le graphique commence à s’exécuter.
Bien que la précision d’une horloge de référence puisse varier, il est garanti que les temps retournés par la méthode getTime augmentent de manière monotone. En d’autres termes, les temps d’horloge ne seront jamais redirigés vers l’arrière. Si une horloge de référence génère des temps d’horloge à partir d’une source matérielle et que l’horloge matérielle passe en arrière (par exemple, s’il y a un ajustement de l’horloge), la méthode getTime doit continuer à retourner la dernière heure signalée jusqu’à ce que l’horloge matérielle soit interceptée. Pour plus d’informations, consultez CBaseReferenceClock, classe.
Horloge de référence par défaut
le gestionnaire de Graph de filtre sélectionne automatiquement une horloge de référence lors de l’exécution du graphique. Il utilise l’algorithme suivant pour sélectionner l’horloge :
- Si l’application a sélectionné une horloge (voir ci-dessous), utilisez cette horloge.
- Si le graphique contient un filtre de source dynamique qui prend en charge IReferenceClock, utilisez ce filtre. Pour obtenir la définition d’une source dynamique, consultez la page sources dynamiques.
- Si le graphique ne contient aucun filtre de source dynamique, utilisez un filtre dans le graphique qui prend en charge IReferenceClock, en commençant par les convertisseurs et en amont. Préférer les filtres connectés aux filtres non connectés. (Si le graphique effectue le rendu d’un flux audio, cette étape de l’algorithme sélectionne normalement le filtre de convertisseur audio.)
- Si aucun filtre ne fournit une horloge appropriée, utilisez l' horloge de référence système, qui est basée sur l’heure système.
Définition de l’horloge de référence
une application peut sélectionner une horloge en appelant la méthode IMediaFilter :: SetSyncSource sur le gestionnaire de Graph de filtre. Vous ne devez effectuer cette opération que si vous avez une raison particulière de préférer une autre horloge.
vous pouvez indiquer au filtre Graph Manager de ne pas utiliser une horloge de référence en appelant SetSyncSource avec la valeur NULL. Par exemple, vous pouvez effectuer cette opération pour traiter les échantillons le plus rapidement possible. pour restaurer l’horloge de référence par défaut, appelez la méthode IFilterGraph :: SetDefaultSyncSource sur le gestionnaire de Graph de filtre.
chaque fois que l’horloge de référence change, le gestionnaire de Graph de filtre notifie chaque filtre en appelant sa méthode IMediaFilter :: SetSyncSource . Les applications ne doivent jamais appeler cette méthode sur les filtres.