ReactOS 0.4.17-dev-934-g091855f
seqtrack.c File Reference
#include "dmusic_midi.h"
#include "dmime_private.h"
Include dependency graph for seqtrack.c:

Go to the source code of this file.

Classes

struct  sequence_track
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (dmime)
 
static struct sequence_track * impl_from_IDirectMusicTrack8 (IDirectMusicTrack8 *iface)
 
static HRESULT WINAPI sequence_track_QueryInterface (IDirectMusicTrack8 *iface, REFIID riid, void **ret_iface)
 
static ULONG WINAPI sequence_track_AddRef (IDirectMusicTrack8 *iface)
 
static ULONG WINAPI sequence_track_Release (IDirectMusicTrack8 *iface)
 
static HRESULT WINAPI sequence_track_Init (IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
 
static HRESULT WINAPI sequence_track_InitPlay (IDirectMusicTrack8 *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
 
static HRESULT WINAPI sequence_track_EndPlay (IDirectMusicTrack8 *iface, void *pStateData)
 
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)
 
static HRESULT WINAPI sequence_track_GetParam (IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, MUSIC_TIME *next, void *param)
 
static HRESULT WINAPI sequence_track_SetParam (IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, void *param)
 
static HRESULT WINAPI sequence_track_IsParamSupported (IDirectMusicTrack8 *iface, REFGUID type)
 
static HRESULT WINAPI sequence_track_AddNotificationType (IDirectMusicTrack8 *iface, REFGUID notiftype)
 
static HRESULT WINAPI sequence_track_RemoveNotificationType (IDirectMusicTrack8 *iface, REFGUID notiftype)
 
static HRESULT WINAPI sequence_track_Clone (IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
 
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)
 
static HRESULT WINAPI sequence_track_GetParamEx (IDirectMusicTrack8 *iface, REFGUID type, REFERENCE_TIME time, REFERENCE_TIME *next, void *param, void *state, DWORD flags)
 
static HRESULT WINAPI sequence_track_SetParamEx (IDirectMusicTrack8 *iface, REFGUID type, REFERENCE_TIME time, void *param, void *state, DWORD flags)
 
static HRESULT WINAPI sequence_track_Compose (IDirectMusicTrack8 *iface, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **track)
 
static HRESULT WINAPI sequence_track_Join (IDirectMusicTrack8 *iface, IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **resulttrack)
 
static HRESULT parse_curl_list (struct sequence_track *This, IStream *stream, struct chunk_entry *chunk)
 
static HRESULT parse_seqt_chunk (struct sequence_track *This, IStream *stream, struct chunk_entry *parent)
 
static struct sequence_track * impl_from_IPersistStream (IPersistStream *iface)
 
static HRESULT WINAPI track_IPersistStream_Load (IPersistStream *iface, IStream *stream)
 
HRESULT create_dmseqtrack (REFIID lpcGUID, void **ppobj)
 
void sequence_track_set_items (IDirectMusicTrack8 *track, DMUS_IO_SEQ_ITEM *items, unsigned int count)
 

Variables

static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
 
static const IPersistStreamVtbl persiststream_vtbl
 

Function Documentation

◆ create_dmseqtrack()

HRESULT create_dmseqtrack ( REFIID  lpcGUID,
void **  ppobj 
)

Definition at line 488 of file seqtrack.c.

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}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
void dmobject_init(struct dmobject *dmobj, const GUID *class, IUnknown *outer_unk)
Definition: dmobject.c:749
#define IDirectMusicTrack8_Release(p)
Definition: dmplugin.h:275
#define IDirectMusicTrack8_QueryInterface(p, a, b)
Definition: dmplugin.h:273
#define calloc
Definition: rosglue.h:14
static const IPersistStreamVtbl persiststream_vtbl
Definition: seqtrack.c:476
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
Definition: seqtrack.c:327
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: seqtrack.c:26
struct dmobject dmobj
Definition: seqtrack.c:27

