Fixes for -Wmissing-declaration and -Wwrite-string warnings.
[wine] / dlls / dmime / dmime_private.h
1 /* DirectMusicInteractiveEngine Private Include
2  *
3  * Copyright (C) 2003-2004 Rok Mandeljc
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
20 #ifndef __WINE_DMIME_PRIVATE_H
21 #define __WINE_DMIME_PRIVATE_H
22
23 #include <stdio.h>
24 #include <stdarg.h>
25 #include <string.h>
26
27 #define COBJMACROS
28
29 #include "windef.h"
30 #include "winbase.h"
31 #include "winnt.h"
32 #include "wingdi.h"
33 #include "winuser.h"
34
35 #include "wine/debug.h"
36 #include "wine/list.h"
37 #include "wine/unicode.h"
38 #include "winreg.h"
39 #include "objbase.h"
40
41 #include "dmusici.h"
42 #include "dmusicf.h"
43 #include "dmusics.h"
44
45 /*****************************************************************************
46  * Interfaces
47  */
48 typedef struct IDirectMusicPerformance8Impl IDirectMusicPerformance8Impl;
49 typedef struct IDirectMusicSegment8Impl IDirectMusicSegment8Impl;
50 typedef struct IDirectMusicSegmentState8Impl IDirectMusicSegmentState8Impl;
51 typedef struct IDirectMusicGraphImpl IDirectMusicGraphImpl;
52 typedef struct IDirectMusicAudioPathImpl IDirectMusicAudioPathImpl;
53 typedef struct IDirectMusicTool8Impl IDirectMusicTool8Impl;
54 typedef struct IDirectMusicPatternTrackImpl IDirectMusicPatternTrackImpl;
55
56 typedef struct IDirectMusicLyricsTrack IDirectMusicLyricsTrack;
57 typedef struct IDirectMusicMarkerTrack IDirectMusicMarkerTrack;
58 typedef struct IDirectMusicParamControlTrack IDirectMusicParamControlTrack;
59 typedef struct IDirectMusicSegTriggerTrack IDirectMusicSegTriggerTrack;
60 typedef struct IDirectMusicSeqTrack IDirectMusicSeqTrack;
61 typedef struct IDirectMusicSysExTrack IDirectMusicSysExTrack;
62 typedef struct IDirectMusicTempoTrack IDirectMusicTempoTrack;
63 typedef struct IDirectMusicTimeSigTrack IDirectMusicTimeSigTrack;
64 typedef struct IDirectMusicWaveTrack IDirectMusicWaveTrack;
65         
66 /*****************************************************************************
67  * ClassFactory
68  */
69 extern HRESULT WINAPI DMUSIC_CreateDirectMusicPerformanceImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
70 extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
71 extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentStateImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
72 extern HRESULT WINAPI DMUSIC_CreateDirectMusicGraphImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
73 extern HRESULT WINAPI DMUSIC_CreateDirectMusicAudioPathImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
74 extern HRESULT WINAPI DMUSIC_CreateDirectMusicToolImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
75 extern HRESULT WINAPI DMUSIC_CreateDirectMusicPatternTrackImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
76
77 extern HRESULT WINAPI DMUSIC_CreateDirectMusicLyricsTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
78 extern HRESULT WINAPI DMUSIC_CreateDirectMusicMarkerTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
79 extern HRESULT WINAPI DMUSIC_CreateDirectMusicParamControlTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
80 extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegTriggerTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
81 extern HRESULT WINAPI DMUSIC_CreateDirectMusicSeqTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
82 extern HRESULT WINAPI DMUSIC_CreateDirectMusicSysExTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
83 extern HRESULT WINAPI DMUSIC_CreateDirectMusicTempoTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
84 extern HRESULT WINAPI DMUSIC_CreateDirectMusicTimeSigTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
85 extern HRESULT WINAPI DMUSIC_CreateDirectMusicWaveTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
86
87
88 /*****************************************************************************
89  * Auxiliary definitions
90  */
91 typedef struct _DMUS_PRIVATE_SEGMENT_TRACK {
92   struct list entry; /* for listing elements */
93   DWORD dwGroupBits;
94   IDirectMusicTrack* pTrack;
95 } DMUS_PRIVATE_SEGMENT_TRACK, *LPDMUS_PRIVATE_SEGMENT_TRACK;
96
97 typedef struct _DMUS_PRIVATE_TEMPO_ITEM {
98   struct list entry; /* for listing elements */
99   DMUS_IO_TEMPO_ITEM item;
100 } DMUS_PRIVATE_TEMPO_ITEM, *LPDMUS_PRIVATE_TEMPO_ITEM;
101
102 typedef struct _DMUS_PRIVATE_SEGMENT_ITEM {
103   struct list entry; /* for listing elements */
104   DMUS_IO_SEGMENT_ITEM_HEADER header;
105   IDirectMusicObject* pObject;
106   WCHAR wszName[DMUS_MAX_NAME];
107 } DMUS_PRIVATE_SEGMENT_ITEM, *LPDMUS_PRIVATE_SEGMENT_ITEM;
108
109 typedef struct _DMUS_PRIVATE_GRAPH_TOOL {
110   struct list entry; /* for listing elements */
111   DWORD dwIndex;
112   IDirectMusicTool* pTool;
113 } DMUS_PRIVATE_GRAPH_TOOL, *LPDMUS_PRIVATE_GRAPH_TOOL;
114
115 typedef struct _DMUS_PRIVATE_TEMPO_PLAY_STATE {
116   DWORD dummy;
117 } DMUS_PRIVATE_TEMPO_PLAY_STATE, *LPDMUS_PRIVATE_TEMPO_PLAY_STATE;
118
119 /* some sort of aux. performance channel: as far as i can understand, these are 
120    used to represent a particular midi channel in particular group at particular
121    group; so all we need to do is to fill it with parent port, group and midi 
122    channel ? */
123 typedef struct DMUSIC_PRIVATE_PCHANNEL_ {
124         DWORD channel; /* map to this channel... */
125         DWORD group; /* ... in this group ... */
126         IDirectMusicPort *port; /* ... at this port */
127 } DMUSIC_PRIVATE_PCHANNEL, *LPDMUSIC_PRIVATE_PCHANNEL;
128
129 /*****************************************************************************
130  * IDirectMusicPerformance8Impl implementation structure
131  */
132 struct IDirectMusicPerformance8Impl {
133   /* IUnknown fields */
134   const IDirectMusicPerformance8Vtbl *lpVtbl;
135   DWORD                  ref;
136
137   /* IDirectMusicPerformanceImpl fields */
138   IDirectMusic8*         pDirectMusic;
139   IDirectSound*          pDirectSound;
140   IDirectMusicGraph*     pToolGraph;
141   DMUS_AUDIOPARAMS       pParams;
142
143   /* global parameters */
144   BOOL  fAutoDownload;
145   char  cMasterGrooveLevel;
146   float fMasterTempo;
147   long  lMasterVolume;
148         
149   /* performance channels */
150   DMUSIC_PRIVATE_PCHANNEL PChannel[1];
151
152    /* IDirectMusicPerformance8Impl fields */
153   IDirectMusicAudioPath* pDefaultPath;
154   HANDLE hNotification;
155   REFERENCE_TIME rtMinimum;
156
157   REFERENCE_TIME rtLatencyTime;
158   DWORD dwBumperLength;
159   DWORD dwPrepareTime;
160   /** Message Processing */
161   HANDLE         procThread;
162   DWORD          procThreadId;
163   REFERENCE_TIME procThreadStartTime;
164   BOOL           procThreadTicStarted;
165   CRITICAL_SECTION safe;
166   struct DMUS_PMSGItem* head; 
167   struct DMUS_PMSGItem* imm_head; 
168 };
169
170 /* IUnknown: */
171 extern HRESULT WINAPI IDirectMusicPerformance8Impl_QueryInterface (LPDIRECTMUSICPERFORMANCE8 iface, REFIID riid, LPVOID *ppobj);
172 extern ULONG WINAPI   IDirectMusicPerformance8Impl_AddRef (LPDIRECTMUSICPERFORMANCE8 iface);
173 /* IDirectMusicPerformance: */
174 extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtNow, MUSIC_TIME* pmtNow);
175 extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetGraph (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicGraph** ppGraph);
176 extern HRESULT WINAPI IDirectMusicPerformance8Impl_SetGraph (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicGraph* pGraph);
177 /* IDirectMusicPerformance8: */
178 extern HRESULT WINAPI IDirectMusicPerformance8Impl_CreateStandardAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwType, DWORD dwPChannelCount, BOOL fActivate, IDirectMusicAudioPath** ppNewPath);
179
180 /*****************************************************************************
181  * IDirectMusicSegment8Impl implementation structure
182  */
183 struct IDirectMusicSegment8Impl {
184   /* IUnknown fields */
185   const IUnknownVtbl *UnknownVtbl;
186   const IDirectMusicSegment8Vtbl *SegmentVtbl;
187   const IDirectMusicObjectVtbl *ObjectVtbl;
188   const IPersistStreamVtbl *PersistStreamVtbl;
189   DWORD          ref;
190
191   /* IDirectMusicSegment8Impl fields */
192   LPDMUS_OBJECTDESC      pDesc;
193   DMUS_IO_SEGMENT_HEADER header;
194   IDirectMusicGraph*     pGraph; 
195   struct list Tracks;
196 };
197
198 /* IUnknown: */
199 extern HRESULT WINAPI IDirectMusicSegment8Impl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
200 extern ULONG WINAPI   IDirectMusicSegment8Impl_IUnknown_AddRef (LPUNKNOWN iface);
201 /* IDirectMusicSegment(8): */
202 extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicSegment8_QueryInterface (LPDIRECTMUSICSEGMENT8 iface, REFIID riid, LPVOID *ppobj);
203 extern ULONG WINAPI   IDirectMusicSegment8Impl_IDirectMusicSegment8_AddRef (LPDIRECTMUSICSEGMENT8 iface);
204 /* IDirectMusicObject: */
205 extern HRESULT WINAPI IDirectMusicSegment8Impl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
206 extern ULONG WINAPI   IDirectMusicSegment8Impl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
207 /* IPersistStream: */
208 extern HRESULT WINAPI IDirectMusicSegment8Impl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
209 extern ULONG WINAPI   IDirectMusicSegment8Impl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
210
211 /*****************************************************************************
212  * IDirectMusicSegmentState8Impl implementation structure
213  */
214 struct IDirectMusicSegmentState8Impl {
215   /* IUnknown fields */
216   const IDirectMusicSegmentState8Vtbl *lpVtbl;
217   DWORD          ref;
218
219   /* IDirectMusicSegmentState8Impl fields */
220 };
221
222 /* IUnknown: */
223 extern HRESULT WINAPI IDirectMusicSegmentState8Impl_QueryInterface (LPDIRECTMUSICSEGMENTSTATE8 iface, REFIID riid, LPVOID *ppobj);
224 extern ULONG WINAPI   IDirectMusicSegmentState8Impl_AddRef (LPDIRECTMUSICSEGMENTSTATE8 iface);
225 /* IDirectMusicSegmentState(8): */
226 extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetObjectInPath (LPDIRECTMUSICSEGMENTSTATE8 iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void** ppObject);
227
228 /*****************************************************************************
229  * IDirectMusicGraphImpl implementation structure
230  */
231 struct IDirectMusicGraphImpl {
232   /* IUnknown fields */
233   const IUnknownVtbl *UnknownVtbl;
234   const IDirectMusicGraphVtbl *GraphVtbl;
235   const IDirectMusicObjectVtbl *ObjectVtbl;
236   const IPersistStreamVtbl *PersistStreamVtbl;
237   DWORD          ref;
238
239   /* IDirectMusicGraphImpl fields */
240   LPDMUS_OBJECTDESC pDesc;
241   WORD              num_tools;
242   struct list       Tools;
243 };
244
245 /* IUnknown: */
246 extern HRESULT WINAPI IDirectMusicGraphImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
247 extern ULONG WINAPI   IDirectMusicGraphImpl_IUnknown_AddRef (LPUNKNOWN iface);
248 /* IDirectMusicGraph: */
249 extern HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicGraph_QueryInterface (LPDIRECTMUSICGRAPH iface, REFIID riid, LPVOID *ppobj);
250 extern ULONG WINAPI   IDirectMusicGraphImpl_IDirectMusicGraph_AddRef (LPDIRECTMUSICGRAPH iface);
251 /* IDirectMusicObject: */
252 extern HRESULT WINAPI IDirectMusicGraphImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
253 extern ULONG WINAPI   IDirectMusicGraphImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
254 /* IPersistStream: */
255 extern HRESULT WINAPI IDirectMusicGraphImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
256 extern ULONG WINAPI   IDirectMusicGraphImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
257
258 /*****************************************************************************
259  * IDirectMusicAudioPathImpl implementation structure
260  */
261 struct IDirectMusicAudioPathImpl {
262   /* IUnknown fields */
263   const IUnknownVtbl *UnknownVtbl;
264   const IDirectMusicAudioPathVtbl *AudioPathVtbl;
265   const IDirectMusicObjectVtbl *ObjectVtbl;
266   const IPersistStreamVtbl *PersistStreamVtbl;
267   DWORD          ref;
268
269   /* IDirectMusicAudioPathImpl fields */
270   LPDMUS_OBJECTDESC pDesc;
271         
272   IDirectMusicPerformance8* pPerf;
273   IDirectMusicGraph*        pToolGraph;
274   IDirectSoundBuffer*       pDSBuffer;
275   IDirectSoundBuffer*       pPrimary;
276
277   BOOL fActive;
278 };
279
280 /* IUnknown: */
281 extern HRESULT WINAPI IDirectMusicAudioPathImpl_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
282 extern ULONG WINAPI   IDirectMusicAudioPathImpl_IUnknown_AddRef (LPUNKNOWN iface);
283 /* IDirectMusicAudioPath: */
284 extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_QueryInterface (LPDIRECTMUSICAUDIOPATH iface, REFIID riid, LPVOID *ppobj);
285 extern ULONG WINAPI   IDirectMusicAudioPathImpl_IDirectMusicAudioPath_AddRef (LPDIRECTMUSICAUDIOPATH iface);
286 extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicAudioPath_Activate (LPDIRECTMUSICAUDIOPATH iface, BOOL fActivate);
287 /* IDirectMusicObject: */
288 extern HRESULT WINAPI IDirectMusicAudioPathImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
289 extern ULONG WINAPI   IDirectMusicAudioPathImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface);
290 /* IPersistStream: */
291 extern HRESULT WINAPI IDirectMusicAudioPathImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
292 extern ULONG WINAPI   IDirectMusicAudioPathImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface);
293
294 /*****************************************************************************
295  * IDirectMusicTool8Impl implementation structure
296  */
297 struct IDirectMusicTool8Impl {
298   /* IUnknown fields */
299   const IDirectMusicTool8Vtbl *lpVtbl;
300   DWORD          ref;
301
302   /* IDirectMusicTool8Impl fields */
303 };
304
305 /* IUnknown: */
306 extern HRESULT WINAPI IDirectMusicTool8Impl_QueryInterface (LPDIRECTMUSICTOOL8 iface, REFIID riid, LPVOID *ppobj);
307 extern ULONG WINAPI   IDirectMusicTool8Impl_AddRef (LPDIRECTMUSICTOOL8 iface);
308
309 /*****************************************************************************
310  * IDirectMusicPatternTrackImpl implementation structure
311  */
312 struct IDirectMusicPatternTrackImpl {
313   /* IUnknown fields */
314   const IDirectMusicPatternTrackVtbl *lpVtbl;
315   DWORD          ref;
316
317   /* IDirectMusicPatternTrackImpl fields */
318 };
319
320 /* IUnknown: */
321 extern HRESULT WINAPI IDirectMusicPatternTrackImpl_QueryInterface (LPDIRECTMUSICPATTERNTRACK iface, REFIID riid, LPVOID *ppobj);
322 extern ULONG WINAPI   IDirectMusicPatternTrackImpl_AddRef (LPDIRECTMUSICPATTERNTRACK iface);
323
324 /*****************************************************************************
325  * IDirectMusicLyricsTrack implementation structure
326  */
327 struct IDirectMusicLyricsTrack
328 {
329   /* IUnknown fields */
330   const IUnknownVtbl *UnknownVtbl;
331   const IDirectMusicTrack8Vtbl *TrackVtbl;
332   const IPersistStreamVtbl *PersistStreamVtbl;
333   DWORD          ref;
334
335   /* IDirectMusicLyricsTrack fields */
336   LPDMUS_OBJECTDESC pDesc;
337 };
338
339 /* IUnknown: */
340 extern HRESULT WINAPI IDirectMusicLyricsTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
341 extern ULONG WINAPI   IDirectMusicLyricsTrack_IUnknown_AddRef (LPUNKNOWN iface);
342 /* IDirectMusicTrack(8): */
343 extern HRESULT WINAPI IDirectMusicLyricsTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
344 extern ULONG WINAPI   IDirectMusicLyricsTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
345 /* IPersistStream: */
346 extern HRESULT WINAPI IDirectMusicLyricsTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
347 extern ULONG WINAPI   IDirectMusicLyricsTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
348
349 /*****************************************************************************
350  * IDirectMusicMarkerTrack implementation structure
351  */
352 struct IDirectMusicMarkerTrack {
353   /* IUnknown fields */
354   const IUnknownVtbl *UnknownVtbl;
355   const IDirectMusicTrack8Vtbl *TrackVtbl;
356   const IPersistStreamVtbl *PersistStreamVtbl;
357   DWORD          ref;
358
359   /* IDirectMusicMarkerTrack fields */
360   LPDMUS_OBJECTDESC pDesc;
361 };
362
363 /* IUnknown: */
364 extern HRESULT WINAPI IDirectMusicMarkerTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
365 extern ULONG WINAPI   IDirectMusicMarkerTrack_IUnknown_AddRef (LPUNKNOWN iface);
366 /* IDirectMusicTrack(8): */
367 extern HRESULT WINAPI IDirectMusicMarkerTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
368 extern ULONG WINAPI   IDirectMusicMarkerTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
369 /* IPersistStream: */
370 extern HRESULT WINAPI IDirectMusicMarkerTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
371 extern ULONG WINAPI   IDirectMusicMarkerTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
372
373 /*****************************************************************************
374  * IDirectMusicParamControlTrack implementation structure
375  */
376 struct IDirectMusicParamControlTrack {
377   /* IUnknown fields */
378   const IUnknownVtbl *UnknownVtbl;
379   const IDirectMusicTrack8Vtbl *TrackVtbl;
380   const IPersistStreamVtbl *PersistStreamVtbl;
381   DWORD          ref;
382
383   /* IDirectMusicParamControlTrack fields */
384   LPDMUS_OBJECTDESC pDesc;
385 };
386
387 /* IUnknown: */
388 extern HRESULT WINAPI IDirectMusicParamControlTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
389 extern ULONG WINAPI   IDirectMusicParamControlTrack_IUnknown_AddRef (LPUNKNOWN iface);
390 /* IDirectMusicTrack(8): */
391 extern HRESULT WINAPI IDirectMusicParamControlTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
392 extern ULONG WINAPI   IDirectMusicParamControlTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
393 /* IPersistStream: */
394 extern HRESULT WINAPI IDirectMusicParamControlTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
395 extern ULONG WINAPI   IDirectMusicParamControlTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
396
397 /*****************************************************************************
398  * IDirectMusicSegTriggerTrack implementation structure
399  */
400 struct IDirectMusicSegTriggerTrack {
401   /* IUnknown fields */
402   const IUnknownVtbl *UnknownVtbl;
403   const IDirectMusicTrack8Vtbl *TrackVtbl;
404   const IPersistStreamVtbl *PersistStreamVtbl;
405   DWORD          ref;
406
407   /* IDirectMusicSegTriggerTrack fields */
408   LPDMUS_OBJECTDESC pDesc;
409
410   struct list Items;
411 };
412
413 /* IUnknown: */
414 extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
415 extern ULONG WINAPI   IDirectMusicSegTriggerTrack_IUnknown_AddRef (LPUNKNOWN iface);
416 /* IDirectMusicTrack(8): */
417 extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
418 extern ULONG WINAPI   IDirectMusicSegTriggerTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
419 /* IPersistStream: */
420 extern HRESULT WINAPI IDirectMusicSegTriggerTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
421 extern ULONG WINAPI   IDirectMusicSegTriggerTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
422
423 /*****************************************************************************
424  * IDirectMusicSeqTrack implementation structure
425  */
426 struct IDirectMusicSeqTrack {
427   /* IUnknown fields */
428   const IUnknownVtbl *UnknownVtbl;
429   const IDirectMusicTrack8Vtbl *TrackVtbl;
430   const IPersistStreamVtbl *PersistStreamVtbl;
431   DWORD          ref;
432
433   /* IDirectMusicSeqTrack fields */
434   LPDMUS_OBJECTDESC pDesc;
435 };
436
437 /* IUnknown: */
438 extern HRESULT WINAPI IDirectMusicSeqTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
439 extern ULONG WINAPI   IDirectMusicSeqTrack_IUnknown_AddRef (LPUNKNOWN iface);
440 /* IDirectMusicTrack(8): */
441 extern HRESULT WINAPI IDirectMusicSeqTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
442 extern ULONG WINAPI   IDirectMusicSeqTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
443 /* IPersistStream: */
444 extern HRESULT WINAPI IDirectMusicSeqTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
445 extern ULONG WINAPI   IDirectMusicSeqTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
446
447 /*****************************************************************************
448  * IDirectMusicSysExTrack implementation structure
449  */
450 struct IDirectMusicSysExTrack {
451   /* IUnknown fields */
452   const IUnknownVtbl *UnknownVtbl;
453   const IDirectMusicTrack8Vtbl *TrackVtbl;
454   const IPersistStreamVtbl *PersistStreamVtbl;
455   DWORD          ref;
456
457   /* IDirectMusicSysExTrack fields */
458   LPDMUS_OBJECTDESC pDesc;
459 };
460
461 /* IUnknown: */
462 extern HRESULT WINAPI IDirectMusicSysExTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
463 extern ULONG WINAPI   IDirectMusicSysExTrack_IUnknown_AddRef (LPUNKNOWN iface);
464 /* IDirectMusicTrack(8): */
465 extern HRESULT WINAPI IDirectMusicSysExTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
466 extern ULONG WINAPI   IDirectMusicSysExTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
467 /* IPersistStream: */
468 extern HRESULT WINAPI IDirectMusicSysExTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
469 extern ULONG WINAPI   IDirectMusicSysExTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
470
471 /*****************************************************************************
472  * IDirectMusicTempoTrack implementation structure
473  */
474 struct IDirectMusicTempoTrack {
475   /* IUnknown fields */
476   const IUnknownVtbl *UnknownVtbl;
477   const IDirectMusicTrack8Vtbl *TrackVtbl;
478   const IPersistStreamVtbl *PersistStreamVtbl;
479   DWORD          ref;
480
481   /* IDirectMusicTempoTrack fields */
482   LPDMUS_OBJECTDESC pDesc;
483   BOOL enabled;
484   struct list Items;
485 };
486
487 /* IUnknown: */
488 extern HRESULT WINAPI IDirectMusicTempoTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
489 extern ULONG WINAPI   IDirectMusicTempoTrack_IUnknown_AddRef (LPUNKNOWN iface);
490 /* IDirectMusicTrack(8): */
491 extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
492 extern ULONG WINAPI   IDirectMusicTempoTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
493 extern HRESULT WINAPI IDirectMusicTempoTrack_IDirectMusicTrack_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
494 /* IPersistStream: */
495 extern HRESULT WINAPI IDirectMusicTempoTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
496 extern ULONG WINAPI   IDirectMusicTempoTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
497
498 /*****************************************************************************
499  * IDirectMusicTimeSigTrack implementation structure
500  */
501 struct IDirectMusicTimeSigTrack {
502   /* IUnknown fields */
503   const IUnknownVtbl *UnknownVtbl;
504   const IDirectMusicTrack8Vtbl *TrackVtbl;
505   const IPersistStreamVtbl *PersistStreamVtbl;
506   DWORD          ref;
507
508   /* IDirectMusicTimeSigTrack fields */
509   LPDMUS_OBJECTDESC pDesc;
510 };
511
512 /* IUnknown: */
513 extern HRESULT WINAPI IDirectMusicTimeSigTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
514 extern ULONG WINAPI   IDirectMusicTimeSigTrack_IUnknown_AddRef (LPUNKNOWN iface);
515 /* IDirectMusicTrack(8): */
516 extern HRESULT WINAPI IDirectMusicTimeSigTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
517 extern ULONG WINAPI   IDirectMusicTimeSigTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
518 /* IPersistStream: */
519 extern HRESULT WINAPI IDirectMusicTimeSigTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
520 extern ULONG WINAPI   IDirectMusicTimeSigTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
521
522 /*****************************************************************************
523  * IDirectMusicWaveTrack implementation structure
524  */
525 struct IDirectMusicWaveTrack {
526   /* IUnknown fields */
527   const IUnknownVtbl *UnknownVtbl;
528   const IDirectMusicTrack8Vtbl *TrackVtbl;
529   const IPersistStreamVtbl *PersistStreamVtbl;
530   DWORD          ref;
531
532   /* IDirectMusicWaveTrack fields */
533   LPDMUS_OBJECTDESC pDesc;
534 };
535
536 /* IUnknown: */
537 extern HRESULT WINAPI IDirectMusicWaveTrack_IUnknown_QueryInterface (LPUNKNOWN iface, REFIID riid, LPVOID *ppobj);
538 extern ULONG WINAPI   IDirectMusicWaveTrack_IUnknown_AddRef (LPUNKNOWN iface);
539 /* IDirectMusicTrack(8): */
540 extern HRESULT WINAPI IDirectMusicWaveTrack_IDirectMusicTrack_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
541 extern ULONG WINAPI   IDirectMusicWaveTrack_IDirectMusicTrack_AddRef (LPDIRECTMUSICTRACK8 iface);
542 /* IPersistStream: */
543 extern HRESULT WINAPI IDirectMusicWaveTrack_IPersistStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
544 extern ULONG WINAPI   IDirectMusicWaveTrack_IPersistStream_AddRef (LPPERSISTSTREAM iface);
545
546 /**********************************************************************
547  * Dll lifetime tracking declaration for dmime.dll
548  */
549 extern LONG DMIME_refCount;
550 static inline void DMIME_LockModule() { InterlockedIncrement( &DMIME_refCount ); }
551 static inline void DMIME_UnlockModule() { InterlockedDecrement( &DMIME_refCount ); }
552
553 /*****************************************************************************
554  * Misc.
555  */
556
557 #include "dmutils.h"
558
559 #endif  /* __WINE_DMIME_PRIVATE_H */