Connexions de broches
[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.]
Les filtres se connectent à leurs broches, via l’interface IPin . Les broches de sortie se connectent aux broches d’entrée. Chaque connexion de broche 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 en épingnant eux-mêmes. L’application peut spécifier directement les filtres à connecter, en appelant la méthode IFilterGraph::ConnectDirect ou 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 graphe. Lorsqu’un filtre est ajouté, le Gestionnaire de graphes de filtre appelle la méthode IBaseFilter::JoinFilterGraph du filtre pour notifier le filtre.
Les grandes lignes du processus de connexion sont les suivantes :
- Le Gestionnaire de graphes de filtre appelle IPin::Connect sur la broche de sortie, en passant un pointeur vers la broche d’entrée.
- Si la broche de sortie accepte la connexion, elle appelle IPin::ReceiveConnection sur la broche d’entrée.
- 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 graphiques dynamiques. 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. En d’autres termes, 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 inverse: les broches de sortie en premier, suivies des broches d’entrée. Par exemple, il peut être possible de connecter la broche de sortie d’un filtre MUX au filtre enregistreur de fichiers, avant de connecter les broches d’entrée du filtre MUX.
Quand la méthode Connect ou ReceiveConnection d’une broche est appelée, celle-ci 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érifiez que le type de média est acceptable
- Négocier un allocateur
- Interrogez l’autre broche pour connaître les interfaces requises.