Bagikan melalui


Tentang Capture Graph Builder

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

Grafik filter yang melakukan pengambilan video atau audio disebut grafik pengambilan. Grafik pengambilan sering kali lebih rumit daripada grafik pemutaran file. Untuk memudahkan aplikasi membangun grafik pengambilan, DirectShow menyediakan objek pembantu yang disebut Capture Graph Builder. Capture Graph Builder mengekspos antarmuka ICaptureGraphBuilder2 , yang berisi metode untuk membangun dan mengontrol grafik pengambilan. Diagram berikut mengilustrasikan Capture Graph Builder dan antarmuka ICaptureGraphBuilder2 .

menggunakan penyusun grafik pengambilan

Mulailah dengan memanggil CoCreateInstance untuk membuat instans baru Capture Graph Builder dan Filter Graph Manager. Kemudian inisialisasi Capture Graph Builder dengan memanggil ICaptureGraphBuilder2::SetFiltergraph dengan pointer ke antarmuka IGraphBuilder Filter Graph Manager. Diagram berikut mengilustrasikan hubungan ini.

menginisialisasi penyusun grafik tangkapan

Kode berikut menunjukkan fungsi pembantu untuk melakukan langkah-langkah ini:

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
}

Di seluruh bagian ini pada pengambilan video, diasumsikan bahwa Anda menggunakan Capture Graph Builder untuk membuat grafik pengambilan. Namun, dimungkinkan untuk membuat grafik pengambilan sepenuhnya dengan menggunakan metode IGraphBuilder. Namun, ini dianggap sebagai topik lanjutan, dan metode Capture Graph Builder lebih disukai. Untuk informasi selengkapnya, lihat Topik Pengambilan Tingkat Lanjut.

Tentang Pengambilan Video di DirectShow