75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //------------------------------------------------------------------------------
 | |
| // 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);
 | |
| }
 |