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