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

Go to the source code of this file.

Classes

struct  tempo_entry
 
struct  IDirectMusicTempoTrack
 

Typedefs

typedef struct IDirectMusicTempoTrack IDirectMusicTempoTrack
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (dmime)
 
 WINE_DECLARE_DEBUG_CHANNEL (dmfile)
 
static IDirectMusicTempoTrack * impl_from_IDirectMusicTrack8 (IDirectMusicTrack8 *iface)
 
static HRESULT WINAPI tempo_track_QueryInterface (IDirectMusicTrack8 *iface, REFIID riid, void **ret_iface)
 
static ULONG WINAPI tempo_track_AddRef (IDirectMusicTrack8 *iface)
 
static ULONG WINAPI tempo_track_Release (IDirectMusicTrack8 *iface)
 
static HRESULT WINAPI tempo_track_Init (IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
 
static HRESULT WINAPI tempo_track_InitPlay (IDirectMusicTrack8 *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
 
static HRESULT WINAPI tempo_track_EndPlay (IDirectMusicTrack8 *iface, void *pStateData)
 
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)
 
static HRESULT WINAPI tempo_track_GetParam (IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME music_time, MUSIC_TIME *out_next_time, void *param)
 
static HRESULT WINAPI tempo_track_SetParam (IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, void *param)
 
static HRESULT WINAPI tempo_track_IsParamSupported (IDirectMusicTrack8 *iface, REFGUID rguidType)
 
static HRESULT WINAPI tempo_track_AddNotificationType (IDirectMusicTrack8 *iface, REFGUID notiftype)
 
static HRESULT WINAPI tempo_track_RemoveNotificationType (IDirectMusicTrack8 *iface, REFGUID notiftype)
 
static HRESULT WINAPI tempo_track_Clone (IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
 
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)
 
static HRESULT WINAPI tempo_track_GetParamEx (IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData, DWORD dwFlags)
 
static HRESULT WINAPI tempo_track_SetParamEx (IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags)
 
static HRESULT WINAPI tempo_track_Compose (IDirectMusicTrack8 *iface, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **track)
 
static HRESULT WINAPI tempo_track_Join (IDirectMusicTrack8 *iface, IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack)
 
static IDirectMusicTempoTrack * impl_from_IPersistStream (IPersistStream *iface)
 
static HRESULT WINAPI tempo_IPersistStream_Load (IPersistStream *iface, IStream *stream)
 
HRESULT create_dmtempotrack (REFIID lpcGUID, void **ppobj)
 

Variables

static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
 
static const IPersistStreamVtbl persiststream_vtbl
 

Typedef Documentation

◆ IDirectMusicTempoTrack

Function Documentation

◆ create_dmtempotrack()

HRESULT create_dmtempotrack ( REFIID  lpcGUID,
void **  ppobj 
)

Definition at line 402 of file tempotrack.c.

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}
static void list_init(struct list_entry *head)
Definition: list.h:51
#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
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: tempotrack.c:37
struct dmobject dmobj
Definition: tempotrack.c:38
static const IPersistStreamVtbl persiststream_vtbl
Definition: tempotrack.c:390
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
Definition: tempotrack.c:319

◆ impl_from_IDirectMusicTrack8()

◆ impl_from_IPersistStream()

static IDirectMusicTempoTrack * impl_from_IPersistStream ( IPersistStream *  iface)
inlinestatic

Definition at line 340 of file tempotrack.c.

341{
342 return CONTAINING_RECORD(iface, IDirectMusicTempoTrack, dmobj.IPersistStream_iface);
343}

Referenced by tempo_IPersistStream_Load().

◆ tempo_IPersistStream_Load()

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

Definition at line 345 of file tempotrack.c.

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}
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
Definition: list.h:83
#define free
Definition: debug_ros.c:5
#define TRACE_(x)
Definition: compat.h:76
#define DMUS_E_UNSUPPORTED_STREAM
Definition: dmerror.h:100
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 stream_get_chunk(IStream *stream, struct chunk_entry *chunk)
Definition: dmobject.c:307
#define DMUS_FOURCC_TEMPO_TRACK
Definition: dmusicf.h:207
GLuint GLuint GLsizei count
Definition: gl.h:1545
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
uint32_t entry
Definition: isohybrid.c:63
static TCHAR * items[]
Definition: page1.c:45
#define TRACE(s)
Definition: solgame.cpp:4
Definition: dmobject.h:26
Definition: parse.h:23
Definition: tempotrack.c:31
static IDirectMusicTempoTrack * impl_from_IPersistStream(IPersistStream *iface)
Definition: tempotrack.c:340
uint32_t ULONG
Definition: typedefs.h:59
#define E_POINTER
Definition: winerror.h:3480

◆ tempo_track_AddNotificationType()

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

Definition at line 247 of file tempotrack.c.

248{
250
251 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype));
252 return E_NOTIMPL;
253}
#define E_NOTIMPL
Definition: ddrawi.h:99
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
static IDirectMusicTempoTrack * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
Definition: tempotrack.c:44

◆ tempo_track_AddRef()

static ULONG WINAPI tempo_track_AddRef ( IDirectMusicTrack8 *  iface)
static

Definition at line 72 of file tempotrack.c.

73{
76
77 TRACE("(%p) ref=%ld\n", This, ref);
78
79 return ref;
80}
#define InterlockedIncrement
Definition: armddk.h:53
long LONG
Definition: pedump.c:60
Definition: send.c:48

