mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 17:50:36 +00:00
42bdeaf52c
Original repo is here: https://github.com/microsoft/Windows-classic-samples Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1577>
74 lines
2.1 KiB
C++
74 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);
|
|
}
|