Bagikan melalui


Mengatur Jam Grafik

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Tangkapan 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 Audio/Video Capture 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.]

Saat Anda membuat grafik filter, Filter Graph Manager secara otomatis memilih jam referensi untuk grafik. Semua filter dalam grafik disinkronkan ke jam referensi. Secara khusus, filter perender menggunakan jam referensi untuk menentukan waktu presentasi setiap sampel.

Biasanya tidak ada alasan bagi aplikasi untuk mengambil alih pilihan jam referensi Filter Graph Manager. Namun, Anda dapat melakukannya dengan memanggil metode IMediaFilter::SetSyncSource pada Filter Graph Manager. Metode ini mengambil pointer ke antarmuka IReferenceClock jam. Panggil metode saat grafik dihentikan.

Jika filter menyediakan jam, Anda bisa mendapatkan penunjuk IReferenceClock dengan memanggil QueryInterface pada filter. Atau, Anda dapat menerapkan jam referensi eksternal yang tidak disediakan oleh filter, selama jam eksternal Anda mengimplementasikan IReferenceClock. Contoh berikut menunjukkan cara menentukan jam:

IGraphBuilder *pGraph = 0;
IReferenceClock *pClock = 0;

CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
    IID_IGraphBuilder, (void **)&pGraph);

// Build the graph.
pGraph->RenderFile(L"C:\\Example.avi", 0);

// Create your clock.
hr = CreateMyPrivateClock(&pClock);
if (SUCCEEDED(hr))
{
    // Set the graph clock.
    IMediaFilter *pMediaFilter = 0;
    pGraph->QueryInterface(IID_IMediaFilter, (void**)&pMediaFilter);
    pMediaFilter->SetSyncSource(pClock);
    pClock->Release();
    pMediaFilter->Release();
}

Contoh ini mengasumsikan bahwa CreateMyPrivateClock adalah fungsi yang ditentukan aplikasi yang membuat jam dan mengembalikan penunjuk IReferenceClock .

Anda juga dapat mengatur grafik filter untuk dijalankan tanpa jam, dengan memanggil SetSyncSource dengan nilai NULL. Jika tidak ada jam, grafik berjalan secepat mungkin. Tanpa jam, filter perender tidak menunggu waktu presentasi sampel. Sebaliknya, mereka merender setiap sampel segera setelah tiba. Mengatur grafik untuk dijalankan tanpa jam berguna jika Anda ingin memproses data dengan cepat, daripada mempratinjaunya secara real time.

Tugas DirectShow Dasar

Kelas CBaseReferenceClock

Waktu dan Jam di DirectShow