◆ tempo_track_Clone()

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

Definition at line 264 of file tempotrack.c.

266{
268 FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
269 return S_OK;
270}
#define FIXME(fmt,...)
Definition: precomp.h:53

◆ tempo_track_Compose()

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

Definition at line 301 of file tempotrack.c.

303{
305
306 TRACE("(%p, %p, %ld, %p): method not implemented\n", This, context, trackgroup, track);
307 return E_NOTIMPL;
308}
Definition: http.c:7252

◆ tempo_track_EndPlay()

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

TODO real clean up

Definition at line 128 of file tempotrack.c.

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}

◆ tempo_track_GetParam()

static HRESULT WINAPI tempo_track_GetParam ( IDirectMusicTrack8 *  iface,
REFGUID  type,
MUSIC_TIME  music_time,
MUSIC_TIME *  out_next_time,
void *  param 
)
static

Definition at line 154 of file tempotrack.c.

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}
static int list_empty(struct list_entry *head)
Definition: list.h:58
#define DMUS_E_GET_UNSUPPORTED
Definition: dmerror.h:72
#define DMUS_E_NOT_FOUND
Definition: dmerror.h:109
LONG MUSIC_TIME
Definition: dmplugin.h:95
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLfloat param
Definition: glext.h:5796
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:242
MUSIC_TIME lTime
Definition: dmusicf.h:460
double dblTempo
Definition: dmusicf.h:477
MUSIC_TIME mtTime
Definition: dmusicf.h:476
DMUS_IO_TEMPO_ITEM item
Definition: tempotrack.c:33

◆ tempo_track_GetParamEx()

static HRESULT WINAPI tempo_track_GetParamEx ( IDirectMusicTrack8 *  iface,
REFGUID  rguidType,
REFERENCE_TIME  rtTime,
REFERENCE_TIME *  prtNext,
void *  pParam,
void *  pStateData,
DWORD  dwFlags 
)
static

Definition at line 282 of file tempotrack.c.

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}
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141

◆ tempo_track_Init()

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

Definition at line 103 of file tempotrack.c.

104{
106 TRACE("(%p, %p): nothing to do here\n", This, pSegment);
107 return S_OK;
108}

◆ tempo_track_InitPlay()

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

TODO real fill useful data

Definition at line 110 of file tempotrack.c.

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}

◆ tempo_track_IsParamSupported()

static HRESULT WINAPI tempo_track_IsParamSupported ( IDirectMusicTrack8 *  iface,
REFGUID  rguidType 
)
static

Definition at line 232 of file tempotrack.c.

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}
#define DMUS_E_TYPE_UNSUPPORTED
Definition: dmerror.h:112

◆ tempo_track_Join()

static HRESULT WINAPI tempo_track_Join ( IDirectMusicTrack8 *  iface,
IDirectMusicTrack *  pNewTrack,
MUSIC_TIME  mtJoin,
IUnknown *  pContext,
DWORD  dwTrackGroup,
IDirectMusicTrack **  ppResultTrack 
)
static

Definition at line 310 of file tempotrack.c.

313{
315 FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
316 return S_OK;
317}

◆ tempo_track_Play()

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

should use IDirectMusicPerformance_SendPMsg here

Definition at line 144 of file tempotrack.c.

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}

◆ tempo_track_PlayEx()

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

Definition at line 272 of file tempotrack.c.

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}

◆ tempo_track_QueryInterface()

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

Definition at line 49 of file tempotrack.c.

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}
#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

◆ tempo_track_Release()

static ULONG WINAPI tempo_track_Release ( IDirectMusicTrack8 *  iface)
static

Definition at line 82 of file tempotrack.c.

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}
#define InterlockedDecrement
Definition: armddk.h:52
static void list_remove(struct list_entry *entry)
Definition: list.h:90

◆ tempo_track_RemoveNotificationType()

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

Definition at line 255 of file tempotrack.c.

257{
259
260 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype));
261 return E_NOTIMPL;
262}

◆ tempo_track_SetParam()

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

Definition at line 186 of file tempotrack.c.

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}
#define DMUS_E_TYPE_DISABLED
Definition: dmerror.h:111
#define DMUS_E_SET_UNSUPPORTED
Definition: dmerror.h:71
__u16 time
Definition: mkdosfs.c:8
__WINE_SERVER_LIST_INLINE void list_add_after(struct list *elem, struct list *to_add)
Definition: list.h:80

◆ tempo_track_SetParamEx()

static HRESULT WINAPI tempo_track_SetParamEx ( IDirectMusicTrack8 *  iface,
REFGUID  rguidType,
REFERENCE_TIME  rtTime,
void *  pParam,
void *  pStateData,
DWORD  dwFlags 
)
static

Definition at line 292 of file tempotrack.c.

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}

◆ WINE_DECLARE_DEBUG_CHANNEL()

WINE_DECLARE_DEBUG_CHANNEL ( dmfile  )

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( dmime  )

Variable Documentation

◆ dmtrack8_vtbl

const IDirectMusicTrack8Vtbl dmtrack8_vtbl
static
Initial value:
= {
}
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 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 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 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 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

Definition at line 319 of file tempotrack.c.

Referenced by create_dmtempotrack().

◆ 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 tempo_IPersistStream_Load(IPersistStream *iface, IStream *stream)
Definition: tempotrack.c:345

Definition at line 390 of file tempotrack.c.

Referenced by create_dmtempotrack().