| //------------------------------------------------------------------------------ | |
| // File: SysClock.cpp | |
| // | |
| // Desc: DirectShow base classes - implements a system clock based on | |
| // IReferenceClock. | |
| // | |
| // Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved. | |
| //------------------------------------------------------------------------------ | |
| #include <streams.h> | |
| #include <limits.h> | |
| #ifdef FILTER_DLL | |
| /* List of class IDs and creator functions for the class factory. This | |
| provides the link between the OLE entry point in the DLL and an object | |
| being created. The class factory will call the static CreateInstance | |
| function when it is asked to create a CLSID_SystemClock object */ | |
| CFactoryTemplate g_Templates[1] = { | |
| {&CLSID_SystemClock, CSystemClock::CreateInstance} | |
| }; | |
| int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]); | |
| #endif | |
| /* This goes in the factory template table to create new instances */ | |
| CUnknown * WINAPI CSystemClock::CreateInstance(__inout_opt LPUNKNOWN pUnk, __inout HRESULT *phr) | |
| { | |
| return new CSystemClock(NAME("System reference clock"),pUnk, phr); | |
| } | |
| CSystemClock::CSystemClock(__in_opt LPCTSTR pName, __inout_opt LPUNKNOWN pUnk, __inout HRESULT *phr) : | |
| CBaseReferenceClock(pName, pUnk, phr) | |
| { | |
| } | |
| STDMETHODIMP CSystemClock::NonDelegatingQueryInterface( | |
| REFIID riid, | |
| __deref_out void ** ppv) | |
| { | |
| if (riid == IID_IPersist) | |
| { | |
| return GetInterface(static_cast<IPersist *>(this), ppv); | |
| } | |
| else if (riid == IID_IAMClockAdjust) | |
| { | |
| return GetInterface(static_cast<IAMClockAdjust *>(this), ppv); | |
| } | |
| else | |
| { | |
| return CBaseReferenceClock::NonDelegatingQueryInterface(riid, ppv); | |
| } | |
| } | |
| /* Return the clock's clsid */ | |
| STDMETHODIMP | |
| CSystemClock::GetClassID(__out CLSID *pClsID) | |
| { | |
| CheckPointer(pClsID,E_POINTER); | |
| ValidateReadWritePtr(pClsID,sizeof(CLSID)); | |
| *pClsID = CLSID_SystemClock; | |
| return NOERROR; | |
| } | |
| STDMETHODIMP | |
| CSystemClock::SetClockDelta(REFERENCE_TIME rtDelta) | |
| { | |
| return SetTimeDelta(rtDelta); | |
| } |