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:

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
Amfilter.h (termasuk Streams.h)
Pustaka
Strmbase.lib (build ritel);
Strmbasd.lib (build debug)