Connexion intelligente

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in 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 Audio/Video Capture dans Media Foundation au lieu de DirectShow, si 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 graphe de filtres pour générer des graphiques de filtre. Il se compose de plusieurs algorithmes associés qui sélectionnent des filtres et les ajoutent au graphique de filtres.

Lisez cette rubrique si vous rencontrez des difficultés pour créer un certain graphe de filtre et souhaitez résoudre le problème, ou si vous écrivez votre propre filtre et souhaitez le rendre disponible pour la génération automatique de graphiques.

Intelligent Connect implique les méthodes IGraphBuilder suivantes :

IGraphBuilder::AddSourceFilter

La méthode IGraphBuilder::AddSourceFilter ajoute un filtre source qui peut restituer un fichier spécifié. Tout d’abord, il recherche dans le Registre et correspond au protocole (par https://exemple), l’extension de nom de fichier ou un ensemble d’octets case activée prédéterminés, qui sont des octets à des décalages particuliers dans le fichier qui correspondent à certains modèles. Pour plus d’informations, consultez Inscription d’un type de fichier personnalisé. En supposant que la méthode localise un filtre source approprié, elle crée 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 démarre à 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à se trouver 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 convertisseur. 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 :

  1. Si l’épingle prend en charge l’interface IStreamBuilder , le Gestionnaire de graphes de filtres délègue l’ensemble du processus à la méthode IStreamBuilder::Render de l’épingle. En exposant cette interface, l’épingle assume la responsabilité de la génération du reste du graphe, jusqu’au convertisseur. Toutefois, très peu d’épingles prennent en charge cette interface.

  2. Le Gestionnaire de graphe de filtres 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. (Consultez également Génération de graphiques dynamiques.)

  3. Si le graphe de filtres contient des filtres avec des broches d’entrée non connectées, le Gestionnaire de graphe de filtres les essaie ensuite. Vous pouvez forcer la méthode Render à essayer un filtre particulier en ajoutant ce filtre au graphique avant d’appeler Render.

  4. À compter de Windows 7, DirectShow a une liste de filtres préférés pour certains sous-types de médias. S’il existe un filtre préféré pour le type de média qui est affiché, le Gestionnaire de graphe de filtre tente ensuite ce filtre. Une application peut modifier la liste des filtres préférés à l’aide de l’interface IAMPluginControl . Les modifications apportées à la liste affectent le processus actuel de l’application et sont ignorées une fois le processus terminé.

  5. Enfin, si aucun filtre approprié n’a été trouvé, le Gestionnaire de graphes de filtre effectue une recherche dans le Registre à l’aide de la méthode IFilterMapper2::EnumMatchingFilters . Il tente de mettre en correspondance les types de médias préférés de l’épingle de sortie par rapport aux types de médias répertoriés dans le Registre.

    Chaque filtre est inscrit avec une valeur, une valeur numérique qui indique à quel point le filtre est préférable par rapport aux autres filtres. La méthode EnumMatchingFilters retourne des filtres par ordre de mérite, avec un mérite minimal de MERIT_DO_NOT_USE + 1. Il ignore les filtres ayant un mérite de MERIT_DO_NOT_USE ou moins. Les filtres sont également regroupés en catégories, définies par GUID. Les catégories elles-mêmes ont un mérite, et la méthode EnumMatchingFilters ignore toute 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 a une liste de filtres bloqués pour certains sous-types de médias. Le Gestionnaire de graphe de filtre ignore les filtres de cette liste. Une application peut modifier la liste des filtres bloqués à l’aide de l’interface IAMPluginControl . 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 :

  1. Utilisez IStreamBuilder.
  2. Essayez les filtres mis en cache.
  3. Essayez les filtres dans le graphique.
  4. Windows 7 ou version ultérieure : essayez le filtre par défaut pour le type de média, le cas échéant.
  5. 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 approprié, 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 :

  1. Essayez une connexion directe entre les filtres, sans filtres intermédiaires.
  2. Essayez les filtres mis en cache.
  3. Essayez les filtres dans le graphique.
  4. Windows 7 ou version ultérieure : essayez le filtre par défaut pour le type de média, le cas échéant.
  5. Recherchez des filtres dans le Registre.

Filtrer les catégories

Mérite

Simulation de la création de graphiques avec GraphEdit

Génération du graphe de filtres