Kelas CBaseRenderer

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

Hierarki kelas cbaserenderer

Kelas CBaseRenderer adalah kelas dasar untuk menerapkan filter perender. Ini mendukung satu pin input, yang diimplementasikan oleh kelas CRendererInputPin . Untuk menggunakan kelas ini, nyatakan kelas turunan CBaseRendereryang mewarisi . Minimal, kelas turunan harus menerapkan metode berikut, yang dinyatakan sebagai virtual murni di kelas dasar:

Kelas dasar menangani perubahan status dan masalah sinkronisasi. Ini juga menjadwalkan sampel untuk penyajian, meskipun tidak menerapkan langkah-langkah kontrol kualitas apa pun. Kelas dasar juga mendeklarasikan beberapa metode "handler". Ini adalah metode yang dipanggil filter pada titik tertentu dalam proses streaming. Mereka tidak melakukan apa pun di kelas dasar, tetapi kelas turunan dapat mengambil alih mereka. Dalam tabel berikut, tabel tersebut tercantum di bawah judul Metode Publik: Handler.

Handler CBaseRenderer::OnReceiveFirstSample layak disebutkan secara khusus. Filter memanggil metode ini jika menerima sampel saat filter dijeda. Itu dapat terjadi jika grafik beralih dari berhenti ke dijeda, atau jika grafik dicari saat dijeda. Perender video biasanya menggunakan sampel untuk menampilkan bingkai diam. Saat filter beralih dari dijeda ke berjalan, filter mengirimkan sampel yang sama ke metode CBaseRenderer::D oRenderSample , sebagai sampel pertama dalam aliran.

Kelas ini CBaseRenderer mengekspos antarmuka IMediaSeeking dan IMediaPosition melalui objek CRendererPosPassThru . Ini meneruskan semua permintaan pencarian ke filter upstream berikutnya.

Penjadwalan

Ketika filter upstream memanggil metode IMemInputPin::Receive pin input untuk mengirimkan sampel, pin meneruskan panggilan ini ke metode CBaseRenderer::Receive filter. Filter menghilangkan sampel, merendernya segera, atau menjadwalkannya untuk penyajian.

Jika sampel tidak memiliki stempel waktu, atau jika tidak ada jam referensi yang tersedia, filter akan segera merender sampel. Jika tidak, filter memanggil metode CBaseRenderer::ShouldDrawSampleNow untuk menentukan apa yang harus dilakukan. Secara default, sampel dijadwalkan berdasarkan stempel waktunya. Kelas turunan dapat mengambil alih ShouldDrawSampleNow untuk mendukung kontrol kualitas.

Untuk menjadwalkan sampel, filter memanggil metode IReferenceClock::AdviseTime , yang membuat permintaan saran. Metode Terima kemudian memblokir hingga waktu yang dijadwalkan, atau hingga filter berubah status. Pemblokiran mencegah filter upstream mengirimkan lebih banyak sampel hingga sampel saat ini dirender.

Saat filter upstram memanggil metode IPin::EndOfStream untuk memberi sinyal akhir aliran, filter mengirimkan peristiwa EC_COMPLETE ke manajer grafik filter. Filter menunggu waktu berhenti sampel saat ini sebelum mengirim peristiwa.

