windows-nt/Source/XPSP1/NT/multimedia/directx/dmusic/dmtool/basetool.h
2020-09-26 16:20:57 +08:00

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_