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

Go to the source code of this file.

Classes

struct  IDirectMusicTimeSigTrack
 

Typedefs

typedef struct IDirectMusicTimeSigTrack IDirectMusicTimeSigTrack
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (dmime)
 
static IDirectMusicTimeSigTrack * impl_from_IDirectMusicTrack (IDirectMusicTrack *iface)
 
static IDirectMusicTimeSigTrack * impl_from_IPersistStream (IPersistStream *iface)
 
static HRESULT WINAPI IDirectMusicTrackImpl_QueryInterface (IDirectMusicTrack *iface, REFIID riid, void **ret_iface)
 
static ULONG WINAPI IDirectMusicTrackImpl_AddRef (IDirectMusicTrack *iface)
 
static ULONG WINAPI IDirectMusicTrackImpl_Release (IDirectMusicTrack *iface)
 
static HRESULT WINAPI IDirectMusicTrackImpl_Init (IDirectMusicTrack *iface, IDirectMusicSegment *pSegment)
 
static HRESULT WINAPI IDirectMusicTrackImpl_InitPlay (IDirectMusicTrack *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
 
static HRESULT WINAPI IDirectMusicTrackImpl_EndPlay (IDirectMusicTrack *iface, void *pStateData)
 
static HRESULT WINAPI IDirectMusicTrackImpl_Play (IDirectMusicTrack *iface, void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
 
static HRESULT WINAPI IDirectMusicTrackImpl_GetParam (IDirectMusicTrack *iface, REFGUID type, MUSIC_TIME time, MUSIC_TIME *next, void *param)
 
static HRESULT WINAPI IDirectMusicTrackImpl_SetParam (IDirectMusicTrack *iface, REFGUID type, MUSIC_TIME time, void *param)
 
static HRESULT WINAPI IDirectMusicTrackImpl_IsParamSupported (IDirectMusicTrack *iface, REFGUID rguidType)
 
static HRESULT WINAPI IDirectMusicTrackImpl_AddNotificationType (IDirectMusicTrack *iface, REFGUID rguidNotificationType)
 
static HRESULT WINAPI IDirectMusicTrackImpl_RemoveNotificationType (IDirectMusicTrack *iface, REFGUID rguidNotificationType)
 
static HRESULT WINAPI IDirectMusicTrackImpl_Clone (IDirectMusicTrack *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
 
static HRESULT parse_timetrack_list (IDirectMusicTimeSigTrack *This, IStream *stream, struct chunk_entry *timesig)
 
static HRESULT WINAPI time_IPersistStream_Load (IPersistStream *iface, IStream *stream)
 
HRESULT create_dmtimesigtrack (REFIID lpcGUID, void **ppobj)
 

Variables

static const IDirectMusicTrackVtbl dmtack_vtbl
 
static const IPersistStreamVtbl persiststream_vtbl
 

Typedef Documentation

◆ IDirectMusicTimeSigTrack

Function Documentation

◆ create_dmtimesigtrack()

HRESULT create_dmtimesigtrack ( REFIID  lpcGUID,
void **  ppobj 
)

Definition at line 285 of file timesigtrack.c.

286{
288 HRESULT hr;
289
290 *ppobj = NULL;
291 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
292 track->IDirectMusicTrack_iface.lpVtbl = &dmtack_vtbl;
293 track->ref = 1;
294 dmobject_init(&track->dmobj, &CLSID_DirectMusicTimeSigTrack,
296 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
297
300
301 return hr;
302}
#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 IDirectMusicTrack_Release(p)
Definition: dmplugin.h:226
#define IDirectMusicTrack_QueryInterface(p, a, b)
Definition: dmplugin.h:224
#define calloc
Definition: rosglue.h:14
IDirectMusicTrack IDirectMusicTrack_iface
Definition: timesigtrack.c:28
struct dmobject dmobj
Definition: timesigtrack.c:29
static const IPersistStreamVtbl persiststream_vtbl
Definition: timesigtrack.c:273
static const IDirectMusicTrackVtbl dmtack_vtbl
Definition: timesigtrack.c:201

◆ IDirectMusicTrackImpl_AddNotificationType()

static HRESULT WINAPI IDirectMusicTrackImpl_AddNotificationType ( IDirectMusicTrack *  iface,
REFGUID  rguidNotificationType 
)
static

Definition at line 177 of file timesigtrack.c.

179{
181 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
182 return S_OK;
183}
#define FIXME(fmt,...)
Definition: precomp.h:53
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
#define S_OK
Definition: intsafe.h:52
static IDirectMusicTimeSigTrack * impl_from_IDirectMusicTrack(IDirectMusicTrack *iface)
Definition: timesigtrack.c:37

◆ IDirectMusicTrackImpl_AddRef()

static ULONG WINAPI IDirectMusicTrackImpl_AddRef ( IDirectMusicTrack *  iface)
static

Definition at line 69 of file timesigtrack.c.

70{
73
74 TRACE("(%p) ref=%ld\n", This, ref);
75
76 return ref;
77}
#define InterlockedIncrement
Definition: armddk.h:53
long LONG
Definition: pedump.c:60
#define TRACE(s)
Definition: solgame.cpp:4
Definition: send.c:48

◆ IDirectMusicTrackImpl_Clone()

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

Definition at line 193 of file timesigtrack.c.

195{
197 FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
198 return S_OK;
199}

◆ IDirectMusicTrackImpl_EndPlay()

static HRESULT WINAPI IDirectMusicTrackImpl_EndPlay ( IDirectMusicTrack *  iface,
void *  pStateData 
)
static

Definition at line 111 of file timesigtrack.c.

112{
114 FIXME("(%p, %p): stub\n", This, pStateData);
115 return S_OK;
116}

◆ IDirectMusicTrackImpl_GetParam()

static HRESULT WINAPI IDirectMusicTrackImpl_GetParam ( IDirectMusicTrack *  iface,
REFGUID  type,
MUSIC_TIME  time,
MUSIC_TIME *  next,
void *  param 
)
static

Definition at line 127 of file timesigtrack.c.

129{
131
132 TRACE("(%p, %s, %ld, %p, %p)\n", This, debugstr_dmguid(type), time, next, param);
133
134 if (IsEqualGUID(type, &GUID_TimeSignature)) {
135 FIXME("GUID_TimeSignature not handled yet\n");
136 return DMUS_E_NOT_FOUND;
137 }
138
140}
#define DMUS_E_GET_UNSUPPORTED
Definition: dmerror.h:72
#define DMUS_E_NOT_FOUND
Definition: dmerror.h:109
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLfloat param
Definition: glext.h:5796
__u16 time
Definition: mkdosfs.c:8
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
static unsigned __int64 next
Definition: rand_nt.c:6

◆ IDirectMusicTrackImpl_Init()

static HRESULT WINAPI IDirectMusicTrackImpl_Init ( IDirectMusicTrack *  iface,
IDirectMusicSegment *  pSegment 
)
static

Definition at line 94 of file timesigtrack.c.

96{
98 FIXME("(%p, %p): stub\n", This, pSegment);
99 return S_OK;
100}

◆ IDirectMusicTrackImpl_InitPlay()

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

Definition at line 102 of file timesigtrack.c.

105{
107 FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
108 return S_OK;
109}
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141

◆ IDirectMusicTrackImpl_IsParamSupported()

static HRESULT WINAPI IDirectMusicTrackImpl_IsParamSupported ( IDirectMusicTrack *  iface,
REFGUID  rguidType 
)
static

Definition at line 161 of file timesigtrack.c.

163{
165
166 TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType));
167 if (IsEqualGUID (rguidType, &GUID_DisableTimeSig)
168 || IsEqualGUID (rguidType, &GUID_EnableTimeSig)
169 || IsEqualGUID (rguidType, &GUID_TimeSignature)) {
170 TRACE("param supported\n");
171 return S_OK;
172 }
173 TRACE("param unsupported\n");
175}
#define DMUS_E_TYPE_UNSUPPORTED
Definition: dmerror.h:112

◆ IDirectMusicTrackImpl_Play()

static HRESULT WINAPI IDirectMusicTrackImpl_Play ( IDirectMusicTrack *  iface,
void *  pStateData,
MUSIC_TIME  mtStart,
MUSIC_TIME  mtEnd,
MUSIC_TIME  mtOffset,
DWORD  dwFlags,
IDirectMusicPerformance *  pPerf,
IDirectMusicSegmentState *  pSegSt,
DWORD  dwVirtualID 
)
static

Definition at line 118 of file timesigtrack.c.

121{
123 FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
124 return S_OK;
125}

◆ IDirectMusicTrackImpl_QueryInterface()

static HRESULT WINAPI IDirectMusicTrackImpl_QueryInterface ( IDirectMusicTrack *  iface,
REFIID  riid,
void **  ret_iface 
)
static

Definition at line 47 of file timesigtrack.c.

49{
51
52 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
53
54 *ret_iface = NULL;
55
56 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack))
57 *ret_iface = iface;
59 *ret_iface = &This->dmobj.IPersistStream_iface;
60 else {
61 WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
62 return E_NOINTERFACE;
63 }
64
65 IUnknown_AddRef((IUnknown*)*ret_iface);
66 return S_OK;
67}
#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

