105 lines
2.9 KiB
C++
105 lines
2.9 KiB
C++
#ifndef _BASE_TOOL_
|
|
#define _BASE_TOOL_
|
|
|
|
#include "dmusici.h"
|
|
#include "medparam.h"
|
|
|
|
extern long g_cComponent;
|
|
|
|
class CBaseTool : public IDirectMusicTool8
|
|
{
|
|
public:
|
|
CBaseTool()
|
|
{
|
|
m_cRef = 1; // set to 1 so one call to Release() will free this
|
|
m_pParams = NULL;
|
|
InitializeCriticalSection(&m_CrSec);
|
|
// Note: on pre-Blackcomb OS's, this call can raise an exception; if it
|
|
// ever pops in stress, we can add an exception handler and retry loop.
|
|
InterlockedIncrement(&g_cComponent);
|
|
}
|
|
~CBaseTool()
|
|
{
|
|
if (m_pParams)
|
|
{
|
|
m_pParams->Release();
|
|
}
|
|
DeleteCriticalSection(&m_CrSec);
|
|
InterlockedDecrement(&g_cComponent);
|
|
}
|
|
void CreateParams()
|
|
{
|
|
}
|
|
void CloneParams()
|
|
{
|
|
}
|
|
// IUnknown
|
|
STDMETHODIMP QueryInterface(const IID &iid, void **ppv) PURE;
|
|
STDMETHODIMP_(ULONG) AddRef() PURE;
|
|
STDMETHODIMP_(ULONG) Release() PURE;
|
|
|
|
/*// IPersist functions
|
|
STDMETHODIMP GetClassID(CLSID* pClassID) PURE;
|
|
|
|
// IPersistStream functions
|
|
STDMETHODIMP IsDirty() PURE;
|
|
STDMETHODIMP Load(IStream* pStream) PURE;
|
|
STDMETHODIMP Save(IStream* pStream, BOOL fClearDirty) PURE;
|
|
STDMETHODIMP GetSizeMax(ULARGE_INTEGER* pcbSize) PURE;*/
|
|
|
|
// IDirectMusicTool
|
|
STDMETHODIMP Init(IDirectMusicGraph* pGraph) {return E_NOTIMPL;}
|
|
STDMETHODIMP GetMsgDeliveryType(DWORD* pdwDeliveryType ) {return E_NOTIMPL;}
|
|
STDMETHODIMP GetMediaTypeArraySize(DWORD* pdwNumElements ) {return E_NOTIMPL;}
|
|
STDMETHODIMP GetMediaTypes(DWORD** padwMediaTypes, DWORD dwNumElements) {return E_NOTIMPL;}
|
|
STDMETHODIMP ProcessPMsg(IDirectMusicPerformance* pPerf, DMUS_PMSG* pDMUS_PMSG) PURE;
|
|
STDMETHODIMP Flush(IDirectMusicPerformance* pPerf, DMUS_PMSG* pDMUS_PMSG, REFERENCE_TIME rt) {return E_NOTIMPL;}
|
|
|
|
// IDirectMusicTool8
|
|
STDMETHODIMP Clone( IDirectMusicTool ** ppTool) PURE;
|
|
|
|
protected:
|
|
long m_cRef; // reference counter
|
|
CRITICAL_SECTION m_CrSec; // to make SetEchoNum() and SetDelay() thread-safe
|
|
IMediaParams * m_pParams; // Helper object that manages IMediaParams.
|
|
};
|
|
|
|
class CToolFactory : public IClassFactory
|
|
{
|
|
public:
|
|
// IUnknown
|
|
//
|
|
STDMETHODIMP QueryInterface(const IID &iid, void **ppv);
|
|
STDMETHODIMP_(ULONG) AddRef();
|
|
STDMETHODIMP_(ULONG) Release();
|
|
|
|
// Interface IClassFactory
|
|
//
|
|
STDMETHODIMP CreateInstance(IUnknown* pUnknownOuter, const IID& iid, void** ppv);
|
|
STDMETHODIMP LockServer(BOOL bLock);
|
|
|
|
// Constructor
|
|
//
|
|
CToolFactory(DWORD dwToolType);
|
|
|
|
// Destructor
|
|
~CToolFactory();
|
|
|
|
private:
|
|
long m_cRef;
|
|
DWORD m_dwToolType;
|
|
};
|
|
|
|
// We use one class factory to create all tool classes. We need an identifier for each
|
|
// type so the class factory knows what it is creating.
|
|
|
|
#define TOOL_ECHO 1
|
|
#define TOOL_TRANSPOSE 2
|
|
#define TOOL_SWING 3
|
|
#define TOOL_QUANTIZE 4
|
|
#define TOOL_VELOCITY 5
|
|
#define TOOL_DURATION 6
|
|
#define TOOL_TIMESHIFT 7
|
|
|
|
#endif // _BASE_TOOL_
|