Menyambungkan kembali 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.]
Selama koneksi pin, filter dapat memutuskan sambungan dan menyambungkan kembali salah satu pin lainnya, sebagai berikut:
- Filter memanggil IPin::QueryAccept pada pin filter lain, dan menentukan jenis media baru.
- Jika QueryAccept mengembalikan S_OK, filter memanggil IFilterGraph2::ReconnectEx untuk menyambungkan kembali pin.
Berikut ini adalah beberapa contoh kapan filter mungkin perlu menyambungkan kembali pin:
- Filter tee. Filter tee membagi aliran input menjadi beberapa output tanpa mengubah data di aliran. Filter tee dapat menerima berbagai jenis media, tetapi jenisnya harus cocok di semua koneksi pin. Oleh karena itu, ketika pin input tersambung, filter mungkin perlu menegosiasikan ulang koneksi yang ada pada pin output, dan sebaliknya. Misalnya, lihat Sampel Filter InfTee.
- Filter trans-di tempat. Filter trans-in-place memodifikasi data input di buffer asli alih-alih menyalin data ke buffer output terpisah. Filter trans-in-place harus menggunakan alokator yang sama untuk koneksi hulu dan hilir. Pin pertama untuk menyambungkan (input atau output) menegosiasikan alokator dengan cara biasa. Namun, ketika pin lain terhubung, alokator pertama mungkin tidak dapat diterima. Dalam hal ini, pin kedua memilih alokator yang berbeda, dan pin pertama terhubung kembali menggunakan alokator baru. Untuk contoh implementasi, lihat kelas CTransInPlaceFilter .
Dalam metode ReconnectEx , Filter Graph Manager secara asinkron memutuskan sambungan dan menyambungkan kembali pin. Filter tidak boleh mencoba koneksi ulang kecuali QueryAccept mengembalikan S_OK. Jika tidak, pin akan dibiarkan terputus, menyebabkan kesalahan grafik. Selain itu, filter harus meminta koneksi ulang dari dalam metode IPin::Connect , pada utas yang sama. Jika metode Connect kembali pada satu utas, sementara utas lain membuat permintaan koneksi ulang, Filter Graph Manager mungkin menjalankan grafik sebelum membuat koneksi ulang, menyebabkan kesalahan grafik.