Informazioni su Capture Graph Builder

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Un grafico di filtro che esegue l'acquisizione video o audio è denominato grafico di acquisizione. I grafici di acquisizione sono spesso più complessi rispetto ai grafici di riproduzione dei file. Per semplificare la compilazione di grafici di acquisizione da parte delle applicazioni, DirectShow fornisce un oggetto helper denominato Capture Graph Builder. Capture Graph Builder espone l'interfaccia ICaptureGraphBuilder2 , che contiene i metodi per la compilazione e il controllo di un grafico di acquisizione. Il diagramma seguente illustra Capture Graph Builder e l'interfaccia ICaptureGraphBuilder2 .

uso del generatore di gragrafi di acquisizione

Per iniziare, chiamare CoCreateInstance per creare nuove istanze di Capture Graph Builder e Filter Graph Manager. Inizializzare quindi Capture Graph Builder chiamando ICaptureGraphBuilder2::SetFiltergraph con un puntatore all'interfaccia IGraphBuilder di Filter Graph Manager. La figura seguente illustra questo processo.

inizializzazione del generatore del grafo di acquisizione

Il codice seguente illustra una funzione helper per eseguire questi passaggi:

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
}

In questa sezione sull'acquisizione video si presuppone che si stia usando Capture Graph Builder per creare il grafico di acquisizione. Tuttavia, è possibile creare grafici di acquisizione interamente usando i metodi IGraphBuilder. Questo argomento è considerato un argomento avanzato, tuttavia, e i metodi capture Graph Builder sono preferiti. Per altre informazioni, vedere Argomenti sull'acquisizione avanzata.

Informazioni sull'acquisizione video in DirectShow