Variabel Anggota yang Dilindungi Deskripsi
m_bAbort Bendera yang menunjukkan apakah akan berhenti merender dan menolak sampel lebih lanjut.
m_bEOS Bendera yang menunjukkan apakah akhir aliran tercapai.
m_bEOSDelivered Bendera yang menunjukkan apakah filter telah memposting peristiwa EC_COMPLETE.
m_bInReceive Bendera yang menunjukkan apakah filter memproses panggilan Terima .
m_bRepaintStatus Bendera yang mengaktifkan atau menonaktifkan peristiwa repaint.
m_bStreaming Bendera yang menunjukkan apakah filter adalah data streaming.
m_dwAdvise Pengidentifikasi peristiwa timer yang menjadwalkan penyajian.
m_EndOfStreamTimer Pengidentifikasi peristiwa timer, untuk penjadwalan pemberitahuan EC_COMPLETE.
m_evComplete Peristiwa yang disinyalir ketika transisi status selesai.
m_InterfaceLock Kunci status filter.
m_ObjectCreationLock Kunci untuk melindungi pembuatan objek di dalam filter.
m_pInputPin Arahkan ke pin input filter.
m_pMediaSample Arahkan ke sampel media saat ini.
m_pPosition Objek pembantu untuk meneruskan perintah pencarian di hulu.
m_pQSink Arahkan ke objek yang menerima pesan kontrol kualitas.
m_RendererLock Kunci streaming.
m_RenderEvent Peristiwa yang digunakan untuk menjadwalkan penyajian.
m_SignalTime Hentikan waktu pada sampel saat ini.
m_ThreadSignal Peristiwa yang digunakan untuk merilis utas streaming.
Metode Publik Deskripsi
CancelNotification Membatalkan peristiwa timer yang menjadwalkan penyajian. Virtual.
CBaseRenderer Metode konstruktor.
~CBaseRenderer Metode destruktor.
GetMediaPositionInterface Mengambil penunjuk antarmuka IMediaPosition dan IMediaSeeking filter. Virtual.
GetPin Mengambil pin. Virtual.
GetPinCount Mengambil jumlah pin. Virtual.
GetSampleTimes Mengambil stempel waktu dari sampel. Virtual.
OnDisplayChange Memposting peristiwa EC_DISPLAY_CHANGED ke manajer grafik filter.
PrepareReceive Bersiap untuk merender sampel. Virtual.
Receive Menerima sampel media berikutnya di aliran. Virtual.
Render Merender sampel. Virtual.
ScheduleSample Menjadwalkan sampel untuk penyajian. Virtual.
SendNotifyWindow Memberi tahu filter upstram handel jendela video.
SendRepaint Mengirim peristiwa repaint ke manajer grafik filter.
SetMediaType Dipanggil ketika jenis media pin diatur. Virtual.
SignalTimerFired Menghapus pengidentifikasi timer yang digunakan untuk menjadwalkan penyajian.
SourceThreadCanWait Menahan atau merilis utas streaming. Virtual.
WaitForReceiveToComplete Menunggu metode CBaseRenderer::Receive selesai.
WaitForRenderTime Menunggu waktu presentasi sampel saat ini. Virtual.
Metode Publik: Metode Aksesor Deskripsi
ClearPendingSample Merilis sampel saat ini. Virtual.
GetCurrentSample Mengambil sampel saat ini. Virtual.
GetRealState Mengambil status filter.
GetRenderEvent Mengambil peristiwa yang menjadwalkan penyajian.
HaveCurrentSample Menentukan apakah filter memiliki sampel. Virtual.
IsEndOfStream Mengkueri apakah pemberitahuan akhir aliran diterima.
IsEndOfStreamDelivered Mengkueri apakah peristiwa EC_COMPLETE telah dikirimkan ke manajer grafik filter.
IsStreaming Mengkueri apakah filter adalah data streaming.
SetAbortSignal Mengatur bendera yang menunjukkan apakah akan berhenti merender dan menolak sampel lebih lanjut.
SetRepaintStatus Mengaktifkan atau menonaktifkan peristiwa repaint.
Metode Publik: Metode State-Change Deskripsi
Aktif Dipanggil saat status dialihkan ke dijeda atau berjalan. Virtual.
BeginFlush Memulai operasi flush. Virtual.
Putuskan Sambungan Melepaskan pin input dari koneksi. Virtual.
CheckReady Mengkueri apakah transisi status selesai.
CompleteConnect Menyelesaikan koneksi pin input ke pin lain. Virtual.
CompleteStateChange Menentukan apakah transisi ke status dijeda selesai. Virtual.
EndFlush Mengakhiri operasi flush. Virtual.
Tidak aktif Dipanggil ketika status dialihkan untuk dihentikan. Virtual.
NotReady Menandakan bahwa transisi status belum selesai.
Siap Menandakan bahwa transisi status selesai.
StartStreaming Memulai streaming saat filter beralih ke status berjalan. Virtual.
StopStreaming Menghentikan streaming saat filter beralih dari status berjalan. Virtual.
Metode Publik: Metode Akhir Aliran Deskripsi
EndOfStream Memberi tahu filter bahwa pin input menerima pemberitahuan end-of-stream. Virtual.
NotifyEndOfStream Memposting peristiwa EC_COMPLETE ke manajer grafik filter.
ResetEndOfStream Mereset bendera akhir aliran.
ResetEndOfStreamTimer Membatalkan timer yang menjadwalkan EC_COMPLETE pemberitahuan. Virtual.
SendEndOfStream Jika akhir aliran tercapai, jadwalkan peristiwa EC_COMPLETE untuk manajer grafik filter. Virtual.
TimerCallback Metode panggilan balik untuk peristiwa timer akhir aliran.
Metode Publik: Handler Deskripsi
OnReceiveFirstSample Dipanggil saat filter menerima sampel saat dijeda. Virtual.
OnRenderEnd Dipanggil setelah sampel dirender. Virtual.
Mulai OnRender Dipanggil saat penyajian akan dimulai. Virtual.
OnStartStreaming Dipanggil saat filter mulai streaming. Virtual.
OnStopStreaming Dipanggil saat filter berhenti streaming. Virtual.
OnWaitEnd Dipanggil ketika filter selesai menunggu waktu presentasi sampel. Virtual.
OnWaitStart Dipanggil saat filter mulai menunggu waktu presentasi sampel. Virtual.
PrepareRender Dipanggil sebelum filter merender sampel. Virtual.
ShouldDrawSampleNow Menentukan bagaimana sampel dijadwalkan untuk penyajian. Virtual.
Metode Virtual Murni Deskripsi
CheckMediaType Menentukan apakah filter menerima jenis media tertentu.
DoRenderSample Merender sampel.
Metode IMediaFilter Deskripsi
GetState Mengambil status filter (berjalan, dihentikan, atau dijeda).
Pause Menjeda filter.
jalankan Menjalankan filter.
Hentikan Menghentikan filter.
Metode IBaseFilter Deskripsi
FindPin Mengambil pin dengan pengidentifikasi yang ditentukan.

Persyaratan

Persyaratan Nilai
Header
Renbase.h (termasuk Streams.h)
Pustaka
Strmbase.lib (build ritel);
Strmbasd.lib (build debug)