Share via


Création d’un graphe de filtre VMR-9

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

Étant donné que le filtre video mixing renderer 9 (VMR-9) n’est pas le convertisseur vidéo par défaut, une application qui utilise le VMR-9 doit explicitement l’ajouter au graphique et le connecter. Cette section présente deux approches différentes pour créer des graphiques de filtre avec VMR-9.

Utilisation du Générateur de graphiques de capture

Capture Graph Builder est un objet d’assistance pour la création de graphiques de filtres personnalisés. Vous pouvez l’utiliser pour générer des graphiques VMR-9 comme suit :

  1. Créez et initialisez capture Graph Builder, comme décrit dans la rubrique À propos du Générateur de graphiques de capture.

  2. Appelez CoCreateInstance pour créer le VMR-9 :

    IBaseFilter *pVmr = NULL;
    hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0, 
        CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVmr);
    
  3. Appelez IFilterGraph::AddFilter sur le Gestionnaire de graphe de filtre pour ajouter le VMR-9 au graphe de filtre :

    hr = pGraph->AddFilter(pVmr, L"VMR9");
    
  4. Appelez IGraphBuilder::AddSourceFilter pour ajouter un filtre source pour le fichier vidéo :

    IBaseFilter *pSource;
    hr = pGraph->AddSourceFilter(L"C:\\Example.avi", L"Source1", &pSource);
    
  5. Appelez la méthode ICaptureGraphBuilder2::RenderStream pour restituer le flux vidéo sur le VMR :

    hr = pBuild->RenderStream(0, 0, pSource, 0, pVmr);  
    
  6. Si vous le souhaitez, appelez à nouveau RenderStream pour restituer le flux audio :

    hr = pBuild->RenderStream(0, &MEDIATYPE_Audio, pSource, 0, NULL);
    

Vous pouvez mélanger plusieurs flux vidéo en appelant AddSourceFilter et RenderStream pour chaque fichier source.

Utilisation du Gestionnaire de graphe de filtre

Si vous préférez ne pas utiliser le Générateur de graphiques de capture, vous pouvez créer un graphe VMR-9 simplement à l’aide de méthodes sur le Gestionnaire de graphes de filtre, comme suit :

  1. Créez le VMR-9 et ajoutez-le au graphique, comme indiqué dans la procédure précédente.
  2. Utilisez AddSourceFilter pour ajouter un filtre source pour le fichier vidéo, comme indiqué dans la procédure précédente.
  3. Si vous souhaitez restituer l’audio, créez un instance du filtre DirectSound Renderer et ajoutez-le au graphique de filtre.
  4. Utilisez la méthode IBaseFilter::EnumPins pour rechercher une broche de sortie sur le filtre source. Pour plus d’informations, consultez Énumération des broches .
  5. Interrogez le Gestionnaire de graphes de filtre pour l’interface IFilterGraph2.
  6. Appelez IFilterGraph2::RenderEx avec l’indicateur AM_RENDEREX_RENDERTOEXISTINGRENDERERS. Cet appel restitue la broche de sortie, en utilisant uniquement les filtres du convertisseur déjà présents dans le graphique , dans ce cas, le vmR-9 et le renderer DirectSound. Cela empêche la logique Intelligent Connect d’ajouter le convertisseur vidéo par défaut au graphique, ce qui laisserait le VMR-9 non connecté.

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