'grep -q' is not portable -> don't use it.
[wine.git] / dlls / dmusic / dmusic_private.h
blob4299b0ae47b68e7ecea68c7d472b4e45b4824d44
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 "windef.h"
24 #include "wine/debug.h"
25 #include "winbase.h"
26 #include "winnt.h"
27 #include "dmusicc.h"
28 #include "dmusici.h"
29 #include "dmusics.h"
30 #include "dmplugin.h"
31 #include "dmusicf.h"
32 #include "dsound.h"
34 /*****************************************************************************
35 * Interfaces
37 typedef struct IDirectMusic8Impl IDirectMusic8Impl;
38 typedef struct IDirectMusicBufferImpl IDirectMusicBufferImpl;
39 typedef struct IDirectMusicInstrumentImpl IDirectMusicInstrumentImpl;
40 typedef struct IDirectMusicDownloadedInstrumentImpl IDirectMusicDownloadedInstrumentImpl;
41 typedef struct IDirectMusicCollectionImpl IDirectMusicCollectionImpl;
42 typedef struct IDirectMusicDownloadImpl IDirectMusicDownloadImpl;
43 typedef struct IDirectMusicPortDownloadImpl IDirectMusicPortDownloadImpl;
44 typedef struct IDirectMusicPortImpl IDirectMusicPortImpl;
45 typedef struct IDirectMusicThruImpl IDirectMusicThruImpl;
46 typedef struct IDirectMusicObjectImpl IDirectMusicObjectImpl;
47 typedef struct IReferenceClockImpl IReferenceClockImpl;
49 /*****************************************************************************
50 * Predeclare the interface implementation structures
52 extern ICOM_VTABLE(IDirectMusic8) DirectMusic8_Vtbl;
53 extern ICOM_VTABLE(IDirectMusicBuffer) DirectMusicBuffer_Vtbl;
54 extern ICOM_VTABLE(IDirectMusicInstrument) DirectMusicInstrument_Vtbl;
55 extern ICOM_VTABLE(IDirectMusicDownloadedInstrument) DirectMusicDownloadedInstrument_Vtbl;
56 extern ICOM_VTABLE(IDirectMusicCollection) DirectMusicCollection_Vtbl;
57 extern ICOM_VTABLE(IDirectMusicDownload) DirectMusicDownload_Vtbl;
58 extern ICOM_VTABLE(IDirectMusicPortDownload) DirectMusicPortDownload_Vtbl;
59 extern ICOM_VTABLE(IDirectMusicPort) DirectMusicPort_Vtbl;
60 extern ICOM_VTABLE(IDirectMusicThru) DirectMusicThru_Vtbl;
61 extern ICOM_VTABLE(IDirectMusicObject) DirectMusicObject_Vtbl;
62 extern ICOM_VTABLE(IReferenceClock) ReferenceClock_Vtbl;
64 /*****************************************************************************
65 * Some stuff to make my life easier :=)
68 /* some sort of aux. performance channel: as far as i can understand, these are
69 used to represent a particular midi channel in particular group at particular
70 group; so all we need to do is to fill it with parent port, group and midi
71 channel ? */
72 typedef struct DMUSIC_PRIVATE_PCHANNEL_
74 DWORD channel; /* map to this channel... */
75 DWORD group; /* ... in this group ... */
76 IDirectMusicPort *port; /* ... at this port */
77 } DMUSIC_PRIVATE_PCHANNEL, *LPDMUSIC_PRIVATE_PCHANNEL;
79 /* some sort of aux. midi channel: big fake at the moment; accepts only priority
80 changes... more coming soon */
81 typedef struct DMUSIC_PRIVATE_MCHANNEL_
83 DWORD priority;
84 } DMUSIC_PRIVATE_MCHANNEL, *LPDMUSIC_PRIVATE_MCHANNEL;
86 /* some sort of aux. channel group: collection of 16 midi channels */
87 typedef struct DMUSIC_PRIVATE_CHANNEL_GROUP_
89 DMUSIC_PRIVATE_MCHANNEL channel[16]; /* 16 channels in a group */
90 } DMUSIC_PRIVATE_CHANNEL_GROUP, *LPDMUSIC_PRIVATE_CHANNEL_GROUP;
92 /* used for loading chunks of data from files */
93 typedef struct _rawChunk
95 FOURCC id; /* FOURCC */
96 DWORD size; /* size of chunk_riff */
97 /* BYTE* data; */ /* chunk_riff data */
98 } rawChunk;
100 /* struct in which UNFO data is stored */
101 typedef struct _UNFO_List
103 WCHAR* name;
104 WCHAR* artist;
105 WCHAR* copyright;
106 WCHAR* version;
107 WCHAR* subject;
108 WCHAR* comment;
109 } UNFO_List;
111 typedef struct _ChordData
113 DMUS_IO_CHORD chord;
114 DWORD nrofsubchords;
115 DMUS_IO_SUBCHORD *subchord;
116 } ChordData;
118 typedef struct _Reference
120 DMUS_IO_REFERENCE header;
121 GUID guid;
122 FILETIME date;
123 WCHAR* name;
124 WCHAR* file;
125 WCHAR* category;
126 DMUS_IO_VERSION version;
127 } Reference;
129 typedef struct _BandTrack
131 DMUS_IO_BAND_TRACK_HEADER header;
132 GUID guid;
133 DMUS_IO_VERSION version;
134 UNFO_List UNFO;
136 DMUS_IO_BAND_ITEM_HEADER header1;
137 DMUS_IO_BAND_ITEM_HEADER2 header2;
139 /* IDirectMusicBandImpl **band; */
141 } BandTrack;
143 typedef struct _Part
145 DMUS_IO_STYLEPART header;
146 UNFO_List UNFO;
147 DWORD nrofnotes;
148 DMUS_IO_STYLENOTE* notes;
149 DWORD nrofcurves;
150 DMUS_IO_STYLECURVE* curves;
151 DWORD nrofmarkers;
152 DMUS_IO_STYLEMARKER* markers;
153 DWORD nrofresolutions;
154 DMUS_IO_STYLERESOLUTION* resolutions;
155 DWORD nrofanticipations;
156 DMUS_IO_STYLE_ANTICIPATION* anticipations;
157 } Part;
159 typedef struct _Pattern
161 DMUS_IO_PATTERN header;
162 DWORD nrofrhytms;
163 DWORD* rhytms;
164 UNFO_List UNFO;
165 DMUS_IO_MOTIFSETTINGS motsettings;
166 /* IDirectMusicBandImpl band */
167 DWORD nrofpartrefs;
168 /* FIXME: only in singular form for now */
169 UNFO_List partrefUNFO;
170 DMUS_IO_PARTREF partref;
171 } Pattern;
173 typedef struct _WaveTrack
175 DMUS_IO_WAVE_TRACK_HEADER header;
176 /* FIXME: only in singular form now */
177 DMUS_IO_WAVE_PART_HEADER partHeader;
178 DMUS_IO_WAVE_ITEM_HEADER itemHeader;
179 Reference reference;
180 } WaveTrack;
182 typedef struct _SegTriggerTrack
184 DMUS_IO_SEGMENT_TRACK_HEADER header;
185 /* FIXME: only in singular form now */
186 DMUS_IO_SEGMENT_ITEM_HEADER itemHeader;
187 Reference reference;
188 WCHAR* motifName;
189 } SegTriggerTrack;
191 typedef struct _TimeSigTrack {
192 DWORD nrofitems;
193 DMUS_IO_TIMESIGNATURE_ITEM* items;
194 } TimeSigTrack;
196 typedef struct _ScriptEvent {
197 DMUS_IO_SCRIPTTRACK_EVENTHEADER header;
198 Reference reference;
199 WCHAR* name;
200 } ScriptEvent;
202 /*****************************************************************************
203 * ClassFactory
205 /* can support IID_IDirectMusic, IID_IDirectMusic2 and IID_IDirectMusic8
206 * return always an IDirectMusic8Impl
208 extern HRESULT WINAPI DMUSIC_CreateDirectMusic (LPCGUID lpcGUID, LPDIRECTMUSIC8* ppDM, LPUNKNOWN pUnkOuter);
209 /* can support IID_IDirectMusicBuffer
210 * return always an IDirectMusicBufferImpl
212 extern HRESULT WINAPI DMUSIC_CreateDirectMusicBuffer (LPCGUID lpcGUID, LPDIRECTMUSICBUFFER* ppDMBuff, LPUNKNOWN pUnkOuter);
213 /* can support IID_IDirectMusicInstrument
214 * return always an IDirectMusicInstrumentImpl
216 extern HRESULT WINAPI DMUSIC_CreateDirectMusicInstrument (LPCGUID lpcGUID, LPDIRECTMUSICINSTRUMENT* ppDMInstr, LPUNKNOWN pUnkOuter);
217 /* can support IID_IDirectMusicDownloadedInstrument
218 * return always an IDirectMusicDownloadedInstrumentImpl
220 extern HRESULT WINAPI DMUSIC_CreateDirectMusicDownloadedInstrument (LPCGUID lpcGUID, LPDIRECTMUSICDOWNLOADEDINSTRUMENT* ppDMDLInstrument, LPUNKNOWN pUnkOuter);
221 /* can support IID_IDirectMusicCollection
222 * return always an IDirectMusicCollectionImpl
224 extern HRESULT WINAPI DMUSIC_CreateDirectMusicCollection (LPCGUID lpcGUID, LPDIRECTMUSICCOLLECTION* ppDMColl, LPUNKNOWN pUnkOuter);
225 /* can support IID_IDirectMusicDownload
226 * return always an IDirectMusicDownload
228 extern HRESULT WINAPI DMUSIC_CreateDirectMusicDownload (LPCGUID lpcGUID, LPDIRECTMUSICDOWNLOAD* ppDMDL, LPUNKNOWN pUnkOuter);
229 /* can support IID_IDirectMusicPortDownload
230 * return always an IDirectMusicPortDownload
232 extern HRESULT WINAPI DMUSIC_CreateDirectMusicPortDownload (LPCGUID lpcGUID, LPDIRECTMUSICPORTDOWNLOAD* ppDMPortDL, LPUNKNOWN pUnkOuter);
233 /* can support IID_IDirectMusicPort
234 * return always an IDirectMusicPortImpl
236 extern HRESULT WINAPI DMUSIC_CreateDirectMusicPort (LPCGUID lpcGUID, LPDIRECTMUSICPORT* ppDMPort, LPUNKNOWN pUnkOuter);
237 /* can support IID_IDirectMusicThru
238 * return always an IDirectMusicThruImpl
240 extern HRESULT WINAPI DMUSIC_CreateDirectMusicThru (LPCGUID lpcGUID, LPDIRECTMUSICTHRU* ppDMThru, LPUNKNOWN pUnkOuter);
241 /* can support IID_IDirectMusicObject
242 * return always an IDirectMusicObjectImpl
244 extern HRESULT WINAPI DMUSIC_CreateDirectMusicObject (LPCGUID lpcGUID, LPDIRECTMUSICOBJECT* ppDMObj, LPUNKNOWN pUnkOuter);
245 /* can support IID_IReferenceClock
246 * return always an IReferenceClockImpl
248 extern HRESULT WINAPI DMUSIC_CreateReferenceClock (LPCGUID lpcGUID, IReferenceClock** ppDM, LPUNKNOWN pUnkOuter);
250 /*****************************************************************************
251 * IDirectMusic8Impl implementation structure
253 struct IDirectMusic8Impl
255 /* IUnknown fields */
256 ICOM_VFIELD(IDirectMusic8);
257 DWORD ref;
259 /* IDirectMusicImpl fields */
260 IReferenceClockImpl* pMasterClock;
261 IDirectMusicPortImpl** ppPorts;
262 int nrofports;
265 /* IUnknown: */
266 extern HRESULT WINAPI IDirectMusic8Impl_QueryInterface (LPDIRECTMUSIC8 iface, REFIID riid, LPVOID *ppobj);
267 extern ULONG WINAPI IDirectMusic8Impl_AddRef (LPDIRECTMUSIC8 iface);
268 extern ULONG WINAPI IDirectMusic8Impl_Release (LPDIRECTMUSIC8 iface);
269 /* IDirectMusic: */
270 extern HRESULT WINAPI IDirectMusic8Impl_EnumPort (LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps);
271 extern HRESULT WINAPI IDirectMusic8Impl_CreateMusicBuffer (LPDIRECTMUSIC8 iface, LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER** ppBuffer, LPUNKNOWN pUnkOuter);
272 extern HRESULT WINAPI IDirectMusic8Impl_CreatePort (LPDIRECTMUSIC8 iface, REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT* ppPort, LPUNKNOWN pUnkOuter);
273 extern HRESULT WINAPI IDirectMusic8Impl_EnumMasterClock (LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo);
274 extern HRESULT WINAPI IDirectMusic8Impl_GetMasterClock (LPDIRECTMUSIC8 iface, LPGUID pguidClock, IReferenceClock** ppReferenceClock);
275 extern HRESULT WINAPI IDirectMusic8Impl_SetMasterClock (LPDIRECTMUSIC8 iface, REFGUID rguidClock);
276 extern HRESULT WINAPI IDirectMusic8Impl_Activate (LPDIRECTMUSIC8 iface, BOOL fEnable);
277 extern HRESULT WINAPI IDirectMusic8Impl_GetDefaultPort (LPDIRECTMUSIC8 iface, LPGUID pguidPort);
278 extern HRESULT WINAPI IDirectMusic8Impl_SetDirectSound (LPDIRECTMUSIC8 iface, LPDIRECTSOUND pDirectSound, HWND hWnd);
279 /* IDirectMusic8: */
280 extern HRESULT WINAPI IDirectMusic8Impl_SetExternalMasterClock (LPDIRECTMUSIC8 iface, IReferenceClock* pClock);
282 /*****************************************************************************
283 * IDirectMusicBufferImpl implementation structure
285 struct IDirectMusicBufferImpl
287 /* IUnknown fields */
288 ICOM_VFIELD(IDirectMusicBuffer);
289 DWORD ref;
291 /* IDirectMusicBufferImpl fields */
294 /* IUnknown: */
295 extern HRESULT WINAPI IDirectMusicBufferImpl_QueryInterface (LPDIRECTMUSICBUFFER iface, REFIID riid, LPVOID *ppobj);
296 extern ULONG WINAPI IDirectMusicBufferImpl_AddRef (LPDIRECTMUSICBUFFER iface);
297 extern ULONG WINAPI IDirectMusicBufferImpl_Release (LPDIRECTMUSICBUFFER iface);
298 /* IDirectMusicBufferImpl: */
299 extern HRESULT WINAPI IDirectMusicBufferImpl_Flush (LPDIRECTMUSICBUFFER iface);
300 extern HRESULT WINAPI IDirectMusicBufferImpl_TotalTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prtTime);
301 extern HRESULT WINAPI IDirectMusicBufferImpl_PackStructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD dwChannelMessage);
302 extern HRESULT WINAPI IDirectMusicBufferImpl_PackUnstructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb);
303 extern HRESULT WINAPI IDirectMusicBufferImpl_ResetReadPtr (LPDIRECTMUSICBUFFER iface);
304 extern HRESULT WINAPI IDirectMusicBufferImpl_GetNextEvent (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt, LPDWORD pdwChannelGroup, LPDWORD pdwLength, LPBYTE* ppData);
305 extern HRESULT WINAPI IDirectMusicBufferImpl_GetRawBufferPtr (LPDIRECTMUSICBUFFER iface, LPBYTE* ppData);
306 extern HRESULT WINAPI IDirectMusicBufferImpl_GetStartTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt);
307 extern HRESULT WINAPI IDirectMusicBufferImpl_GetUsedBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb);
308 extern HRESULT WINAPI IDirectMusicBufferImpl_GetMaxBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb);
309 extern HRESULT WINAPI IDirectMusicBufferImpl_GetBufferFormat (LPDIRECTMUSICBUFFER iface, LPGUID pGuidFormat);
310 extern HRESULT WINAPI IDirectMusicBufferImpl_SetStartTime (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt);
311 extern HRESULT WINAPI IDirectMusicBufferImpl_SetUsedBytes (LPDIRECTMUSICBUFFER iface, DWORD cb);
313 /*****************************************************************************
314 * IDirectMusicInstrumentImpl implementation structure
316 struct IDirectMusicInstrumentImpl
318 /* IUnknown fields */
319 ICOM_VFIELD(IDirectMusicInstrument);
320 DWORD ref;
322 /* IDirectMusicInstrumentImpl fields */
323 DWORD patch;
326 /* IUnknown: */
327 extern HRESULT WINAPI IDirectMusicInstrumentImpl_QueryInterface (LPDIRECTMUSICINSTRUMENT iface, REFIID riid, LPVOID *ppobj);
328 extern ULONG WINAPI IDirectMusicInstrumentImpl_AddRef (LPDIRECTMUSICINSTRUMENT iface);
329 extern ULONG WINAPI IDirectMusicInstrumentImpl_Release (LPDIRECTMUSICINSTRUMENT iface);
330 /* IDirectMusicInstrumentImpl: */
331 extern HRESULT WINAPI IDirectMusicInstrumentImpl_GetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD* pdwPatch);
332 extern HRESULT WINAPI IDirectMusicInstrumentImpl_SetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD dwPatch);
334 /*****************************************************************************
335 * IDirectMusicDownloadedInstrumentImpl implementation structure
337 struct IDirectMusicDownloadedInstrumentImpl
339 /* IUnknown fields */
340 ICOM_VFIELD(IDirectMusicDownloadedInstrument);
341 DWORD ref;
343 /* IDirectMusicDownloadedInstrumentImpl fields */
346 /* IUnknown: */
347 extern HRESULT WINAPI IDirectMusicDownloadedInstrumentImpl_QueryInterface (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface, REFIID riid, LPVOID *ppobj);
348 extern ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_AddRef (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface);
349 extern ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_Release (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface);
350 /* IDirectMusicDownloadedInstrumentImpl: */
351 /* none yet */
353 /*****************************************************************************
354 * IDirectMusicCollectionImpl implementation structure
356 struct IDirectMusicCollectionImpl
358 /* IUnknown fields */
359 ICOM_VFIELD(IDirectMusicCollection);
360 DWORD ref;
362 /* IDirectMusicCollectionImpl fields */
365 /* IUnknown: */
366 extern HRESULT WINAPI IDirectMusicCollectionImpl_QueryInterface (LPDIRECTMUSICCOLLECTION iface, REFIID riid, LPVOID *ppobj);
367 extern ULONG WINAPI IDirectMusicCollectionImpl_AddRef (LPDIRECTMUSICCOLLECTION iface);
368 extern ULONG WINAPI IDirectMusicCollectionImpl_Release (LPDIRECTMUSICCOLLECTION iface);
369 /* IDirectMusicImpl: */
370 HRESULT WINAPI IDirectMusicCollectionImpl_GetInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwPatch, IDirectMusicInstrument** ppInstrument);
371 HRESULT WINAPI IDirectMusicCollectionImpl_EnumInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwIndex, DWORD* pdwPatch, LPWSTR pwszName, DWORD dwNameLen);
373 /*****************************************************************************
374 * IDirectMusicDownloadImpl implementation structure
376 struct IDirectMusicDownloadImpl
378 /* IUnknown fields */
379 ICOM_VFIELD(IDirectMusicDownload);
380 DWORD ref;
382 /* IDirectMusicDownloadImpl fields */
385 /* IUnknown: */
386 extern HRESULT WINAPI IDirectMusicDownloadImpl_QueryInterface (LPDIRECTMUSICDOWNLOAD iface, REFIID riid, LPVOID *ppobj);
387 extern ULONG WINAPI IDirectMusicDownloadImpl_AddRef (LPDIRECTMUSICDOWNLOAD iface);
388 extern ULONG WINAPI IDirectMusicDownloadImpl_Release (LPDIRECTMUSICDOWNLOAD iface);
389 /* IDirectMusicImpl: */
390 extern HRESULT WINAPI IDirectMusicDownloadImpl_GetBuffer (LPDIRECTMUSICDOWNLOAD iface, void** ppvBuffer, DWORD* pdwSize);
393 /*****************************************************************************
394 * IDirectMusicPortDownloadImpl implementation structure
396 struct IDirectMusicPortDownloadImpl
398 /* IUnknown fields */
399 ICOM_VFIELD(IDirectMusicPortDownload);
400 DWORD ref;
402 /* IDirectMusicPortDownloadImpl fields */
405 /* IUnknown: */
406 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_QueryInterface (LPDIRECTMUSICPORTDOWNLOAD iface, REFIID riid, LPVOID *ppobj);
407 extern ULONG WINAPI IDirectMusicPortDownloadImpl_AddRef (LPDIRECTMUSICPORTDOWNLOAD iface);
408 extern ULONG WINAPI IDirectMusicPortDownloadImpl_Release (LPDIRECTMUSICPORTDOWNLOAD iface);
409 /* IDirectMusicPortDownloadImpl: */
410 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_GetBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwDLId, IDirectMusicDownload** ppIDMDownload);
411 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_AllocateBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwSize, IDirectMusicDownload** ppIDMDownload);
412 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_GetDLId (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwStartDLId, DWORD dwCount);
413 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_GetAppend (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwAppend);
414 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_Download (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload);
415 extern HRESULT WINAPI IDirectMusicPortDownloadImpl_Unload (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload);
417 /*****************************************************************************
418 * IDirectMusicPortImpl implementation structure
420 struct IDirectMusicPortImpl
422 /* IUnknown fields */
423 ICOM_VFIELD(IDirectMusicPort);
424 DWORD ref;
426 /* IDirectMusicPortImpl fields */
427 IDirectSound* pDirectSound;
428 IReferenceClock* pLatencyClock;
429 BOOL fActive;
430 LPDMUS_PORTCAPS pCaps;
431 LPDMUS_PORTPARAMS pParams;
432 int nrofgroups;
433 DMUSIC_PRIVATE_CHANNEL_GROUP group[1];
436 /* IUnknown: */
437 extern HRESULT WINAPI IDirectMusicPortImpl_QueryInterface (LPDIRECTMUSICPORT iface, REFIID riid, LPVOID *ppobj);
438 extern ULONG WINAPI IDirectMusicPortImpl_AddRef (LPDIRECTMUSICPORT iface);
439 extern ULONG WINAPI IDirectMusicPortImpl_Release (LPDIRECTMUSICPORT iface);
440 /* IDirectMusicPortImpl: */
441 extern HRESULT WINAPI IDirectMusicPortImpl_PlayBuffer (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer);
442 extern HRESULT WINAPI IDirectMusicPortImpl_SetReadNotificationHandle (LPDIRECTMUSICPORT iface, HANDLE hEvent);
443 extern HRESULT WINAPI IDirectMusicPortImpl_Read (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer);
444 extern HRESULT WINAPI IDirectMusicPortImpl_DownloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicInstrument* pInstrument, IDirectMusicDownloadedInstrument** ppDownloadedInstrument, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges);
445 extern HRESULT WINAPI IDirectMusicPortImpl_UnloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicDownloadedInstrument *pDownloadedInstrument);
446 extern HRESULT WINAPI IDirectMusicPortImpl_GetLatencyClock (LPDIRECTMUSICPORT iface, IReferenceClock** ppClock);
447 extern HRESULT WINAPI IDirectMusicPortImpl_GetRunningStats (LPDIRECTMUSICPORT iface, LPDMUS_SYNTHSTATS pStats);
448 extern HRESULT WINAPI IDirectMusicPortImpl_GetCaps (LPDIRECTMUSICPORT iface, LPDMUS_PORTCAPS pPortCaps);
449 extern HRESULT WINAPI IDirectMusicPortImpl_DeviceIoControl (LPDIRECTMUSICPORT iface, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
450 extern HRESULT WINAPI IDirectMusicPortImpl_SetNumChannelGroups (LPDIRECTMUSICPORT iface, DWORD dwChannelGroups);
451 extern HRESULT WINAPI IDirectMusicPortImpl_GetNumChannelGroups (LPDIRECTMUSICPORT iface, LPDWORD pdwChannelGroups);
452 extern HRESULT WINAPI IDirectMusicPortImpl_Activate (LPDIRECTMUSICPORT iface, BOOL fActive);
453 extern HRESULT WINAPI IDirectMusicPortImpl_SetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority);
454 extern HRESULT WINAPI IDirectMusicPortImpl_GetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority);
455 extern HRESULT WINAPI IDirectMusicPortImpl_SetDirectSound (LPDIRECTMUSICPORT iface, LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer);
456 extern HRESULT WINAPI IDirectMusicPortImpl_GetFormat (LPDIRECTMUSICPORT iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize);
458 /*****************************************************************************
459 * IDirectMusicThruImpl implementation structure
461 struct IDirectMusicThruImpl
463 /* IUnknown fields */
464 ICOM_VFIELD(IDirectMusicThru);
465 DWORD ref;
467 /* IDirectMusicThruImpl fields */
470 /* IUnknown: */
471 extern HRESULT WINAPI IDirectMusicThruImpl_QueryInterface (LPDIRECTMUSICTHRU iface, REFIID riid, LPVOID *ppobj);
472 extern ULONG WINAPI IDirectMusicThruImpl_AddRef (LPDIRECTMUSICTHRU iface);
473 extern ULONG WINAPI IDirectMusicThruImpl_Release (LPDIRECTMUSICTHRU iface);
474 /* IDirectMusicPortDownloadImpl: */
475 extern HRESULT WINAPI ThruChannel (LPDIRECTMUSICTHRU iface, DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort);
477 /*****************************************************************************
478 * IDirectMusicObjectImpl implementation structure
480 struct IDirectMusicObjectImpl
482 /* IUnknown fields */
483 ICOM_VFIELD(IDirectMusicObject);
484 DWORD ref;
486 /* IDirectMusicObjectImpl fields */
487 LPDMUS_OBJECTDESC pDesc;
490 /* IUnknown: */
491 extern HRESULT WINAPI IDirectMusicObjectImpl_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
492 extern ULONG WINAPI IDirectMusicObjectImpl_AddRef (LPDIRECTMUSICOBJECT iface);
493 extern ULONG WINAPI IDirectMusicObjectImpl_Release (LPDIRECTMUSICOBJECT iface);
494 /* IDirectMusicObject: */
495 extern HRESULT WINAPI IDirectMusicObjectImpl_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
496 extern HRESULT WINAPI IDirectMusicObjectImpl_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
497 extern HRESULT WINAPI IDirectMusicObjectImpl_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
499 /*****************************************************************************
500 * IReferenceClockImpl implementation structure
502 struct IReferenceClockImpl
504 /* IUnknown fields */
505 ICOM_VFIELD(IReferenceClock);
506 DWORD ref;
508 /* IReferenceClockImpl fields */
509 REFERENCE_TIME rtTime;
510 DMUS_CLOCKINFO pClockInfo;
513 /* IUnknown: */
514 extern HRESULT WINAPI IReferenceClockImpl_QueryInterface (IReferenceClock *iface, REFIID riid, LPVOID *ppobj);
515 extern ULONG WINAPI IReferenceClockImpl_AddRef (IReferenceClock *iface);
516 extern ULONG WINAPI IReferenceClockImpl_Release (IReferenceClock *iface);
517 /* IReferenceClock: */
518 extern HRESULT WINAPI IReferenceClockImpl_GetTime (IReferenceClock *iface, REFERENCE_TIME* pTime);
519 extern HRESULT WINAPI IReferenceClockImpl_AdviseTime (IReferenceClock *iface, REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD* pdwAdviseCookie);
520 extern HRESULT WINAPI IReferenceClockImpl_AdvisePeriodic (IReferenceClock *iface, REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD* pdwAdviseCookie);
521 extern HRESULT WINAPI IReferenceClockImpl_Unadvise (IReferenceClock *iface, DWORD dwAdviseCookie);
524 /*****************************************************************************
525 * Helper Functions
527 void register_waveport (LPGUID lpGUID, LPCSTR lpszDesc, LPCSTR lpszDrvName, LPVOID lpContext);
529 #endif /* __WINE_DMUSIC_PRIVATE_H */