Fixed header dependencies to be fully compatible with the Windows
[wine/multimedia.git] / dlls / dmusic / dmusic_private.h
blob0d796d0de27e3fa4cfadabc67a203b01997b3830
1 /* DirectMusic Private Include
3 * Copyright (C) 2003 Rok Mandeljc
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.
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.
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.
20 #ifndef __WINE_DMUSIC_PRIVATE_H
21 #define __WINE_DMUSIC_PRIVATE_H
23 #include <stdarg.h>
25 #include "windef.h"
26 #include "wine/debug.h"
27 #include "winbase.h"
28 #include "winnt.h"
29 #include "wingdi.h"
30 #include "dmusicc.h"
31 #include "dmusici.h"
32 #include "dmusics.h"
33 #include "dmplugin.h"
34 #include "dmusicf.h"
35 #include "dsound.h"
37 /*****************************************************************************
38 * Interfaces
40 typedef struct IDirectMusic8Impl IDirectMusic8Impl;
41 typedef struct IDirectMusicBufferImpl IDirectMusicBufferImpl;
42 typedef struct IDirectMusicInstrumentImpl IDirectMusicInstrumentImpl;
43 typedef struct IDirectMusicDownloadedInstrumentImpl IDirectMusicDownloadedInstrumentImpl;
44 typedef struct IDirectMusicCollectionImpl IDirectMusicCollectionImpl;
45 typedef struct IDirectMusicDownloadImpl IDirectMusicDownloadImpl;
46 typedef struct IDirectMusicPortDownloadImpl IDirectMusicPortDownloadImpl;
47 typedef struct IDirectMusicPortImpl IDirectMusicPortImpl;
48 typedef struct IDirectMusicThruImpl IDirectMusicThruImpl;
49 typedef struct IReferenceClockImpl IReferenceClockImpl;
51 typedef struct IDirectMusicCollectionObject IDirectMusicCollectionObject;
52 typedef struct IDirectMusicCollectionObjectStream IDirectMusicCollectionObjectStream;
54 /*****************************************************************************
55 * Predeclare the interface implementation structures
57 extern ICOM_VTABLE(IDirectMusic8) DirectMusic8_Vtbl;
58 extern ICOM_VTABLE(IDirectMusicBuffer) DirectMusicBuffer_Vtbl;
59 extern ICOM_VTABLE(IDirectMusicInstrument) DirectMusicInstrument_Vtbl;
60 extern ICOM_VTABLE(IDirectMusicDownloadedInstrument) DirectMusicDownloadedInstrument_Vtbl;
61 extern ICOM_VTABLE(IDirectMusicCollection) DirectMusicCollection_Vtbl;
62 extern ICOM_VTABLE(IDirectMusicDownload) DirectMusicDownload_Vtbl;
63 extern ICOM_VTABLE(IDirectMusicPortDownload) DirectMusicPortDownload_Vtbl;
64 extern ICOM_VTABLE(IDirectMusicPort) DirectMusicPort_Vtbl;
65 extern ICOM_VTABLE(IDirectMusicThru) DirectMusicThru_Vtbl;
66 extern ICOM_VTABLE(IReferenceClock) ReferenceClock_Vtbl;
68 extern ICOM_VTABLE(IDirectMusicObject) DirectMusicCollectionObject_Vtbl;
69 extern ICOM_VTABLE(IPersistStream) DirectMusicCollectionObjectStream_Vtbl;
71 /*****************************************************************************
72 * Some stuff to make my life easier :=)
75 /* some sort of aux. performance channel: as far as i can understand, these are
76 used to represent a particular midi channel in particular group at particular
77 group; so all we need to do is to fill it with parent port, group and midi
78 channel ? */
79 typedef struct DMUSIC_PRIVATE_PCHANNEL_
81 DWORD channel; /* map to this channel... */
82 DWORD group; /* ... in this group ... */
83 IDirectMusicPort *port; /* ... at this port */
84 } DMUSIC_PRIVATE_PCHANNEL, *LPDMUSIC_PRIVATE_PCHANNEL;
86 /* some sort of aux. midi channel: big fake at the moment; accepts only priority
87 changes... more coming soon */
88 typedef struct DMUSIC_PRIVATE_MCHANNEL_
90 DWORD priority;
91 } DMUSIC_PRIVATE_MCHANNEL, *LPDMUSIC_PRIVATE_MCHANNEL;
93 /* some sort of aux. channel group: collection of 16 midi channels */
94 typedef struct DMUSIC_PRIVATE_CHANNEL_GROUP_
96 DMUSIC_PRIVATE_MCHANNEL channel[16]; /* 16 channels in a group */
97 } DMUSIC_PRIVATE_CHANNEL_GROUP, *LPDMUSIC_PRIVATE_CHANNEL_GROUP;
99 /* used for loading chunks of data from files */
100 typedef struct _rawChunk
102 FOURCC id; /* FOURCC */
103 DWORD size; /* size of chunk_riff */
104 /* BYTE* data; */ /* chunk_riff data */
105 } rawChunk;
107 /* struct in which UNFO data is stored */
108 typedef struct _UNFO_List
110 WCHAR* name;
111 WCHAR* artist;
112 WCHAR* copyright;
113 WCHAR* version;
114 WCHAR* subject;
115 WCHAR* comment;
116 } UNFO_List;
118 typedef struct _ChordData
120 DMUS_IO_CHORD chord;
121 DWORD nrofsubchords;
122 DMUS_IO_SUBCHORD *subchord;
123 } ChordData;
125 typedef struct _Reference
127 DMUS_IO_REFERENCE header;
128 GUID guid;
129 FILETIME date;
130 WCHAR* name;
131 WCHAR* file;
132 WCHAR* category;
133 DMUS_IO_VERSION version;
134 } Reference;
136 typedef struct _BandTrack
138 DMUS_IO_BAND_TRACK_HEADER header;
139 GUID guid;
140 DMUS_IO_VERSION version;
141 UNFO_List UNFO;
143 DMUS_IO_BAND_ITEM_HEADER header1;
144 DMUS_IO_BAND_ITEM_HEADER2 header2;
146 /* IDirectMusicBandImpl **band; */
148 } BandTrack;
150 typedef struct _Part
152 DMUS_IO_STYLEPART header;
153 UNFO_List UNFO;
154 DWORD nrofnotes;
155 DMUS_IO_STYLENOTE* notes;
156 DWORD nrofcurves;
157 DMUS_IO_STYLECURVE* curves;
158 DWORD nrofmarkers;
159 DMUS_IO_STYLEMARKER* markers;
160 DWORD nrofresolutions;
161 DMUS_IO_STYLERESOLUTION* resolutions;
162 DWORD nrofanticipations;
163 DMUS_IO_STYLE_ANTICIPATION* anticipations;
164 } Part;
166 typedef struct _Pattern
168 DMUS_IO_PATTERN header;
169 DWORD nrofrhytms;
170 DWORD* rhytms;
171 UNFO_List UNFO;
172 DMUS_IO_MOTIFSETTINGS motsettings;
173 /* IDirectMusicBandImpl band */
174 DWORD nrofpartrefs;
175 /* FIXME: only in singular form for now */
176 UNFO_List partrefUNFO;
177 DMUS_IO_PARTREF partref;
178 } Pattern;
180 typedef struct _WaveTrack
182 DMUS_IO_WAVE_TRACK_HEADER header;
183 /* FIXME: only in singular form now */
184 DMUS_IO_WAVE_PART_HEADER partHeader;
185 DMUS_IO_WAVE_ITEM_HEADER itemHeader;
186 Reference reference;
187 } WaveTrack;
189 typedef struct _SegTriggerTrack
191 DMUS_IO_SEGMENT_TRACK_HEADER header;
192 /* FIXME: only in singular form now */
193 DMUS_IO_SEGMENT_ITEM_HEADER itemHeader;
194 Reference reference;
195 WCHAR* motifName;
196 } SegTriggerTrack;
198 typedef struct _TimeSigTrack {
199 DWORD nrofitems;
200 DMUS_IO_TIMESIGNATURE_ITEM* items;
201 } TimeSigTrack;
203 typedef struct _ScriptEvent {
204 DMUS_IO_SCRIPTTRACK_EVENTHEADER header;
205 Reference reference;
206 WCHAR* name;
207 } ScriptEvent;
209 /*****************************************************************************
210 * ClassFactory
212 /* can support IID_IDirectMusic, IID_IDirectMusic2 and IID_IDirectMusic8
213 * return always an IDirectMusic8Impl
215 extern HRESULT WINAPI DMUSIC_CreateDirectMusic (LPCGUID lpcGUID, LPDIRECTMUSIC8* ppDM, LPUNKNOWN pUnkOuter);
216 /* can support IID_IDirectMusicBuffer
217 * return always an IDirectMusicBufferImpl
219 extern HRESULT WINAPI DMUSIC_CreateDirectMusicBuffer (LPCGUID lpcGUID, LPDIRECTMUSICBUFFER* ppDMBuff, LPUNKNOWN pUnkOuter);
220 /* can support IID_IDirectMusicInstrument
221 * return always an IDirectMusicInstrumentImpl
223 extern HRESULT WINAPI DMUSIC_CreateDirectMusicInstrument (LPCGUID lpcGUID, LPDIRECTMUSICINSTRUMENT* ppDMInstr, LPUNKNOWN pUnkOuter);
224 /* can support IID_IDirectMusicDownloadedInstrument
225 * return always an IDirectMusicDownloadedInstrumentImpl
227 extern HRESULT WINAPI DMUSIC_CreateDirectMusicDownloadedInstrument (LPCGUID lpcGUID, LPDIRECTMUSICDOWNLOADEDINSTRUMENT* ppDMDLInstrument, LPUNKNOWN pUnkOuter);
228 /* can support IID_IDirectMusicCollection
229 * return always an IDirectMusicCollectionImpl
231 extern HRESULT WINAPI DMUSIC_CreateDirectMusicCollection (LPCGUID lpcGUID, LPDIRECTMUSICCOLLECTION* ppDMColl, LPUNKNOWN pUnkOuter);
232 /* can support IID_IDirectMusicDownload
233 * return always an IDirectMusicDownload
235 extern HRESULT WINAPI DMUSIC_CreateDirectMusicDownload (LPCGUID lpcGUID, LPDIRECTMUSICDOWNLOAD* ppDMDL, LPUNKNOWN pUnkOuter);
236 /* can support IID_IDirectMusicPortDownload
237 * return always an IDirectMusicPortDownload
239 extern HRESULT WINAPI DMUSIC_CreateDirectMusicPortDownload (LPCGUID lpcGUID, LPDIRECTMUSICPORTDOWNLOAD* ppDMPortDL, LPUNKNOWN pUnkOuter);
240 /* can support IID_IDirectMusicPort
241 * return always an IDirectMusicPortImpl
243 extern HRESULT WINAPI DMUSIC_CreateDirectMusicPort (LPCGUID lpcGUID, LPDIRECTMUSICPORT* ppDMPort, LPUNKNOWN pUnkOuter);
244 /* can support IID_IDirectMusicThru
245 * return always an IDirectMusicThruImpl
247 extern HRESULT WINAPI DMUSIC_CreateDirectMusicThru (LPCGUID lpcGUID, LPDIRECTMUSICTHRU* ppDMThru, LPUNKNOWN pUnkOuter);
248 /* can support IID_IDirectMusicObject
249 * return always an IDirectMusicObjectImpl
252 extern HRESULT WINAPI DMUSIC_CreateReferenceClock (LPCGUID lpcGUID, IReferenceClock** ppDM, LPUNKNOWN pUnkOuter);
254 extern HRESULT WINAPI DMUSIC_CreateDirectMusicCollectionObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppObject, LPUNKNOWN pUnkOuter);
256 /*****************************************************************************
257 * IDirectMusic8Impl implementation structure
259 struct IDirectMusic8Impl
261 /* IUnknown fields */
262 ICOM_VFIELD(IDirectMusic8);
263 DWORD ref;
265 /* IDirectMusicImpl fields */
266 IReferenceClockImpl* pMasterClock;
267 IDirectMusicPortImpl** ppPorts;
268 int nrofports;
271 /* IUnknown: */
272 extern HRESULT WINAPI IDirectMusic8Impl_QueryInterface (LPDIRECTMUSIC8 iface, REFIID riid, LPVOID *ppobj);
273 extern ULONG WINAPI IDirectMusic8Impl_AddRef (LPDIRECTMUSIC8 iface);
274 extern ULONG WINAPI IDirectMusic8Impl_Release (LPDIRECTMUSIC8 iface);
275 /* IDirectMusic: */
276 extern HRESULT WINAPI IDirectMusic8Impl_EnumPort (LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps);
277 extern HRESULT WINAPI IDirectMusic8Impl_CreateMusicBuffer (LPDIRECTMUSIC8 iface, LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER** ppBuffer, LPUNKNOWN pUnkOuter);
278 extern HRESULT WINAPI IDirectMusic8Impl_CreatePort (LPDIRECTMUSIC8 iface, REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT* ppPort, LPUNKNOWN pUnkOuter);
279 extern HRESULT WINAPI IDirectMusic8Impl_EnumMasterClock (LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo);
280 extern HRESULT WINAPI IDirectMusic8Impl_GetMasterClock (LPDIRECTMUSIC8 iface, LPGUID pguidClock, IReferenceClock** ppReferenceClock);
281 extern HRESULT WINAPI IDirectMusic8Impl_SetMasterClock (LPDIRECTMUSIC8 iface, REFGUID rguidClock);
282 extern HRESULT WINAPI IDirectMusic8Impl_Activate (LPDIRECTMUSIC8 iface, BOOL fEnable);
283 extern HRESULT WINAPI IDirectMusic8Impl_GetDefaultPort (LPDIRECTMUSIC8 iface, LPGUID pguidPort);
284 extern HRESULT WINAPI IDirectMusic8Impl_SetDirectSound (LPDIRECTMUSIC8 iface, LPDIRECTSOUND pDirectSound, HWND hWnd);
285 /* IDirectMusic8: */
286 extern HRESULT WINAPI IDirectMusic8Impl_SetExternalMasterClock (LPDIRECTMUSIC8 iface, IReferenceClock* pClock);
288 /*****************************************************************************
289 * IDirectMusicBufferImpl implementation structure
291 struct IDirectMusicBufferImpl
293 /* IUnknown fields */
294 ICOM_VFIELD(IDirectMusicBuffer);
295 DWORD ref;
297 /* IDirectMusicBufferImpl fields */
300 /* IUnknown: */
301 extern HRESULT WINAPI IDirectMusicBufferImpl_QueryInterface (LPDIRECTMUSICBUFFER iface, REFIID riid, LPVOID *ppobj);
302 extern ULONG WINAPI IDirectMusicBufferImpl_AddRef (LPDIRECTMUSICBUFFER iface);
303 extern ULONG WINAPI IDirectMusicBufferImpl_Release (LPDIRECTMUSICBUFFER iface);
304 /* IDirectMusicBufferImpl: */
305 extern HRESULT WINAPI IDirectMusicBufferImpl_Flush (LPDIRECTMUSICBUFFER iface);
306 extern HRESULT WINAPI IDirectMusicBufferImpl_TotalTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prtTime);
307 extern HRESULT WINAPI IDirectMusicBufferImpl_PackStructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD dwChannelMessage);
308 extern HRESULT WINAPI IDirectMusicBufferImpl_PackUnstructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb);
309 extern HRESULT WINAPI IDirectMusicBufferImpl_ResetReadPtr (LPDIRECTMUSICBUFFER iface);
310 extern HRESULT WINAPI IDirectMusicBufferImpl_GetNextEvent (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt, LPDWORD pdwChannelGroup, LPDWORD pdwLength, LPBYTE* ppData);
311 extern HRESULT WINAPI IDirectMusicBufferImpl_GetRawBufferPtr (LPDIRECTMUSICBUFFER iface, LPBYTE* ppData);
312 extern HRESULT WINAPI IDirectMusicBufferImpl_GetStartTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt);
313 extern HRESULT WINAPI IDirectMusicBufferImpl_GetUsedBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb);
314 extern HRESULT WINAPI IDirectMusicBufferImpl_GetMaxBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb);
315 extern HRESULT WINAPI IDirectMusicBufferImpl_GetBufferFormat (LPDIRECTMUSICBUFFER iface, LPGUID pGuidFormat);
316 extern HRESULT WINAPI IDirectMusicBufferImpl_SetStartTime (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt);
317 extern HRESULT WINAPI IDirectMusicBufferImpl_SetUsedBytes (LPDIRECTMUSICBUFFER iface, DWORD cb);
319 /*****************************************************************************
320 * IDirectMusicInstrumentImpl implementation structure
322 struct IDirectMusicInstrumentImpl
324 /* IUnknown fields */
325 ICOM_VFIELD(IDirectMusicInstrument);
326 DWORD ref;
328 /* IDirectMusicInstrumentImpl fields */
329 DWORD dwPatch;
330 LPWSTR pwszName;
333 /* IUnknown: */
334 extern HRESULT WINAPI IDirectMusicInstrumentImpl_QueryInterface (LPDIRECTMUSICINSTRUMENT iface, REFIID riid, LPVOID *ppobj);
335 extern ULONG WINAPI IDirectMusicInstrumentImpl_AddRef (LPDIRECTMUSICINSTRUMENT iface);
336 extern ULONG WINAPI IDirectMusicInstrumentImpl_Release (LPDIRECTMUSICINSTRUMENT iface);
337 /* IDirectMusicInstrumentImpl: */
338 extern HRESULT WINAPI IDirectMusicInstrumentImpl_GetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD* pdwPatch);
339 extern HRESULT WINAPI IDirectMusicInstrumentImpl_SetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD dwPatch);
341 /*****************************************************************************
342 * IDirectMusicDownloadedInstrumentImpl implementation structure
344 struct IDirectMusicDownloadedInstrumentImpl
346 /* IUnknown fields */
347 ICOM_VFIELD(IDirectMusicDownloadedInstrument);
348 DWORD ref;
350 /* IDirectMusicDownloadedInstrumentImpl fields */
353 /* IUnknown: */
354 extern HRESULT WINAPI IDirectMusicDownloadedInstrumentImpl_QueryInterface (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface, REFIID riid, LPVOID *ppobj);
355 extern ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_AddRef (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface);
356 extern ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_Release (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface);
357 /* IDirectMusicDownloadedInstrumentImpl: */
358 /* none yet */
360 /*****************************************************************************
361 * IDirectMusicCollectionImpl implementation structure
363 struct IDirectMusicCollectionImpl
365 /* IUnknown fields */
366 ICOM_VFIELD(IDirectMusicCollection);
367 DWORD ref;
369 /* IDirectMusicCollectionImpl fields */
370 IDirectMusicCollectionObject* pObject;
371 DWORD nrofinstruments;
372 IDirectMusicInstrumentImpl** ppInstruments;
375 /* IUnknown: */
376 extern HRESULT WINAPI IDirectMusicCollectionImpl_QueryInterface (LPDIRECTMUSICCOLLECTION iface, REFIID riid, LPVOID *ppobj);
377 extern ULONG WINAPI IDirectMusicCollectionImpl_AddRef (LPDIRECTMUSICCOLLECTION iface);
378 extern ULONG WINAPI IDirectMusicCollectionImpl_Release (LPDIRECTMUSICCOLLECTION iface);
379 /* IDirectMusicImpl: */
380 HRESULT WINAPI IDirectMusicCollectionImpl_GetInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwPatch, IDirectMusicInstrument** ppInstrument);
381 HRESULT WINAPI IDirectMusicCollectionImpl_EnumInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwIndex, DWORD* pdwPatch, LPWSTR pwszName, DWORD dwNameLen);
383 /*****************************************************************************
384 * IDirectMusicDownloadImpl implementation structure
386 struct IDirectMusicDownloadImpl
388 /* IUnknown fields */
389 ICOM_VFIELD(IDirectMusicDownload);
390 DWORD ref;
392 /* IDirectMusicDownloadImpl fields */
395 /* IUnknown: */
396 extern HRESULT WINAPI IDirectMusicDownloadImpl_QueryInterface (LPDIRECTMUSICDOWNLOAD iface, REFIID riid, LPVOID *ppobj);
397 extern ULONG WINAPI IDirectMusicDownloadImpl_AddRef (LPDIRECTMUSICDOWNLOAD iface);
398 extern ULONG WINAPI IDirectMusicDownloadImpl_Release (LPDIRECTMUSICDOWNLOAD iface);
399 /* IDirectMusicImpl: */
400 extern HRESULT WINAPI IDirectMusicDownloadImpl_GetBuffer (LPDIRECTMUSICDOWNLOAD iface, void** ppvBuffer, DWORD* pdwSize);
403 /*****************************************************************************
404 * IDirectMusicPortDownloadImpl implementation structure
406 struct IDirectMusicPortDownloadImpl
408 /* IUnknown fields */
409 ICOM_VFIELD(IDirectMusicPortDownload);
410 DWORD ref;
412 /* IDirectMusicPortDownloadImpl fields */
415 /* IUnknown: */
416 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_QueryInterface (LPDIRECTMUSICPORTDOWNLOAD iface, REFIID riid, LPVOID *ppobj);
417 extern ULONG WINAPI IDirectMusicPortDownloadImpl_AddRef (LPDIRECTMUSICPORTDOWNLOAD iface);
418 extern ULONG WINAPI IDirectMusicPortDownloadImpl_Release (LPDIRECTMUSICPORTDOWNLOAD iface);
419 /* IDirectMusicPortDownloadImpl: */
420 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_GetBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwDLId, IDirectMusicDownload** ppIDMDownload);
421 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_AllocateBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwSize, IDirectMusicDownload** ppIDMDownload);
422 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_GetDLId (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwStartDLId, DWORD dwCount);
423 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_GetAppend (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwAppend);
424 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_Download (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload);
425 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_Unload (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload);
427 /*****************************************************************************
428 * IDirectMusicPortImpl implementation structure
430 struct IDirectMusicPortImpl
432 /* IUnknown fields */
433 ICOM_VFIELD(IDirectMusicPort);
434 DWORD ref;
436 /* IDirectMusicPortImpl fields */
437 IDirectSound* pDirectSound;
438 IReferenceClock* pLatencyClock;
439 BOOL fActive;
440 LPDMUS_PORTCAPS pCaps;
441 LPDMUS_PORTPARAMS pParams;
442 int nrofgroups;
443 DMUSIC_PRIVATE_CHANNEL_GROUP group[1];
446 /* IUnknown: */
447 extern HRESULT WINAPI IDirectMusicPortImpl_QueryInterface (LPDIRECTMUSICPORT iface, REFIID riid, LPVOID *ppobj);
448 extern ULONG WINAPI IDirectMusicPortImpl_AddRef (LPDIRECTMUSICPORT iface);
449 extern ULONG WINAPI IDirectMusicPortImpl_Release (LPDIRECTMUSICPORT iface);
450 /* IDirectMusicPortImpl: */
451 extern HRESULT WINAPI IDirectMusicPortImpl_PlayBuffer (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer);
452 extern HRESULT WINAPI IDirectMusicPortImpl_SetReadNotificationHandle (LPDIRECTMUSICPORT iface, HANDLE hEvent);
453 extern HRESULT WINAPI IDirectMusicPortImpl_Read (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer);
454 extern HRESULT WINAPI IDirectMusicPortImpl_DownloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicInstrument* pInstrument, IDirectMusicDownloadedInstrument** ppDownloadedInstrument, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges);
455 extern HRESULT WINAPI IDirectMusicPortImpl_UnloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicDownloadedInstrument *pDownloadedInstrument);
456 extern HRESULT WINAPI IDirectMusicPortImpl_GetLatencyClock (LPDIRECTMUSICPORT iface, IReferenceClock** ppClock);
457 extern HRESULT WINAPI IDirectMusicPortImpl_GetRunningStats (LPDIRECTMUSICPORT iface, LPDMUS_SYNTHSTATS pStats);
458 extern HRESULT WINAPI IDirectMusicPortImpl_GetCaps (LPDIRECTMUSICPORT iface, LPDMUS_PORTCAPS pPortCaps);
459 extern HRESULT WINAPI IDirectMusicPortImpl_DeviceIoControl (LPDIRECTMUSICPORT iface, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
460 extern HRESULT WINAPI IDirectMusicPortImpl_SetNumChannelGroups (LPDIRECTMUSICPORT iface, DWORD dwChannelGroups);
461 extern HRESULT WINAPI IDirectMusicPortImpl_GetNumChannelGroups (LPDIRECTMUSICPORT iface, LPDWORD pdwChannelGroups);
462 extern HRESULT WINAPI IDirectMusicPortImpl_Activate (LPDIRECTMUSICPORT iface, BOOL fActive);
463 extern HRESULT WINAPI IDirectMusicPortImpl_SetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority);
464 extern HRESULT WINAPI IDirectMusicPortImpl_GetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority);
465 extern HRESULT WINAPI IDirectMusicPortImpl_SetDirectSound (LPDIRECTMUSICPORT iface, LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer);
466 extern HRESULT WINAPI IDirectMusicPortImpl_GetFormat (LPDIRECTMUSICPORT iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize);
468 /*****************************************************************************
469 * IDirectMusicThruImpl implementation structure
471 struct IDirectMusicThruImpl
473 /* IUnknown fields */
474 ICOM_VFIELD(IDirectMusicThru);
475 DWORD ref;
477 /* IDirectMusicThruImpl fields */
480 /* IUnknown: */
481 extern HRESULT WINAPI IDirectMusicThruImpl_QueryInterface (LPDIRECTMUSICTHRU iface, REFIID riid, LPVOID *ppobj);
482 extern ULONG WINAPI IDirectMusicThruImpl_AddRef (LPDIRECTMUSICTHRU iface);
483 extern ULONG WINAPI IDirectMusicThruImpl_Release (LPDIRECTMUSICTHRU iface);
484 /* IDirectMusicPortDownloadImpl: */
485 extern HRESULT WINAPI ThruChannel (LPDIRECTMUSICTHRU iface, DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort);
487 /*****************************************************************************
488 * IReferenceClockImpl implementation structure
490 struct IReferenceClockImpl
492 /* IUnknown fields */
493 ICOM_VFIELD(IReferenceClock);
494 DWORD ref;
496 /* IReferenceClockImpl fields */
497 REFERENCE_TIME rtTime;
498 DMUS_CLOCKINFO pClockInfo;
501 /* IUnknown: */
502 extern HRESULT WINAPI IReferenceClockImpl_QueryInterface (IReferenceClock *iface, REFIID riid, LPVOID *ppobj);
503 extern ULONG WINAPI IReferenceClockImpl_AddRef (IReferenceClock *iface);
504 extern ULONG WINAPI IReferenceClockImpl_Release (IReferenceClock *iface);
505 /* IReferenceClock: */
506 extern HRESULT WINAPI IReferenceClockImpl_GetTime (IReferenceClock *iface, REFERENCE_TIME* pTime);
507 extern HRESULT WINAPI IReferenceClockImpl_AdviseTime (IReferenceClock *iface, REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD* pdwAdviseCookie);
508 extern HRESULT WINAPI IReferenceClockImpl_AdvisePeriodic (IReferenceClock *iface, REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD* pdwAdviseCookie);
509 extern HRESULT WINAPI IReferenceClockImpl_Unadvise (IReferenceClock *iface, DWORD dwAdviseCookie);
512 /*****************************************************************************
513 * IDirectMusicCollectionObject implementation structure
515 struct IDirectMusicCollectionObject
517 /* IUnknown fields */
518 ICOM_VFIELD (IDirectMusicObject);
519 DWORD ref;
521 /* IDirectMusicObjectImpl fields */
522 LPDMUS_OBJECTDESC pDesc;
523 IDirectMusicCollectionObjectStream* pStream;
524 IDirectMusicCollectionImpl* pCollection;
527 /* IUnknown: */
528 extern HRESULT WINAPI IDirectMusicCollectionObject_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
529 extern ULONG WINAPI IDirectMusicCollectionObject_AddRef (LPDIRECTMUSICOBJECT iface);
530 extern ULONG WINAPI IDirectMusicCollectionObject_Release (LPDIRECTMUSICOBJECT iface);
531 /* IDirectMusicObject: */
532 extern HRESULT WINAPI IDirectMusicCollectionObject_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
533 extern HRESULT WINAPI IDirectMusicCollectionObject_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
534 extern HRESULT WINAPI IDirectMusicCollectionObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
536 /*****************************************************************************
537 * IDirectMusicCollectionObjectStream implementation structure
539 struct IDirectMusicCollectionObjectStream
541 /* IUnknown fields */
542 ICOM_VFIELD (IPersistStream);
543 DWORD ref;
545 /* IPersistStreamImpl fields */
546 IDirectMusicCollectionObject* pParentObject;
549 /* IUnknown: */
550 extern HRESULT WINAPI IDirectMusicCollectionObjectStream_QueryInterface (LPPERSISTSTREAM iface, REFIID riid, void** ppvObject);
551 extern ULONG WINAPI IDirectMusicCollectionObjectStream_AddRef (LPPERSISTSTREAM iface);
552 extern ULONG WINAPI IDirectMusicCollectionObjectStream_Release (LPPERSISTSTREAM iface);
553 /* IPersist: */
554 extern HRESULT WINAPI IDirectMusicCollectionObjectStream_GetClassID (LPPERSISTSTREAM iface, CLSID* pClassID);
555 /* IPersistStream: */
556 extern HRESULT WINAPI IDirectMusicCollectionObjectStream_IsDirty (LPPERSISTSTREAM iface);
557 extern HRESULT WINAPI IDirectMusicCollectionObjectStream_Load (LPPERSISTSTREAM iface, IStream* pStm);
558 extern HRESULT WINAPI IDirectMusicCollectionObjectStream_Save (LPPERSISTSTREAM iface, IStream* pStm, BOOL fClearDirty);
559 extern HRESULT WINAPI IDirectMusicCollectionObjectStream_GetSizeMax (LPPERSISTSTREAM iface, ULARGE_INTEGER* pcbSize);
562 /*****************************************************************************
563 * Helper Functions
565 void register_waveport (LPGUID lpGUID, LPCSTR lpszDesc, LPCSTR lpszDrvName, LPVOID lpContext);
567 #endif /* __WINE_DMUSIC_PRIVATE_H */