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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
// MediaParams.h: interface for the CMediaParams class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MEDIAPARAMS_H__3DB99F00_3887_4C35_BBA8_C47835777A69__INCLUDED_)
#define AFX_MEDIAPARAMS_H__3DB99F00_3887_4C35_BBA8_C47835777A69__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <MedParam.h> // DX8 automation
#include "CakeMedParam.h" // DX8 automation
#include "ParamEnvelope.h"
#include "Parameters.h"
////////////////////////////////////////////////////////////////////////////////
class CMediaParams :
public IMediaParams,
public IMediaParamInfo,
public IMediaParamsSetUICallback,
public IMediaParamsUICallback
{
public:
static HRESULT Create( CMediaParams** ppObj, IUnknown* pUnkOuter );
public:
// IUnknown
STDMETHOD(QueryInterface)( REFIID riid, void** ppv );
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// IMediaParams
STDMETHOD(GetParam)(ULONG dwParamIndex, FLOAT* pValue);
STDMETHOD(SetParam)(ULONG dwParamIndex, FLOAT value);
STDMETHOD(AddEnvelope)(ULONG dwParamIndex, ULONG cSegments, MP_ENVELOPE_SEGMENT* pEnvelopeSegments);
STDMETHOD(FlushEnvelope)(ULONG dwParamIndex, REFERENCE_TIME refTimeStart, REFERENCE_TIME refTimeEnd);
STDMETHOD(SetTimeFormat)(GUID guidTimeFormat, ULONG mpTimeData);
// IMediaParamInfo
STDMETHOD(GetParamCount)(ULONG* pdwParams);
STDMETHOD(GetParamInfo)(ULONG dwParamIndex, MP_PARAMINFO* pInfo);
STDMETHOD(GetParamText)(ULONG dwParamIndex, WCHAR** ppwchText);
STDMETHOD(GetNumTimeFormats)(ULONG* pdwNumTimeFormats);
STDMETHOD(GetSupportedTimeFormat)(ULONG dwFormatIndex, GUID* pguidTimeFormat);
STDMETHOD(GetCurrentTimeFormat)(GUID* pguidTimeFormat, ULONG* pTimeData);
// IMediaParamsSetUICallback
STDMETHOD(SetUICallback)(IMediaParamsUICallback* pICallback);
// IMediaParamsUICallback
STDMETHOD(ParamsBeginCapture)(DWORD *aIndex, DWORD cPoints);
STDMETHOD(ParamsChanged)(DWORD *aIndex, DWORD cPoints, MP_DATA *paData);
STDMETHOD(ParamsEndCapture)(DWORD *aIndex, DWORD cPoints);
// Helpers for setting the current sample rate
void SetSampleRate( long lFs ) { m_lFs = lFs; }
long GetSampleRate() const { return m_lFs; }
// Helpers to decimate shapes into smaller chunks
HRESULT GetDecimationTimes( LONGLONG llSampStart, LONGLONG llSampEnd, std::vector<LONGLONG>* pTimes );
void SetDecimationInterval( double d ) { m_dDecimationInterval = d; }
double GetDecimationInterval() const { return m_dDecimationInterval; }
// Set our position among all parameter segments, updating current values, and
// flushing any out-of-date segments.
HRESULT UpdateValuesForSample( LONGLONG llSamp );
// Get the envelope for a given parameter
const CParamEnvelope& GetParamEnvelope( DWORD ix )
{
ASSERT( ix >= 0 && ix < NUM_PARAMS );
return m_aEnv[ ix ];
}
private:
IUnknown* m_pUnkOuter;
IMediaParamsUICallback* m_pCallback;
LONG m_cRef;
CParamEnvelope* m_aEnv;
double m_dDecimationInterval;
long m_lFs;
private:
static const ParamInfo m_aParamInfo[ NUM_PARAMS ];
private:
CMediaParams( IUnknown* pUnkOuter );
virtual ~CMediaParams();
};
#endif // !defined(AFX_MEDIAPARAMS_H__3DB99F00_3887_4C35_BBA8_C47835777A69__INCLUDED_)
|