ReactOS 0.4.17-dev-923-g4c9a150
seqtrack.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2003-2004 Rok Mandeljc
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#include "dmusic_midi.h"
20#include "dmime_private.h"
21
23
25{
26 IDirectMusicTrack8 IDirectMusicTrack8_iface;
27 struct dmobject dmobj; /* IPersistStream only */
29
31 unsigned int count;
32
34 unsigned int curve_count;
35};
36
37static inline struct sequence_track *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
38{
40}
41
42static HRESULT WINAPI sequence_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid,
43 void **ret_iface)
44{
46
47 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
48
49 *ret_iface = NULL;
50
51 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) ||
52 IsEqualIID(riid, &IID_IDirectMusicTrack8))
53 *ret_iface = iface;
55 *ret_iface = &This->dmobj.IPersistStream_iface;
56 else {
57 WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
58 return E_NOINTERFACE;
59 }
60
61 IUnknown_AddRef((IUnknown*)*ret_iface);
62 return S_OK;
63}
64
65static ULONG WINAPI sequence_track_AddRef(IDirectMusicTrack8 *iface)
66{
69
70 TRACE("(%p) ref=%ld\n", This, ref);
71
72 return ref;
73}
74
75static ULONG WINAPI sequence_track_Release(IDirectMusicTrack8 *iface)
76{
79
80 TRACE("(%p) ref=%ld\n", This, ref);
81
82 if (!ref) {
83 free(This);
84 }
85
86 return ref;
87}
88
89static HRESULT WINAPI sequence_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
90{
92 FIXME("(%p, %p): stub\n", This, pSegment);
93 return S_OK;
94}
95
96static HRESULT WINAPI sequence_track_InitPlay(IDirectMusicTrack8 *iface,
97 IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance,
98 void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
99{
101 FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
102 return S_OK;
103}
104
105static HRESULT WINAPI sequence_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
106{
108 FIXME("(%p, %p): stub\n", This, pStateData);
109 return S_OK;
110}
111
112static HRESULT WINAPI sequence_track_Play(IDirectMusicTrack8 *iface, void *state_data,
113 MUSIC_TIME start_time, MUSIC_TIME end_time, MUSIC_TIME time_offset, DWORD segment_flags,
114 IDirectMusicPerformance *performance, IDirectMusicSegmentState *segment_state, DWORD track_id)
115{
117 IDirectMusicGraph *graph;
118 HRESULT hr;
119 UINT i;
120
121 TRACE("(%p, %p, %ld, %ld, %ld, %#lx, %p, %p, %ld)\n", This, state_data, start_time, end_time,
122 time_offset, segment_flags, performance, segment_state, track_id);
123
124 if (segment_flags) FIXME("segment_flags %#lx not implemented\n", segment_flags);
125 if (segment_state) FIXME("segment_state %p not implemented\n", segment_state);
126
128 &IID_IDirectMusicGraph, (void **)&graph)))
129 return hr;
130
131 for (i = 0; SUCCEEDED(hr) &&i < This->count; i++)
132 {
133 DMUS_IO_SEQ_ITEM *item = This->items + i;
134 DMUS_PMSG *msg;
135
136 if (item->mtTime < start_time) continue;
137 if (item->mtTime >= end_time) continue;
138
139 if (item->bStatus == MIDI_NOTE_ON)
140 {
143 (DMUS_PMSG **)&note)))
144 break;
145
146 note->dwType = DMUS_PMSGT_NOTE;
147 note->mtDuration = item->mtDuration;
148 note->wMusicValue = item->bByte1;
149 note->nOffset = item->nOffset;
150 note->bVelocity = item->bByte2;
151 note->bFlags = 1;
152 note->bMidiValue = item->bByte1;
153 msg = (DMUS_PMSG *)note;
154 }
155 else
156 {
157 DMUS_MIDI_PMSG *midi;
159 (DMUS_PMSG **)&midi)))
160 break;
161
162 midi->dwType = DMUS_PMSGT_MIDI;
163 midi->bStatus = item->bStatus;
164 midi->bByte1 = item->bByte1;
165 midi->bByte2 = item->bByte2;
166 msg = (DMUS_PMSG *)midi;
167 }
168
169 msg->mtTime = item->mtTime + time_offset;
170 msg->dwFlags = DMUS_PMSGF_MUSICTIME;
171 msg->dwPChannel = item->dwPChannel;
172 msg->dwVirtualTrackID = track_id;
173 msg->dwGroupID = 1;
174
177 {
179 break;
180 }
181 }
182
183 for (i = 0; SUCCEEDED(hr) &&i < This->curve_count; i++)
184 {
185 DMUS_IO_CURVE_ITEM *item = This->curve_items + i;
187
188 if (item->mtStart < start_time) continue;
189 if (item->mtStart >= end_time) continue;
190
192 (DMUS_PMSG **)&msg)))
193 break;
194
195 msg->mtTime = item->mtStart + time_offset;
196 msg->dwFlags = DMUS_PMSGF_MUSICTIME;
197 msg->dwPChannel = item->dwPChannel;
198 msg->dwVirtualTrackID = track_id;
199 msg->dwType = DMUS_PMSGT_CURVE;
200 msg->mtDuration = item->mtDuration;
201 msg->mtOriginalStart = item->mtStart;
202 msg->mtResetDuration = item->mtResetDuration;
203 msg->nStartValue = item->nStartValue;
204 msg->nEndValue = item->nEndValue;
205 msg->nResetValue = item->nResetValue;
206 msg->nOffset = item->nOffset;
207 msg->bType = item->bType;
208 msg->bCurveShape = item->bCurveShape;
209 msg->bCCData = item->bCCData;
210 msg->bFlags = item->bFlags;
211 msg->wParamType = item->wParamType;
212 msg->wMergeIndex = item->wMergeIndex;
213
216 {
218 break;
219 }
220 }
221
223 return hr;
224}
225
226static HRESULT WINAPI sequence_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type,
228{
230
231 TRACE("(%p, %s, %ld, %p, %p): method not implemented\n", This, debugstr_dmguid(type), time,
232 next, param);
233 return E_NOTIMPL;
234}
235
236static HRESULT WINAPI sequence_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type,
237 MUSIC_TIME time, void *param)
238{
240
241 TRACE("(%p, %s, %ld, %p): method not implemented\n", This, debugstr_dmguid(type), time, param);
242 return E_NOTIMPL;
243}
244
246{
248
249 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(type));
250 return E_NOTIMPL;
251}
252
253static HRESULT WINAPI sequence_track_AddNotificationType(IDirectMusicTrack8 *iface,
254 REFGUID notiftype)
255{
257
258 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype));
259 return E_NOTIMPL;
260}
261
262static HRESULT WINAPI sequence_track_RemoveNotificationType(IDirectMusicTrack8 *iface,
263 REFGUID notiftype)
264{
266
267 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype));
268 return E_NOTIMPL;
269}
270
271static HRESULT WINAPI sequence_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart,
272 MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
273{
275 FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
276 return S_OK;
277}
278
279static HRESULT WINAPI sequence_track_PlayEx(IDirectMusicTrack8 *iface, void *pStateData,
280 REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags,
281 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
282{
284 FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %ld, %p, %p, %ld): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart),
285 wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID);
286 return S_OK;
287}
288
289static HRESULT WINAPI sequence_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID type,
291{
293
294 TRACE("(%p, %s, %s, %p, %p, %p, %lx): method not implemented\n", This, debugstr_dmguid(type),
296 return E_NOTIMPL;
297}
298
299static HRESULT WINAPI sequence_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID type,
300 REFERENCE_TIME time, void *param, void *state, DWORD flags)
301{
303
304 TRACE("(%p, %s, %s, %p, %p, %lx): method not implemented\n", This, debugstr_dmguid(type),
306 return E_NOTIMPL;
307}
308
309static HRESULT WINAPI sequence_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context,
310 DWORD trackgroup, IDirectMusicTrack **track)
311{
313
314 TRACE("(%p, %p, %ld, %p): method not implemented\n", This, context, trackgroup, track);
315 return E_NOTIMPL;
316}
317
318static HRESULT WINAPI sequence_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *newtrack,
319 MUSIC_TIME join, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **resulttrack)
320{
322 TRACE("(%p, %p, %ld, %p, %ld, %p): method not implemented\n", This, newtrack, join, context,
323 trackgroup, resulttrack);
324 return E_NOTIMPL;
325}
326
327static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = {
346};
347
349{
350 HRESULT hr;
351 UINT i;
352
353 if (FAILED(hr = stream_chunk_get_array(stream, chunk, (void **)&This->curve_items,
354 &This->curve_count, sizeof(*This->curve_items))))
355 {
356 /* try again with the older DMUS_IO_CURVE_ITEM size */
357 UINT size = offsetof(DMUS_IO_CURVE_ITEM, wParamType);
358 BYTE *buffer;
359
362 &This->curve_count, size)))
363 return hr;
364
365 if (!(This->curve_items = calloc(This->curve_count, sizeof(*This->curve_items)))) return E_OUTOFMEMORY;
366 for (i = 0; i < This->curve_count; i++) memcpy(This->curve_items + i, buffer + size * i, size);
367 free(buffer);
368 }
369
370 return S_OK;
371}
372
374{
375 struct chunk_entry chunk = {.parent = parent};
376 HRESULT hr;
377
378 while ((hr = stream_next_chunk(stream, &chunk)) == S_OK)
379 {
380 switch (MAKE_IDTYPE(chunk.id, chunk.type))
381 {
383 hr = stream_chunk_get_array(stream, &chunk, (void **)&This->items,
384 &This->count, sizeof(*This->items));
385 break;
386
389 break;
390
391 default:
392 FIXME("Ignoring chunk %s %s\n", debugstr_fourcc(chunk.id), debugstr_fourcc(chunk.type));
393 break;
394 }
395
396 if (FAILED(hr)) break;
397 }
398
399 return hr;
400}
401
403{
404 return CONTAINING_RECORD(iface, struct sequence_track, dmobj.IPersistStream_iface);
405}
406
408{
410 struct chunk_entry chunk = {0};
411 HRESULT hr;
412
413 TRACE("(%p, %p)\n", This, stream);
414
415 if ((hr = stream_get_chunk(stream, &chunk)) == S_OK)
416 {
417 switch (MAKE_IDTYPE(chunk.id, chunk.type))
418 {
421 break;
422
423 default:
424 WARN("Invalid seq track chunk %s %s\n", debugstr_fourcc(chunk.id), debugstr_fourcc(chunk.type));
426 break;
427 }
428 }
429
431 if (FAILED(hr)) return hr;
432
433 if (TRACE_ON(dmime))
434 {
435 UINT i;
436
437 TRACE("Loaded DirectMusicSeqTrack %p\n", This);
438
439 TRACE("- %u items:\n", This->count);
440 for (i = 0; i < This->count; i++)
441 {
442 TRACE(" - DMUS_IO_SEQ_ITEM[%u]\n", i);
443 TRACE(" - mtTime: %ld\n", This->items[i].mtTime);
444 TRACE(" - mtDuration: %ld\n", This->items[i].mtDuration);
445 TRACE(" - dwPChannel: %ld\n", This->items[i].dwPChannel);
446 TRACE(" - nOffset: %d\n", This->items[i].nOffset);
447 TRACE(" - bStatus: %d\n", This->items[i].bStatus);
448 TRACE(" - bByte1: %#x\n", This->items[i].bByte1);
449 TRACE(" - bByte2: %#x\n", This->items[i].bByte2);
450 }
451
452 TRACE("- %u curves:\n", This->curve_count);
453 for (i = 0; i < This->curve_count; i++)
454 {
455 TRACE(" - DMUS_IO_CURVE_ITEM[%u]\n", i);
456 TRACE(" - mtStart: %ld\n", This->curve_items[i].mtStart);
457 TRACE(" - mtDuration: %ld\n", This->curve_items[i].mtDuration);
458 TRACE(" - mtResetDuration: %ld\n", This->curve_items[i].mtResetDuration);
459 TRACE(" - dwPChannel: %ld\n", This->curve_items[i].dwPChannel);
460 TRACE(" - nOffset: %d\n", This->curve_items[i].nOffset);
461 TRACE(" - nStartValue: %d\n", This->curve_items[i].nStartValue);
462 TRACE(" - nEndValue: %d\n", This->curve_items[i].nEndValue);
463 TRACE(" - nResetValue: %d\n", This->curve_items[i].nResetValue);
464 TRACE(" - bType: %d\n", This->curve_items[i].bType);
465 TRACE(" - bCurveShape: %d\n", This->curve_items[i].bCurveShape);
466 TRACE(" - bCCData: %d\n", This->curve_items[i].bCCData);
467 TRACE(" - bFlags: %d\n", This->curve_items[i].bFlags);
468 TRACE(" - wParamType: %d\n", This->curve_items[i].wParamType);
469 TRACE(" - wMergeIndex: %d\n", This->curve_items[i].wMergeIndex);
470 }
471 }
472
473 return S_OK;
474}
475
476static const IPersistStreamVtbl persiststream_vtbl = {
485};
486
487/* for ClassFactory */
488HRESULT create_dmseqtrack(REFIID lpcGUID, void **ppobj)
489{
490 struct sequence_track *track;
491 HRESULT hr;
492
493 *ppobj = NULL;
494 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
496 track->ref = 1;
497 dmobject_init(&track->dmobj, &CLSID_DirectMusicSeqTrack,
499 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
500
503
504 return hr;
505}
506
507void sequence_track_set_items(IDirectMusicTrack8 *track, DMUS_IO_SEQ_ITEM *items, unsigned int count)
508{
510 free(This->items);
511 This->items = items;
512 This->count = count;
513}
static int state
Definition: maze.c:121
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define msg(x)
Definition: auth_time.c:54
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
int note(char *format,...)
Definition: util.c:12
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#define MIDI_NOTE_ON
Definition: beepmidi.c:62
#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 TRACE_ON(x)
Definition: compat.h:75
#define DMUS_E_UNSUPPORTED_STREAM
Definition: dmerror.h:100
void dmobject_init(struct dmobject *dmobj, const GUID *class, IUnknown *outer_unk)
Definition: dmobject.c:749
HRESULT stream_next_chunk(IStream *stream, struct chunk_entry *chunk)
Definition: dmobject.c:360
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_skip_chunk(IStream *stream, const struct chunk_entry *chunk)
Definition: dmobject.c:351
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
static HRESULT stream_reset_chunk_data(IStream *stream, const struct chunk_entry *chunk)
Definition: dmobject.h:50
#define MAKE_IDTYPE(id, type)
Definition: dmobject.h:33
#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_CURVE_LIST
Definition: dmusicf.h:198
#define DMUS_FOURCC_SEQ_LIST
Definition: dmusicf.h:197
#define DMUS_FOURCC_SEQ_TRACK
Definition: dmusicf.h:196
#define IDirectMusicPerformance_QueryInterface(p, a, b)
Definition: dmusici.h:1277
@ DMUS_PMSGF_MUSICTIME
Definition: dmusici.h:446
#define IDirectMusicPerformance_SendPMsg(p, a)
Definition: dmusici.h:1289
#define IDirectMusicGraph_Release(p)
Definition: dmusici.h:1472
#define IDirectMusicPerformance_FreePMsg(p, a)
Definition: dmusici.h:1295
#define IDirectMusicGraph_StampPMsg(p, a)
Definition: dmusici.h:1474
#define IDirectMusicPerformance_AllocPMsg(p, a, b)
Definition: dmusici.h:1294
@ DMUS_PMSGT_NOTE
Definition: dmusici.h:457
@ DMUS_PMSGT_CURVE
Definition: dmusici.h:461
@ DMUS_PMSGT_MIDI
Definition: dmusici.h:456
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
r parent
Definition: btrfs.c:3010
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
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
GLbitfield flags
Definition: glext.h:7161
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 SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
__u16 time
Definition: mkdosfs.c:8
LOCAL int join(int *aux, int a, int b)
Definition: match.c:560
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
_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 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
#define offsetof(TYPE, MEMBER)
static __inline const char * debugstr_fourcc(unsigned int cc)
Definition: debug.h:397
static HRESULT WINAPI sequence_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, MUSIC_TIME *next, void *param)
Definition: seqtrack.c:226
static HRESULT WINAPI sequence_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, void *param)
Definition: seqtrack.c:236
static HRESULT WINAPI sequence_track_Play(IDirectMusicTrack8 *iface, void *state_data, MUSIC_TIME start_time, MUSIC_TIME end_time, MUSIC_TIME time_offset, DWORD segment_flags, IDirectMusicPerformance *performance, IDirectMusicSegmentState *segment_state, DWORD track_id)
Definition: seqtrack.c:112
void sequence_track_set_items(IDirectMusicTrack8 *track, DMUS_IO_SEQ_ITEM *items, unsigned int count)
Definition: seqtrack.c:507
static HRESULT WINAPI sequence_track_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
Definition: seqtrack.c:279
static HRESULT WINAPI sequence_track_IsParamSupported(IDirectMusicTrack8 *iface, REFGUID type)
Definition: seqtrack.c:245
static struct sequence_track * impl_from_IPersistStream(IPersistStream *iface)
Definition: seqtrack.c:402
static ULONG WINAPI sequence_track_AddRef(IDirectMusicTrack8 *iface)
Definition: seqtrack.c:65
static HRESULT WINAPI sequence_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
Definition: seqtrack.c:89
static HRESULT WINAPI sequence_track_RemoveNotificationType(IDirectMusicTrack8 *iface, REFGUID notiftype)
Definition: seqtrack.c:262
static HRESULT WINAPI sequence_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, void **ret_iface)
Definition: seqtrack.c:42
static struct sequence_track * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
Definition: seqtrack.c:37
static HRESULT WINAPI sequence_track_InitPlay(IDirectMusicTrack8 *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
Definition: seqtrack.c:96
static HRESULT parse_curl_list(struct sequence_track *This, IStream *stream, struct chunk_entry *chunk)
Definition: seqtrack.c:348
static const IPersistStreamVtbl persiststream_vtbl
Definition: seqtrack.c:476
static HRESULT WINAPI sequence_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **track)
Definition: seqtrack.c:309
static ULONG WINAPI sequence_track_Release(IDirectMusicTrack8 *iface)
Definition: seqtrack.c:75
static HRESULT WINAPI track_IPersistStream_Load(IPersistStream *iface, IStream *stream)
Definition: seqtrack.c:407
static HRESULT parse_seqt_chunk(struct sequence_track *This, IStream *stream, struct chunk_entry *parent)
Definition: seqtrack.c:373
HRESULT create_dmseqtrack(REFIID lpcGUID, void **ppobj)
Definition: seqtrack.c:488
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
Definition: seqtrack.c:327
static HRESULT WINAPI sequence_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID type, REFERENCE_TIME time, void *param, void *state, DWORD flags)
Definition: seqtrack.c:299
static HRESULT WINAPI sequence_track_AddNotificationType(IDirectMusicTrack8 *iface, REFGUID notiftype)
Definition: seqtrack.c:253
static HRESULT WINAPI sequence_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID type, REFERENCE_TIME time, REFERENCE_TIME *next, void *param, void *state, DWORD flags)
Definition: seqtrack.c:289
static HRESULT WINAPI sequence_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
Definition: seqtrack.c:271
static HRESULT WINAPI sequence_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
Definition: seqtrack.c:105
static HRESULT WINAPI sequence_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **resulttrack)
Definition: seqtrack.c:318
#define TRACE(s)
Definition: solgame.cpp:4
DMUS_PMSG_PART BYTE bStatus
Definition: dmusici.h:633
Definition: scsiwmi.h:51
Definition: dmobject.h:26
Definition: http.c:7252
Definition: graph.c:32
Definition: send.c:48
unsigned int count
Definition: seqtrack.c:31
DMUS_IO_CURVE_ITEM * curve_items
Definition: seqtrack.c:33
DMUS_IO_SEQ_ITEM * items
Definition: seqtrack.c:30
unsigned int curve_count
Definition: seqtrack.c:34
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: seqtrack.c:26
struct dmobject dmobj
Definition: seqtrack.c:27
Definition: parse.h:23
#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
unsigned char BYTE
Definition: xxhash.c:193