Share 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, 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.]

Un graphe de filtre qui effectue une capture vidéo ou audio est appelé graphe de capture. Les graphiques de capture sont souvent plus complexes 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. Capture Graph Builder expose l’interface ICaptureGraphBuilder2 , qui contient des méthodes permettant de créer et de contrôler un graphe de capture. Le diagramme suivant illustre l’interface Capture Graph Builder et 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 graphes de filtre. Initialisez ensuite Capture Graph Builder en appelant ICaptureGraphBuilder2::SetFiltergraph avec un pointeur vers l’interface IGraphBuilder du Gestionnaire de graphes de filtre. Le diagramme suivant illustre ce processus.

initialisation du générateur de graphiques de capture

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

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
}

Tout au long de 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 des graphiques de capture entièrement à l’aide des méthodes IGraphBuilder. Toutefois, il s’agit d’une rubrique avancée et les méthodes Capture Graph Builder sont préférées. Pour plus d’informations, consultez Rubriques de capture avancée.

À propos de la capture vidéo dans DirectShow