Kelas CDynamicOutputPin
[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 mengimplementasikan CDynamicOutputPin
pin output yang mendukung koneksi ulang dinamis dan perubahan format.
Kelas ini berasal dari kelas CBaseOutputPin dan mengimplementasikan antarmuka IPinFlowControl . Ini mendukung beberapa operasi yang penting untuk membangun grafik dinamis:
- Koneksi ulang dinamis: Pin dapat memutuskan dan menyambungkan kembali saat filter masih aktif (dijeda atau berjalan).
- Perubahan format dinamis: Pin dapat menegosiasikan jenis media baru saat filter masih aktif, tanpa menyambungkan kembali.
- Kontrol alur: Filter pemilik (atau aplikasi) dapat memblokir aliran data dari pin tanpa menghentikan filter.
Untuk informasi selengkapnya, lihat Dynamic Graph Building.
Pin memiliki tiga status yang mungkin: diblokir, tidak diblokir, dan tertunda. Dalam status tertunda , pin menunggu beberapa operasi selesai pada utas lain, sebelum pin beralih ke status diblokir. Saat pin diblokir, filter tidak dapat mengirimkan data melalui pin, atau mengubah koneksi pin.
Untuk berkoordinasi di antara beberapa utas, filter pemilik harus mengikuti aturan tertentu. (Untuk informasi selengkapnya tentang utas dalam grafik filter, lihat Utas dan Bagian Penting.) Pertama, utas streaming harus selalu memanggil metode CDynamicOutputPin::StartUsingOutputPin sebelum memanggil salah satu metode berikut:
- CDynamicOutputPin::ChangeOutputFormat
- CDynamicOutputPin::ChangeMediaType
- CDynamicOutputPin::D ynamicReconnect
- CBaseOutputPin::D eliver
- CBaseOutputPin::D eliverEndOfStream
- CBaseOutputPin::D eliverNewSegment
- IMemInputPin::Receive
- IMemInputPin::ReceiveMultiple
- IPin::EndOfStream
- IPin::NewSegment
Setelah itu, metode harus memanggil metode CDynamicOutputPin::StopUsingOutputPin .
Kedua, utas aplikasi tidak boleh memanggil metode apa pun dalam daftar sebelumnya. Ketiga, utas streaming tidak boleh memanggil metode kelas yang memblokir atau membuka blokir pin. Metode ini adalah: CDynamicOutputPin::Block, CDynamicOutputPin::SynchronousBlockOutputPin, CDynamicOutputPin::AsynchronousBlockOutputPin, dan CDynamicOutputPin::UnblockOutputPin.
Aturan ini memastikan bahwa utas aplikasi tidak dapat memblokir pin saat utas streaming menggunakannya, dan sebaliknya. Setelah utas streaming disebut StartUsingOutputPin, pin tidak akan memblokir hingga utas streaming memanggil StopUsingOutputPin. Sebaliknya, jika pin diblokir, StartUsingOutputPin menunggu hingga pin tidak diblokir.
Untuk menghindari lupa memanggil StopUsingOutputPin, Anda dapat menggunakan kelas CAutoUsingOutputPin . Ini memanggil StopUsingOutputPin secara otomatis ketika keluar dari cakupan.
Saat filter pemilik bergabung atau meninggalkan grafik filter (dalam metode IBaseFilter::JoinFilterGraph ), filter harus memanggil metode CDynamicOutputPin::SetConfigInfo pin.
Variabel Anggota yang Dilindungi | Deskripsi |
---|---|
m_BlockStateLock | Bagian penting yang melindungi status pemblokiran. |
m_hUnblockOutputPinEvent | Peristiwa yang disinyalir saat pin tidak diblokir. |
m_hNotifyCallerPinBlockedEvent | Peristiwa yang disinyalir ketika pin berhasil diblokir, atau pengguna membatalkan blok yang tertunda. |
m_BlockState | Status pemblokiran. |
m_dwBlockCallerThreadID | Pengidentifikasi utas yang terakhir disebut metode IPinFlowControl::Block pada pin ini. |
m_dwNumOutstandingOutputPinUsers | Jumlah utas streaming menggunakan pin ini. |
m_hStopEvent | Peristiwa yang disinyalkan saat filter berhenti atau pin memerah data. |
m_pGraphConfig | Arahkan ke antarmuka IGraphConfig untuk melakukan koneksi ulang dinamis. |
m_bPinUsesReadOnlyAllocator | Bendera yang menentukan apakah sampel dari alokator pin bersifat baca-saja. |
Metode yang Dilindungi | Deskripsi |
SynchronousBlockOutputPin | Memblokir pin; tidak kembali sampai pin diblokir. |
AsinkronBlockOutputPin | Memblokir pin; mungkin kembali sebelum pin diblokir. |
Buka blokirOutputPin | Membuka blokir pin. |
BlockOutputPin | Memblokir pin. |
WaitEvent | Menunggu hingga peristiwa yang ditentukan disinyalir. |
Metode Publik | Deskripsi |
CDynamicOutputPin | Metode konstruktor. |
~CDynamicOutputPin | Metode destruktor. |
SetConfigInfo | Menentukan penunjuk IGraphConfig dan peristiwa berhenti. |
DeliverBeginFlush | Meminta pin input yang terhubung untuk memulai operasi flush. |
DeliverEndFlush | Meminta pin input yang terhubung untuk mengakhiri operasi flush. |
Tidak aktif | Memberi tahu pin bahwa filter telah berhenti. |
Aktif | Memberi tahu pin bahwa filter sekarang aktif. |
CompleteConnect | Menyelesaikan koneksi ke pin input. Virtual. |
StartUsingOutputPin | Mendapatkan akses ke pin untuk operasi streaming. Virtual. |
StopUsingOutputPin | Merilis akses ke pin setelah operasi streaming. Virtual. |
StreamingThreadUsingOutputPin | Menentukan apakah ada utas yang melakukan operasi streaming pada pin. Virtual. |
ChangeOutputFormat | Mengubah jenis media secara dinamis untuk koneksi, dan memberikan informasi segmen baru. |
ChangeMediaType | Mengubah jenis media secara dinamis untuk koneksi. |
DynamicReconnect | Melakukan koneksi ulang dinamis dengan jenis media baru. |
Metode IPin | Deskripsi |
Putuskan sambungan | Memutuskan koneksi pin saat ini. |
Metode IPinFlowControl | Deskripsi |
Blokir | Memblokir atau membuka blokir aliran data dari pin. |
Persyaratan
Persyaratan | Nilai |
---|---|
Header |
|
Pustaka |
|