Share via


Vue d’ensemble de la création de graphiques

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

Pour créer un graphique de filtre, commencez par créer un instance du Gestionnaire de graphe de filtres :

IGraphBuilder* pIGB;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
    NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
    (void **)&pIGB);

Le Gestionnaire de graphe de filtres prend en charge les méthodes de création de graphiques suivantes :

  • IFilterGraph::ConnectDirect tente d’établir une connexion directe entre deux broches. Si les broches ne peuvent pas se connecter, la méthode échoue.
  • IGraphBuilder::Connect connecte deux broches. Si possible, il établit une connexion directe. Sinon, il utilise des filtres intermédiaires pour terminer la connexion.
  • IGraphBuilder::Render démarre à partir d’une broche de sortie et génère le reste du graphique. Cette méthode ajoute des filtres en fonction des besoins, en travaillant en aval, jusqu’à ce qu’elle atteigne un filtre de renderer.
  • IGraphBuilder::RenderFile génère un graphique de lecture de fichiers complet.
  • IFilterGraph::AddFilter ajoute un filtre au graphique. Il ne connecte pas le filtre. Vous devez créer le filtre avant d’appeler cette méthode, soit en appelant CoCreateInstance , soit en utilisant le mappeur de filtre ou l’énumérateur de périphériques système.

Ces méthodes fournissent trois approches de base pour créer le graphe :

  1. Le Gestionnaire de graphe de filtre génère l’intégralité du graphique.
  2. Le Gestionnaire de graphe de filtre génère une partie du graphique.
  3. L’application génère l’intégralité du graphique.

Le Gestionnaire de graphe de filtre génère l’intégralité du graphe

Si vous souhaitez simplement lire un fichier créé dans un format reconnu, tel qu’AVI, MPEG, WAV ou MP3, utilisez la méthode RenderFile . L’article Comment lire un fichier montre comment procéder.

La méthode RenderFile commence par rechercher dans le Registre un filtre source qui peut analyser le fichier. Il utilise le protocole (par exemple, « https:// » dans l’URL), l’extension de fichier ou des modèles d’octets prédéfinis dans le fichier pour déterminer le filtre source. Pour plus d’informations, consultez Inscription d’un type de fichier personnalisé.

Pour générer le reste du graphique, le Gestionnaire de graphe de filtre utilise un processus itératif dans lequel il prend en charge les types de médias pris en charge par un filtre sur ses broches de sortie, puis recherche dans le Registre des filtres qui acceptent ce type de média comme entrée. Il utilise plusieurs critères pour affiner la recherche et hiérarchiser les filtres :

  • La catégorie de filtre identifie les fonctionnalités générales du filtre.
  • Le type de média décrit le type de données que le filtre peut accepter en tant qu’entrée ou livrer en tant que sortie.
  • Le mérite détermine l’ordre dans lequel les filtres sont essayés. Si deux filtres de la même catégorie de filtre prennent tous les deux en charge les mêmes types d’entrée, le Gestionnaire de graphes de filtres sélectionne celui qui a la valeur de mérite la plus élevée. Certains filtres reçoivent volontairement une valeur de faible mérite, car ils sont conçus à des fins spécialisées et ne doivent être ajoutés au graphe que par l’application.

Le Gestionnaire de graphe de filtre utilise l’objet Filter Mapper pour effectuer une recherche dans le Registre.

À mesure que chaque filtre est ajouté, le Gestionnaire de graphes de filtre tente de le connecter à la broche de sortie du filtre précédent. Les filtres négocient pour déterminer s’ils peuvent se connecter et, le cas échéant, quel type de média utiliser pour la connexion. Si le nouveau filtre ne peut pas se connecter, le Gestionnaire de graphe de filtre l’ignore et tente un autre filtre. Ce processus se poursuit jusqu’à ce que chaque flux soit rendu.

Le gestionnaire de graphe de filtres génère une partie du graphe

Pour aller au-delà de la simple lecture d’un fichier, votre application doit effectuer au moins une partie du travail de création de graphiques. Par exemple, une application de capture vidéo doit sélectionner un filtre source de capture et l’ajouter au graphique. Si vous écrivez des données dans un fichier AVI, vous devez ajouter les filtres AVI Mux et File Writer au graphique. Toutefois, il est souvent possible de laisser le Gestionnaire de graphe de filtres terminer le graphique. Par exemple, vous pouvez afficher une épingle pour l’aperçu en appelant la méthode Render .

L’application génère l’intégralité du graphe

Dans certains scénarios, votre application peut avoir besoin de générer le graphique en ajoutant et en connectant chaque filtre. Dans ce cas, vous savez probablement précisément quels filtres doivent être ajoutés au graphique. Avec cette approche, l’application ajoute chaque filtre en appelant AddFilter, énumère les broches sur les filtres et les connecte en appelant Connect ou ConnectDirect.

Création de graphiques avec le Générateur de graphiques de capture

Énumération des appareils et des filtres

Énumération d’objets dans un graphique de filtre

Techniques de Graph-Building générales

Génération du graphe de filtres