Welcome to mirror list, hosted at ThFree Co, Russian Federation.

SyncClock.h « SyncClock « renderer « filters « src - github.com/mpc-hc/mpc-hc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: fdb90420e52409b4e54c6a58b18cad5c825c7465 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#pragma once

#include <atlbase.h>
#include <atlutil.h>
#include "Interfaces.h"

class CSyncClockFilter;

class CSyncClock: public CBaseReferenceClock
{
	friend class CSyncClockFilter;
public:
	CSyncClock(LPUNKNOWN pUnk, HRESULT *phr);

	REFERENCE_TIME GetPrivateTime();
	IUnknown * pUnk() {
		return static_cast<IUnknown*>(static_cast<IReferenceClock*>(this));
	}
	DOUBLE adjustment; // For adjusting speed temporarily
	DOUBLE bias; // For changing speed permanently

private:
	REFERENCE_TIME m_rtPrivateTime;
	LONGLONG m_llPerfFrequency;
	REFERENCE_TIME m_rtPrevTime;
	CCritSec m_csClock;
	IReferenceClock * m_pCurrentRefClock;
	IReferenceClock * m_pPrevRefClock;
	REFERENCE_TIME GetTicks100ns();
};

class __declspec(uuid("57797fe5-ee9b-4408-98a9-20b134e7e8f0"))
	CSyncClockFilter: public ISyncClock, public CBaseFilter
{
public:
	CSyncClockFilter(LPUNKNOWN pUnk, HRESULT *phr);
	virtual ~CSyncClockFilter();

	DECLARE_IUNKNOWN
	STDMETHODIMP NonDelegatingQueryInterface( REFIID riid, void ** ppv);

	// ISyncClock
	STDMETHODIMP AdjustClock(DOUBLE adjustment);
	STDMETHODIMP SetBias(DOUBLE bias);
	STDMETHODIMP GetBias(DOUBLE *bias);
	STDMETHODIMP GetStartTime(REFERENCE_TIME *startTime);

	//  CBaseFilter methods
	int CSyncClockFilter::GetPinCount();
	CBasePin *CSyncClockFilter::GetPin(int iPin);

private:
	CSyncClock m_Clock;
	CCritSec m_Lock;
};