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, 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.]

L’une des fonctions du Gestionnaire de graphes de filtre est de synchroniser tous les filtres du graphe avec la même horloge, appelée horloge de référence.

Tout objet qui expose l’interface IReferenceClock peut faire office d’horloge de référence. L’horloge de référence peut être fournie par un filtre DirectShow, généralement le convertisseur 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 le temps par intervalles de 100 nanosecondes, même si la précision réelle de l’horloge peut être inférieure. Pour récupérer l’heure actuelle de l’horloge, appelez la méthode IReferenceClock::GetTime . La base de référence 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 significative par nature. Ce qui compte, c’est le delta entre le moment où le graphe 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 de manière monotone. En d’autres termes, les heures d’horloge ne reculeront jamais. 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 en arrière (par exemple, en cas d’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 son retard. 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 de source dynamique qui prend en charge IReferenceClock, utilisez ce filtre. Pour la définition d’une source dynamique, consultez Sources actives.
  • Si le graphe ne contient pas de filtres de source dynamique, utilisez un filtre dans le graphique qui prend en charge IReferenceClock, en commençant par les convertisseurs et en travaillant amont. Préférez 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 demander au Gestionnaire de graphes de filtre de ne pas utiliser d’horloge de référence en appelant SetSyncSource avec la valeur NULL. Par exemple, vous pouvez effectuer cette opération pour traiter des exemples 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 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 graphe

Heure et horloges dans DirectShow