Kelas CTransInPlaceFilter
[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.]
Kelas CTransInPlaceFilter
ini dirancang untuk filter transformasi di tempat, yang merupakan filter yang memodifikasi data input daripada menyalin data di seluruh buffer. Untuk menggunakan kelas ini, dapatkan kelas baru dari CTransInPlaceFilter
dan terapkan metode berikut:
Kelas ini menggunakan kelas CTransInPlaceInputPin untuk pin inputnya, dan kelas CTransInPlaceOutputPin untuk pin outputnya. Biasanya, Anda tidak perlu mengambil alih kelas pin ini. Filter membuat kedua pin di metode CTransInPlaceFilter::GetPin . Jika Anda mengambil alih kelas pin, Anda harus mengambil alih GetPin untuk membuat pin kustom Anda.
Kelas ini dirancang sehingga jenis input selalu cocok dengan jenis output. Jika memungkinkan, filter menggunakan alokator tunggal untuk kedua koneksi pin.
Tipe Media Pilihan
Jika pin output sudah tersambung, pin input menawarkan jenis pilihan filter hilir. (Bahkan hanya mengembalikan objek enumerator filter hilir.) Jika tidak, ia tidak memiliki jenis yang disukai. Pin output memiliki perilaku yang sama, tetapi sebaliknya: Jika pin input sudah terhubung, pin output menawarkan jenis pilihan filter upstram. Jika tidak, ia tidak memiliki jenis yang disukai
Sematkan Koneksi
Ketika satu pin tersambung, filter umumnya menyambungkan kembali pin lainnya, untuk memastikan bahwa kedua pin menggunakan jenis media yang sama dan alokator yang sama. (Mekanisme untuk menyambungkan kembali pin dijelaskan dalam Menyambungkan Ulang Pin.) Dua skenario dimungkinkan: Pin input terhubung terlebih dahulu, atau pin output terhubung terlebih dahulu.
Misalkan pin input tersambung terlebih dahulu. Lakukan langkah-langkah berikut:
- Pin input memanggil metode CheckInputType filter untuk memeriksa jenis media.
- Filter upstram memilih alokator. Pada titik ini, pin input tidak memiliki persyaratan alokator, dan menerima alokator apa pun untuk koneksi. Jika filter upstram meminta alokator, pin akan membuat yang baru. Untuk alasan yang dijelaskan segera, alokator ini tidak akan digunakan dalam koneksi akhir. Ini disediakan hanya untuk membantu menyelesaikan tahap proses koneksi ini.
Kemudian, ketika pin output terhubung:
- Pin output memanggil metode CheckInputType filter untuk memeriksa jenis media. Ini juga memanggil IPin::QueryAccept pada filter upstram. Ini memastikan bahwa pin input dapat mengubah jenis medianya agar cocok.
- Pin output memanggil metode CheckInputType filter untuk memeriksa jenis media. Ini juga memanggil IPin::QueryAccept pada filter upstram. Ini memastikan bahwa pin input dapat mengubah jenis medianya agar cocok.
- Pin output memanggil metode CheckInputType filter untuk memeriksa jenis media. Ini juga memanggil IPin::QueryAccept pada filter upstram. Ini memastikan bahwa pin input dapat mengubah jenis medianya agar cocok.
- Kali ini, metode GetAllocator pin input mengembalikan alokator hilir, dan GetAllocatorRequirements mengembalikan persyaratan alokator filter hilir. Pin input menerima alokator apa pun yang dipilih filter hulu.
- Kali ini, metode GetAllocator pin input mengembalikan alokator hilir, dan GetAllocatorRequirements mengembalikan persyaratan alokator filter hilir. Pin input menerima alokator apa pun yang dipilih filter hulu.
Sekarang pertimbangkan skenario yang berlawanan, di mana pin output adalah pin pertama yang terhubung.
- Pin output memanggil metode CheckInputType filter untuk memeriksa jenis media.
- Ini memilih alokator, lebih suka menggunakan alokator filter hilir.
Kemudian, saat pin input tersambung:
- Pin input memeriksa jenis media dengan memanggil CheckInputType pada filter, dan dengan memanggil QueryAccept pada pin output filter hilir.
- Jika jenis input tidak cocok dengan jenis output, filter akan menyambungkan kembali pin output.
- Filter upstram memilih alokator. Metode GetAllocator pin input mengembalikan alokator hilir, dan pin input menerima alokator apa pun yang dipilih filter upstream.
- Filter menggunakan alokator yang sama untuk koneksi hilir, mungkin mengesampingkan alokator hilir asli.
Urutan peristiwa ini sedikit berubah jika salah satu alokator yang terlibat bersifat baca-saja, karena alokator hilir harus dapat ditulis. Dalam hal ini, filter mungkin menggunakan dua alokator terpisah.
Untuk informasi selengkapnya tentang menggunakan kelas ini, lihat Menulis Filter Transformasi.
Variabel Anggota yang Dilindungi | Deskripsi |
---|---|
m_bModifiesData | Menunjukkan apakah filter memodifikasi data sampel. |
Metode yang Dilindungi | Deskripsi |
Menyalin | Menyalin sampel media. |
InputPin | Mengambil penunjuk ke pin input filter. |
OutputPin | Mengambil penunjuk ke pin output filter. |
TypeMatch | Menentukan apakah jenis media input cocok dengan jenis media output. |
UsingDifferentAllocators | Menentukan apakah pin input dan output menggunakan alokator yang berbeda. |
Metode Publik | Deskripsi |
CTransInPlaceFilter | Metode konstruktor. |
GetPin | Mengambil pin. |
GetMediaType | Mengambil jenis media pilihan untuk pin output. |
DecideBufferSize | Mengatur persyaratan buffer pin output. |
CheckTransform | Memeriksa apakah jenis media input kompatibel dengan jenis media output. |
CompleteConnect | Menyelesaikan koneksi pin. |
Receive | Menerima sampel media, memprosesnya, dan mengirimkannya ke filter hilir. |
Metode Virtual Murni | Deskripsi |
Transformasi | Mengubah sampel di tempat. |
Persyaratan
Persyaratan | Nilai |
---|---|
Header |
|
Pustaka |
|