Commit | Line | Data |
---|---|---|
df167d17 RM |
1 | /* IDirectMusicAuditionTrack Implementation |
2 | * | |
0382ea1d | 3 | * Copyright (C) 2003-2004 Rok Mandeljc |
df167d17 RM |
4 | * |
5 | * This program is free software; you can redistribute it and/or modify | |
6 | * it under the terms of the GNU General Public License as published by | |
7 | * the Free Software Foundation; either version 2 of the License, or | |
8 | * (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 | |
13 | * GNU Library General Public License for more details. | |
14 | * | |
15 | * You should have received a copy of the GNU General Public License | |
16 | * along with this program; if not, write to the Free Software | |
17 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
18 | */ | |
19 | ||
df167d17 RM |
20 | #include "dmstyle_private.h" |
21 | ||
22 | WINE_DEFAULT_DEBUG_CHANNEL(dmstyle); | |
df167d17 RM |
23 | |
24 | /***************************************************************************** | |
25 | * IDirectMusicAuditionTrack implementation | |
26 | */ | |
27 | /* IDirectMusicAuditionTrack IUnknown part: */ | |
0382ea1d RM |
28 | HRESULT WINAPI IDirectMusicAuditionTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj) { |
29 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, UnknownVtbl, iface); | |
b26d65bb | 30 | TRACE("(%p, %s, %p)\n", This, debugstr_dmguid(riid), ppobj); |
df167d17 | 31 | |
0382ea1d RM |
32 | if (IsEqualIID (riid, &IID_IUnknown)) { |
33 | *ppobj = (LPUNKNOWN)&This->UnknownVtbl; | |
34 | IDirectMusicAuditionTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); | |
35 | return S_OK; | |
36 | } else if (IsEqualIID (riid, &IID_IDirectMusicTrack) | |
37 | || IsEqualIID (riid, &IID_IDirectMusicTrack8)) { | |
38 | *ppobj = (LPDIRECTMUSICTRACK8)&This->TrackVtbl; | |
39 | IDirectMusicAuditionTrack_IDirectMusicTrack_AddRef ((LPDIRECTMUSICTRACK8)&This->TrackVtbl); | |
df167d17 RM |
40 | return S_OK; |
41 | } else if (IsEqualIID (riid, &IID_IPersistStream)) { | |
0382ea1d RM |
42 | *ppobj = (LPPERSISTSTREAM)&This->PersistStreamVtbl; |
43 | IDirectMusicAuditionTrack_IPersistStream_AddRef ((LPPERSISTSTREAM)&This->PersistStreamVtbl); | |
df167d17 RM |
44 | return S_OK; |
45 | } | |
0382ea1d | 46 | |
b26d65bb | 47 | WARN("(%p, %s, %p): not found\n", This, debugstr_dmguid(riid), ppobj); |
df167d17 RM |
48 | return E_NOINTERFACE; |
49 | } | |
50 | ||
0382ea1d RM |
51 | ULONG WINAPI IDirectMusicAuditionTrack_IUnknown_AddRef (LPUNKNOWN iface) { |
52 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, UnknownVtbl, iface); | |
7a49e82d PV |
53 | ULONG ref = InterlockedIncrement(&This->ref); |
54 | ||
55 | TRACE("(%p): AddRef from %ld\n", This, ref - 1); | |
56 | ||
1fd94250 JH |
57 | DMSTYLE_LockModule(); |
58 | ||
7a49e82d | 59 | return ref; |
df167d17 RM |
60 | } |
61 | ||
0382ea1d RM |
62 | ULONG WINAPI IDirectMusicAuditionTrack_IUnknown_Release (LPUNKNOWN iface) { |
63 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, UnknownVtbl, iface); | |
7a49e82d PV |
64 | ULONG ref = InterlockedDecrement(&This->ref); |
65 | ||
66 | TRACE("(%p): ReleaseRef to %ld\n", This, ref); | |
67 | ||
df167d17 RM |
68 | if (ref == 0) { |
69 | HeapFree(GetProcessHeap(), 0, This); | |
70 | } | |
1fd94250 JH |
71 | |
72 | DMSTYLE_UnlockModule(); | |
73 | ||
df167d17 RM |
74 | return ref; |
75 | } | |
76 | ||
247246ed | 77 | static const IUnknownVtbl DirectMusicAuditionTrack_Unknown_Vtbl = { |
0382ea1d RM |
78 | IDirectMusicAuditionTrack_IUnknown_QueryInterface, |
79 | IDirectMusicAuditionTrack_IUnknown_AddRef, | |
80 | IDirectMusicAuditionTrack_IUnknown_Release | |
81 | }; | |
df167d17 | 82 | |
0382ea1d RM |
83 | /* IDirectMusicAuditionTrack IDirectMusicTrack8 part: */ |
84 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj) { | |
85 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
86 | return IDirectMusicAuditionTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); | |
87 | } | |
df167d17 | 88 | |
0382ea1d RM |
89 | ULONG WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface) { |
90 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
91 | return IDirectMusicAuditionTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); | |
92 | } | |
93 | ||
94 | ULONG WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Release (LPDIRECTMUSICTRACK8 iface) { | |
95 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
96 | return IDirectMusicAuditionTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); | |
df167d17 RM |
97 | } |
98 | ||
0382ea1d | 99 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment) |
df167d17 | 100 | { |
0382ea1d RM |
101 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); |
102 | FIXME("(%p, %p): stub\n", This, pSegment); | |
103 | return S_OK; | |
104 | } | |
df167d17 | 105 | |
0382ea1d RM |
106 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags) |
107 | { | |
108 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
df167d17 | 109 | FIXME("(%p, %p, %p, %p, %ld, %ld): stub\n", This, pSegmentState, pPerformance, ppStateData, dwVirtualTrack8ID, dwFlags); |
df167d17 RM |
110 | return S_OK; |
111 | } | |
112 | ||
0382ea1d | 113 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData) |
df167d17 | 114 | { |
0382ea1d | 115 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); |
df167d17 | 116 | FIXME("(%p, %p): stub\n", This, pStateData); |
df167d17 RM |
117 | return S_OK; |
118 | } | |
119 | ||
0382ea1d | 120 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) |
df167d17 | 121 | { |
0382ea1d | 122 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); |
df167d17 | 123 | FIXME("(%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub\n", This, pStateData, mtStart, mtEnd, mtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); |
df167d17 RM |
124 | return S_OK; |
125 | } | |
126 | ||
0382ea1d RM |
127 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam) { |
128 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
b26d65bb | 129 | FIXME("(%p, %s, %ld, %p, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pmtNext, pParam); |
df167d17 RM |
130 | return S_OK; |
131 | } | |
132 | ||
0382ea1d RM |
133 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam) { |
134 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
b26d65bb | 135 | FIXME("(%p, %s, %ld, %p): stub\n", This, debugstr_dmguid(rguidType), mtTime, pParam); |
df167d17 RM |
136 | return S_OK; |
137 | } | |
138 | ||
0382ea1d RM |
139 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType) { |
140 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
df167d17 | 141 | |
b26d65bb | 142 | TRACE("(%p, %s): ", This, debugstr_dmguid(rguidType)); |
df167d17 | 143 | /* didn't find any params */ |
df167d17 RM |
144 | TRACE("param unsupported\n"); |
145 | return DMUS_E_TYPE_UNSUPPORTED; | |
146 | } | |
147 | ||
0382ea1d RM |
148 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { |
149 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
b26d65bb | 150 | FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); |
df167d17 RM |
151 | return S_OK; |
152 | } | |
153 | ||
0382ea1d RM |
154 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType) { |
155 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
b26d65bb | 156 | FIXME("(%p, %s): stub\n", This, debugstr_dmguid(rguidNotificationType)); |
df167d17 RM |
157 | return S_OK; |
158 | } | |
159 | ||
0382ea1d RM |
160 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack) { |
161 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
df167d17 | 162 | FIXME("(%p, %ld, %ld, %p): stub\n", This, mtStart, mtEnd, ppTrack); |
df167d17 RM |
163 | return S_OK; |
164 | } | |
165 | ||
0382ea1d RM |
166 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID) { |
167 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
df167d17 | 168 | FIXME("(%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub\n", This, pStateData, rtStart, rtEnd, rtOffset, dwFlags, pPerf, pSegSt, dwVirtualID); |
df167d17 RM |
169 | return S_OK; |
170 | } | |
171 | ||
0382ea1d RM |
172 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags) { |
173 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
b26d65bb | 174 | FIXME("(%p, %s, %lli, %p, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType), rtTime, prtNext, pParam, pStateData, dwFlags); |
df167d17 RM |
175 | return S_OK; |
176 | } | |
177 | ||
0382ea1d RM |
178 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags) { |
179 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
b26d65bb | 180 | FIXME("(%p, %s, %lli, %p, %p, %ld): stub\n", This, debugstr_dmguid(rguidType), rtTime, pParam, pStateData, dwFlags); |
df167d17 RM |
181 | return S_OK; |
182 | } | |
183 | ||
0382ea1d RM |
184 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { |
185 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
df167d17 | 186 | FIXME("(%p, %p, %ld, %p): stub\n", This, pContext, dwTrackGroup, ppResultTrack); |
df167d17 RM |
187 | return S_OK; |
188 | } | |
189 | ||
0382ea1d RM |
190 | HRESULT WINAPI IDirectMusicAuditionTrack_IDirectMusicTrack_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack) { |
191 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, TrackVtbl, iface); | |
df167d17 | 192 | FIXME("(%p, %p, %ld, %p, %ld, %p): stub\n", This, pNewTrack, mtJoin, pContext, dwTrackGroup, ppResultTrack); |
df167d17 RM |
193 | return S_OK; |
194 | } | |
195 | ||
247246ed | 196 | static const IDirectMusicTrack8Vtbl DirectMusicAuditionTrack_Track_Vtbl = { |
0382ea1d RM |
197 | IDirectMusicAuditionTrack_IDirectMusicTrack_QueryInterface, |
198 | IDirectMusicAuditionTrack_IDirectMusicTrack_AddRef, | |
199 | IDirectMusicAuditionTrack_IDirectMusicTrack_Release, | |
200 | IDirectMusicAuditionTrack_IDirectMusicTrack_Init, | |
201 | IDirectMusicAuditionTrack_IDirectMusicTrack_InitPlay, | |
202 | IDirectMusicAuditionTrack_IDirectMusicTrack_EndPlay, | |
203 | IDirectMusicAuditionTrack_IDirectMusicTrack_Play, | |
204 | IDirectMusicAuditionTrack_IDirectMusicTrack_GetParam, | |
205 | IDirectMusicAuditionTrack_IDirectMusicTrack_SetParam, | |
206 | IDirectMusicAuditionTrack_IDirectMusicTrack_IsParamSupported, | |
207 | IDirectMusicAuditionTrack_IDirectMusicTrack_AddNotificationType, | |
208 | IDirectMusicAuditionTrack_IDirectMusicTrack_RemoveNotificationType, | |
209 | IDirectMusicAuditionTrack_IDirectMusicTrack_Clone, | |
210 | IDirectMusicAuditionTrack_IDirectMusicTrack_PlayEx, | |
211 | IDirectMusicAuditionTrack_IDirectMusicTrack_GetParamEx, | |
212 | IDirectMusicAuditionTrack_IDirectMusicTrack_SetParamEx, | |
213 | IDirectMusicAuditionTrack_IDirectMusicTrack_Compose, | |
214 | IDirectMusicAuditionTrack_IDirectMusicTrack_Join | |
df167d17 RM |
215 | }; |
216 | ||
0382ea1d RM |
217 | /* IDirectMusicAuditionTrack IPersistStream part: */ |
218 | HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, LPVOID *ppobj) { | |
219 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, PersistStreamVtbl, iface); | |
220 | return IDirectMusicAuditionTrack_IUnknown_QueryInterface ((LPUNKNOWN)&This->UnknownVtbl, riid, ppobj); | |
df167d17 RM |
221 | } |
222 | ||
0382ea1d RM |
223 | ULONG WINAPI IDirectMusicAuditionTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface) { |
224 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, PersistStreamVtbl, iface); | |
225 | return IDirectMusicAuditionTrack_IUnknown_AddRef ((LPUNKNOWN)&This->UnknownVtbl); | |
df167d17 RM |
226 | } |
227 | ||
0382ea1d RM |
228 | ULONG WINAPI IDirectMusicAuditionTrack_IPersistStream_Release (LPPERSISTSTREAM iface) { |
229 | ICOM_THIS_MULTI(IDirectMusicAuditionTrack, PersistStreamVtbl, iface); | |
230 | return IDirectMusicAuditionTrack_IUnknown_Release ((LPUNKNOWN)&This->UnknownVtbl); | |
df167d17 RM |
231 | } |
232 | ||
0382ea1d | 233 | HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID) { |
df167d17 RM |
234 | return E_NOTIMPL; |
235 | } | |
236 | ||
0382ea1d | 237 | HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_IsDirty (LPPERSISTSTREAM iface) { |
df167d17 RM |
238 | return E_NOTIMPL; |
239 | } | |
240 | ||
0382ea1d | 241 | HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_Load (LPPERSISTSTREAM iface, IStream* pStm) { |
df167d17 RM |
242 | FIXME(": Loading not implemented yet\n"); |
243 | return S_OK; | |
244 | } | |
245 | ||
0382ea1d | 246 | HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty) { |
df167d17 RM |
247 | return E_NOTIMPL; |
248 | } | |
249 | ||
0382ea1d | 250 | HRESULT WINAPI IDirectMusicAuditionTrack_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize) { |
df167d17 RM |
251 | return E_NOTIMPL; |
252 | } | |
253 | ||
247246ed | 254 | static const IPersistStreamVtbl DirectMusicAuditionTrack_PersistStream_Vtbl = { |
0382ea1d RM |
255 | IDirectMusicAuditionTrack_IPersistStream_QueryInterface, |
256 | IDirectMusicAuditionTrack_IPersistStream_AddRef, | |
257 | IDirectMusicAuditionTrack_IPersistStream_Release, | |
258 | IDirectMusicAuditionTrack_IPersistStream_GetClassID, | |
259 | IDirectMusicAuditionTrack_IPersistStream_IsDirty, | |
260 | IDirectMusicAuditionTrack_IPersistStream_Load, | |
261 | IDirectMusicAuditionTrack_IPersistStream_Save, | |
262 | IDirectMusicAuditionTrack_IPersistStream_GetSizeMax | |
df167d17 | 263 | }; |
0382ea1d RM |
264 | |
265 | /* for ClassFactory */ | |
266 | HRESULT WINAPI DMUSIC_CreateDirectMusicAuditionTrack (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) { | |
267 | IDirectMusicAuditionTrack* track; | |
268 | ||
269 | track = HeapAlloc (GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicAuditionTrack)); | |
270 | if (NULL == track) { | |
ee0344a4 | 271 | *ppobj = NULL; |
0382ea1d RM |
272 | return E_OUTOFMEMORY; |
273 | } | |
274 | track->UnknownVtbl = &DirectMusicAuditionTrack_Unknown_Vtbl; | |
275 | track->TrackVtbl = &DirectMusicAuditionTrack_Track_Vtbl; | |
276 | track->PersistStreamVtbl = &DirectMusicAuditionTrack_PersistStream_Vtbl; | |
277 | track->pDesc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DMUS_OBJECTDESC)); | |
278 | DM_STRUCT_INIT(track->pDesc); | |
279 | track->pDesc->dwValidData |= DMUS_OBJ_CLASS; | |
280 | memcpy (&track->pDesc->guidClass, &CLSID_DirectMusicAuditionTrack, sizeof (CLSID)); | |
281 | track->ref = 0; /* will be inited by QueryInterface */ | |
282 | ||
283 | return IDirectMusicAuditionTrack_IUnknown_QueryInterface ((LPUNKNOWN)&track->UnknownVtbl, lpcGUID, ppobj); | |
284 | } |