Partager via


Épingler les connexions

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

Les filtres se connectent à leurs broches via l’interface IPin. Les broches de sortie se connectent aux broches d’entrée. Chaque connexion d’épingle a un type de média, décrit par la structure AM_MEDIA_TYPE.

Une application connecte des filtres en appelant des méthodes sur le Gestionnaire de graphes de filtre, jamais en appelant des méthodes sur les filtres ou les épingler eux-mêmes. L’application peut spécifier directement les filtres à connecter, en appelant la méthode IFilterGraph ::ConnectDirect ou méthode IGraphBuilder ::Connect ; ou il peut connecter des filtres indirectement, à l’aide d’une méthode de création de graphiques telle que IGraphBuilder ::RenderFile.

Pour que la connexion réussisse, les deux filtres doivent se trouver dans le graphique de filtre. L’application peut ajouter un filtre au graphique en appelant la méthode IFilterGraph ::AddFilter. Le Gestionnaire de graphiques de filtre peut également ajouter des filtres au graphique. Lorsqu’un filtre est ajouté, le Gestionnaire de graphes de filtre appelle la méthode IBaseFilter ::JoinFilterGraph du filtre pour notifier le filtre.

Le plan général du processus de connexion est le suivant :

  1. Le Gestionnaire de graphes de filtre appelle IPin ::Connect sur la broche de sortie, en passant un pointeur vers la broche d’entrée.
  2. Si la broche de sortie accepte la connexion, elle appelle IPin ::ReceiveConnection sur la broche d’entrée.
  3. Si la broche d’entrée accepte également la connexion, la tentative de connexion réussit et les broches sont connectées.

Certaines broches peuvent être déconnectées et reconnectées pendant que le filtre est actif. Ce type de reconnexion est appelé reconnexion dynamique. Pour plus d’informations, consultez génération de graphique dynamique. Toutefois, la plupart des filtres ne prennent pas en charge la reconnexion dynamique.

Les filtres sont généralement connectés dans l’ordre en aval( autrement dit, les broches d’entrée du filtre sont connectées avant ses broches de sortie. Un filtre doit toujours prendre en charge cet ordre de connexion. Certains filtres prennent également en charge les connexions dans l’ordre opposé : les broches de sortie commencent par les broches d’entrée. Par exemple, il peut être possible de connecter l’épingle de sortie d’un filtre MUX au filtre d’enregistreur de fichiers avant de connecter les broches d’entrée du filtre MUX.

Lorsqu’une broche Connect ou méthode ReceiveConnection est appelée, la broche doit vérifier qu’elle peut prendre en charge la connexion. Les détails dépendent du filtre particulier. Les tâches les plus courantes sont les suivantes :

  • Vérifier que le type de média est acceptable
  • Négocier un allocateur
  • Interrogez l’autre épingle pour les interfaces requises.