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.]
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 CBaseRenderer
yang mewarisi . Minimal, kelas turunan harus menerapkan metode berikut, yang dinyatakan sebagai virtual murni di kelas dasar:
- CBaseRenderer::CheckMediaType: Menerima atau menolak jenis media yang diusulkan. Filter memanggil metode ini selama proses koneksi pin.
- CBaseRenderer::D oRenderSample: Merender sampel. Filter memanggil metode ini untuk setiap sampel yang diterimanya saat berjalan.
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 |
|
Pustaka |
|
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk