Partager via


Horloges de référence

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngineet audio/vidéo capture dans 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 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.]

L’une des fonctions du Gestionnaire de graphiques de filtre consiste à synchroniser tous les filtres du graphique sur 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 DirectShow, généralement le renderer audio, qui a accès à un minuteur matériel. En guise de secours, le Gestionnaire de graphes de filtre peut utiliser l’heure système.

Nominalement, une horloge de référence mesure l’heure dans les 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 à compter, dépend de l’implémentation, de sorte que la valeur retournée par GetTime n’est pas intrinsèquement significative. Ce qui importe, c’est le delta du moment où le graphique a commencé à s’exécuter.

Bien que la précision d’une horloge de référence puisse varier, les heures retournées par la méthode GetTime sont garanties pour augmenter monotoniquement. En d’autres termes, les heures d’horloge ne vont jamais revenir en arrière. Si une horloge de référence génère des heures d’horloge à partir d’une source matérielle et que l’horloge matérielle saute vers l’arrière (par exemple, s’il existe 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 rattrape. Pour plus d’informations, consultez classe CBaseReferenceClock.

horloge de référence par défaut

Le Gestionnaire de graphiques 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 source actif qui prend en charge IReferenceClock, utilisez ce filtre. Pour obtenir la définition d’une source dynamique, consultez sources dynamiques.
  • Si le graphique ne contient pas de filtres de source dynamique, utilisez n’importe quel filtre dans le graphique qui prend en charge IReferenceClock, en commençant par les renderers et en amont. Préférer les filtres connectés aux filtres non connectés. (Si le graphique affiche un flux audio, cette étape de l’algorithme sélectionne normalement le filtre du 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 graphes de filtre. Vous ne devez le faire que si vous avez une raison particulière de préférer une autre horloge.

Vous pouvez indiquer au Gestionnaire de graphiques de filtre de ne pas utiliser une horloge de référence en appelant SetSyncSource avec la valeur NULL. Par exemple, vous pouvez le faire pour traiter des exemples aussi rapidement que possible. Pour restaurer l’horloge de référence par défaut, appelez la méthode IFilterGraph ::SetDefaultSyncSource sur le Gestionnaire de graphes de filtre.

Chaque fois que l’horloge de référence change, le Gestionnaire de graphes de filtre avertit chaque filtre en appelant sa méthode IMediaFilter ::SetSyncSource. Les applications ne doivent jamais appeler cette méthode sur les filtres.

définition de l’horloge graphique

heures et horloges dans DirectShow