ReactOS 0.4.17-dev-923-g4c9a150
auditiontrack.c
Go to the documentation of this file.
1/* IDirectMusicAuditionTrack Implementation
2 *
3 * Copyright (C) 2003-2004 Rok Mandeljc
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20#include "dmstyle_private.h"
21#include "dmobject.h"
22
24
25/*****************************************************************************
26 * IDirectMusicAuditionTrack implementation
27 */
29 IDirectMusicTrack8 IDirectMusicTrack8_iface;
30 struct dmobject dmobj; /* IPersistStream only */
33
34/* IDirectMusicAuditionTrack IDirectMusicTrack8 part: */
35static inline IDirectMusicAuditionTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
36{
37 return CONTAINING_RECORD(iface, IDirectMusicAuditionTrack, IDirectMusicTrack8_iface);
38}
39
40static HRESULT WINAPI audition_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid,
41 void **ret_iface)
42{
44
45 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
46
47 *ret_iface = NULL;
48
49 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) ||
50 IsEqualIID(riid, &IID_IDirectMusicTrack8))
51 *ret_iface = iface;
53 *ret_iface = &This->dmobj.IPersistStream_iface;
54 else {
55 WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
56 return E_NOINTERFACE;
57 }
58
59 IUnknown_AddRef((IUnknown*)*ret_iface);
60 return S_OK;
61}
62
63static ULONG WINAPI audition_track_AddRef(IDirectMusicTrack8 *iface)
64{
67
68 TRACE("(%p) ref=%ld\n", This, ref);
69
70 return ref;
71}
72
73static ULONG WINAPI audition_track_Release(IDirectMusicTrack8 *iface)
74{
77
78 TRACE("(%p) ref=%ld\n", This, ref);
79
80 if (!ref) free(This);
81
82 return ref;
83}
84
85static HRESULT WINAPI audition_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
86{
88 FIXME("(%p, %p): stub\n", This, pSegment);
89 return S_OK;
90}
91
92static HRESULT WINAPI audition_track_InitPlay(IDirectMusicTrack8 *iface,
93 IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance,
94 void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
95{
97 FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
98 return S_OK;
99}
100
101static HRESULT WINAPI audition_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
102{
104 FIXME("(%p, %p): stub\n", This, pStateData);
105 return S_OK;
106}
107
108static HRESULT WINAPI audition_track_Play(IDirectMusicTrack8 *iface, void *pStateData,
109 MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags,
110 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
111{
113 FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
114 return S_OK;
115}
116
117static HRESULT WINAPI audition_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type,
119{
121
122 TRACE("(%p, %s, %ld, %p, %p):\n", This, debugstr_dmguid(type), time, next, param);
123
124 if (!type)
125 return E_POINTER;
126
127 if (IsEqualGUID(type, &GUID_Valid_Start_Time)) {
128 FIXME("GUID_Valid_Start_Time not handled yet\n");
129 return S_OK;
130 } else if (IsEqualGUID(type, &GUID_Variations)) {
131 FIXME("GUID_Variations not handled yet\n");
132 return S_OK;
133 }
134
136}
137
138static HRESULT WINAPI audition_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type,
139 MUSIC_TIME time, void *param)
140{
142
143 TRACE("(%p, %s, %ld, %p)\n", This, debugstr_dmguid(type), time, param);
144
145 if (!type)
146 return E_POINTER;
147
148 if (IsEqualGUID(type, &GUID_DisableTimeSig)) {
149 FIXME("GUID_DisableTimeSig not handled yet\n");
150 return S_OK;
151 } else if (IsEqualGUID(type, &GUID_EnableTimeSig)) {
152 FIXME("GUID_EnableTimeSig not handled yet\n");
153 return S_OK;
154 } else if (IsEqualGUID(type, &GUID_SeedVariations)) {
155 FIXME("GUID_SeedVariations not handled yet\n");
156 return S_OK;
157 }
158
160}
161
163{
165 static const GUID *valid[] = {
166 &GUID_DisableTimeSig,
167 &GUID_EnableTimeSig,
168 &GUID_SeedVariations,
169 &GUID_Valid_Start_Time,
170 &GUID_Variations
171 };
172 unsigned int i;
173
174
175 TRACE("(%p, %s)\n", This, debugstr_dmguid(type));
176
177 if (!type)
178 return E_POINTER;
179
180 for (i = 0; i < ARRAY_SIZE(valid); i++)
181 if (IsEqualGUID(type, valid[i]))
182 return S_OK;
183
184 TRACE("param unsupported\n");
186}
187
188static HRESULT WINAPI audition_track_AddNotificationType(IDirectMusicTrack8 *iface,
189 REFGUID rguidNotificationType)
190{
192 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
193 return S_OK;
194}
195
196static HRESULT WINAPI audition_track_RemoveNotificationType(IDirectMusicTrack8 *iface,
197 REFGUID rguidNotificationType)
198{
200 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
201 return S_OK;
202}
203
204static HRESULT WINAPI audition_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart,
205 MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
206{
208 FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
209 return S_OK;
210}
211
212static HRESULT WINAPI audition_track_PlayEx(IDirectMusicTrack8 *iface, void *pStateData,
213 REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags,
214 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
215{
217 FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %ld, %p, %p, %ld): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart),
218 wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID);
219 return S_OK;
220}
221
222static HRESULT WINAPI audition_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType,
223 REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData,
225{
227 FIXME("(%p, %s, 0x%s, %p, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType),
228 wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags);
229 return S_OK;
230}
231
232static HRESULT WINAPI audition_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType,
233 REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags)
234{
236 FIXME("(%p, %s, 0x%s, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType),
237 wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags);
238 return S_OK;
239}
240
241static HRESULT WINAPI audition_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context,
242 DWORD trackgroup, IDirectMusicTrack **track)
243{
245
246 TRACE("(%p, %p, %ld, %p): method not implemented\n", This, context, trackgroup, track);
247 return E_NOTIMPL;
248}
249
250static HRESULT WINAPI audition_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *newtrack,
251 MUSIC_TIME join, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **resulttrack)
252{
254 TRACE("(%p, %p, %ld, %p, %ld, %p): stub\n", This, newtrack, join, context, trackgroup,
255 resulttrack);
256 return E_NOTIMPL;
257}
258
259static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = {
278};
279
281{
282 return CONTAINING_RECORD(iface, IDirectMusicAuditionTrack, dmobj.IPersistStream_iface);
283}
284
286{
287 FIXME(": Loading not implemented yet\n");
288 return S_OK;
289}
290
292 BOOL cleardirty)
293{
295
296 FIXME("(%p, %p, %d): stub\n", This, stream, cleardirty);
297
298 if (!stream)
299 return E_POINTER;
300
301 return E_NOTIMPL;
302}
303
304static const IPersistStreamVtbl persiststream_vtbl = {
313};
314
315/* for ClassFactory */
317{
319 HRESULT hr;
320
321 *ppobj = NULL;
322 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
324 track->ref = 1;
325 dmobject_init(&track->dmobj, &CLSID_DirectMusicAuditionTrack,
327 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
328
331
332 return hr;
333}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
static HRESULT WINAPI audition_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, void **ret_iface)
Definition: auditiontrack.c:40
static ULONG WINAPI audition_track_Release(IDirectMusicTrack8 *iface)
Definition: auditiontrack.c:73
static HRESULT WINAPI audition_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
static HRESULT WINAPI audition_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
Definition: auditiontrack.c:85
static ULONG WINAPI audition_track_AddRef(IDirectMusicTrack8 *iface)
Definition: auditiontrack.c:63
static HRESULT WINAPI audition_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 audition_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **track)
static IDirectMusicAuditionTrack * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
Definition: auditiontrack.c:35
static HRESULT WINAPI audition_track_IsParamSupported(IDirectMusicTrack8 *iface, REFGUID type)
static HRESULT WINAPI audition_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
static HRESULT WINAPI audition_track_AddNotificationType(IDirectMusicTrack8 *iface, REFGUID rguidNotificationType)
static IDirectMusicAuditionTrack * impl_from_IPersistStream(IPersistStream *iface)
static const IPersistStreamVtbl persiststream_vtbl
static HRESULT WINAPI audition_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags)
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
static HRESULT WINAPI audition_track_InitPlay(IDirectMusicTrack8 *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
Definition: auditiontrack.c:92
static HRESULT WINAPI IPersistStreamImpl_Save(IPersistStream *iface, IStream *stream, BOOL cleardirty)
static HRESULT WINAPI audition_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData, DWORD dwFlags)
static HRESULT WINAPI audition_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, void *param)
static HRESULT WINAPI audition_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, MUSIC_TIME *next, void *param)
static HRESULT WINAPI audition_track_RemoveNotificationType(IDirectMusicTrack8 *iface, REFGUID rguidNotificationType)
HRESULT create_dmauditiontrack(REFIID lpcGUID, void **ppobj)
static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *stream)
static HRESULT WINAPI audition_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 audition_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **resulttrack)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
#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 DMUS_E_GET_UNSUPPORTED
Definition: dmerror.h:72
#define DMUS_E_TYPE_UNSUPPORTED
Definition: dmerror.h:112
#define DMUS_E_SET_UNSUPPORTED
Definition: dmerror.h:71
void dmobject_init(struct dmobject *dmobj, const GUID *class, IUnknown *outer_unk)
Definition: dmobject.c:749
ULONG WINAPI dmobj_IPersistStream_Release(IPersistStream *iface)
Definition: dmobject.c:702
HRESULT WINAPI unimpl_IPersistStream_GetSizeMax(IPersistStream *iface, ULARGE_INTEGER *size)
Definition: dmobject.c:742
HRESULT WINAPI dmobj_IPersistStream_GetClassID(IPersistStream *iface, CLSID *class)
Definition: dmobject.c:708
ULONG WINAPI dmobj_IPersistStream_AddRef(IPersistStream *iface)
Definition: dmobject.c:696
const char * debugstr_dmguid(const GUID *id)
Definition: dmobject.c:36
HRESULT 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
#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
LONGLONG REFERENCE_TIME
Definition: dmusicks.h:9
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOLEAN valid
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLfloat param
Definition: glext.h:5796
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
__u16 time
Definition: mkdosfs.c:8
LOCAL int join(int *aux, int a, int b)
Definition: match.c:560
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
long LONG
Definition: pedump.c:60
const GUID IID_IPersistStream
Definition: proxy.cpp:13
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
static unsigned __int64 next
Definition: rand_nt.c:6
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: auditiontrack.c:29
Definition: scsiwmi.h:51
Definition: http.c:7252
Definition: send.c:48
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
#define E_POINTER
Definition: winerror.h:3480