◆ IDirectMusicTrackImpl_Release()

static ULONG WINAPI IDirectMusicTrackImpl_Release ( IDirectMusicTrack *  iface)
static

Definition at line 79 of file timesigtrack.c.

80{
83
84 TRACE("(%p) ref=%ld\n", This, ref);
85
86 if (!ref) {
87 free(This->items);
88 free(This);
89 }
90
91 return ref;
92}
#define InterlockedDecrement
Definition: armddk.h:52
#define free
Definition: debug_ros.c:5

◆ IDirectMusicTrackImpl_RemoveNotificationType()

static HRESULT WINAPI IDirectMusicTrackImpl_RemoveNotificationType ( IDirectMusicTrack *  iface,
REFGUID  rguidNotificationType 
)
static

Definition at line 185 of file timesigtrack.c.

187{
189 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
190 return S_OK;
191}

◆ IDirectMusicTrackImpl_SetParam()

static HRESULT WINAPI IDirectMusicTrackImpl_SetParam ( IDirectMusicTrack *  iface,
REFGUID  type,
MUSIC_TIME  time,
void *  param 
)
static

Definition at line 142 of file timesigtrack.c.

144{
146
147 TRACE("(%p, %s, %ld, %p)\n", This, debugstr_dmguid(type), time, param);
148
149 if (IsEqualGUID(type, &GUID_DisableTimeSig)) {
150 FIXME("GUID_DisableTimeSig not handled yet\n");
151 return S_OK;
152 }
153 if (IsEqualGUID(type, &GUID_EnableTimeSig)) {
154 FIXME("GUID_EnableTimeSig not handled yet\n");
155 return S_OK;
156 }
157
159}
#define DMUS_E_SET_UNSUPPORTED
Definition: dmerror.h:71

