Partager via


À propos du Générateur de graphiques de capture

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

Un graphe de filtre qui effectue une capture vidéo ou audio est appelé graphe de capture. Les graphiques de capture sont souvent plus compliqués que les graphiques de lecture de fichiers. Pour faciliter la création de graphiques de capture par les applications, DirectShow fournit un objet d’assistance appelé Générateur de graphiques de capture. Le Générateur de graphiques de capture expose l’interface ICaptureGraphBuilder2, qui contient des méthodes de création et de contrôle d’un graphe de capture. Le diagramme suivant illustre le Générateur de graphiques de capture et l’interface ICaptureGraphBuilder2.

à l’aide du générateur de graphiques de capture

Commencez par appeler CoCreateInstance pour créer de nouvelles instances du Générateur de graphiques de capture et du Gestionnaire de graphiques de filtre. Initialisez ensuite le Générateur de graphiques de capture en appelant ICaptureGraphBuilder2 ::SetFiltergraph avec un pointeur vers l’interface IGraphBuilder du Gestionnaire de graphes de filtre. Le diagramme suivant illustre ce processus.

initialiser le générateur de graphiques de capture

Le code suivant montre une fonction d’assistance pour effectuer les étapes suivantes :

HRESULT InitCaptureGraphBuilder(
  IGraphBuilder **ppGraph,  // Receives the pointer.
  ICaptureGraphBuilder2 **ppBuild  // Receives the pointer.
)
{
    if (!ppGraph || !ppBuild)
    {
        return E_POINTER;
    }
    IGraphBuilder *pGraph = NULL;
    ICaptureGraphBuilder2 *pBuild = NULL;

    // Create the Capture Graph Builder.
    HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, 
        CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild );
    if (SUCCEEDED(hr))
    {
        // Create the Filter Graph Manager.
        hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER,
            IID_IGraphBuilder, (void**)&pGraph);
        if (SUCCEEDED(hr))
        {
            // Initialize the Capture Graph Builder.
            pBuild->SetFiltergraph(pGraph);

            // Return both interface pointers to the caller.
            *ppBuild = pBuild;
            *ppGraph = pGraph; // The caller must release both interfaces.
            return S_OK;
        }
        else
        {
            pBuild->Release();
        }
    }
    return hr; // Failed
}

Dans cette section sur la capture vidéo, il est supposé que vous utilisez le Générateur de graphiques de capture pour créer le graphe de capture. Toutefois, il est possible de créer entièrement des graphiques de capture à l’aide de méthodes IGraphBuilder. Cela est considéré comme une rubrique avancée, mais les méthodes du générateur de graphiques de capture sont préférées. Pour plus d’informations, consultez les rubriques de capture avancée .

À propos de la capture vidéo dans DirectShow