Kelas CCmdQueue
[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 CCmdQueue
adalah kelas dasar yang menyediakan antrean objek CDeferredCommand dan fungsi anggota untuk menambahkan, menghapus, memeriksa status, dan memanggil perintah yang diantrekan. Objek CCmdQueue
adalah bagian dari objek yang mengimplementasikan metode IQueueCommand . Manajer grafik filter menerapkan metode IQueueCommand sehingga aplikasi dapat mengantrekan perintah ke grafik filter. Filter yang mengimplementasikan antarmuka IQueueCommand secara langsung menggunakan kelas ini. Jika Anda ingin menggunakan objek CDeferredCommand , antrean Anda harus berasal dari kelas ini.
Ada dua mode sinkronisasi: kasar dan akurat. Dalam mode kasar, aplikasi menunggu hingga waktu yang ditentukan tiba dan kemudian menjalankan perintah. Dalam mode akurat, aplikasi menunggu hingga pemrosesan dimulai pada sampel yang muncul pada saat itu, lalu menjalankan perintah. Filter menentukan mana yang akan diterapkannya. Manajer grafik filter selalu menerapkan mode kasar untuk perintah yang diantrekan di manajer grafik filter.
Jika Anda ingin sinkronisasi kasar, Anda mungkin ingin menunggu sampai ada perintah jatuh tempo, lalu menjalankannya. Anda dapat melakukan ini dengan memanggil CCmdQueue::GetDueCommand. Jika Anda memiliki beberapa hal yang perlu ditunggu, dapatkan penanganan aktivitas dari CCmdQueue::GetDueHandle lalu panggil CCmdQueue::GetDueCommand saat ini disinyalir. waktu streaming hanya akan maju antara panggilan ke fungsi anggota CCmdQueue::Run dan CCmdQueue::EndRun . Tidak ada jaminan bahwa jika handel diatur, akan ada perintah yang siap. Setiap kali peristiwa disinyalkan, panggil fungsi anggota GetDueCommand (mungkin dengan waktu habis nol); ini dapat mengembalikan E_ABORT jika tidak ada perintah yang siap.
Jika Anda menginginkan sinkronisasi yang akurat, panggil fungsi anggota CCmdQueue::GetCommandDueFor dan teruskan sampel yang akan Anda proses sebagai parameter. Ini mengembalikan hal berikut:
- Perintah stream-time jatuh tempo pada atau sebelum waktu streaming tersebut.
- Perintah waktu presentasi jatuh tempo pada atau sebelum presentasi waktu streaming. Lakukan ini hanya antara fungsi anggota CCmdQueue::Run dan CCmdQueue::EndRun , karena di luar ini, pemetaan dari waktu streaming ke waktu presentasi tidak diketahui.
- Setiap perintah waktu presentasi jatuh tempo sekarang.
Jika Anda menginginkan sinkronisasi yang akurat untuk sampel yang mungkin diproses selama mode dijeda, Anda harus menggunakan perintah stream-time.
Dalam semua kasus, perintah tetap diantrekan hingga dipanggil atau dibatalkan. Pengaturan dan pengaturan ulang handel peristiwa dikelola sepenuhnya oleh objek antrean ini.
Anggota Data Terproteksi | Deskripsi |
---|---|
m_bRunning | Bendera untuk status berjalan; atur TRUE saat berjalan. |
m_dwAdvise | Sarankan pengidentifikasi dari jam referensi (nol jika tidak ada saran yang luar biasa). |
m_evDue | Mengatur waktu saat perintah jatuh tempo. |
m_listPresentation | Menyimpan perintah yang diantrekan dalam waktu presentasi. |
m_listStream | Menyimpan perintah yang diantrekan dalam waktu streaming. |
m_Lock | Melindungi akses ke daftar. |
m_pClock | Jam referensi saat ini. |
m_StreamTimeOffset | Berisi offset waktu streaming saat m_bRunningTRUE. |
m_StreamTimeOffset | Berisi offset waktu streaming saat m_bRunningTRUE. |
Fungsi Anggota | Deskripsi |
CCmdQueue | Membuat objek CCmdQueue . |
CheckTime | Menentukan apakah waktu tertentu jatuh tempo. |
GetDueHandle | Mengambil handel peristiwa yang akan disinyalir. |
Fungsi Anggota yang Dapat Diganti | Deskripsi |
EndRun | Beralih ke mode berhenti atau dijeda. |
GetCommandDueFor | Mengambil perintah yang ditangguhkan yang dijadwalkan pada waktu yang ditentukan. |
GetDueCommand | Mengambil penunjuk ke perintah berikutnya yang jatuh tempo. |
Sisipan | Menambahkan objek CDeferredCommand ke antrean. |
Baru | Menginisialisasi perintah yang akan dijalankan dan mengembalikan objek CDeferredCommand baru. |
Hapus | Menghapus objek CDeferredCommand dari antrean. |
jalankan | Beralih ke mode berjalan. |
SetSyncSource | Mengatur jam yang digunakan untuk waktu. |
SetTimeAdvise | Menyiapkan peristiwa timer dengan jam referensi. |