Sdílet prostřednictvím


Nastavení hodin grafu

[Funkce přidružená k této stránce DirectShow je starší funkce. Byla nahrazena MediaPlayer, MMFMediaEnginea Audio/Video Capture v Media Foundation. Tyto funkce jsou optimalizované pro Windows 10 a Windows 11. Microsoft důrazně doporučuje, aby nový kód používal MediaPlayer, MMFMediaEngine a Audio/Video Capture v Media Foundation místo DirectShow, pokud je to možné. Microsoft navrhuje, aby se stávající kód, který používá starší rozhraní API, přepsal, aby se nová rozhraní API používala, pokud je to možné.]

Když sestavíte graf filtru, Správce grafů filtru automaticky zvolí referenční hodiny grafu. Všechny filtry v grafu se synchronizují s referenčními hodinou. Konkrétně filtry vykreslovacího modulu používají referenční hodiny k určení času prezentace jednotlivých vzorků.

Aplikace obvykle nemá důvod přepsat volbu referenčních hodin ve Správci grafů filtru. Můžete to však provést voláním metody IMediaFilter::SetSyncSource ve Správci grafů filtru. Tato metoda přijímá ukazatel na rozhraní hodin IReferenceClock. Zavolejte metodu, když je graf zastavený.

Pokud filtr poskytuje hodiny, můžete získat ukazatel IReferenceClock voláním QueryInterface ve filtru. Alternativně můžete implementovat externí referenční hodiny, které nejsou poskytovány filtrem, pokud vaše externí hodiny implementují IReferenceClock. Následující příklad ukazuje, jak zadat hodiny:

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

Tento příklad předpokládá, že CreateMyPrivateClock je funkce definovaná aplikací, která vytvoří hodiny a vrátí IReferenceClock ukazatel.

Graf filtru můžete také nastavit tak, aby běžel bez hodin, voláním SetSyncSource s hodnotou NULL. Pokud žádné hodiny neexistují, graf se spustí co nejrychleji. Bez hodin filtry vykreslovacího modulu nečekají na dobu prezentace ukázky. Místo toho vykreslují každý vzorek, jakmile dorazí. Nastavení grafu tak, aby běžel bez hodin, je užitečné, pokud chcete rychle zpracovávat data místo jejich náhledu v reálném čase.

základní úlohy DirectShow

CBaseReferenceClock – třída

čas a hodiny v DirectShow