Aracılığıyla paylaş


Grafik Saatini Ayarlama

Bu sayfayla ilişkilendirilmiş özellik olan DirectShow , eski bir özelliktir. Yerine MediaPlayer, IMFMediaEngineve Media Foundation 'de Ses/Video Yakalamaalmıştır. Bu özellikler Windows 10 ve Windows 11 için iyileştirilmiştir. Microsoft, mümkün olduğunda, yeni kodun MediaPlayer, IMFMediaEngine ve Media Foundation'da Ses/Video Yakalama kullanmasını, DirectShowyerine, kesinlikle önerir. Microsoft, mümkünse yeni API'leri kullanmak için eski API'leri kullanan mevcut kodun yeniden yazılmasını önerir.]

Filtre grafiği oluşturduğunuzda, Filtre Grafı Yöneticisi grafik için otomatik olarak bir başvuru saati seçer. Grafikteki tüm filtreler referans saatiyle eşitlenir. Özellikle işleyici filtreleri, her örneğin sunu zamanını belirlemek için başvuru saatini kullanır.

Genellikle bir uygulamanın Filtre Grafiği Yöneticisi'nin referans saatini geçersiz kılması için bir neden yoktur. Ancak bunu, Filter Graph Manager'da IMediaFilter::SetSyncSource yöntemini çağırarak yapabilirsiniz. Bu yöntem, saatin IReferenceClock arabirimine bir işaretçi alır. Grafik durdurulduğunda metodu çağırın.

Filtre bir saat sağlıyorsa, filtrede QueryInterface çağırarak IReferenceClock işaretçisini alabilirsiniz. Alternatif olarak, dış saatiniz IReferenceClockuyguladığı sürece filtre tarafından sağlanmayan bir dış başvuru saati uygulayabilirsiniz. Aşağıdaki örnekte saat belirtme gösterilmektedir:

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();
}

Bu örnekte CreateMyPrivateClock'un bir saat oluşturan ve IReferenceClock işaretçisi döndüren uygulama tanımlı bir işlev olduğu varsayılır.

Ayrıca, NULLdeğerine sahip SetSyncSource çağırarak filtre grafiğini saat kullanmadan çalışacak şekilde ayarlayabilirsiniz. Saat yoksa, grafik mümkün olan en hızlı şekilde çalışır. Saat olmadan işleyici filtreleri bir örneğin sunu saatini beklemez. Bunun yerine, her örneği gelir gelmez işlerler. Grafı saat olmadan çalışacak şekilde ayarlamak, verileri gerçek zamanlı olarak önizlemek yerine hızlı bir şekilde işlemek istiyorsanız kullanışlıdır.

Temel DirectShow Görevleri

CBaseReferenceClock Sınıfı

DirectShow 'de Zaman ve Saatler