Bagikan melalui


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.