◆ impl_from_IDirectMusicTrack8()

◆ impl_from_IPersistStream()

static struct sequence_track * impl_from_IPersistStream ( IPersistStream *  iface)
inlinestatic

Definition at line 402 of file seqtrack.c.

403{
404 return CONTAINING_RECORD(iface, struct sequence_track, dmobj.IPersistStream_iface);
405}

Referenced by track_IPersistStream_Load().

◆ parse_curl_list()

static HRESULT parse_curl_list ( struct sequence_track *  This,
IStream *  stream,
struct chunk_entry *  chunk 
)
static

Definition at line 348 of file seqtrack.c.

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}
#define free
Definition: debug_ros.c:5
HRESULT stream_chunk_get_array(IStream *stream, const struct chunk_entry *chunk, void **array, unsigned int *count, DWORD elem_size)
Definition: dmobject.c:378
static HRESULT stream_reset_chunk_data(IStream *stream, const struct chunk_entry *chunk)
Definition: dmobject.h:50
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919
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
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define offsetof(TYPE, MEMBER)
Definition: parse.h:23
unsigned char BYTE
Definition: xxhash.c:193

Referenced by parse_seqt_chunk().

◆ parse_seqt_chunk()

static HRESULT parse_seqt_chunk ( struct sequence_track *  This,
IStream *  stream,
struct chunk_entry *  parent 
)
static

Definition at line 373 of file seqtrack.c.

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}
#define FIXME(fmt,...)
Definition: precomp.h:53
HRESULT stream_next_chunk(IStream *stream, struct chunk_entry *chunk)
Definition: dmobject.c:360
#define MAKE_IDTYPE(id, type)
Definition: dmobject.h:33
#define DMUS_FOURCC_CURVE_LIST
Definition: dmusicf.h:198
#define DMUS_FOURCC_SEQ_LIST
Definition: dmusicf.h:197
r parent
Definition: btrfs.c:3010
static __inline const char * debugstr_fourcc(unsigned int cc)
Definition: debug.h:397
static HRESULT parse_curl_list(struct sequence_track *This, IStream *stream, struct chunk_entry *chunk)
Definition: seqtrack.c:348
Definition: dmobject.h:26

Referenced by track_IPersistStream_Load().

◆ sequence_track_AddNotificationType()

static HRESULT WINAPI sequence_track_AddNotificationType ( IDirectMusicTrack8 *  iface,
REFGUID  notiftype 
)
static

Definition at line 253 of file seqtrack.c.

255{
257
258 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype));
259 return E_NOTIMPL;
260}
#define E_NOTIMPL
Definition: ddrawi.h:99
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
static struct sequence_track * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
Definition: seqtrack.c:37
#define TRACE(s)
Definition: solgame.cpp:4

◆ sequence_track_AddRef()

static ULONG WINAPI sequence_track_AddRef ( IDirectMusicTrack8 *  iface)
static

Definition at line 65 of file seqtrack.c.

66{
69
70 TRACE("(%p) ref=%ld\n", This, ref);
71
72 return ref;
73}
#define InterlockedIncrement
Definition: armddk.h:53
long LONG
Definition: pedump.c:60
Definition: send.c:48

◆ sequence_track_Clone()

static HRESULT WINAPI sequence_track_Clone ( IDirectMusicTrack8 *  iface,
MUSIC_TIME  mtStart,
MUSIC_TIME  mtEnd,
IDirectMusicTrack **  ppTrack 
)
static

Definition at line 271 of file seqtrack.c.

273{
275 FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
276 return S_OK;
277}

◆ sequence_track_Compose()

static HRESULT WINAPI sequence_track_Compose ( IDirectMusicTrack8 *  iface,
IUnknown *  context,
DWORD  trackgroup,
IDirectMusicTrack **  track 
)
static

Definition at line 309 of file seqtrack.c.