◆ impl_from_IDirectMusicTrack()

◆ impl_from_IPersistStream()

static IDirectMusicTimeSigTrack * impl_from_IPersistStream ( IPersistStream *  iface)
inlinestatic

Definition at line 42 of file timesigtrack.c.

43{
44 return CONTAINING_RECORD(iface, IDirectMusicTimeSigTrack, dmobj.IPersistStream_iface);
45}

Referenced by time_IPersistStream_Load().

◆ parse_timetrack_list()

static HRESULT parse_timetrack_list ( IDirectMusicTimeSigTrack *  This,
IStream *  stream,
struct chunk_entry *  timesig 
)
static

Definition at line 217 of file timesigtrack.c.

219{
220 HRESULT hr;
221 struct chunk_entry chunk = {.parent = timesig};
222 int i;
223
224 TRACE("Parsing segment form in %p: %s\n", stream, debugstr_chunk(timesig));
225
227 WARN("Failed to read data of %s\n", debugstr_chunk(&chunk));
228 return hr;
229 }
230
233
234 hr = stream_chunk_get_array(stream, &chunk, (void **)&This->items, &This->count,
236 if (FAILED(hr))
237 return hr;
238
239 for (i = 0; i < This->count; i++)
240 {
241 TRACE("Found DMUS_IO_TIMESIGNATURE_ITEM\n");
242 TRACE(" - lTime %ld\n", This->items[i].lTime);
243 TRACE(" - bBeatsPerMeasure %d\n", This->items[i].bBeatsPerMeasure);
244 TRACE(" - bBeat %d\n", This->items[i].bBeat);
245 TRACE(" - wGridsPerBeat %d\n", This->items[i].wGridsPerBeat);
246 }
247
248 return S_OK;
249}
#define DMUS_E_UNSUPPORTED_STREAM
Definition: dmerror.h:100
HRESULT stream_next_chunk(IStream *stream, struct chunk_entry *chunk)
Definition: dmobject.c:360
const char * debugstr_chunk(const struct chunk_entry *chunk)
Definition: dmobject.c:279
HRESULT stream_chunk_get_array(IStream *stream, const struct chunk_entry *chunk, void **array, unsigned int *count, DWORD elem_size)
Definition: dmobject.c:378
#define DMUS_FOURCC_TIMESIGNATURE_TRACK
Definition: dmusicf.h:209
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
#define FAILED(hr)
Definition: intsafe.h:51
Definition: dmobject.h:26
Definition: parse.h:23

