ReactOS 0.4.17-dev-923-g4c9a150
tempotrack.c
Go to the documentation of this file.
1/* IDirectMusicTempoTrack Implementation
2 *
3 * Copyright (C) 2003-2004 Rok Mandeljc
4 * Copyright (C) 2004 Raphael Junqueira
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#include "dmime_private.h"
22
25
26/*****************************************************************************
27 * IDirectMusicTempoTrack implementation
28 */
29
31{
32 struct list entry;
34};
35
36typedef struct IDirectMusicTempoTrack {
37 IDirectMusicTrack8 IDirectMusicTrack8_iface;
38 struct dmobject dmobj; /* IPersistStream only */
40 struct list items;
42
43/* IDirectMusicTempoTrack IDirectMusicTrack8 part: */
44static inline IDirectMusicTempoTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
45{
46 return CONTAINING_RECORD(iface, IDirectMusicTempoTrack, IDirectMusicTrack8_iface);
47}
48
49static HRESULT WINAPI tempo_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid,
50 void **ret_iface)
51{
53
54 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
55
56 *ret_iface = NULL;
57
58 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) ||
59 IsEqualIID(riid, &IID_IDirectMusicTrack8))
60 *ret_iface = iface;
62 *ret_iface = &This->dmobj.IPersistStream_iface;
63 else {
64 WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
65 return E_NOINTERFACE;
66 }
67
68 IUnknown_AddRef((IUnknown*)*ret_iface);
69 return S_OK;
70}
71
72static ULONG WINAPI tempo_track_AddRef(IDirectMusicTrack8 *iface)
73{
76
77 TRACE("(%p) ref=%ld\n", This, ref);
78
79 return ref;
80}
81
82static ULONG WINAPI tempo_track_Release(IDirectMusicTrack8 *iface)
83{
86
87 TRACE("(%p) ref=%ld\n", This, ref);
88
89 if (!ref)
90 {
91 struct tempo_entry *item, *next_item;
92 LIST_FOR_EACH_ENTRY_SAFE(item, next_item, &This->items, struct tempo_entry, entry)
93 {
94 list_remove(&item->entry);
95 free(item);
96 }
97 free(This);
98 }
99
100 return ref;
101}
102
103static HRESULT WINAPI tempo_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
104{
106 TRACE("(%p, %p): nothing to do here\n", This, pSegment);
107 return S_OK;
108}
109
110static HRESULT WINAPI tempo_track_InitPlay(IDirectMusicTrack8 *iface,
111 IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance,
112 void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
113{
115
117
118 FIXME("(%p, %p, %p, %p, %ld, %ld): semi-stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
119
120 if (!(pState = calloc(1, sizeof(*pState)))) return E_OUTOFMEMORY;
121
123 pState->dummy = 0;
124 *ppStateData = pState;
125 return S_OK;
126}
127
128static HRESULT WINAPI tempo_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
129{
131
132 LPDMUS_PRIVATE_TEMPO_PLAY_STATE pState = pStateData;
133
134 FIXME("(%p, %p): semi-stub\n", This, pStateData);
135
136 if (NULL == pStateData) {
137 return E_POINTER;
138 }
140 free(pState);
141 return S_OK;
142}
143
144static HRESULT WINAPI tempo_track_Play(IDirectMusicTrack8 *iface, void *pStateData,
145 MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags,
146 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
147{
149 FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
151 return S_OK;
152}
153
154static HRESULT WINAPI tempo_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME music_time,
155 MUSIC_TIME *out_next_time, void *param)
156{
158 struct tempo_entry *item, *next_item;
159 DMUS_TEMPO_PARAM *tempo = param;
160 MUSIC_TIME next_time = 0;
161
162 TRACE("(%p, %s, %ld, %p, %p)\n", This, debugstr_dmguid(type), music_time, out_next_time, param);
163
164 if (!param) return E_POINTER;
165 if (!IsEqualGUID(type, &GUID_TempoParam)) return DMUS_E_GET_UNSUPPORTED;
166 if (list_empty(&This->items)) return DMUS_E_NOT_FOUND;
167
168 /* if music_time is before the first item, we return the first item. */
169 LIST_FOR_EACH_ENTRY_SAFE(item, next_item, &This->items, struct tempo_entry, entry)
170 {
171 tempo->mtTime = item->item.lTime - music_time;
172 tempo->dblTempo = item->item.dblTempo;
173
174 next_time = tempo->mtTime;
175 if (next_time > 0) break;
176 next_time = 0;
177 if (item->entry.next == &This->items) break;
178 next_time = next_item->item.lTime - music_time;
179 if (next_time > 0) break;
180 }
181
182 if (out_next_time) *out_next_time = next_time;
183 return S_OK;
184}
185
186static HRESULT WINAPI tempo_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time,
187 void *param)
188{
190
191 TRACE("(%p, %s, %ld, %p)\n", This, debugstr_dmguid(type), time, param);
192
193 if (IsEqualGUID(type, &GUID_DisableTempo)) {
194 if (!param)
196 FIXME("GUID_DisableTempo not handled yet\n");
197 return S_OK;
198 }
199 if (IsEqualGUID(type, &GUID_EnableTempo)) {
200 if (!param)
202 FIXME("GUID_EnableTempo not handled yet\n");
203 return S_OK;
204 }
205 if (IsEqualGUID(type, &GUID_TempoParam)) {
206 struct tempo_entry *item, *next_item;
207 DMUS_TEMPO_PARAM *tempo_param = param;
208 struct tempo_entry *entry;
209 if (!param)
210 return E_POINTER;
211 if (!(entry = calloc(1, sizeof(*entry))))
212 return E_OUTOFMEMORY;
213 entry->item.lTime = time;
214 entry->item.dblTempo = tempo_param->dblTempo;
215 if (list_empty(&This->items))
216 list_add_tail(&This->items, &entry->entry);
217 else
218 {
219 LIST_FOR_EACH_ENTRY_SAFE(item, next_item, &This->items, struct tempo_entry, entry)
220 if (item->entry.next == &This->items || next_item->item.lTime > time)
221 {
222 list_add_after(&item->entry, &entry->entry);
223 break;
224 }
225 }
226 return S_OK;
227 }
228
230}
231
232static HRESULT WINAPI tempo_track_IsParamSupported(IDirectMusicTrack8 *iface, REFGUID rguidType)
233{
235
236 TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType));
237 if (IsEqualGUID (rguidType, &GUID_DisableTempo)
238 || IsEqualGUID (rguidType, &GUID_EnableTempo)
239 || IsEqualGUID (rguidType, &GUID_TempoParam)) {
240 TRACE("param supported\n");
241 return S_OK;
242 }
243 TRACE("param unsupported\n");
245}
246
247static HRESULT WINAPI tempo_track_AddNotificationType(IDirectMusicTrack8 *iface, REFGUID notiftype)
248{
250
251 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype));
252 return E_NOTIMPL;
253}
254
255static HRESULT WINAPI tempo_track_RemoveNotificationType(IDirectMusicTrack8 *iface,
256 REFGUID notiftype)
257{
259
260 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype));
261 return E_NOTIMPL;
262}
263
264static HRESULT WINAPI tempo_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart,
265 MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
266{
268 FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
269 return S_OK;
270}
271
272static HRESULT WINAPI tempo_track_PlayEx(IDirectMusicTrack8 *iface, void *pStateData,
273 REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags,
274 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
275{
277 FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %ld, %p, %p, %ld): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart),
278 wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID);
279 return S_OK;
280}
281
282static HRESULT WINAPI tempo_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType,
283 REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData,
285{
287 FIXME("(%p, %s, 0x%s, %p, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType),
288 wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags);
289 return S_OK;
290}
291
292static HRESULT WINAPI tempo_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType,
293 REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags)
294{
296 FIXME("(%p, %s, 0x%s, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType),
297 wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags);
298 return S_OK;
299}
300
301static HRESULT WINAPI tempo_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context,
302 DWORD trackgroup, IDirectMusicTrack **track)
303{
305
306 TRACE("(%p, %p, %ld, %p): method not implemented\n", This, context, trackgroup, track);
307 return E_NOTIMPL;
308}
309
310static HRESULT WINAPI tempo_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *pNewTrack,
311 MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup,
312 IDirectMusicTrack **ppResultTrack)
313{
315 FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
316 return S_OK;
317}
318
319static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = {
338};
339
341{
342 return CONTAINING_RECORD(iface, IDirectMusicTempoTrack, dmobj.IPersistStream_iface);
343}
344
346{
348 struct chunk_entry chunk = {0};
350 ULONG i = 0;
351 HRESULT hr;
352 UINT count;
353
354 TRACE("%p, %p\n", This, stream);
355
356 if (!stream)
357 return E_POINTER;
358
359 if ((hr = stream_get_chunk(stream, &chunk)) != S_OK)
360 return hr;
363
365 sizeof(DMUS_IO_TEMPO_ITEM));
366 if (FAILED(hr))
367 return hr;
368
369 for (i = 0; i < count; i++)
370 {
371 struct tempo_entry *entry = calloc(1, sizeof(*entry));
372 if (!entry)
373 {
375 break;
376 }
377
378 entry->item = items[i];
379 list_add_tail(&This->items, &entry->entry);
380
381 TRACE_(dmfile)("DMUS_IO_TEMPO_ITEM #%lu\n", i);
382 TRACE_(dmfile)(" - lTime = %lu\n", items[i].lTime);
383 TRACE_(dmfile)(" - dblTempo = %g\n", items[i].dblTempo);
384 }
385
386 free(items);
387 return hr;
388}
389
390static const IPersistStreamVtbl persiststream_vtbl = {
399};
400
401/* for ClassFactory */
402HRESULT create_dmtempotrack(REFIID lpcGUID, void **ppobj)
403{
405 HRESULT hr;
406
407 *ppobj = NULL;
408 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
410 track->ref = 1;
411 dmobject_init(&track->dmobj, &CLSID_DirectMusicTempoTrack,
413 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
414 list_init(&track->items);
415
418
419 return hr;
420}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
static void list_remove(struct list_entry *entry)
Definition: list.h:90
static int list_empty(struct list_entry *head)
Definition: list.h:58
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
static void list_init(struct list_entry *head)
Definition: list.h:51
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
Definition: list.h:39
#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
#define TRACE_(x)
Definition: compat.h:76
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
#define WINE_DECLARE_DEBUG_CHANNEL(x)
Definition: compat.h:45
#define DMUS_E_GET_UNSUPPORTED
Definition: dmerror.h:72
#define DMUS_E_UNSUPPORTED_STREAM
Definition: dmerror.h:100
#define DMUS_E_TYPE_DISABLED
Definition: dmerror.h:111
#define DMUS_E_NOT_FOUND
Definition: dmerror.h:109
#define DMUS_E_TYPE_UNSUPPORTED
Definition: dmerror.h:112
#define DMUS_E_SET_UNSUPPORTED
Definition: dmerror.h:71
void dmobject_init(struct dmobject *dmobj, const GUID *class, IUnknown *outer_unk)
Definition: dmobject.c:749
ULONG WINAPI dmobj_IPersistStream_Release(IPersistStream *iface)
Definition: dmobject.c:702
HRESULT WINAPI unimpl_IPersistStream_GetSizeMax(IPersistStream *iface, ULARGE_INTEGER *size)
Definition: dmobject.c:742
HRESULT WINAPI dmobj_IPersistStream_GetClassID(IPersistStream *iface, CLSID *class)
Definition: dmobject.c:708
ULONG WINAPI dmobj_IPersistStream_AddRef(IPersistStream *iface)
Definition: dmobject.c:696
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
HRESULT stream_chunk_get_array(IStream *stream, const struct chunk_entry *chunk, void **array, unsigned int *count, DWORD elem_size)
Definition: dmobject.c:378
HRESULT WINAPI dmobj_IPersistStream_QueryInterface(IPersistStream *iface, REFIID riid, void **ret_iface)
Definition: dmobject.c:689
HRESULT stream_get_chunk(IStream *stream, struct chunk_entry *chunk)
Definition: dmobject.c:307
HRESULT WINAPI unimpl_IPersistStream_IsDirty(IPersistStream *iface)
Definition: dmobject.c:729
HRESULT WINAPI unimpl_IPersistStream_Save(IPersistStream *iface, IStream *stream, BOOL clear_dirty)
Definition: dmobject.c:735
#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_FOURCC_TEMPO_TRACK
Definition: dmusicf.h:207
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLfloat param
Definition: glext.h:5796
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
uint32_t entry
Definition: isohybrid.c:63
__u16 time
Definition: mkdosfs.c:8
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
static TCHAR * items[]
Definition: page1.c:45
long LONG
Definition: pedump.c:60
const GUID IID_IPersistStream
Definition: proxy.cpp:13
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:242
__WINE_SERVER_LIST_INLINE void list_add_after(struct list *elem, struct list *to_add)
Definition: list.h:80
#define TRACE(s)
Definition: solgame.cpp:4
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: tempotrack.c:37
struct dmobject dmobj
Definition: tempotrack.c:38
MUSIC_TIME lTime
Definition: dmusicf.h:460
double dblTempo
Definition: dmusicf.h:477
MUSIC_TIME mtTime
Definition: dmusicf.h:476
Definition: scsiwmi.h:51
Definition: dmobject.h:26
Definition: http.c:7252
Definition: send.c:48
Definition: parse.h:23
Definition: tempotrack.c:31
struct list entry
Definition: tempotrack.c:32
DMUS_IO_TEMPO_ITEM item
Definition: tempotrack.c:33
static ULONG WINAPI tempo_track_Release(IDirectMusicTrack8 *iface)
Definition: tempotrack.c:82
static ULONG WINAPI tempo_track_AddRef(IDirectMusicTrack8 *iface)
Definition: tempotrack.c:72
static HRESULT WINAPI tempo_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
Definition: tempotrack.c:103
static IDirectMusicTempoTrack * impl_from_IPersistStream(IPersistStream *iface)
Definition: tempotrack.c:340
static HRESULT WINAPI tempo_track_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
Definition: tempotrack.c:272
static HRESULT WINAPI tempo_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME music_time, MUSIC_TIME *out_next_time, void *param)
Definition: tempotrack.c:154
static IDirectMusicTempoTrack * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
Definition: tempotrack.c:44
static HRESULT WINAPI tempo_IPersistStream_Load(IPersistStream *iface, IStream *stream)
Definition: tempotrack.c:345
static HRESULT WINAPI tempo_track_IsParamSupported(IDirectMusicTrack8 *iface, REFGUID rguidType)
Definition: tempotrack.c:232
static HRESULT WINAPI tempo_track_Play(IDirectMusicTrack8 *iface, void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
Definition: tempotrack.c:144
static HRESULT WINAPI tempo_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, void **ret_iface)
Definition: tempotrack.c:49
static HRESULT WINAPI tempo_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData, DWORD dwFlags)
Definition: tempotrack.c:282
static HRESULT WINAPI tempo_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **track)
Definition: tempotrack.c:301
static HRESULT WINAPI tempo_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack)
Definition: tempotrack.c:310
static const IPersistStreamVtbl persiststream_vtbl
Definition: tempotrack.c:390
HRESULT create_dmtempotrack(REFIID lpcGUID, void **ppobj)
Definition: tempotrack.c:402
static HRESULT WINAPI tempo_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
Definition: tempotrack.c:128
static HRESULT WINAPI tempo_track_AddNotificationType(IDirectMusicTrack8 *iface, REFGUID notiftype)
Definition: tempotrack.c:247
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
Definition: tempotrack.c:319
static HRESULT WINAPI tempo_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, void *param)
Definition: tempotrack.c:186
static HRESULT WINAPI tempo_track_RemoveNotificationType(IDirectMusicTrack8 *iface, REFGUID notiftype)
Definition: tempotrack.c:255
static HRESULT WINAPI tempo_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags)
Definition: tempotrack.c:292
static HRESULT WINAPI tempo_track_InitPlay(IDirectMusicTrack8 *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
Definition: tempotrack.c:110
static HRESULT WINAPI tempo_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
Definition: tempotrack.c:264
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479
#define E_POINTER
Definition: winerror.h:3480