Bagikan melalui


Distributor Plug-in

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

Distributor plug-in (PID) adalah cara untuk memperluas fungsionalitas manajer grafik filter. Distributor plug-in adalah objek COM yang dikumpulkan manajer grafik filter pada durasi. Aplikasi mendapatkan akses ke PID melalui manajer grafik filter.

Ketika manajer grafik filter dikueri untuk antarmuka yang tidak didukungnya, ia mencari registri untuk kunci dengan formulir berikut:

HKEY_CLASSES_ROOT\Interface\IID\Distributor

IID adalah string yang berisi pengidentifikasi antarmuka. Jika entri registri ada, nilai entri menentukan pengidentifikasi kelas (CLSID) dari PID yang mendukung antarmuka. Manajer grafik filter mengagregasi PID dan mengembalikan penunjuk antarmuka, sehingga bertindak sebagai IUnknown luar untuk PID. Ketika aplikasi memanggil metode pada antarmuka, aplikasi benar-benar memanggilnya di PID. Namun, keberadaan PID transparan terhadap aplikasi.

Istilah distributor berasal dari fakta bahwa PID dapat mengkueri pointer IUnknown luarnya untuk antarmuka pada manajer grafik filter. Dengan memanggil metode IFilterGraph::EnumFilters , PID dapat menghitung filter dalam grafik dan mendistribusikan panggilan metode ke filter tersebut. Dengan cara ini, PID dapat berfungsi sebagai titik kontrol tunggal bagi aplikasi untuk memanggil metode pada filter.

Saat manajer grafik filter mengagregasi PID, manajer grafik filter meminta PID untuk antarmuka IDistributorNotify . Jika PID mendukung antarmuka ini, manajer grafik filter menggunakannya untuk memberi tahu PID tentang perubahan dalam grafik:

Untuk mengimplementasikan PID kustom, buat objek COM yang mendukung agregasi. Ini harus mendukung antarmuka yang belum didukung oleh manajer grafik filter. Secara opsional, ini dapat mendukung antarmuka IDistributorNotify .

Jika PID mendapatkan pointer antarmuka apa pun dari manajer grafik filter, PID harus segera merilisnya. Jika tidak, itu mungkin membuat jumlah referensi melingkar, yang dapat mencegah manajer grafik filter dihancurkan. Memegang jumlah referensi pada manajer grafik filter tidak perlu dalam hal apa pun, karena manajer grafik filter mengontrol masa pakai PID.

Karena PID dirancang khusus untuk agregasi oleh manajer grafik filter, Anda mungkin ingin menerapkan ini dalam metode konstruktor PID. Periksa apakah pointer IUnknown luar adalah NULL, dan jika demikian, kembalikan kode kesalahan VFW_E_NEED_OWNER. (Lihat Kode Kesalahan dan Keberhasilan.) Selain itu, untuk mencegah objek lain menggabungkan PID, Anda dapat mengkueri penunjuk IUnknown luar untuk antarmuka IGraphBuilder . Mengembalikan kode kesalahan jika objek tidak mengekspos IGraphBuilder.