Connecter intelligente

le Connecter Intelligent est le mécanisme utilisé par le gestionnaire de Graph de filtres pour créer des graphiques de filtres. 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 avez des difficultés à créer un graphique de filtre et que vous souhaitez résoudre le problème, ou si vous écrivez votre propre filtre et que vous souhaitez le rendre disponible pour la génération automatique de graphiques.

la Connecter intelligente 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 consulte le registre et les correspondances avec le protocole (par exemple https:// ,), l’extension de nom de fichier ou un ensemble d' octets de vérification 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 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 démarre à partir d’une broche de sortie non connectée et fonctionne en aval, en ajoutant de nouveaux filtres en fonction des besoins. 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 créer une branche 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 être sauvegardée et réessayer, à l’aide d’un autre jeu de filtres.

Pour connecter chaque broche de sortie, la méthode Render effectue les opérations suivantes :

  1. si le code pin prend en charge l’interface IStreamBuilder , le gestionnaire de Graph de filtre délègue l’ensemble du processus à la méthode IStreamBuilder :: Render du pin. En exposant cette interface, le code PIN assume la responsabilité de la création du reste du graphique, vers le convertisseur. Toutefois, très peu de pin prennent en charge cette interface.

  2. le gestionnaire de Graph de filtre tente d’utiliser les filtres qui sont mis en cache dans la mémoire, le cas échéant. tout au long du processus de Connecter Intelligent, le gestionnaire de Graph de filtres peut mettre en cache les filtres des étapes précédentes du processus. (consultez également génération de Graph dynamique.)

  3. si le graphique de filtre contient des filtres avec des broches d’entrée non connectées, le gestionnaire de Graph de filtre 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. à partir de Windows 7, DirectShow contient une liste de filtres préférés pour certains sous-types de médias. s’il existe un filtre par défaut pour le type de média restitué, le gestionnaire de Graph de filtre tente de filtrer la suite. 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 Graph de filtre recherche le registre à l’aide de la méthode IFilterMapper2 :: EnumMatchingFilters . Il tente de faire correspondre les types de média préférés du pin de sortie par rapport aux types de média indiqués dans le registre.

    Chaque filtre est inscrit avec un mérite, une valeur numérique qui indique le degré de préférence du filtre par rapport à d’autres filtres. La méthode EnumMatchingFilters retourne des filtres par ordre de mérite, avec un mérite minimal de mérite _ n' _ _ utilise pas + 1. Il ignore les filtres avec un mérite de _ mérite _ n' _ utilise pas 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 avec un mérite de mérite _ n' _ _ utilise pas ou moins, même si les filtres de cette catégorie ont des valeurs de mérite plus élevées.

    à partir de Windows 7, DirectShow contient une liste de filtres bloqués pour certains sous-types de médias. le gestionnaire de Graph 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 en cours de l’application et sont ignorées une fois le processus terminé.

Pour résumer, la méthode Render tente des filtres dans l’ordre suivant :

  1. Utilisez IStreamBuilder.
  2. Essayez les filtres mis en cache.
  3. Essayez des 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 crée 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 restituer pour générer le reste du graphique.

IGraphBuilder :: Connecter

la méthode IGraphBuilder :: Connecter 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 variation 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 des 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 d’Graph génération avec GraphEdit

Génération du filtre Graph