ReactOS 0.4.17-dev-923-g4c9a150
signposttrack.c
Go to the documentation of this file.
1/* IDirectMusicSignPostTrack 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 "dmcompos_private.h"
21#include "dmobject.h"
22
24
25/*****************************************************************************
26 * IDirectMusicSignPostTrack implementation
27 */
29 IDirectMusicTrack8 IDirectMusicTrack8_iface;
30 struct dmobject dmobj; /* IPersistStream only */
33
34/* IDirectMusicSignPostTrack IDirectMusicTrack8 part: */
35static inline IDirectMusicSignPostTrack *impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
36{
37 return CONTAINING_RECORD(iface, IDirectMusicSignPostTrack, IDirectMusicTrack8_iface);
38}
39
40static HRESULT WINAPI signpost_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 signpost_track_AddRef(IDirectMusicTrack8 *iface)
64{
67
68 TRACE("(%p) ref=%ld\n", This, ref);
69
70 return ref;
71}
72
73static ULONG WINAPI signpost_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 signpost_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
86{
88 FIXME("(%p, %p): stub\n", This, pSegment);
89 return S_OK;
90}
91
92static HRESULT WINAPI signpost_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 signpost_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
102{
104 FIXME("(%p, %p): stub\n", This, pStateData);
105 return S_OK;
106}
107
108static HRESULT WINAPI signpost_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 signpost_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type,
119{
121
122 TRACE("(%p, %s, %ld, %p, %p): method not implemented\n", This, debugstr_dmguid(type), time,
123 next, param);
124 return E_NOTIMPL;
125}
126
127static HRESULT WINAPI signpost_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type,
128 MUSIC_TIME time, void *param)
129{
131
132 TRACE("(%p, %s, %ld, %p): method not implemented\n", This, debugstr_dmguid(type), time, param);
133 return E_NOTIMPL;
134}
135
137{
139
140 TRACE("(%p, %s): method not implemented\n", This, debugstr_dmguid(type));
141 return E_NOTIMPL;
142}
143
144static HRESULT WINAPI signpost_track_AddNotificationType(IDirectMusicTrack8 *iface,
145 REFGUID rguidNotificationType)
146{
148 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
149 return S_OK;
150}
151
152static HRESULT WINAPI signpost_track_RemoveNotificationType(IDirectMusicTrack8 *iface,
153 REFGUID rguidNotificationType)
154{
156 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
157 return S_OK;
158}
159
160static HRESULT WINAPI signpost_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart,
161 MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
162{
164 FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
165 return S_OK;
166}
167
168static HRESULT WINAPI signpost_track_PlayEx(IDirectMusicTrack8 *iface, void *pStateData,
169 REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags,
170 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
171{
173 FIXME("(%p, %p, 0x%s, 0x%s, 0x%s, %ld, %p, %p, %ld): stub\n", This, pStateData, wine_dbgstr_longlong(rtStart),
174 wine_dbgstr_longlong(rtEnd), wine_dbgstr_longlong(rtOffset), dwFlags, pPerf, pSegSt, dwVirtualID);
175 return S_OK;
176}
177
178static HRESULT WINAPI signpost_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID type,
180{
182
183 TRACE("(%p, %s, %s, %p, %p, %p, %lx): method not implemented\n", This, debugstr_dmguid(type),
185 return E_NOTIMPL;
186}
187
188static HRESULT WINAPI signpost_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID type,
189 REFERENCE_TIME time, void *param, void *state, DWORD flags)
190{
192
193 TRACE("(%p, %s, %s, %p, %p, %lx): method not implemented\n", This, debugstr_dmguid(type),
195 return E_NOTIMPL;
196}
197
198static HRESULT WINAPI signpost_track_Compose(IDirectMusicTrack8 *iface, IUnknown *pContext,
199 DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack)
200{
202 FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack);
203 return S_OK;
204}
205
206static HRESULT WINAPI signpost_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *pNewTrack,
207 MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup,
208 IDirectMusicTrack **ppResultTrack)
209{
211 FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack);
212 return S_OK;
213}
214
215static const IDirectMusicTrack8Vtbl dmtrack8_vtbl = {
234};
235
237{
238 return CONTAINING_RECORD(iface, IDirectMusicSignPostTrack, dmobj.IPersistStream_iface);
239}
240
242{
244 FIXME("(%p, %p): Loading not implemented yet\n", This, pStm);
245 return S_OK;
246}
247
249 BOOL cleardirty)
250{
252
253 FIXME("(%p, %p, %d): stub\n", This, stream, cleardirty);
254
255 if (!stream)
256 return E_POINTER;
257
258 return E_NOTIMPL;
259}
260
261static const IPersistStreamVtbl persiststream_vtbl = {
270};
271
272/* for ClassFactory */
274{
276 HRESULT hr;
277
278 *ppobj = NULL;
279 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
281 track->ref = 1;
282 dmobject_init(&track->dmobj, &CLSID_DirectMusicSignPostTrack,
284 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
285
288
289 return hr;
290}
static int state
Definition: maze.c:121
#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
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
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLbitfield flags
Definition: glext.h:7161
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
_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 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
static HRESULT WINAPI signpost_track_Compose(IDirectMusicTrack8 *iface, IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack)
static HRESULT WINAPI signpost_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 signpost_track_GetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, MUSIC_TIME *next, void *param)
static HRESULT WINAPI signpost_track_IsParamSupported(IDirectMusicTrack8 *iface, REFGUID type)
static HRESULT WINAPI signpost_track_SetParamEx(IDirectMusicTrack8 *iface, REFGUID type, REFERENCE_TIME time, void *param, void *state, DWORD flags)
HRESULT create_dmsignposttrack(REFIID lpcGUID, void **ppobj)
static HRESULT WINAPI signpost_track_GetParamEx(IDirectMusicTrack8 *iface, REFGUID type, REFERENCE_TIME time, REFERENCE_TIME *next, void *param, void *state, DWORD flags)
static IDirectMusicSignPostTrack * impl_from_IPersistStream(IPersistStream *iface)
static ULONG WINAPI signpost_track_Release(IDirectMusicTrack8 *iface)
Definition: signposttrack.c:73
static ULONG WINAPI signpost_track_AddRef(IDirectMusicTrack8 *iface)
Definition: signposttrack.c:63
static HRESULT WINAPI signpost_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 signpost_track_SetParam(IDirectMusicTrack8 *iface, REFGUID type, MUSIC_TIME time, void *param)
static HRESULT WINAPI signpost_track_QueryInterface(IDirectMusicTrack8 *iface, REFIID riid, void **ret_iface)
Definition: signposttrack.c:40
static const IPersistStreamVtbl persiststream_vtbl
static HRESULT WINAPI signpost_track_RemoveNotificationType(IDirectMusicTrack8 *iface, REFGUID rguidNotificationType)
static HRESULT WINAPI signpost_track_Join(IDirectMusicTrack8 *iface, IDirectMusicTrack *pNewTrack, MUSIC_TIME mtJoin, IUnknown *pContext, DWORD dwTrackGroup, IDirectMusicTrack **ppResultTrack)
static const IDirectMusicTrack8Vtbl dmtrack8_vtbl
static HRESULT WINAPI signpost_track_Init(IDirectMusicTrack8 *iface, IDirectMusicSegment *pSegment)
Definition: signposttrack.c:85
static HRESULT WINAPI IPersistStreamImpl_Save(IPersistStream *iface, IStream *stream, BOOL cleardirty)
static HRESULT WINAPI IPersistStreamImpl_Load(IPersistStream *iface, IStream *pStm)
static HRESULT WINAPI signpost_track_InitPlay(IDirectMusicTrack8 *iface, IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance, void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
Definition: signposttrack.c:92
static IDirectMusicSignPostTrack * impl_from_IDirectMusicTrack8(IDirectMusicTrack8 *iface)
Definition: signposttrack.c:35
static HRESULT WINAPI signpost_track_Clone(IDirectMusicTrack8 *iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
static HRESULT WINAPI signpost_track_AddNotificationType(IDirectMusicTrack8 *iface, REFGUID rguidNotificationType)
static HRESULT WINAPI signpost_track_EndPlay(IDirectMusicTrack8 *iface, void *pStateData)
#define TRACE(s)
Definition: solgame.cpp:4
IDirectMusicTrack8 IDirectMusicTrack8_iface
Definition: signposttrack.c:29
Definition: scsiwmi.h:51
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