Moved interlocked functions to libwine_port.
[wine] / include / mmreg.h
1 /*
2  * Declarations for MultiMedia-REGistration
3  *
4  * Copyright (C) 1999 Eric Pouech
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #ifndef __WINE_MMREG_H
22 #define __WINE_MMREG_H
23
24 /***********************************************************************
25  * Defines/Enums
26  */
27
28 #ifndef _ACM_WAVEFILTER
29 #define _ACM_WAVEFILTER
30
31 #include "windef.h"
32
33 #define WAVE_FILTER_UNKNOWN     0x0000
34 #define WAVE_FILTER_DEVELOPMENT 0xFFFF
35
36 typedef struct _WAVEFILTER {
37   DWORD   cbStruct;
38   DWORD   dwFilterTag;
39   DWORD   fdwFilter;
40   DWORD   dwReserved[5];
41 } WAVEFILTER, *PWAVEFILTER, *NPWAVEFILTER, *LPWAVEFILTER;
42 #endif /* _ACM_WAVEFILTER */
43
44 #ifndef WAVE_FILTER_VOLUME
45 #define WAVE_FILTER_VOLUME      0x0001
46
47 typedef struct _WAVEFILTER_VOLUME {
48    WAVEFILTER      wfltr;
49    DWORD           dwVolume;
50 } VOLUMEWAVEFILTER, *PVOLUMEWAVEFILTER, *NPVOLUMEWAVEFILTER, *LPVOLUMEWAVEFILTER;
51 #endif  /* WAVE_FILTER_VOLUME */
52
53 #ifndef WAVE_FILTER_ECHO
54 #define WAVE_FILTER_ECHO        0x0002
55
56 typedef struct WAVEFILTER_ECHO {
57    WAVEFILTER      wfltr;
58    DWORD           dwVolume;
59    DWORD           dwDelay;
60 } ECHOWAVEFILTER, *PECHOWAVEFILTER, *NPECHOWAVEFILTER, *LPECHOWAVEFILTER;
61 #endif  /* WAVEFILTER_ECHO */
62
63 #ifndef _WAVEFORMATEX_
64 #define _WAVEFORMATEX_
65 typedef struct _WAVEFORMATEX {
66   WORD   wFormatTag;
67   WORD   nChannels;
68   DWORD  nSamplesPerSec;
69   DWORD  nAvgBytesPerSec;
70   WORD   nBlockAlign;
71   WORD   wBitsPerSample;
72   WORD   cbSize;
73 } WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;
74 #endif /* _WAVEFORMATEX_ */
75
76 /* WAVE form wFormatTag IDs */
77 #define  WAVE_FORMAT_UNKNOWN                    0x0000  /*  Microsoft Corporation  */
78 #define  WAVE_FORMAT_ADPCM                      0x0002  /*  Microsoft Corporation  */
79 #define  WAVE_FORMAT_IBM_CVSD                   0x0005  /*  IBM Corporation  */
80 #define  WAVE_FORMAT_ALAW                       0x0006  /*  Microsoft Corporation  */
81 #define  WAVE_FORMAT_MULAW                      0x0007  /*  Microsoft Corporation  */
82 #define  WAVE_FORMAT_OKI_ADPCM                  0x0010  /*  OKI  */
83 #define  WAVE_FORMAT_DVI_ADPCM                  0x0011  /*  Intel Corporation  */
84 #define  WAVE_FORMAT_IMA_ADPCM                  (WAVE_FORMAT_DVI_ADPCM) /*  Intel Corporation  */
85 #define  WAVE_FORMAT_MEDIASPACE_ADPCM           0x0012  /*  Videologic  */
86 #define  WAVE_FORMAT_SIERRA_ADPCM               0x0013  /*  Sierra Semiconductor Corp  */
87 #define  WAVE_FORMAT_G723_ADPCM                 0x0014  /*  Antex Electronics Corporation  */
88 #define  WAVE_FORMAT_DIGISTD                    0x0015  /*  DSP Solutions, Inc.  */
89 #define  WAVE_FORMAT_DIGIFIX                    0x0016  /*  DSP Solutions, Inc.  */
90 #define  WAVE_FORMAT_DIALOGIC_OKI_ADPCM         0x0017  /*  Dialogic Corporation  */
91 #define  WAVE_FORMAT_YAMAHA_ADPCM               0x0020  /*  Yamaha Corporation of America  */
92 #define  WAVE_FORMAT_SONARC                     0x0021  /*  Speech Compression  */
93 #define  WAVE_FORMAT_DSPGROUP_TRUESPEECH        0x0022  /*  DSP Group, Inc  */
94 #define  WAVE_FORMAT_ECHOSC1                    0x0023  /*  Echo Speech Corporation  */
95 #define  WAVE_FORMAT_AUDIOFILE_AF36             0x0024  /*    */
96 #define  WAVE_FORMAT_APTX                       0x0025  /*  Audio Processing Technology  */
97 #define  WAVE_FORMAT_AUDIOFILE_AF10             0x0026  /*    */
98 #define  WAVE_FORMAT_DOLBY_AC2                  0x0030  /*  Dolby Laboratories  */
99 #define  WAVE_FORMAT_GSM610                     0x0031  /*  Microsoft Corporation  */
100 #define  WAVE_FORMAT_ANTEX_ADPCME               0x0033  /*  Antex Electronics Corporation  */
101 #define  WAVE_FORMAT_CONTROL_RES_VQLPC          0x0034  /*  Control Resources Limited  */
102 #define  WAVE_FORMAT_DIGIREAL                   0x0035  /*  DSP Solutions, Inc.  */
103 #define  WAVE_FORMAT_DIGIADPCM                  0x0036  /*  DSP Solutions, Inc.  */
104 #define  WAVE_FORMAT_CONTROL_RES_CR10           0x0037  /*  Control Resources Limited  */
105 #define  WAVE_FORMAT_NMS_VBXADPCM               0x0038  /*  Natural MicroSystems  */
106 #define  WAVE_FORMAT_G721_ADPCM                 0x0040  /*  Antex Electronics Corporation  */
107 #define  WAVE_FORMAT_MPEG                       0x0050  /*  Microsoft Corporation  */
108 #define  WAVE_FORMAT_MPEGLAYER3                 0x0055
109 #define  WAVE_FORMAT_CREATIVE_ADPCM             0x0200  /*  Creative Labs, Inc  */
110 #define  WAVE_FORMAT_CREATIVE_FASTSPEECH8       0x0202  /*  Creative Labs, Inc  */
111 #define  WAVE_FORMAT_CREATIVE_FASTSPEECH10      0x0203  /*  Creative Labs, Inc  */
112 #define  WAVE_FORMAT_FM_TOWNS_SND               0x0300  /*  Fujitsu Corp.  */
113 #define  WAVE_FORMAT_OLIGSM                     0x1000  /*  Ing C. Olivetti & C., S.p.A.  */
114 #define  WAVE_FORMAT_OLIADPCM                   0x1001  /*  Ing C. Olivetti & C., S.p.A.  */
115 #define  WAVE_FORMAT_OLICELP                    0x1002  /*  Ing C. Olivetti & C., S.p.A.  */
116 #define  WAVE_FORMAT_OLISBC                     0x1003  /*  Ing C. Olivetti & C., S.p.A.  */
117 #define  WAVE_FORMAT_OLIOPR                     0x1004  /*  Ing C. Olivetti & C., S.p.A.  */
118
119 #define WAVE_FORMAT_DEVELOPMENT                 (0xFFFF)
120
121 typedef struct adpcmcoef_tag {
122         short   iCoef1;
123         short   iCoef2;
124 } ADPCMCOEFSET;
125 typedef ADPCMCOEFSET *PADPCMCOEFSET,
126         *NPADPCMCOEFSET, *LPADPCMCOEFSET;
127
128 typedef struct adpcmwaveformat_tag {
129         WAVEFORMATEX    wfx;
130         WORD            wSamplesPerBlock;
131         WORD            wNumCoef;
132         /* FIXME: this should be aCoef[0] */
133         ADPCMCOEFSET    aCoef[1];
134 } ADPCMWAVEFORMAT;
135 typedef ADPCMWAVEFORMAT *PADPCMWAVEFORMAT,
136         *NPADPCMWAVEFORMAT, *LPADPCMWAVEFORMAT;
137
138 typedef struct dvi_adpcmwaveformat_tag {
139         WAVEFORMATEX    wfx;
140         WORD            wSamplesPerBlock;
141 } DVIADPCMWAVEFORMAT;
142 typedef DVIADPCMWAVEFORMAT *PDVIADPCMWAVEFORMAT,
143         *NPDVIADPCMWAVEFORMAT, *LPDVIADPCMWAVEFORMAT;
144
145 typedef struct ima_adpcmwaveformat_tag {
146         WAVEFORMATEX    wfx;
147         WORD            wSamplesPerBlock;
148 } IMAADPCMWAVEFORMAT;
149 typedef IMAADPCMWAVEFORMAT *PIMAADPCMWAVEFORMAT, *NPIMAADPCMWAVEFORMAT,
150         *LPIMAADPCMWAVEFORMAT;
151
152 typedef struct mediaspace_adpcmwaveformat_tag {
153         WAVEFORMATEX    wfx;
154         WORD            wRevision;
155 } MEDIASPACEADPCMWAVEFORMAT;
156 typedef MEDIASPACEADPCMWAVEFORMAT *PMEDIASPACEADPCMWAVEFORMAT,
157         *NPMEDIASPACEADPCMWAVEFORMAT, *LPMEDIASPACEADPCMWAVEFORMAT;
158
159 typedef struct sierra_adpcmwaveformat_tag {
160         WAVEFORMATEX    wfx;
161         WORD            wRevision;
162 } SIERRAADPCMWAVEFORMAT;
163 typedef SIERRAADPCMWAVEFORMAT *PSIERRAADPCMWAVEFORMAT,
164         *NPSIERRAADPCMWAVEFORMAT, *LPSIERRAADPCMWAVEFORMAT;
165
166 typedef struct g723_adpcmwaveformat_tag {
167         WAVEFORMATEX    wfx;
168         WORD            cbExtraSize;
169         WORD            nAuxBlockSize;
170 } G723_ADPCMWAVEFORMAT;
171 typedef G723_ADPCMWAVEFORMAT *PG723_ADPCMWAVEFORMAT,
172         *NPG723_ADPCMWAVEFORMAT, *LPG723_ADPCMWAVEFORMAT;
173
174 typedef struct digistdwaveformat_tag {
175         WAVEFORMATEX    wfx;
176 } DIGISTDWAVEFORMAT;
177 typedef DIGISTDWAVEFORMAT *PDIGISTDWAVEFORMAT,
178         *NPDIGISTDWAVEFORMAT, *LPDIGISTDWAVEFORMAT;
179
180 typedef struct digifixwaveformat_tag {
181         WAVEFORMATEX    wfx;
182 } DIGIFIXWAVEFORMAT;
183 typedef DIGIFIXWAVEFORMAT *PDIGIFIXWAVEFORMAT,
184         *NPDIGIFIXWAVEFORMAT, *LPDIGIFIXWAVEFORMAT;
185
186 typedef struct creative_fastspeechformat_tag {
187         WAVEFORMATEX    ewf;
188 } DIALOGICOKIADPCMWAVEFORMAT;
189 typedef DIALOGICOKIADPCMWAVEFORMAT *PDIALOGICOKIADPCMWAVEFORMAT,
190         *NPDIALOGICOKIADPCMWAVEFORMAT, *LPDIALOGICOKIADPCMWAVEFORMAT;
191
192 typedef struct yamaha_adpmcwaveformat_tag {
193         WAVEFORMATEX    wfx;
194 } YAMAHA_ADPCMWAVEFORMAT;
195 typedef YAMAHA_ADPCMWAVEFORMAT *PYAMAHA_ADPCMWAVEFORMAT,
196         *NPYAMAHA_ADPCMWAVEFORMAT, *LPYAMAHA_ADPCMWAVEFORMAT;
197
198 typedef struct sonarcwaveformat_tag {
199         WAVEFORMATEX    wfx;
200         WORD            wCompType;
201 } SONARCWAVEFORMAT;
202 typedef SONARCWAVEFORMAT *PSONARCWAVEFORMAT,
203         *NPSONARCWAVEFORMAT,*LPSONARCWAVEFORMAT;
204
205 typedef struct truespeechwaveformat_tag {
206         WAVEFORMATEX    wfx;
207         WORD            wRevision;
208         WORD            nSamplesPerBlock;
209         BYTE            abReserved[28];
210 } TRUESPEECHWAVEFORMAT;
211 typedef TRUESPEECHWAVEFORMAT *PTRUESPEECHWAVEFORMAT,
212         *NPTRUESPEECHWAVEFORMAT, *LPTRUESPEECHWAVEFORMAT;
213
214 typedef struct echosc1waveformat_tag {
215         WAVEFORMATEX    wfx;
216 } ECHOSC1WAVEFORMAT;
217 typedef ECHOSC1WAVEFORMAT *PECHOSC1WAVEFORMAT,
218         *NPECHOSC1WAVEFORMAT, *LPECHOSC1WAVEFORMAT;
219
220 typedef struct audiofile_af36waveformat_tag {
221         WAVEFORMATEX    wfx;
222 } AUDIOFILE_AF36WAVEFORMAT;
223 typedef AUDIOFILE_AF36WAVEFORMAT *PAUDIOFILE_AF36WAVEFORMAT,
224         *NPAUDIOFILE_AF36WAVEFORMAT, *LPAUDIOFILE_AF36WAVEFORMAT;
225
226 typedef struct aptxwaveformat_tag {
227         WAVEFORMATEX    wfx;
228 } APTXWAVEFORMAT;
229 typedef APTXWAVEFORMAT *PAPTXWAVEFORMAT,
230         *NPAPTXWAVEFORMAT, *LPAPTXWAVEFORMAT;
231
232 typedef struct audiofile_af10waveformat_tag {
233         WAVEFORMATEX    wfx;
234 } AUDIOFILE_AF10WAVEFORMAT;
235 typedef AUDIOFILE_AF10WAVEFORMAT *PAUDIOFILE_AF10WAVEFORMAT,
236         *NPAUDIOFILE_AF10WAVEFORMAT,  *LPAUDIOFILE_AF10WAVEFORMAT;
237
238 typedef struct dolbyac2waveformat_tag {
239         WAVEFORMATEX    wfx;
240         WORD            nAuxBitsCode;
241 } DOLBYAC2WAVEFORMAT;
242
243 typedef struct gsm610waveformat_tag {
244         WAVEFORMATEX    wfx;
245         WORD            wSamplesPerBlock;
246 } GSM610WAVEFORMAT;
247 typedef GSM610WAVEFORMAT *PGSM610WAVEFORMAT,
248         *NPGSM610WAVEFORMAT, *LPGSM610WAVEFORMAT;
249
250 typedef struct adpcmewaveformat_tag {
251         WAVEFORMATEX    wfx;
252         WORD            wSamplesPerBlock;
253 } ADPCMEWAVEFORMAT;
254 typedef ADPCMEWAVEFORMAT *PADPCMEWAVEFORMAT,
255         *NPADPCMEWAVEFORMAT, *LPADPCMEWAVEFORMAT;
256
257 typedef struct contres_vqlpcwaveformat_tag {
258         WAVEFORMATEX    wfx;
259         WORD            wSamplesPerBlock;
260 } CONTRESVQLPCWAVEFORMAT;
261 typedef CONTRESVQLPCWAVEFORMAT *PCONTRESVQLPCWAVEFORMAT,
262         *NPCONTRESVQLPCWAVEFORMAT, *LPCONTRESVQLPCWAVEFORMAT;
263
264 typedef struct digirealwaveformat_tag {
265         WAVEFORMATEX    wfx;
266         WORD            wSamplesPerBlock;
267 } DIGIREALWAVEFORMAT;
268 typedef DIGIREALWAVEFORMAT *PDIGIREALWAVEFORMAT,
269         *NPDIGIREALWAVEFORMAT, *LPDIGIREALWAVEFORMAT;
270
271 typedef struct digiadpcmmwaveformat_tag {
272         WAVEFORMATEX    wfx;
273         WORD            wSamplesPerBlock;
274 } DIGIADPCMWAVEFORMAT;
275 typedef DIGIADPCMWAVEFORMAT *PDIGIADPCMWAVEFORMAT,
276         *NPDIGIADPCMWAVEFORMAT, *LPDIGIADPCMWAVEFORMAT;
277
278 typedef struct contres_cr10waveformat_tag {
279         WAVEFORMATEX    wfx;
280         WORD            wSamplesPerBlock;
281 } CONTRESCR10WAVEFORMAT;
282 typedef CONTRESCR10WAVEFORMAT *PCONTRESCR10WAVEFORMAT,
283         *NPCONTRESCR10WAVEFORMAT, *LPCONTRESCR10WAVEFORMAT;
284
285 typedef struct nms_vbxadpcmmwaveformat_tag {
286         WAVEFORMATEX    wfx;
287         WORD            wSamplesPerBlock;
288 } NMS_VBXADPCMWAVEFORMAT;
289 typedef NMS_VBXADPCMWAVEFORMAT *PNMS_VBXADPCMWAVEFORMAT,
290         *NPNMS_VBXADPCMWAVEFORMAT, *LPNMS_VBXADPCMWAVEFORMAT;
291
292 typedef struct g721_adpcmwaveformat_tag {
293         WAVEFORMATEX    wfx;
294         WORD            nAuxBlockSize;
295 } G721_ADPCMWAVEFORMAT;
296 typedef G721_ADPCMWAVEFORMAT *PG721_ADPCMWAVEFORMAT,
297         *NG721_ADPCMWAVEFORMAT, *LPG721_ADPCMWAVEFORMAT;
298
299 typedef struct creative_adpcmwaveformat_tag {
300         WAVEFORMATEX    wfx;
301         WORD            wRevision;
302 } CREATIVEADPCMWAVEFORMAT;
303 typedef CREATIVEADPCMWAVEFORMAT *PCREATIVEADPCMWAVEFORMAT,
304         *NPCREATIVEADPCMWAVEFORMAT, *LPCREATIVEADPCMWAVEFORMAT;
305
306 typedef struct creative_fastspeech8format_tag {
307         WAVEFORMATEX    wfx;
308         WORD wRevision;
309 } CREATIVEFASTSPEECH8WAVEFORMAT;
310 typedef CREATIVEFASTSPEECH8WAVEFORMAT *PCREATIVEFASTSPEECH8WAVEFORMAT,
311         *NPCREATIVEFASTSPEECH8WAVEFORMAT, *LPCREATIVEFASTSPEECH8WAVEFORMAT;
312
313 typedef struct creative_fastspeech10format_tag {
314         WAVEFORMATEX    wfx;
315         WORD wRevision;
316 } CREATIVEFASTSPEECH10WAVEFORMAT;
317 typedef CREATIVEFASTSPEECH10WAVEFORMAT *PCREATIVEFASTSPEECH10WAVEFORMAT,
318         *NPCREATIVEFASTSPEECH10WAVEFORMAT, *LPCREATIVEFASTSPEECH10WAVEFORMAT;
319
320 typedef struct fmtowns_snd_waveformat_tag {
321         WAVEFORMATEX    wfx;
322         WORD            wRevision;
323 } FMTOWNS_SND_WAVEFORMAT;
324 typedef FMTOWNS_SND_WAVEFORMAT *PFMTOWNS_SND_WAVEFORMAT,
325         *NPFMTOWNS_SND_WAVEFORMAT, *LPFMTOWNS_SND_WAVEFORMAT;
326
327 typedef struct oligsmwaveformat_tag {
328         WAVEFORMATEX    wfx;
329 } OLIGSMWAVEFORMAT;
330 typedef OLIGSMWAVEFORMAT *POLIGSMWAVEFORMAT,
331         *NPOLIGSMWAVEFORMAT, *LPOLIGSMWAVEFORMAT;
332
333 typedef struct oliadpcmwaveformat_tag {
334         WAVEFORMATEX    wfx;
335 } OLIADPCMWAVEFORMAT;
336 typedef OLIADPCMWAVEFORMAT *POLIADPCMWAVEFORMAT,
337         *NPOLIADPCMWAVEFORMAT, *LPOLIADPCMWAVEFORMAT;
338
339 typedef struct olicelpwaveformat_tag {
340         WAVEFORMATEX    wfx;
341 } OLICELPWAVEFORMAT;
342 typedef OLICELPWAVEFORMAT *POLICELPWAVEFORMAT,
343         *NPOLICELPWAVEFORMAT, *LPOLICELPWAVEFORMAT;
344
345 typedef struct olisbcwaveformat_tag {
346         WAVEFORMATEX    wfx;
347 } OLISBCWAVEFORMAT;
348 typedef OLISBCWAVEFORMAT *POLISBCWAVEFORMAT,
349         *NPOLISBCWAVEFORMAT, *LPOLISBCWAVEFORMAT;
350
351 typedef struct olioprwaveformat_tag {
352         WAVEFORMATEX    wfx;
353 } OLIOPRWAVEFORMAT;
354 typedef OLIOPRWAVEFORMAT *POLIOPRWAVEFORMAT,
355         *NPOLIOPRWAVEFORMAT, *LPOLIOPRWAVEFORMAT;
356
357 typedef struct csimaadpcmwaveformat_tag {
358         WAVEFORMATEX    wfx;
359 } CSIMAADPCMWAVEFORMAT;
360 typedef CSIMAADPCMWAVEFORMAT *PCSIMAADPCMWAVEFORMAT,
361         *NPCSIMAADPCMWAVEFORMAT, *LPCSIMAADPCMWAVEFORMAT;
362
363 typedef struct
364 {
365         WAVEFORMATEX    wfx;
366         WORD            fwHeadLayer;
367         DWORD           dwHeadBitrate;
368         WORD            fwHeadMode;
369         WORD            fwHeadModeExt;
370         WORD            wHeadEmphasis;
371         WORD            fwHeadFlags;
372         DWORD           dwPTSLow;
373         DWORD           dwPTSHigh;
374 } MPEG1WAVEFORMAT,* PMPEG1WAVEFORMAT;
375
376 #define ACM_MPEG_LAYER1         0x0001
377 #define ACM_MPEG_LAYER2         0x0002
378 #define ACM_MPEG_LAYER3         0x0004
379
380 #define ACM_MPEG_STEREO         0x0001
381 #define ACM_MPEG_JOINTSTEREO    0x0002
382 #define ACM_MPEG_DUALCHANNEL    0x0004
383 #define ACM_MPEG_SINGLECHANNEL  0x0008
384 #define ACM_MPEG_PRIVATEBIT     0x0001
385 #define ACM_MPEG_COPYRIGHT      0x0002
386 #define ACM_MPEG_ORIGINALHOME   0x0004
387 #define ACM_MPEG_PROTECTIONBIT  0x0008
388 #define ACM_MPEG_ID_MPEG1       0x0010
389
390 typedef struct
391 {
392         WAVEFORMATEX    wfx;
393         WORD            wID;
394         DWORD           fdwFlags;
395         WORD            nBlockSize;
396         WORD            nFramesPerBlock;
397         WORD            nCodecDelay;
398 } MPEGLAYER3WAVEFORMAT;
399
400 #define MPEGLAYER3_WFX_EXTRA_BYTES   12
401
402 #define MPEGLAYER3_ID_UNKNOWN           0
403 #define MPEGLAYER3_ID_MPEG              1
404 #define MPEGLAYER3_ID_CONSTANTFRAMESIZE 2
405
406 #define MPEGLAYER3_FLAG_PADDING_ISO     0x00000000
407 #define MPEGLAYER3_FLAG_PADDING_ON      0x00000001
408 #define MPEGLAYER3_FLAG_PADDING_OFF     0x00000002
409
410 #endif /* __WINE_MMREG_H */