Jam Referensi

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

Salah satu fungsi Filter Graph Manager adalah menyinkronkan semua filter dalam grafik ke jam yang sama, yang disebut jam referensi.

Objek apa pun yang mengekspos antarmuka IReferenceClock dapat bertindak sebagai jam referensi. Jam referensi mungkin disediakan oleh filter DirectShow—biasanya perender audio, yang memiliki akses ke timer perangkat keras. Sebagai fallback, Filter Graph Manager dapat menggunakan waktu sistem.

Secara nominal, jam referensi mengukur waktu dalam interval 100 nanodetik, meskipun akurasi jam yang sebenarnya mungkin kurang. Untuk mengambil waktu jam saat ini, panggil metode IReferenceClock::GetTime . Garis besar jam—waktu mulai dihitung—tergantung pada implementasinya, sehingga nilai yang dikembalikan oleh GetTime tidak secara inheren bermakna. Yang penting adalah delta dari ketika grafik mulai berjalan.

Meskipun akurasi jam referensi dapat bervariasi, waktu yang dikembalikan oleh metode GetTime dijamin meningkat secara monoton. Dengan kata lain, waktu jam tidak akan pernah mundur. Jika jam referensi menghasilkan waktu jam dari sumber perangkat keras dan jam perangkat keras melompat mundur (misalnya, jika ada penyesuaian pada jam), metode GetTime harus terus mengembalikan waktu terakhir yang dilaporkan sampai jam perangkat keras mengejar ketinggalan. Untuk informasi selengkapnya, lihat Kelas CBaseReferenceClock.

Jam Referensi Default

Filter Graph Manager secara otomatis memilih jam referensi saat grafik berjalan. Ini menggunakan algoritma berikut untuk memilih jam:

  • Jika aplikasi telah memilih jam (lihat di bawah), gunakan jam tersebut.
  • Jika grafik berisi filter sumber langsung yang mendukung IReferenceClock, gunakan filter tersebut. Untuk definisi sumber langsung, lihat Sumber Langsung.
  • Jika grafik TIDAK berisi filter sumber langsung apa pun, gunakan filter apa pun dalam grafik yang mendukung IReferenceClock, mulai dari perender dan bekerja di hulu. Lebih suka filter yang tersambung daripada filter yang tidak tersambung. (Jika grafik merender aliran audio, langkah dalam algoritma ini biasanya akan memilih filter perender audio.)
  • Jika tidak ada filter yang menyediakan jam yang sesuai, gunakan Jam Referensi Sistem, yang didasarkan pada waktu sistem.

Mengatur Jam Referensi

Aplikasi dapat memilih jam dengan memanggil metode IMediaFilter::SetSyncSource pada Filter Graph Manager. Anda harus melakukan ini hanya jika Anda memiliki alasan tertentu untuk lebih memilih jam lain.

Anda dapat menginstruksikan Filter Graph Manager untuk tidak menggunakan jam referensi dengan memanggil SetSyncSource dengan nilai NULL. Misalnya, Anda dapat melakukan ini untuk memproses sampel secepat mungkin. Untuk memulihkan jam referensi default, panggil metode IFilterGraph::SetDefaultSyncSource pada Filter Graph Manager.

Setiap kali jam referensi berubah, Manajer Filter Graph memberi tahu setiap filter dengan memanggil metode IMediaFilter::SetSyncSource . Aplikasi tidak boleh memanggil metode ini pada filter.

Mengatur Jam Grafik

Waktu dan Jam di DirectShow