blob: 6fe3fb55edf2faadab68300f53a6c94010833b6a [file] [log] [blame]
Rok Mandeljc473c5652003-07-21 22:10:14 +00001/* DirectMusicInteractiveEngine Private Include
2 *
Rok Mandeljc0382ea12004-01-20 00:21:40 +00003 * Copyright (C) 2003-2004 Rok Mandeljc
Rok Mandeljc473c5652003-07-21 22:10:14 +00004 *
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
Rok Mandeljcb26d65b2004-02-25 01:30:03 +000023#include <stdio.h>
Alexandre Julliarde37c6e12003-09-05 23:08:26 +000024#include <stdarg.h>
Rok Mandeljcb26d65b2004-02-25 01:30:03 +000025#include <string.h>
Alexandre Julliarde37c6e12003-09-05 23:08:26 +000026
Francois Gougetbf72af32004-08-11 19:43:45 +000027#define COBJMACROS
28
Rok Mandeljc473c5652003-07-21 22:10:14 +000029#include "windef.h"
Rok Mandeljc473c5652003-07-21 22:10:14 +000030#include "winbase.h"
31#include "winnt.h"
Alexandre Julliarde37c6e12003-09-05 23:08:26 +000032#include "wingdi.h"
Rok Mandeljc0382ea12004-01-20 00:21:40 +000033#include "winuser.h"
34
35#include "wine/debug.h"
36#include "wine/list.h"
37#include "wine/unicode.h"
38#include "winreg.h"
Alexandre Julliard25e2a322004-08-22 21:38:46 +000039#include "objbase.h"
Rok Mandeljc0382ea12004-01-20 00:21:40 +000040
Rok Mandeljc473c5652003-07-21 22:10:14 +000041#include "dmusici.h"
Rok Mandeljc473c5652003-07-21 22:10:14 +000042#include "dmusicf.h"
Rok Mandeljc0382ea12004-01-20 00:21:40 +000043#include "dmusics.h"
Rok Mandeljc473c5652003-07-21 22:10:14 +000044
Rok Mandeljc473c5652003-07-21 22:10:14 +000045/*****************************************************************************
46 * Interfaces
47 */
48typedef struct IDirectMusicPerformance8Impl IDirectMusicPerformance8Impl;
49typedef struct IDirectMusicSegment8Impl IDirectMusicSegment8Impl;
50typedef struct IDirectMusicSegmentState8Impl IDirectMusicSegmentState8Impl;
51typedef struct IDirectMusicGraphImpl IDirectMusicGraphImpl;
Rok Mandeljc473c5652003-07-21 22:10:14 +000052typedef struct IDirectMusicAudioPathImpl IDirectMusicAudioPathImpl;
53typedef struct IDirectMusicTool8Impl IDirectMusicTool8Impl;
Rok Mandeljc473c5652003-07-21 22:10:14 +000054typedef struct IDirectMusicPatternTrackImpl IDirectMusicPatternTrackImpl;
55
Rok Mandeljcdf167d12003-08-22 23:53:27 +000056typedef struct IDirectMusicLyricsTrack IDirectMusicLyricsTrack;
Rok Mandeljcdf167d12003-08-22 23:53:27 +000057typedef struct IDirectMusicMarkerTrack IDirectMusicMarkerTrack;
Rok Mandeljcdf167d12003-08-22 23:53:27 +000058typedef struct IDirectMusicParamControlTrack IDirectMusicParamControlTrack;
Rok Mandeljcdf167d12003-08-22 23:53:27 +000059typedef struct IDirectMusicSegTriggerTrack IDirectMusicSegTriggerTrack;
Rok Mandeljcdf167d12003-08-22 23:53:27 +000060typedef struct IDirectMusicSeqTrack IDirectMusicSeqTrack;
Rok Mandeljcdf167d12003-08-22 23:53:27 +000061typedef struct IDirectMusicSysExTrack IDirectMusicSysExTrack;
Rok Mandeljcdf167d12003-08-22 23:53:27 +000062typedef struct IDirectMusicTempoTrack IDirectMusicTempoTrack;
Rok Mandeljcdf167d12003-08-22 23:53:27 +000063typedef struct IDirectMusicTimeSigTrack IDirectMusicTimeSigTrack;
Rok Mandeljcdf167d12003-08-22 23:53:27 +000064typedef struct IDirectMusicWaveTrack IDirectMusicWaveTrack;
Rok Mandeljcdf167d12003-08-22 23:53:27 +000065
Rok Mandeljc473c5652003-07-21 22:10:14 +000066/*****************************************************************************
Rok Mandeljc473c5652003-07-21 22:10:14 +000067 * ClassFactory
68 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +000069extern HRESULT WINAPI DMUSIC_CreateDirectMusicPerformanceImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
70extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
71extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegmentStateImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
72extern HRESULT WINAPI DMUSIC_CreateDirectMusicGraphImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
73extern HRESULT WINAPI DMUSIC_CreateDirectMusicAudioPathImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
74extern HRESULT WINAPI DMUSIC_CreateDirectMusicToolImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
75extern HRESULT WINAPI DMUSIC_CreateDirectMusicPatternTrackImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
Rok Mandeljc473c5652003-07-21 22:10:14 +000076
Rok Mandeljc0382ea12004-01-20 00:21:40 +000077extern HRESULT WINAPI DMUSIC_CreateDirectMusicLyricsTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
78extern HRESULT WINAPI DMUSIC_CreateDirectMusicMarkerTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
79extern HRESULT WINAPI DMUSIC_CreateDirectMusicParamControlTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
80extern HRESULT WINAPI DMUSIC_CreateDirectMusicSegTriggerTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
81extern HRESULT WINAPI DMUSIC_CreateDirectMusicSeqTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
82extern HRESULT WINAPI DMUSIC_CreateDirectMusicSysExTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
83extern HRESULT WINAPI DMUSIC_CreateDirectMusicTempoTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
84extern HRESULT WINAPI DMUSIC_CreateDirectMusicTimeSigTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
85extern HRESULT WINAPI DMUSIC_CreateDirectMusicWaveTrack (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter);
Rok Mandeljcdf167d12003-08-22 23:53:27 +000086
Rok Mandeljcdf167d12003-08-22 23:53:27 +000087
Raphael Junqueira858557f2004-05-14 21:36:15 +000088/*****************************************************************************
89 * Auxiliary definitions
90 */
91typedef 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
Raphael Junqueira8d954392004-05-17 19:48:49 +000097typedef 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
Raphael Junqueiradfbf36d2004-05-19 04:32:43 +0000102typedef 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
Raphael Junqueiraca7ee472004-05-20 01:15:30 +0000109typedef 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
Raphael Junqueiradfbf36d2004-05-19 04:32:43 +0000115typedef struct _DMUS_PRIVATE_TEMPO_PLAY_STATE {
116 DWORD dummy;
117} DMUS_PRIVATE_TEMPO_PLAY_STATE, *LPDMUS_PRIVATE_TEMPO_PLAY_STATE;
Raphael Junqueira8d954392004-05-17 19:48:49 +0000118
Alexandre Julliardcb5c00d2004-01-03 00:58:08 +0000119/* 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 ? */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000123typedef struct DMUSIC_PRIVATE_PCHANNEL_ {
Alexandre Julliardcb5c00d2004-01-03 00:58:08 +0000124 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
Rok Mandeljc473c5652003-07-21 22:10:14 +0000129/*****************************************************************************
130 * IDirectMusicPerformance8Impl implementation structure
131 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000132struct IDirectMusicPerformance8Impl {
Rok Mandeljc473c5652003-07-21 22:10:14 +0000133 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000134 const IDirectMusicPerformance8Vtbl *lpVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000135 LONG ref;
Rok Mandeljc473c5652003-07-21 22:10:14 +0000136
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;
Raphael Junqueira1afbcd72004-05-05 01:32:55 +0000154 HANDLE hNotification;
155 REFERENCE_TIME rtMinimum;
Raphael Junqueira7be996e2004-05-05 18:59:59 +0000156
Raphael Junqueirafaf1b082004-05-06 23:37:54 +0000157 REFERENCE_TIME rtLatencyTime;
158 DWORD dwBumperLength;
159 DWORD dwPrepareTime;
Raphael Junqueira7be996e2004-05-05 18:59:59 +0000160 /** Message Processing */
161 HANDLE procThread;
Raphael Junqueirafaf1b082004-05-06 23:37:54 +0000162 DWORD procThreadId;
Raphael Junqueira7be996e2004-05-05 18:59:59 +0000163 REFERENCE_TIME procThreadStartTime;
164 BOOL procThreadTicStarted;
Raphael Junqueirafaf1b082004-05-06 23:37:54 +0000165 CRITICAL_SECTION safe;
166 struct DMUS_PMSGItem* head;
167 struct DMUS_PMSGItem* imm_head;
Rok Mandeljc473c5652003-07-21 22:10:14 +0000168};
169
Rok Mandeljc473c5652003-07-21 22:10:14 +0000170/*****************************************************************************
171 * IDirectMusicSegment8Impl implementation structure
172 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000173struct IDirectMusicSegment8Impl {
Rok Mandeljc473c5652003-07-21 22:10:14 +0000174 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000175 const IUnknownVtbl *UnknownVtbl;
176 const IDirectMusicSegment8Vtbl *SegmentVtbl;
177 const IDirectMusicObjectVtbl *ObjectVtbl;
178 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000179 LONG ref;
Rok Mandeljc473c5652003-07-21 22:10:14 +0000180
181 /* IDirectMusicSegment8Impl fields */
Raphael Junqueirac77788b2004-05-10 19:56:17 +0000182 LPDMUS_OBJECTDESC pDesc;
183 DMUS_IO_SEGMENT_HEADER header;
Raphael Junqueira858557f2004-05-14 21:36:15 +0000184 IDirectMusicGraph* pGraph;
185 struct list Tracks;
Rok Mandeljc473c5652003-07-21 22:10:14 +0000186};
187
Rok Mandeljc473c5652003-07-21 22:10:14 +0000188/*****************************************************************************
189 * IDirectMusicSegmentState8Impl implementation structure
190 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000191struct IDirectMusicSegmentState8Impl {
Rok Mandeljc473c5652003-07-21 22:10:14 +0000192 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000193 const IDirectMusicSegmentState8Vtbl *lpVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000194 LONG ref;
Rok Mandeljc473c5652003-07-21 22:10:14 +0000195
196 /* IDirectMusicSegmentState8Impl fields */
197};
198
Rok Mandeljc473c5652003-07-21 22:10:14 +0000199/*****************************************************************************
200 * IDirectMusicGraphImpl implementation structure
201 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000202struct IDirectMusicGraphImpl {
Rok Mandeljc473c5652003-07-21 22:10:14 +0000203 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000204 const IUnknownVtbl *UnknownVtbl;
205 const IDirectMusicGraphVtbl *GraphVtbl;
206 const IDirectMusicObjectVtbl *ObjectVtbl;
207 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000208 LONG ref;
Rok Mandeljc473c5652003-07-21 22:10:14 +0000209
210 /* IDirectMusicGraphImpl fields */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000211 LPDMUS_OBJECTDESC pDesc;
Raphael Junqueiraca7ee472004-05-20 01:15:30 +0000212 WORD num_tools;
213 struct list Tools;
Rok Mandeljc473c5652003-07-21 22:10:14 +0000214};
215
Rok Mandeljc473c5652003-07-21 22:10:14 +0000216/*****************************************************************************
217 * IDirectMusicAudioPathImpl implementation structure
218 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000219struct IDirectMusicAudioPathImpl {
Rok Mandeljc473c5652003-07-21 22:10:14 +0000220 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000221 const IUnknownVtbl *UnknownVtbl;
222 const IDirectMusicAudioPathVtbl *AudioPathVtbl;
223 const IDirectMusicObjectVtbl *ObjectVtbl;
224 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000225 LONG ref;
Rok Mandeljc473c5652003-07-21 22:10:14 +0000226
227 /* IDirectMusicAudioPathImpl fields */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000228 LPDMUS_OBJECTDESC pDesc;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000229
Rok Mandeljc473c5652003-07-21 22:10:14 +0000230 IDirectMusicPerformance8* pPerf;
231 IDirectMusicGraph* pToolGraph;
232 IDirectSoundBuffer* pDSBuffer;
233 IDirectSoundBuffer* pPrimary;
Raphael Junqueirac77788b2004-05-10 19:56:17 +0000234
235 BOOL fActive;
Rok Mandeljc473c5652003-07-21 22:10:14 +0000236};
237
Rok Mandeljc473c5652003-07-21 22:10:14 +0000238/*****************************************************************************
239 * IDirectMusicTool8Impl implementation structure
240 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000241struct IDirectMusicTool8Impl {
Rok Mandeljc473c5652003-07-21 22:10:14 +0000242 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000243 const IDirectMusicTool8Vtbl *lpVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000244 LONG ref;
Rok Mandeljc473c5652003-07-21 22:10:14 +0000245
246 /* IDirectMusicTool8Impl fields */
Rok Mandeljc473c5652003-07-21 22:10:14 +0000247};
248
Rok Mandeljc473c5652003-07-21 22:10:14 +0000249/*****************************************************************************
Rok Mandeljc473c5652003-07-21 22:10:14 +0000250 * IDirectMusicPatternTrackImpl implementation structure
251 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000252struct IDirectMusicPatternTrackImpl {
Rok Mandeljc473c5652003-07-21 22:10:14 +0000253 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000254 const IDirectMusicPatternTrackVtbl *lpVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000255 LONG ref;
Rok Mandeljc473c5652003-07-21 22:10:14 +0000256
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000257 /* IDirectMusicPatternTrackImpl fields */
Rok Mandeljc473c5652003-07-21 22:10:14 +0000258};
259
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000260/*****************************************************************************
261 * IDirectMusicLyricsTrack implementation structure
262 */
263struct IDirectMusicLyricsTrack
264{
265 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000266 const IUnknownVtbl *UnknownVtbl;
267 const IDirectMusicTrack8Vtbl *TrackVtbl;
268 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000269 LONG ref;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000270
271 /* IDirectMusicLyricsTrack fields */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000272 LPDMUS_OBJECTDESC pDesc;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000273};
274
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000275/*****************************************************************************
276 * IDirectMusicMarkerTrack implementation structure
277 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000278struct IDirectMusicMarkerTrack {
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000279 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000280 const IUnknownVtbl *UnknownVtbl;
281 const IDirectMusicTrack8Vtbl *TrackVtbl;
282 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000283 LONG ref;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000284
285 /* IDirectMusicMarkerTrack fields */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000286 LPDMUS_OBJECTDESC pDesc;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000287};
288
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000289/*****************************************************************************
290 * IDirectMusicParamControlTrack implementation structure
291 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000292struct IDirectMusicParamControlTrack {
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000293 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000294 const IUnknownVtbl *UnknownVtbl;
295 const IDirectMusicTrack8Vtbl *TrackVtbl;
296 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000297 LONG ref;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000298
299 /* IDirectMusicParamControlTrack fields */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000300 LPDMUS_OBJECTDESC pDesc;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000301};
302
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000303/*****************************************************************************
304 * IDirectMusicSegTriggerTrack implementation structure
305 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000306struct IDirectMusicSegTriggerTrack {
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000307 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000308 const IUnknownVtbl *UnknownVtbl;
309 const IDirectMusicTrack8Vtbl *TrackVtbl;
310 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000311 LONG ref;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000312
313 /* IDirectMusicSegTriggerTrack fields */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000314 LPDMUS_OBJECTDESC pDesc;
Raphael Junqueiradfbf36d2004-05-19 04:32:43 +0000315
316 struct list Items;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000317};
318
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000319/*****************************************************************************
320 * IDirectMusicSeqTrack implementation structure
321 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000322struct IDirectMusicSeqTrack {
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000323 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000324 const IUnknownVtbl *UnknownVtbl;
325 const IDirectMusicTrack8Vtbl *TrackVtbl;
326 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000327 LONG ref;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000328
329 /* IDirectMusicSeqTrack fields */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000330 LPDMUS_OBJECTDESC pDesc;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000331};
332
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000333/*****************************************************************************
334 * IDirectMusicSysExTrack implementation structure
335 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000336struct IDirectMusicSysExTrack {
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000337 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000338 const IUnknownVtbl *UnknownVtbl;
339 const IDirectMusicTrack8Vtbl *TrackVtbl;
340 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000341 LONG ref;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000342
343 /* IDirectMusicSysExTrack fields */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000344 LPDMUS_OBJECTDESC pDesc;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000345};
346
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000347/*****************************************************************************
348 * IDirectMusicTempoTrack implementation structure
349 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000350struct IDirectMusicTempoTrack {
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000351 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000352 const IUnknownVtbl *UnknownVtbl;
353 const IDirectMusicTrack8Vtbl *TrackVtbl;
354 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000355 LONG ref;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000356
357 /* IDirectMusicTempoTrack fields */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000358 LPDMUS_OBJECTDESC pDesc;
Raphael Junqueira8d954392004-05-17 19:48:49 +0000359 BOOL enabled;
360 struct list Items;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000361};
362
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000363/*****************************************************************************
364 * IDirectMusicTimeSigTrack implementation structure
365 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000366struct IDirectMusicTimeSigTrack {
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000367 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000368 const IUnknownVtbl *UnknownVtbl;
369 const IDirectMusicTrack8Vtbl *TrackVtbl;
370 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000371 LONG ref;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000372
373 /* IDirectMusicTimeSigTrack fields */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000374 LPDMUS_OBJECTDESC pDesc;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000375};
376
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000377/*****************************************************************************
378 * IDirectMusicWaveTrack implementation structure
379 */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000380struct IDirectMusicWaveTrack {
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000381 /* IUnknown fields */
Dmitry Timoshkov247246e2005-05-30 10:01:08 +0000382 const IUnknownVtbl *UnknownVtbl;
383 const IDirectMusicTrack8Vtbl *TrackVtbl;
384 const IPersistStreamVtbl *PersistStreamVtbl;
Mike McCormackc4479392005-07-12 17:03:19 +0000385 LONG ref;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000386
387 /* IDirectMusicWaveTrack fields */
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000388 LPDMUS_OBJECTDESC pDesc;
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000389};
390
James Hawkins1727eb42005-02-02 09:31:06 +0000391/**********************************************************************
392 * Dll lifetime tracking declaration for dmime.dll
393 */
394extern LONG DMIME_refCount;
Stefan Huehnerac6f5622005-06-20 14:18:03 +0000395static inline void DMIME_LockModule(void) { InterlockedIncrement( &DMIME_refCount ); }
396static inline void DMIME_UnlockModule(void) { InterlockedDecrement( &DMIME_refCount ); }
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000397
398/*****************************************************************************
Rok Mandeljc0382ea12004-01-20 00:21:40 +0000399 * Misc.
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000400 */
Rok Mandeljcdf167d12003-08-22 23:53:27 +0000401
Raphael Junqueira106e13a2004-05-14 04:57:02 +0000402#include "dmutils.h"
Raphael Junqueiraee51a0c2004-05-11 04:27:23 +0000403
Rok Mandeljc473c5652003-07-21 22:10:14 +0000404#endif /* __WINE_DMIME_PRIVATE_H */