blob: ce7c89745b31bb8539def9726bca6effb60a09ae [file] [log] [blame]
Hidenori Takeshimafb964362001-08-15 19:26:52 +00001#ifndef WINE_DSHOW_SYSCLOCK_H
2#define WINE_DSHOW_SYSCLOCK_H
3
4/*
5 implements CLSID_SystemClock.
6
7 - At least, the following interfaces should be implemented:
8
9 IUnknown
10 + IReferenceClock
11
12*/
13
14#include "iunk.h"
15
16typedef struct SC_IReferenceClockImpl
17{
18 ICOM_VFIELD(IReferenceClock);
19} SC_IReferenceClockImpl;
20
21
Hidenori Takeshimaecbf6c12001-09-11 00:29:03 +000022/* implementation limit */
23#define WINE_QUARTZ_SYSCLOCK_TIMER_MAX 64
24
25typedef struct QUARTZ_TimerEntry
26{
27 DWORD dwAdvCookie;
28 BOOL fPeriodic;
29 HANDLE hEvent;
30 REFERENCE_TIME rtStart;
31 REFERENCE_TIME rtInterval;
32} QUARTZ_TimerEntry;
33
Hidenori Takeshimafb964362001-08-15 19:26:52 +000034typedef struct CSystemClock
35{
36 QUARTZ_IUnkImpl unk;
37 SC_IReferenceClockImpl refclk;
38
39 /* IReferenceClock fields. */
Hidenori Takeshimaecbf6c12001-09-11 00:29:03 +000040 CRITICAL_SECTION m_csClock;
41 DWORD m_dwTimeLast;
42 REFERENCE_TIME m_rtLast;
43 HANDLE m_hThreadTimer;
44 HANDLE m_hEventInit;
45 DWORD m_idThreadTimer;
46
47 DWORD m_dwAdvCookieNext;
48 QUARTZ_TimerEntry m_timerEntries[WINE_QUARTZ_SYSCLOCK_TIMER_MAX];
Hidenori Takeshimafb964362001-08-15 19:26:52 +000049} CSystemClock;
50
51#define CSystemClock_THIS(iface,member) CSystemClock* This = ((CSystemClock*)(((char*)iface)-offsetof(CSystemClock,member)))
52
53HRESULT QUARTZ_CreateSystemClock(IUnknown* punkOuter,void** ppobj);
54
Hidenori Takeshima96e96152001-09-07 19:46:49 +000055HRESULT CSystemClock_InitIReferenceClock( CSystemClock* psc );
56void CSystemClock_UninitIReferenceClock( CSystemClock* psc );
Hidenori Takeshimafb964362001-08-15 19:26:52 +000057
58
59#endif /* WINE_DSHOW_SYSCLOCK_H */