829 lines
23 KiB
C
829 lines
23 KiB
C
/* DirectMusicInteractiveEngine Main
|
|
*
|
|
* Copyright (C) 2003-2004 Rok Mandeljc
|
|
* Copyright (C) 2003-2004 Raphael Junqueira
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "dmime_private.h"
|
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(dmime);
|
|
|
|
LONG DMIME_refCount = 0;
|
|
|
|
typedef struct {
|
|
const IClassFactoryVtbl *lpVtbl;
|
|
} IClassFactoryImpl;
|
|
|
|
/******************************************************************
|
|
* DirectMusicPerformance ClassFactory
|
|
*/
|
|
static HRESULT WINAPI PerformanceCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI PerformanceCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI PerformanceCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI PerformanceCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicPerformanceImpl (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI PerformanceCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl PerformanceCF_Vtbl = {
|
|
PerformanceCF_QueryInterface,
|
|
PerformanceCF_AddRef,
|
|
PerformanceCF_Release,
|
|
PerformanceCF_CreateInstance,
|
|
PerformanceCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl Performance_CF = {&PerformanceCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicSegment ClassFactory
|
|
*/
|
|
static HRESULT WINAPI SegmentCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI SegmentCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI SegmentCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI SegmentCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicSegmentImpl (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI SegmentCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl SegmentCF_Vtbl = {
|
|
SegmentCF_QueryInterface,
|
|
SegmentCF_AddRef,
|
|
SegmentCF_Release,
|
|
SegmentCF_CreateInstance,
|
|
SegmentCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl Segment_CF = {&SegmentCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicSegmentState ClassFactory
|
|
*/
|
|
static HRESULT WINAPI SegmentStateCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI SegmentStateCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based objects */
|
|
}
|
|
|
|
static ULONG WINAPI SegmentStateCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI SegmentStateCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicSegmentStateImpl (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI SegmentStateCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl SegmentStateCF_Vtbl = {
|
|
SegmentStateCF_QueryInterface,
|
|
SegmentStateCF_AddRef,
|
|
SegmentStateCF_Release,
|
|
SegmentStateCF_CreateInstance,
|
|
SegmentStateCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl SegmentState_CF = {&SegmentStateCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicGraph ClassFactory
|
|
*/
|
|
static HRESULT WINAPI GraphCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI GraphCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI GraphCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI GraphCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicGraphImpl (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI GraphCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl GraphCF_Vtbl = {
|
|
GraphCF_QueryInterface,
|
|
GraphCF_AddRef,
|
|
GraphCF_Release,
|
|
GraphCF_CreateInstance,
|
|
GraphCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl Graph_CF = {&GraphCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicTempoTrack ClassFactory
|
|
*/
|
|
static HRESULT WINAPI TempoTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI TempoTrackCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI TempoTrackCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI TempoTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicTempoTrack (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI TempoTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl TempoTrackCF_Vtbl = {
|
|
TempoTrackCF_QueryInterface,
|
|
TempoTrackCF_AddRef,
|
|
TempoTrackCF_Release,
|
|
TempoTrackCF_CreateInstance,
|
|
TempoTrackCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl TempoTrack_CF = {&TempoTrackCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicSeqTrack ClassFactory
|
|
*/
|
|
static HRESULT WINAPI SeqTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI SeqTrackCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI SeqTrackCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI SeqTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicSeqTrack (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI SeqTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl SeqTrackCF_Vtbl = {
|
|
SeqTrackCF_QueryInterface,
|
|
SeqTrackCF_AddRef,
|
|
SeqTrackCF_Release,
|
|
SeqTrackCF_CreateInstance,
|
|
SeqTrackCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl SeqTrack_CF = {&SeqTrackCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicSysExTrack ClassFactory
|
|
*/
|
|
static HRESULT WINAPI SysExTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI SysExTrackCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI SysExTrackCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI SysExTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
return DMUSIC_CreateDirectMusicSysExTrack (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI SysExTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl SysExTrackCF_Vtbl = {
|
|
SysExTrackCF_QueryInterface,
|
|
SysExTrackCF_AddRef,
|
|
SysExTrackCF_Release,
|
|
SysExTrackCF_CreateInstance,
|
|
SysExTrackCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl SysExTrack_CF = {&SysExTrackCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicTimeSigTrack ClassFactory
|
|
*/
|
|
static HRESULT WINAPI TimeSigTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI TimeSigTrackCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI TimeSigTrackCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI TimeSigTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicTimeSigTrack (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI TimeSigTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl TimeSigTrackCF_Vtbl = {
|
|
TimeSigTrackCF_QueryInterface,
|
|
TimeSigTrackCF_AddRef,
|
|
TimeSigTrackCF_Release,
|
|
TimeSigTrackCF_CreateInstance,
|
|
TimeSigTrackCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl TimeSigTrack_CF = {&TimeSigTrackCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicParamControlTrack ClassFactory
|
|
*/
|
|
static HRESULT WINAPI ParamControlTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI ParamControlTrackCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI ParamControlTrackCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI ParamControlTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicParamControlTrack (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI ParamControlTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl ParamControlTrackCF_Vtbl = {
|
|
ParamControlTrackCF_QueryInterface,
|
|
ParamControlTrackCF_AddRef,
|
|
ParamControlTrackCF_Release,
|
|
ParamControlTrackCF_CreateInstance,
|
|
ParamControlTrackCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl ParamControlTrack_CF = {&ParamControlTrackCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicMarkerTrack ClassFactory
|
|
*/
|
|
static HRESULT WINAPI MarkerTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI MarkerTrackCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI MarkerTrackCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI MarkerTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicMarkerTrack (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI MarkerTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl MarkerTrackCF_Vtbl = {
|
|
MarkerTrackCF_QueryInterface,
|
|
MarkerTrackCF_AddRef,
|
|
MarkerTrackCF_Release,
|
|
MarkerTrackCF_CreateInstance,
|
|
MarkerTrackCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl MarkerTrack_CF = {&MarkerTrackCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicLyricsTrack ClassFactory
|
|
*/
|
|
static HRESULT WINAPI LyricsTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI LyricsTrackCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI LyricsTrackCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI LyricsTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicLyricsTrack (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI LyricsTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl LyricsTrackCF_Vtbl = {
|
|
LyricsTrackCF_QueryInterface,
|
|
LyricsTrackCF_AddRef,
|
|
LyricsTrackCF_Release,
|
|
LyricsTrackCF_CreateInstance,
|
|
LyricsTrackCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl LyricsTrack_CF = {&LyricsTrackCF_Vtbl};
|
|
|
|
|
|
/******************************************************************
|
|
* DirectMusicSegTriggerTrack ClassFactory
|
|
*/
|
|
static HRESULT WINAPI SegTriggerTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI SegTriggerTrackCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI SegTriggerTrackCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI SegTriggerTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicSegTriggerTrack (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI SegTriggerTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl SegTriggerTrackCF_Vtbl = {
|
|
SegTriggerTrackCF_QueryInterface,
|
|
SegTriggerTrackCF_AddRef,
|
|
SegTriggerTrackCF_Release,
|
|
SegTriggerTrackCF_CreateInstance,
|
|
SegTriggerTrackCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl SegTriggerTrack_CF = {&SegTriggerTrackCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicAudioPath ClassFactory
|
|
*/
|
|
static HRESULT WINAPI AudioPathCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI AudioPathCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI AudioPathCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI AudioPathCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicAudioPathImpl (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI AudioPathCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl AudioPathCF_Vtbl = {
|
|
AudioPathCF_QueryInterface,
|
|
AudioPathCF_AddRef,
|
|
AudioPathCF_Release,
|
|
AudioPathCF_CreateInstance,
|
|
AudioPathCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl AudioPath_CF = {&AudioPathCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DirectMusicWaveTrack ClassFactory
|
|
*/
|
|
static HRESULT WINAPI WaveTrackCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) {
|
|
FIXME("- no interface\n\tIID:\t%s\n", debugstr_guid(riid));
|
|
|
|
if (ppobj == NULL) return E_POINTER;
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
static ULONG WINAPI WaveTrackCF_AddRef(LPCLASSFACTORY iface) {
|
|
DMIME_LockModule();
|
|
|
|
return 2; /* non-heap based object */
|
|
}
|
|
|
|
static ULONG WINAPI WaveTrackCF_Release(LPCLASSFACTORY iface) {
|
|
DMIME_UnlockModule();
|
|
|
|
return 1; /* non-heap based object */
|
|
}
|
|
|
|
static HRESULT WINAPI WaveTrackCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) {
|
|
TRACE ("(%p, %s, %p)\n", pOuter, debugstr_dmguid(riid), ppobj);
|
|
|
|
return DMUSIC_CreateDirectMusicWaveTrack (riid, ppobj, pOuter);
|
|
}
|
|
|
|
static HRESULT WINAPI WaveTrackCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) {
|
|
TRACE("(%d)\n", dolock);
|
|
|
|
if (dolock)
|
|
DMIME_LockModule();
|
|
else
|
|
DMIME_UnlockModule();
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
static const IClassFactoryVtbl WaveTrackCF_Vtbl = {
|
|
WaveTrackCF_QueryInterface,
|
|
WaveTrackCF_AddRef,
|
|
WaveTrackCF_Release,
|
|
WaveTrackCF_CreateInstance,
|
|
WaveTrackCF_LockServer
|
|
};
|
|
|
|
static IClassFactoryImpl WaveTrack_CF = {&WaveTrackCF_Vtbl};
|
|
|
|
/******************************************************************
|
|
* DllMain
|
|
*
|
|
*
|
|
*/
|
|
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
|
|
if (fdwReason == DLL_PROCESS_ATTACH) {
|
|
DisableThreadLibraryCalls(hinstDLL);
|
|
/* FIXME: Initialisation */
|
|
}
|
|
else if (fdwReason == DLL_PROCESS_DETACH) {
|
|
/* FIXME: Cleanup */
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/******************************************************************
|
|
* DllCanUnloadNow (DMIME.1)
|
|
*
|
|
*
|
|
*/
|
|
HRESULT WINAPI DllCanUnloadNow(void)
|
|
{
|
|
return DMIME_refCount != 0 ? S_FALSE : S_OK;
|
|
}
|
|
|
|
|
|
/******************************************************************
|
|
* DllGetClassObject (DMIME.@)
|
|
*
|
|
*
|
|
*/
|
|
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
|
|
{
|
|
TRACE("(%s, %s, %p)\n", debugstr_dmguid(rclsid), debugstr_dmguid(riid), ppv);
|
|
if (IsEqualCLSID (rclsid, &CLSID_DirectMusicPerformance) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &Performance_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSegment) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &Segment_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSegmentState) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &SegmentState_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicGraph) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &Graph_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicTempoTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &TempoTrack_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSeqTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &SeqTrack_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSysExTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &SysExTrack_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicTimeSigTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &TimeSigTrack_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicParamControlTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &ParamControlTrack_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicMarkerTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &MarkerTrack_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicLyricsTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &LyricsTrack_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicSegTriggerTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &SegTriggerTrack_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicAudioPath) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &AudioPath_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
} else if (IsEqualCLSID (rclsid, &CLSID_DirectMusicWaveTrack) && IsEqualIID (riid, &IID_IClassFactory)) {
|
|
*ppv = (LPVOID) &WaveTrack_CF;
|
|
IClassFactory_AddRef((IClassFactory*)*ppv);
|
|
return S_OK;
|
|
}
|
|
|
|
WARN("(%s, %s, %p): no interface found.\n", debugstr_dmguid(rclsid), debugstr_dmguid(riid), ppv);
|
|
return CLASS_E_CLASSNOTAVAILABLE;
|
|
}
|