Hinzufügen eines Filters by CLSID

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Die folgende Funktion erstellt einen Filter mit einem angegebenen Klassenbezeichner (CLSID) und fügt ihn dem Filterdiagramm hinzu:

// Create a filter by CLSID and add it to the graph.

HRESULT AddFilterByCLSID(
    IGraphBuilder *pGraph,      // Pointer to the Filter Graph Manager.
    REFGUID clsid,              // CLSID of the filter to create.
    IBaseFilter **ppF,          // Receives a pointer to the filter.
    LPCWSTR wszName             // A name for the filter (can be NULL).
    )
{
    *ppF = 0;

    IBaseFilter *pFilter = NULL;
    
    HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, 
        IID_PPV_ARGS(&pFilter));
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pGraph->AddFilter(pFilter, wszName);
    if (FAILED(hr))
    {
        goto done;
    }

    *ppF = pFilter;
    (*ppF)->AddRef();

done:
    SafeRelease(&pFilter);
    return hr;
}

Hinweis

In diesem Beispiel wird die SafeRelease-Funktion verwendet, um den IBaseFilter-Zeiger freizugeben.

 

Die Funktion ruft CoCreateInstance auf, um den Filter zu erstellen, und ruft dann IFilterGraph::AddFilter auf, um den Filter dem Diagramm hinzuzufügen. Im folgenden Codebeispiel wird diese Funktion verwendet, um dem Diagramm den AVI Mux-Filter hinzuzufügen:

IBaseFilter *pMux;
hr = AddFilterByCLSID(pGraph, CLSID_AviDest, L"AVI Mux", &pMux, NULL); 
if (SUCCEEDED(hr))
{
    /* ... */
   pMux->Release();
}

Beachten Sie, dass einige Filter nicht mit CoCreateInstance erstellt werden können. Dies ist häufig bei Filtern der Fall, die andere Softwarekomponenten verwalten. Der AVI Compressor-Filter ist beispielsweise ein Wrapper für Videocodecs, und der WDM Video Capture-Filter ist ein Wrapper für WDM-Aufzeichnungstreiber. Diese Filter müssen entweder mithilfe des Systemgeräte-Enumerators oder der Filterzuordnung erstellt werden. Weitere Informationen finden Sie unter Auflisten von Geräten und Filtern.

Allgemeine Graph-Building Techniken