ReactOS 0.4.17-dev-923-g4c9a150
scripttrack.c
Go to the documentation of this file.
1/* IDirectMusicScriptTrack Implementation
2 *
3 * Copyright (C) 2003-2004 Rok Mandeljc
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20#include "dmscript_private.h"
21#include "dmobject.h"
22
24
25/*****************************************************************************
26 * IDirectMusicScriptTrack implementation
27 */
28
29typedef struct DirectMusicScriptTrack {
30 IDirectMusicTrack8 IDirectMusicTrack8_iface;
35
36static inline DirectMusicScriptTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
37{
38 return CONTAINING_RECORD(iface, DirectMusicScriptTrack, IDirectMusicTrack8_iface);
39}
40
42{
43 return CONTAINING_RECORD(iface, DirectMusicScriptTrack, IPersistStream_iface);
44}
45
46/* DirectMusicScriptTrack IDirectMusicTrack8 part: */
47static HRESULT WINAPI script_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid,
48 void **ret_iface)
49{
51
52 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
53
54 *ret_iface = NULL;
55
56 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) ||
57 IsEqualIID(riid, &IID_IDirectMusicTrack8))
58 *ret_iface = iface;
60 *ret_iface = &This->IPersistStream_iface;
61 else {
62 WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
63 return E_NOINTERFACE;
64 }
65
66 IUnknown_AddRef((IUnknown*)*ret_iface);
67 return S_OK;
68}
69
70static ULONG WINAPI script_track_AddRef(IDirectMusicTrack8 *iface)
71{
74
75 TRACE("(%p) ref=%ld\n", This, ref);
76
77 return ref;
78}
79
80static ULONG WINAPI script_track_Release(IDirectMusicTrack8 *iface)
81{
84
85 TRACE("(%p) ref=%ld\n", This, ref);
86
87 if (!ref) free(This);
88
89 return ref;
90}
91
92static HRESULT WINAPI script_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
93{
95 FIXME("(%p, %p): stub\n", This, pSegment);
96 return S_OK;
97}
98
99static HRESULT WINAPI script_track_InitPlay(IDirectMusicTrack8 *iface,
100 IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance,
101 void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
102{
104 FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
105 return S_OK;
106}
107
108static HRESULT WINAPI script_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
109{
111 FIXME("(%p, %p): stub\n", This, pStateData);
112 return S_OK;
113}
114
115static HRESULT WINAPI script_track_Play(IDirectMusicTrack8 *iface, void *pStateData,
116 MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags,
117 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
118{
120 FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
121 return S_OK;
122}
123
124static HRESULT WINAPI script_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type,
126{
128
129 TRACE("(%p, %s, %ld, %p, %p): not supported\n", This, debugstr_dmguid(type), time, next, param);
130
132}
133
134static HRESULT WINAPI script_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type,
135 MUSIC_TIME time, void *param)
136{
138
139 TRACE("(%p, %s, %ld, %p): not supported\n", This, debugstr_dmguid(type), time, param);
140
142}
143
144static HRESULT WINAPI script_track_IsParamSupported(IDirectMusicTrack8 *iface, REFGUID type)
145{
147
148 TRACE("(%p, %s): param type not supported\n", This, debugstr_dmguid(type));
149
151}
152
154{
156
157 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(type));
158
159 return E_NOTIMPL;
160}
161
163{
165
166 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(type));
167
168 return E_NOTIMPL;
169}
170
171static HRESULT WINAPI script_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart,
172 MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
173{
175 FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
176 return S_OK;
177}
178
179static HRESULT WINAPI script_track_PlayEx(IDirectMusicTrack8 *iface, void *pStateData,
180 REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags,
181 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
182{
184 FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %ld, %p, %p, %ld): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart),
185 wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID);
186 return S_OK;
187}
188
189static HRESULT WINAPI script_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType,
190 REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData,
192{
194 FIXME("(%p, %s, 0x%s, %p, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType),
195 wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags);
196 return S_OK;
197}
198
199static HRESULT WINAPI script_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType,
200 REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags)
201{
203 FIXME("(%p, %s, 0x%s, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType),
204 wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags);
205 return S_OK;
206}
207
208static HRESULT WINAPI script_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context,
209 DWORD group, IDirectMusicTrack **res_track)
210{
212
213 TRACE("(%p, %p, %ld, %p): method not implemented\n", This, context, group, res_track);
214
215 return E_NOTIMPL;
216}
217
218static HRESULT WINAPI script_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *track2,
219 MUSIC_TIME join, IUnknown *context, DWORD group, IDirectMusicTrack **res_track)
220{
222
223 TRACE("(%p, %p, %ld, %p, %ld, %p): method not implemented\n", This, track2, join, context,
224 group, res_track);
225
226 return E_NOTIMPL;
227}
228
229static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = {
248};
249
250/* IDirectMusicScriptTrack IPersistStream part: */
252 void **ret_iface)
253{
255 return IDirectMusicTrack8_QueryInterface(&This->IDirectMusicTrack8_iface, riid, ret_iface);
256}
257
259{
261 return IDirectMusicTrack8_AddRef(&This->IDirectMusicTrack8_iface);
262}
263
265{
267 return IDirectMusicTrack8_Release(&This->IDirectMusicTrack8_iface);
268}
269
271{
273
274 TRACE("(%p, %p)\n", This, pClassID);
275
276 if (!pClassID)
277 return E_POINTER;
278
279 *pClassID = This->desc.guidClass;
280 return S_OK;
281}
282
284{
285 return S_FALSE;
286}
287
289{
290 FIXME(": Loading not implemented yet\n");
291 return S_OK;
292}
293
295 BOOL fClearDirty)
296{
297 return E_NOTIMPL;
298}
299
301{
302 return E_NOTIMPL;
303}
304
305static const IPersistStreamVtbl persist_vtbl = {
314};
315
316/* for ClassFactory */
318{
320 HRESULT hr;
321
322 *ret_iface = NULL;
323
324 if (pUnkOuter)
326
327 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
329 track->IPersistStream_iface.lpVtbl = &persist_vtbl;
330 track->desc.dwSize = sizeof(track->desc);
332 track->desc.guidClass = CLSID_DirectMusicScriptTrack;
333 track->ref = 1;
334
337
338 return hr;
339}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
#define DMUS_E_GET_UNSUPPORTED
Definition: dmerror.h:72
#define DMUS_E_TYPE_UNSUPPORTED
Definition: dmerror.h:112
#define DMUS_E_SET_UNSUPPORTED
Definition: dmerror.h:71
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
#define IDirectMusicTrack8_AddRef(p)
Definition: dmplugin.h:274
#define IDirectMusicTrack8_Release(p)
Definition: dmplugin.h:275
LONG MUSIC_TIME
Definition: dmplugin.h:95
#define IDirectMusicTrack8_QueryInterface(p, a, b)
Definition: dmplugin.h:273
#define DMUS_OBJ_CLASS
Definition: dmusici.h:266
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLboolean GLuint group
Definition: glext.h:11120
GLfloat param
Definition: glext.h:5796
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
__u16 time
Definition: mkdosfs.c:8
LOCAL int join(int *aux, int a, int b)
Definition: match.c:560
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
long LONG
Definition: pedump.c:60
const GUID IID_IPersistStream
Definition: proxy.cpp:13
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
static unsigned __int64 next
Definition: rand_nt.c:6
#define calloc
Definition: rosglue.h:14
HRESULT DMUSIC_CreateDirectMusicScriptTrack(REFIID riid, void **ret_iface, IUnknown *pUnkOuter)
Definition: scripttrack.c:317
static HRESULT WINAPI script_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *track2, MUSIC_TIME join, IUnknown *context, DWORD group, IDirectMusicTrack **res_track)
Definition: scripttrack.c:218
static ULONG WINAPI script_track_Release(IDirectMusicTrack8 *iface)
Definition: scripttrack.c:80
static HRESULT WINAPI IPersistStreamImpl_Save(IPersistStream *iface, IStream *pStm, BOOL fClearDirty)
Definition: scripttrack.c:294
static HRESULT WINAPI script_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
Definition: scripttrack.c:171
static HRESULT WINAPI script_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
Definition: scripttrack.c:92
static HRESULT WINAPI script_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, void *param)
Definition: scripttrack.c:134
static const IPersistStreamVtbl persist_vtbl
Definition: scripttrack.c:305
static DirectMusicScriptTrack * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
Definition: scripttrack.c:36
static ULONG WINAPI script_track_AddRef(IDirectMusicTrack8 *iface)
Definition: scripttrack.c:70
static HRESULT WINAPI script_track_AddNotificationType(IDirectMusicTrack8 *iface, REFGUID type)
Definition: scripttrack.c:153
static HRESULT WINAPI script_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, void **ret_iface)
Definition: scripttrack.c:47
static HRESULT WINAPI script_track_Play(IDirectMusicTrack8 *iface, void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
Definition: scripttrack.c:115
static HRESULT WINAPI script_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context, DWORD group, IDirectMusicTrack **res_track)
Definition: scripttrack.c:208
static DirectMusicScriptTrack * impl_from_IPersistStream(IPersistStream *iface)
Definition: scripttrack.c:41
static ULONG WINAPI IPersistStreamImpl_AddRef(IPersistStream *iface)
Definition: scripttrack.c:258
static HRESULT WINAPI script_track_InitPlay(IDirectMusicTrack8 *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
Definition: scripttrack.c:99
static HRESULT WINAPI IPersistStreamImpl_GetSizeMax(IPersistStream *iface, ULARGE_INTEGER *pcbSize)
Definition: scripttrack.c:300
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
Definition: scripttrack.c:229
static HRESULT WINAPI script_track_IsParamSupported(IDirectMusicTrack8 *iface, REFGUID type)
Definition: scripttrack.c:144
static HRESULT WINAPI IPersistStreamImpl_IsDirty(IPersistStream *iface)
Definition: scripttrack.c:283
static HRESULT WINAPI script_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags)
Definition: scripttrack.c:199
static HRESULT WINAPI script_track_RemoveNotificationType(IDirectMusicTrack8 *iface, REFGUID type)
Definition: scripttrack.c:162
static HRESULT WINAPI script_track_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
Definition: scripttrack.c:179
static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *pStm)
Definition: scripttrack.c:288
static ULONG WINAPI IPersistStreamImpl_Release(IPersistStream *iface)
Definition: scripttrack.c:264
static HRESULT WINAPI script_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData, DWORD dwFlags)
Definition: scripttrack.c:189
static HRESULT WINAPI script_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, MUSIC_TIME *next, void *param)
Definition: scripttrack.c:124
static HRESULT WINAPI script_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
Definition: scripttrack.c:108
static HRESULT WINAPI IPersistStreamImpl_GetClassID(IPersistStream *iface, CLSID *pClassID)
Definition: scripttrack.c:270
static HRESULT WINAPI IPersistStreamImpl_QueryInterface(IPersistStream *iface, REFIID riid, void **ret_iface)
Definition: scripttrack.c:251
#define TRACE(s)
Definition: solgame.cpp:4
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: scripttrack.c:30
IPersistStream IPersistStream_iface
Definition: scripttrack.c:31
DMUS_OBJECTDESC desc
Definition: scripttrack.c:33
DWORD dwValidData
Definition: dmusici.h:743
Definition: scsiwmi.h:51
Definition: http.c:7252
Definition: send.c:48
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:3451
#define E_NOINTERFACE
Definition: winerror.h:3479
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771
#define E_POINTER
Definition: winerror.h:3480