Referenced by time_IPersistStream_Load().

◆ time_IPersistStream_Load()

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

Definition at line 251 of file timesigtrack.c.

252{
254 HRESULT hr;
255 struct chunk_entry chunk = {0};
256
257 TRACE("%p, %p\n", This, stream);
258
259 if (!stream)
260 return E_POINTER;
261
262 if ((hr = stream_get_chunk(stream, &chunk)) != S_OK)
263 return hr;
264
267 else
269
270 return hr;
271}
HRESULT stream_get_chunk(IStream *stream, struct chunk_entry *chunk)
Definition: dmobject.c:307
#define DMUS_FOURCC_TIMESIGTRACK_LIST
Definition: dmusicf.h:210
#define FOURCC_LIST
Definition: mmsystem.h:565
static IDirectMusicTimeSigTrack * impl_from_IPersistStream(IPersistStream *iface)
Definition: timesigtrack.c:42
static HRESULT parse_timetrack_list(IDirectMusicTimeSigTrack *This, IStream *stream, struct chunk_entry *timesig)
Definition: timesigtrack.c:217
#define E_POINTER
Definition: winerror.h:3480

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( dmime  )

Variable Documentation

◆ dmtack_vtbl

const IDirectMusicTrackVtbl dmtack_vtbl
static
Initial value:
= {
}
static HRESULT WINAPI IDirectMusicTrackImpl_Play(IDirectMusicTrack *iface, void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
Definition: timesigtrack.c:118
static HRESULT WINAPI IDirectMusicTrackImpl_EndPlay(IDirectMusicTrack *iface, void *pStateData)
Definition: timesigtrack.c:111
static HRESULT WINAPI IDirectMusicTrackImpl_SetParam(IDirectMusicTrack *iface, REFGUID type, MUSIC_TIME time, void *param)
Definition: timesigtrack.c:142
static ULONG WINAPI IDirectMusicTrackImpl_Release(IDirectMusicTrack *iface)
Definition: timesigtrack.c:79
static ULONG WINAPI IDirectMusicTrackImpl_AddRef(IDirectMusicTrack *iface)
Definition: timesigtrack.c:69
static HRESULT WINAPI IDirectMusicTrackImpl_QueryInterface(IDirectMusicTrack *iface, REFIID riid, void **ret_iface)
Definition: timesigtrack.c:47
static HRESULT WINAPI IDirectMusicTrackImpl_Init(IDirectMusicTrack *iface, IDirectMusicSegment *pSegment)
Definition: timesigtrack.c:94
static HRESULT WINAPI IDirectMusicTrackImpl_InitPlay(IDirectMusicTrack *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
Definition: timesigtrack.c:102
static HRESULT WINAPI IDirectMusicTrackImpl_IsParamSupported(IDirectMusicTrack *iface, REFGUID rguidType)
Definition: timesigtrack.c:161
static HRESULT WINAPI IDirectMusicTrackImpl_RemoveNotificationType(IDirectMusicTrack *iface, REFGUID rguidNotificationType)
Definition: timesigtrack.c:185
static HRESULT WINAPI IDirectMusicTrackImpl_AddNotificationType(IDirectMusicTrack *iface, REFGUID rguidNotificationType)
Definition: timesigtrack.c:177
static HRESULT WINAPI IDirectMusicTrackImpl_Clone(IDirectMusicTrack *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
Definition: timesigtrack.c:193
static HRESULT WINAPI IDirectMusicTrackImpl_GetParam(IDirectMusicTrack *iface, REFGUID type, MUSIC_TIME time, MUSIC_TIME *next, void *param)
Definition: timesigtrack.c:127

Definition at line 201 of file timesigtrack.c.

Referenced by create_dmtimesigtrack().

◆ 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 time_IPersistStream_Load(IPersistStream *iface, IStream *stream)
Definition: timesigtrack.c:251

Definition at line 273 of file timesigtrack.c.

Referenced by create_dmtimesigtrack().