ddraw: Set dwMaxVertexCount to 2048.
[wine.git] / dlls / dmime / markertrack.c
blob8d36a4cdd01019edbb588844a1fcff18454b27d4
1 /* IDirectMusicMarkerTrack Implementation
3 * Copyright (C) 2003-2004 Rok Mandeljc
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.
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.
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
20 #include "dmime_private.h"
22 WINE_DEFAULT_DEBUG_CHANNEL(dmime);
24 /*****************************************************************************
25 * IDirectMusicMarkerTrack implementation
27 typedef struct IDirectMusicMarkerTrack {
28 IDirectMusicTrack IDirectMusicTrack_iface;
29 struct dmobject dmobj; /* IPersistStream only */
30 LONG ref;
31 } IDirectMusicMarkerTrack;
33 /* IDirectMusicMarkerTrack IDirectMusicTrack8 part: */
34 static inline IDirectMusicMarkerTrack *impl_from_IDirectMusicTrack(IDirectMusicTrack *iface)
36 return CONTAINING_RECORD(iface, IDirectMusicMarkerTrack, IDirectMusicTrack_iface);
39 static HRESULT WINAPI IDirectMusicTrackImpl_QueryInterface(IDirectMusicTrack *iface, REFIID riid,
40 void **ret_iface)
42 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
44 TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ret_iface);
46 *ret_iface = NULL;
48 if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_IDirectMusicTrack))
49 *ret_iface = iface;
50 else if (IsEqualIID(riid, &IID_IPersistStream))
51 *ret_iface = &This->dmobj.IPersistStream_iface;
52 else {
53 WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ret_iface);
54 return E_NOINTERFACE;
57 IUnknown_AddRef((IUnknown*)*ret_iface);
58 return S_OK;
61 static ULONG WINAPI IDirectMusicTrackImpl_AddRef(IDirectMusicTrack *iface)
63 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
64 LONG ref = InterlockedIncrement(&This->ref);
66 TRACE("(%p) ref=%ld\n", This, ref);
68 return ref;
71 static ULONG WINAPI IDirectMusicTrackImpl_Release(IDirectMusicTrack *iface)
73 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
74 LONG ref = InterlockedDecrement(&This->ref);
76 TRACE("(%p) ref=%ld\n", This, ref);
78 if (!ref) {
79 free(This);
82 return ref;
85 static HRESULT WINAPI IDirectMusicTrackImpl_Init(IDirectMusicTrack *iface,
86 IDirectMusicSegment *pSegment)
88 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
89 FIXME("(%p, %p): stub\n", This, pSegment);
90 return S_OK;
93 static HRESULT WINAPI IDirectMusicTrackImpl_InitPlay(IDirectMusicTrack *iface,
94 IDirectMusicSegmentState *pSegmentState, IDirectMusicPerformance *pPerformance,
95 void **ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
97 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
98 FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags);
99 return S_OK;
102 static HRESULT WINAPI IDirectMusicTrackImpl_EndPlay(IDirectMusicTrack *iface, void *pStateData)
104 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
105 FIXME("(%p, %p): stub\n", This, pStateData);
106 return S_OK;
109 static HRESULT WINAPI IDirectMusicTrackImpl_Play(IDirectMusicTrack *iface, void *pStateData,
110 MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags,
111 IDirectMusicPerformance *pPerf, IDirectMusicSegmentState *pSegSt, DWORD dwVirtualID)
113 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
114 FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID);
115 return S_OK;
118 static HRESULT WINAPI IDirectMusicTrackImpl_GetParam(IDirectMusicTrack *iface, REFGUID type,
119 MUSIC_TIME time, MUSIC_TIME *next, void *param)
121 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
123 TRACE("(%p, %s, %ld, %p, %p)\n", This, debugstr_dmguid(type), time, next, param);
125 if (!param)
126 return E_POINTER;
128 if (IsEqualGUID(type, &GUID_Play_Marker)) {
129 FIXME("GUID_Play_Marker not handled yet\n");
130 return S_FALSE;
132 if (IsEqualGUID(type, &GUID_Valid_Start_Time)) {
133 FIXME("GUID_Valid_Start_Time not handled yet\n");
134 return DMUS_E_NOT_FOUND;
137 return DMUS_E_GET_UNSUPPORTED;
140 static HRESULT WINAPI IDirectMusicTrackImpl_SetParam(IDirectMusicTrack *iface, REFGUID type,
141 MUSIC_TIME time, void *param)
143 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
145 TRACE("(%p, %s, %ld, %p): not supported\n", This, debugstr_dmguid(type), time, param);
146 return DMUS_E_SET_UNSUPPORTED;
149 static HRESULT WINAPI IDirectMusicTrackImpl_IsParamSupported(IDirectMusicTrack *iface,
150 REFGUID rguidType)
152 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
154 TRACE("(%p, %s)\n", This, debugstr_dmguid(rguidType));
155 if (IsEqualGUID (rguidType, &GUID_Play_Marker)
156 || IsEqualGUID (rguidType, &GUID_Valid_Start_Time)) {
157 TRACE("param supported\n");
158 return S_OK;
160 TRACE("param unsupported\n");
161 return DMUS_E_TYPE_UNSUPPORTED;
164 static HRESULT WINAPI IDirectMusicTrackImpl_AddNotificationType(IDirectMusicTrack *iface,
165 REFGUID rguidNotificationType)
167 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
168 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
169 return S_OK;
172 static HRESULT WINAPI IDirectMusicTrackImpl_RemoveNotificationType(IDirectMusicTrack *iface,
173 REFGUID rguidNotificationType)
175 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
176 FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType));
177 return S_OK;
180 static HRESULT WINAPI IDirectMusicTrackImpl_Clone(IDirectMusicTrack *iface, MUSIC_TIME mtStart,
181 MUSIC_TIME mtEnd, IDirectMusicTrack **ppTrack)
183 IDirectMusicMarkerTrack *This = impl_from_IDirectMusicTrack(iface);
184 FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack);
185 return S_OK;
188 static const IDirectMusicTrackVtbl dmtrack_vtbl = {
189 IDirectMusicTrackImpl_QueryInterface,
190 IDirectMusicTrackImpl_AddRef,
191 IDirectMusicTrackImpl_Release,
192 IDirectMusicTrackImpl_Init,
193 IDirectMusicTrackImpl_InitPlay,
194 IDirectMusicTrackImpl_EndPlay,
195 IDirectMusicTrackImpl_Play,
196 IDirectMusicTrackImpl_GetParam,
197 IDirectMusicTrackImpl_SetParam,
198 IDirectMusicTrackImpl_IsParamSupported,
199 IDirectMusicTrackImpl_AddNotificationType,
200 IDirectMusicTrackImpl_RemoveNotificationType,
201 IDirectMusicTrackImpl_Clone
204 static HRESULT WINAPI marker_IPersistStream_Load(IPersistStream *iface, IStream *stream)
206 FIXME(": Loading not implemented yet\n");
207 return S_OK;
210 static const IPersistStreamVtbl persiststream_vtbl = {
211 dmobj_IPersistStream_QueryInterface,
212 dmobj_IPersistStream_AddRef,
213 dmobj_IPersistStream_Release,
214 dmobj_IPersistStream_GetClassID,
215 unimpl_IPersistStream_IsDirty,
216 marker_IPersistStream_Load,
217 unimpl_IPersistStream_Save,
218 unimpl_IPersistStream_GetSizeMax
221 /* for ClassFactory */
222 HRESULT create_dmmarkertrack(REFIID lpcGUID, void **ppobj)
224 IDirectMusicMarkerTrack *track;
225 HRESULT hr;
227 *ppobj = NULL;
228 if (!(track = calloc(1, sizeof(*track)))) return E_OUTOFMEMORY;
229 track->IDirectMusicTrack_iface.lpVtbl = &dmtrack_vtbl;
230 track->ref = 1;
231 dmobject_init(&track->dmobj, &CLSID_DirectMusicMarkerTrack,
232 (IUnknown *)&track->IDirectMusicTrack_iface);
233 track->dmobj.IPersistStream_iface.lpVtbl = &persiststream_vtbl;
235 hr = IDirectMusicTrack_QueryInterface(&track->IDirectMusicTrack_iface, lpcGUID, ppobj);
236 IDirectMusicTrack_Release(&track->IDirectMusicTrack_iface);
238 return hr;