Intelligent Connect
[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.]
Intelligent Connect est le mécanisme utilisé par le Gestionnaire de graphes de filtre pour créer des graphiques de filtre. Il se compose de plusieurs algorithmes associés qui sélectionnent des filtres et les ajoutent au graphique de filtre.
Lisez cette rubrique si vous rencontrez des problèmes lors de la création d’un graphique de filtre et souhaitez résoudre le problème, ou si vous écrivez votre propre filtre et souhaitez le rendre disponible pour la création automatique de graphiques.
Intelligent Connect implique les méthodesIGraphBuildersuivantes :
- IGraphBuilder ::AddSourceFilter
- IGraphBuilder ::Render
- IGraphBuilder ::RenderFile
- IGraphBuilder ::Connect
IGraphBuilder ::AddSourceFilter
La méthode IGraphBuilder ::AddSourceFilter ajoute un filtre source qui peut afficher un fichier spécifié. Tout d’abord, il examine le Registre et correspond au protocole (par exemple, https://
), l’extension de nom de fichier ou un ensemble d’octets de vérification prédéterminés vérifier les octets, qui sont des octets à des décalages particuliers dans le fichier qui correspondent à certains modèles. Pour plus d’informations, consultez Inscrire un type de fichier personnalisé. En supposant que la méthode localise un filtre source approprié, elle crée ensuite une instance de ce filtre, l’ajoute au graphique et appelle la méthode IFileSourceFilter ::Load du filtre avec le nom de fichier.
IGraphBuilder ::Render
La méthode IGraphBuilder ::Render génère une sous-section d’un graphique. Il commence à partir d’une broche de sortie non connectée et fonctionne en aval, en ajoutant de nouveaux filtres si nécessaire. Le filtre de départ doit déjà figurer dans le graphique. À chaque étape, la méthode Render recherche un filtre qui peut se connecter au filtre précédent. Le flux peut se brancher si un filtre de connexion a plusieurs broches de sortie. La recherche s’arrête lorsque chaque flux a un renderer. Si la méthode Render est bloquée, elle peut sauvegarder et réessayer, à l’aide d’un autre ensemble de filtres.
Pour connecter chaque broche de sortie, la méthode Render effectue les opérations suivantes :
Si la broche prend en charge l’interface IStreamBuilder, le Gestionnaire de graphes de filtre délègue l’intégralité du processus à la méthode IStreamBuilder ::Render de l’épingle. En exposant cette interface, l’épingle assume la responsabilité de créer le reste du graphique, jusqu’au renderer. Toutefois, très peu d’épingles prennent en charge cette interface.
Le Gestionnaire de graphiques de filtre tente d’utiliser des filtres mis en cache en mémoire, le cas échéant. Tout au long du processus Intelligent Connect, le Gestionnaire de graphes de filtre peut mettre en cache les filtres des étapes précédentes du processus. (Voir également génération de graphique dynamique.)
Si le graphique de filtre contient des filtres avec des broches d’entrée non connectées, le Gestionnaire de graphiques de filtre les tente ensuite. Vous pouvez forcer la méthode Render à essayer un filtre particulier en ajoutant ce filtre au graphique avant d’appeler Render.
À compter de Windows 7, DirectShow contient une liste de filtres préférés pour certains sous-types multimédias. S’il existe un filtre préféré pour le type de média en cours de rendu, le Gestionnaire de graphiques de filtre tente ce filtre suivant. Une application peut modifier la liste des filtres préférés à l’aide de l’interfaceIAMPluginControl. Les modifications apportées à la liste affectent le processus actuel de l’application et sont ignorées une fois le processus terminé.
Enfin, si aucun filtre approprié n’a été trouvé, le Gestionnaire de graphes de filtre recherche le Registre à l’aide de la méthode IFilterMapper2 ::EnumMatchingFilters. Il tente de faire correspondre les types de supports préférés de l’épingle de sortie par rapport aux types multimédias répertoriés dans le Registre.
Chaque filtre est inscrit avec un mérite, valeur numérique qui indique comment le filtre est préférable, par rapport à d’autres filtres. La méthode EnumMatchingFilters retourne des filtres dans l’ordre de mérite, avec un mérite minimal de MERIT_DO_NOT_USE + 1. Il ignore les filtres avec un mérite de MERIT_DO_NOT_USE ou moins. Les filtres sont également regroupés en catégories, définis par GUID. Les catégories elles-mêmes ont le mérite, et la méthode EnumMatchingFilters n’ignore aucune catégorie ayant un mérite de MERIT_DO_NOT_USE ou moins, même si les filtres de cette catégorie ont des valeurs de mérite plus élevées.
À compter de Windows 7, DirectShow contient une liste de filtres bloqués pour certains sous-types multimédias. Le Gestionnaire de graphes de filtre ignore les filtres de cette liste. Une application peut modifier la liste des filtres bloqués à l’aide de l’interfaceIAMPluginControl. Les modifications apportées à cette liste affectent le processus actuel de l’application et sont ignorées une fois le processus terminé.
Pour résumer, la méthode Render tente les filtres dans l’ordre suivant :
- Utilisez IStreamBuilder.
- Essayez les filtres mis en cache.
- Essayez des filtres dans le graphique.
- Windows 7 ou version ultérieure : essayez le filtre préféré pour le type de média, le cas échéant.
- Recherchez des filtres dans le Registre.
IGraphBuilder ::RenderFile
La méthode IGraphBuilder ::RenderFile génère un graphique de lecture par défaut à partir d’un nom de fichier. En interne, cette méthode utilise AddSourceFilter pour localiser le filtre source correct et Render pour générer le reste du graphique.
IGraphBuilder ::Connect
La méthode IGraphBuilder ::Connect connecte une broche de sortie à une broche d’entrée. Cette méthode ajoute des filtres intermédiaires si nécessaire, à l’aide d’une variante de l’algorithme décrit pour la méthode Render :
- Essayez une connexion directe entre les filtres, sans filtres intermédiaires.
- Essayez les filtres mis en cache.
- Essayez des filtres dans le graphique.
- Windows 7 ou version ultérieure : essayez le filtre préféré pour le type de média, le cas échéant.
- Recherchez des filtres dans le Registre.
Rubriques connexes
-
génération du de graphique de filtre