Bagikan melalui


Menambahkan Filter menurut CLSID

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Tangkapan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine dan Audio/Video Capture di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Fungsi berikut membuat filter dengan pengidentifikasi kelas tertentu (CLSID) dan menambahkannya ke grafik filter:

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

Catatan

Contoh ini menggunakan fungsi SafeRelease untuk merilis pointer IBaseFilter .

 

Fungsi ini memanggil CoCreateInstance untuk membuat filter, lalu memanggil IFilterGraph::AddFilter untuk menambahkan filter ke grafik. Contoh kode berikut menggunakan fungsi ini untuk menambahkan filter AVI Mux ke grafik:

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

Perhatikan bahwa beberapa filter tidak dapat dibuat dengan CoCreateInstance. Ini sering terjadi pada filter yang mengelola komponen perangkat lunak lainnya. Misalnya, filter AVI Compressor adalah pembungkus untuk codec video, dan filter WDM Video Capture adalah pembungkus untuk driver pengambilan WDM. Filter ini harus dibuat menggunakan Enumerator Perangkat Sistem atau Pemeta Filter. Untuk informasi selengkapnya, lihat Menghitung Perangkat dan Filter.

Teknik Graph-Building Umum