Bagikan melalui


Menghitung pin

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan 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 Pengambilan Audio/Video 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.]

Filter mendukung metode IBaseFilter::EnumPins , yang menghitung pin yang tersedia pada filter. Ini mengembalikan penunjuk ke antarmuka IEnumPins . Metode IEnumPins::Next mengambil penunjuk antarmuka IPin .

Contoh berikut menunjukkan fungsi yang menemukan pin dengan arah tertentu (input atau output) pada filter tertentu. Ini menggunakan enumerasi PIN_DIRECTION untuk menentukan arah pin, dan metode IPin::QueryDirection untuk menemukan arah setiap pin yang dijumlahkan. Jika fungsi ini menemukan pin yang cocok, fungsi ini mengembalikan penunjuk antarmuka IPin dengan jumlah referensi yang luar biasa. Pemanggil bertanggung jawab untuk merilis antarmuka.

HRESULT GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir, IPin **ppPin)
{
    IEnumPins  *pEnum = NULL;
    IPin       *pPin = NULL;
    HRESULT    hr;

    if (ppPin == NULL)
    {
        return E_POINTER;
    }

    hr = pFilter->EnumPins(&pEnum);
    if (FAILED(hr))
    {
        return hr;
    }
    while(pEnum->Next(1, &pPin, 0) == S_OK)
    {
        PIN_DIRECTION PinDirThis;
        hr = pPin->QueryDirection(&PinDirThis);
        if (FAILED(hr))
        {
            pPin->Release();
            pEnum->Release();
            return hr;
        }
        if (PinDir == PinDirThis)
        {
            // Found a match. Return the IPin pointer to the caller.
            *ppPin = pPin;
            pEnum->Release();
            return S_OK;
        }
        // Release the pin for the next time through the loop.
        pPin->Release();
    }
    // No more pins. We did not find a match.
    pEnum->Release();
    return E_FAIL;  
}

Fungsi ini dapat dengan mudah dimodifikasi untuk mengembalikan pin ke-n dengan arah yang ditentukan, atau pin nth yang tidak terhubung. (Untuk mengetahui apakah pin tersambung ke pin lain, panggil metode IPin::ConnectedTo .)

Menghitung Objek dalam Grafik Filter

Menemukan Pin Yang Tidak Tersambung pada Filter

Teknik Graph-Building Umum

Sematkan Set Properti