311{
313
314 TRACE("(%p, %p, %ld, %p): method not implemented\n", This, context, trackgroup, track);
315 return E_NOTIMPL;
316}
Definition: http.c:7252

◆ sequence_track_EndPlay()

static HRESULT WINAPI sequence_track_EndPlay ( IDirectMusicTrack8 *  iface,
void *  pStateData 
)
static

Definition at line 105 of file seqtrack.c.

106{
108 FIXME("(%p, %p): stub\n", This, pStateData);
109 return S_OK;
110}

◆ sequence_track_GetParam()

static HRESULT WINAPI sequence_track_GetParam ( IDirectMusicTrack8 *  iface,
REFGUID  type,
MUSIC_TIME  time,
MUSIC_TIME *  next,
void *  param 
)
static

Definition at line 226 of file seqtrack.c.

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}
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLfloat param
Definition: glext.h:5796
__u16 time
Definition: mkdosfs.c:8
static unsigned __int64 next
Definition: rand_nt.c:6

◆ sequence_track_GetParamEx()

static HRESULT WINAPI sequence_track_GetParamEx ( IDirectMusicTrack8 *  iface,
REFGUID  type,
REFERENCE_TIME  time,
REFERENCE_TIME *  next,
void *  param,
void *  state,
DWORD  flags 
)
static

Definition at line 289 of file seqtrack.c.

291{
293
294 TRACE("(%p, %s, %s, %p, %p, %p, %lx): method not implemented\n", This, debugstr_dmguid(type),
296 return E_NOTIMPL;
297}
static int state
Definition: maze.c:121
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
GLbitfield flags
Definition: glext.h:7161

◆ sequence_track_Init()

static HRESULT WINAPI sequence_track_Init ( IDirectMusicTrack8 *  iface,
IDirectMusicSegment *  pSegment 
)
static

Definition at line 89 of file seqtrack.c.

90{
92 FIXME("(%p, %p): stub\n", This, pSegment);
93 return S_OK;
94}

◆ sequence_track_InitPlay()

static HRESULT WINAPI sequence_track_InitPlay ( IDirectMusicTrack8 *  iface,
IDirectMusicSegmentState *  pSegmentState,
IDirectMusicPerformance *  pPerformance,
void **  ppStateData,
DWORD  dwVirtualTrack8ID,
DWORD  dwFlags 
)
static

Definition at line 96 of file seqtrack.c.

99{
101 FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
102 return S_OK;
103}
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141

◆ sequence_track_IsParamSupported()

static HRESULT WINAPI sequence_track_IsParamSupported ( IDirectMusicTrack8 *  iface,
REFGUID  type 
)
static

Definition at line 245 of file seqtrack.c.

246{
248
249 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(type));
250 return E_NOTIMPL;
251}

◆ sequence_track_Join()

static HRESULT WINAPI sequence_track_Join ( IDirectMusicTrack8 *  iface,
IDirectMusicTrack *  newtrack,
MUSIC_TIME  join,
IUnknown *  context,
DWORD  trackgroup,
IDirectMusicTrack **  resulttrack 
)
static

Definition at line 318 of file seqtrack.c.

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}
LOCAL int join(int *aux, int a, int b)
Definition: match.c:560

◆ sequence_track_Play()

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 
)
static

Definition at line 112 of file seqtrack.c.

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}
#define msg(x)
Definition: auth_time.c:54
int note(char *format,...)
Definition: util.c:12
#define MIDI_NOTE_ON
Definition: beepmidi.c:62
#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
#define SUCCEEDED(hr)
Definition: intsafe.h:50
Definition: graph.c:32

◆ sequence_track_PlayEx()

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 
)
static

Definition at line 279 of file seqtrack.c.

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}

◆ sequence_track_QueryInterface()

static HRESULT WINAPI sequence_track_QueryInterface ( IDirectMusicTrack8 *  iface,
REFIID  riid,
void **  ret_iface 
)
static

