ReactOS 0.4.17-dev-923-g4c9a150
paramcontroltrack.c
Go to the documentation of this file.
1/* IDirectMusicParamControlTrack 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 "dmime_private.h"
21
23
24/*****************************************************************************
25 * IDirectMusicParamControlTrack implementation
26 */
28 IDirectMusicTrack8 IDirectMusicTrack8_iface;
29 struct dmobject dmobj; /* IPersistStream only */
32
33/* IDirectMusicParamControlTrack IDirectMusicTrack8 part: */
34static inline IDirectMusicParamControlTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
35{
36 return CONTAINING_RECORD(iface, IDirectMusicParamControlTrack, IDirectMusicTrack8_iface);
37}
38
40 void **ret_iface)
41{
43
44 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
45
46 *ret_iface = NULL;
47
48 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack) ||
49 IsEqualIID(riid, &IID_IDirectMusicTrack8))
50 *ret_iface = iface;
52 *ret_iface = &This->dmobj.IPersistStream_iface;
53 else {
54 WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
55 return E_NOINTERFACE;
56 }
57
58 IUnknown_AddRef((IUnknown*)*ret_iface);
59 return S_OK;
60}
61
62static ULONG WINAPI paramcontrol_track_AddRef(IDirectMusicTrack8 *iface)
63{
66
67 TRACE("(%p) ref=%ld\n", This, ref);
68
69 return ref;
70}
71
72static ULONG WINAPI paramcontrol_track_Release(IDirectMusicTrack8 *iface)
73{
76
77 TRACE("(%p) ref=%ld\n", This, ref);
78
79 if (!ref) {
80 free(This);
81 }
82
83 return ref;
84}
85
86static HRESULT WINAPI paramcontrol_track_Init(IDirectMusicTrack8 *iface,
87 IDirectMusicSegment *pSegment)
88{
90 FIXME("(%p, %p): stub\n", This, pSegment);
91 return S_OK;
92}
93
94static HRESULT WINAPI paramcontrol_track_InitPlay(IDirectMusicTrack8 *iface,
95 IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance,
96 void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
97{
99 FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
100 return S_OK;
101}
102
103static HRESULT WINAPI paramcontrol_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
104{
106 FIXME("(%p, %p): stub\n", This, pStateData);
107 return S_OK;
108}
109
110static HRESULT WINAPI paramcontrol_track_Play(IDirectMusicTrack8 *iface, void *pStateData,
111 MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags,
112 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
113{
115 FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
116 return S_OK;
117}
118
119static HRESULT WINAPI paramcontrol_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type,
121{
123
124 TRACE("(%p, %s, %ld, %p, %p): not supported\n", This, debugstr_dmguid(type), time, next, param);
126}
127
128static HRESULT WINAPI paramcontrol_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type,
129 MUSIC_TIME time, void *param)
130{
132
133 TRACE("(%p, %s, %ld, %p): not supported\n", This, debugstr_dmguid(type), time, param);
135}
136
138{
140
141 TRACE("(%p, %s): param type not supported\n", This, debugstr_dmguid(type));
143}
144
146 REFGUID notiftype)
147{
149
150 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype));
151 return E_NOTIMPL;
152}
153
155 REFGUID notiftype)
156{
158
159 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(notiftype));
160 return E_NOTIMPL;
161}
162
163static HRESULT WINAPI paramcontrol_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart,
164 MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
165{
167 FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
168 return S_OK;
169}
170
171static HRESULT WINAPI paramcontrol_track_PlayEx(IDirectMusicTrack8 *iface, void *pStateData,
172 REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags,
173 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
174{
176 FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %ld, %p, %p, %ld): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart),
177 wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID);
178 return S_OK;
179}
180
181static HRESULT WINAPI paramcontrol_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType,
182 REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData,
184{
186 FIXME("(%p, %s, 0x%s, %p, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType),
187 wine_dbgstr_longlong(rtTime), prtNext, pParam, pStateData, dwFlags);
188 return S_OK;
189}
190
191static HRESULT WINAPI paramcontrol_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType,
192 REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags)
193{
195 FIXME("(%p, %s, 0x%s, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType),
196 wine_dbgstr_longlong(rtTime), pParam, pStateData, dwFlags);
197 return S_OK;
198}
199
200static HRESULT WINAPI paramcontrol_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context,
201 DWORD trackgroup, IDirectMusicTrack **track)
202{
204
205 TRACE("(%p, %p, %ld, %p): method not implemented\n", This, context, trackgroup, track);
206 return E_NOTIMPL;
207}
208
209static HRESULT WINAPI paramcontrol_track_Join(IDirectMusicTrack8 *iface,
210 IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup,
211 IDirectMusicTrack **resulttrack)
212{
214 TRACE("(%p, %p, %ld, %p, %ld, %p): method not implemented\n", This, newtrack, join, context,
215 trackgroup, resulttrack);
216 return E_NOTIMPL;
217}
218
219static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = {
238};
239
241{
242 FIXME(": Loading not implemented yet\n");
243 return S_OK;
244}
245
246static const IPersistStreamVtbl persiststream_vtbl = {
255};
256
257/* for ClassFactory */
259{
261 HRESULT hr;
262
263 *ppobj = NULL;
264 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
266 track->ref = 1;
267 dmobject_init(&track->dmobj, &CLSID_DirectMusicParamControlTrack,
269 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
270
273
274 return hr;
275}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#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
HRESULT WINAPI unimpl_IPersistStream_Save(IPersistStream *iface, IStream *stream, BOOL clear_dirty)
Definition: dmobject.c:735
#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 long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLfloat param
Definition: glext.h:5796
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
static IDirectMusicParamControlTrack * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
static HRESULT WINAPI param_IPersistStream_Load(IPersistStream *iface, IStream *stream)
static HRESULT WINAPI paramcontrol_track_Compose(IDirectMusicTrack8 *iface, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **track)
static HRESULT WINAPI paramcontrol_track_IsParamSupported(IDirectMusicTrack8 *iface, REFGUID type)
static ULONG WINAPI paramcontrol_track_AddRef(IDirectMusicTrack8 *iface)
static HRESULT WINAPI paramcontrol_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, MUSIC_TIME *next, void *param)
static HRESULT WINAPI paramcontrol_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, void **ret_iface)
static HRESULT WINAPI paramcontrol_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
static HRESULT WINAPI paramcontrol_track_InitPlay(IDirectMusicTrack8 *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
static HRESULT WINAPI paramcontrol_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, void *pParam, void *pStateData, DWORD dwFlags)
static HRESULT WINAPI paramcontrol_track_RemoveNotificationType(IDirectMusicTrack8 *iface, REFGUID notiftype)
static HRESULT WINAPI paramcontrol_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, void *param)
static HRESULT WINAPI paramcontrol_track_AddNotificationType(IDirectMusicTrack8 *iface, REFGUID notiftype)
static const IPersistStreamVtbl persiststream_vtbl
static HRESULT WINAPI paramcontrol_track_Play(IDirectMusicTrack8 *iface, void *pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
static ULONG WINAPI paramcontrol_track_Release(IDirectMusicTrack8 *iface)
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
static HRESULT WINAPI paramcontrol_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *newtrack, MUSIC_TIME join, IUnknown *context, DWORD trackgroup, IDirectMusicTrack **resulttrack)
static HRESULT WINAPI paramcontrol_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
static HRESULT WINAPI paramcontrol_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME *prtNext, void *pParam, void *pStateData, DWORD dwFlags)
static HRESULT WINAPI paramcontrol_track_PlayEx(IDirectMusicTrack8 *iface, void *pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
HRESULT create_dmparamcontroltrack(REFIID lpcGUID, void **ppobj)
static HRESULT WINAPI paramcontrol_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
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 TRACE(s)
Definition: solgame.cpp:4
IDirectMusicTrack8 IDirectMusicTrack8_iface
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