Partager via


Ajouter un filtre par CLSID

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

La fonction suivante crée un filtre avec un identificateur de classe (CLSID) spécifié et l’ajoute au graphique de filtre :

// 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;
}

Notes

Cet exemple utilise la fonction SafeRelease pour libérer le pointeur IBaseFilter .

 

La fonction appelle CoCreateInstance pour créer le filtre, puis appelle IFilterGraph::AddFilter pour ajouter le filtre au graphique. L’exemple de code suivant utilise cette fonction pour ajouter le filtre AVI Mux au graphique :

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

Notez que certains filtres ne peuvent pas être créés avec CoCreateInstance. C’est souvent le cas avec les filtres qui gèrent d’autres composants logiciels. Par exemple, le filtre AVI Compressor est un wrapper pour les codecs vidéo, et le filtre De capture vidéo WDM est un wrapper pour les pilotes de capture WDM. Ces filtres doivent être créés à l’aide de l’énumérateur d’appareil système ou du mappeur de filtre. Pour plus d’informations, consultez Énumération d’appareils et de filtres.

Techniques de Graph-Building générales