Definition at line 42 of file seqtrack.c.

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}
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
const GUID IID_IPersistStream
Definition: proxy.cpp:13
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ sequence_track_Release()

static ULONG WINAPI sequence_track_Release ( IDirectMusicTrack8 *  iface)
static

Definition at line 75 of file seqtrack.c.

76{
79
80 TRACE("(%p) ref=%ld\n", This, ref);
81
82 if (!ref) {
83 free(This);
84 }
85
86 return ref;
87}
#define InterlockedDecrement
Definition: armddk.h:52

◆ sequence_track_RemoveNotificationType()

static HRESULT WINAPI sequence_track_RemoveNotificationType ( IDirectMusicTrack8 *  iface,
REFGUID  notiftype 
)
static

Definition at line 262 of file seqtrack.c.

264{
266
267 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype));
268 return E_NOTIMPL;
269}

◆ sequence_track_set_items()

void sequence_track_set_items ( IDirectMusicTrack8 *  track,
DMUS_IO_SEQ_ITEM *  items,
unsigned int  count 
)

Definition at line 507 of file seqtrack.c.

508{
510 free(This->items);
511 This->items = items;
512 This->count = count;
513}
GLuint GLuint GLsizei count
Definition: gl.h:1545
static TCHAR * items[]
Definition: page1.c:45

Referenced by midi_parser_parse().

◆ sequence_track_SetParam()

static HRESULT WINAPI sequence_track_SetParam ( IDirectMusicTrack8 *  iface,
REFGUID  type,
MUSIC_TIME  time,
void *  param 
)
static

Definition at line 236 of file seqtrack.c.

238{
240
241 TRACE("(%p, %s, %ld, %p): method not implemented\n", This, debugstr_dmguid(type), time, param);
242 return E_NOTIMPL;
243}

◆ sequence_track_SetParamEx()

static HRESULT WINAPI sequence_track_SetParamEx ( IDirectMusicTrack8 *  iface,
REFGUID  type,
REFERENCE_TIME  time,
void *  param,
void *  state,
DWORD  flags 
)
static

Definition at line 299 of file seqtrack.c.

301{
303
304 TRACE("(%p, %s, %s, %p, %p, %lx): method not implemented\n", This, debugstr_dmguid(type),
306 return E_NOTIMPL;
307}

◆ track_IPersistStream_Load()

static HRESULT WINAPI track_IPersistStream_Load ( IPersistStream *  iface,
IStream *  stream 
)
static

Definition at line 407 of file seqtrack.c.

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}
#define TRACE_ON(x)
Definition: compat.h:75
#define DMUS_E_UNSUPPORTED_STREAM
Definition: dmerror.h:100
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
#define DMUS_FOURCC_SEQ_TRACK
Definition: dmusicf.h:196
static struct sequence_track * impl_from_IPersistStream(IPersistStream *iface)
Definition: seqtrack.c:402
static HRESULT parse_seqt_chunk(struct sequence_track *This, IStream *stream, struct chunk_entry *parent)
Definition: seqtrack.c:373

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( dmime  )

Variable Documentation

◆ dmtrack8_vtbl

const IDirectMusicTrack8Vtbl dmtrack8_vtbl
static
Initial value:
= {
}
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
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 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 HRESULT WINAPI sequence_track_InitPlay(IDirectMusicTrack8 *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
Definition: seqtrack.c:96
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 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

Definition at line 327 of file seqtrack.c.

Referenced by create_dmseqtrack().

◆ persiststream_vtbl

const IPersistStreamVtbl persiststream_vtbl
static
Initial value:
= {
}
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
HRESULT WINAPI dmobj_IPersistStream_QueryInterface(IPersistStream *iface, REFIID riid, void **ret_iface)
Definition: dmobject.c:689
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 WINAPI track_IPersistStream_Load(IPersistStream *iface, IStream *stream)
Definition: seqtrack.c:407

Definition at line 476 of file seqtrack.c.

Referenced by create_dmseqtrack().