annotate loader/afl.c @ 1346:d6e6132bff35

AUDIO_ENCODING_LINEAR8 format is not available on sunos 5.5. Format is unsupported in mplayer for now, to get the code compiled on that old version of the OS.
author jkeil
date Thu, 19 Jul 2001 20:04:54 +0000
parents d8c1b0b38edc
children ce45cce7f7a5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 /**************************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4 This file will contain an interface to ACM drivers.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 Its content will be based mainly on wine/dlls/msacm32
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6 actually, for audio decompression only the following functions
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 are needed:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 acmStreamOpen ( takes formats of src and dest, returns stream handle )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 acmStreamPrepareHeader ( takes stream handler and info on data )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 acmStreamConvert ( the same as PrepareHeader )
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 acmStreamUnprepareHeader
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 acmStreamClose
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 acmStreamSize
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 maybe acmStreamReset
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 In future I'll also add functions for format enumeration,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 but not right now.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21 ***************************************************************************/
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 #include <config.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 #include <stdio.h>
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 1
diff changeset
25 #include <stdlib.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26 #include <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
27
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 1
diff changeset
28 #include "win32.h"
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 1
diff changeset
29
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30 #include <wine/winbase.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31 #include <wine/windef.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32 #include <wine/winuser.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
33 #include <wine/vfw.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34 #include <wine/winestring.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
35 #include <wine/driver.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36 #include <wine/winerror.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37 #include <wine/msacm.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38 #include <wine/msacmdrv.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
39 #include "wineacm.h"
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 1
diff changeset
40 #include "ext.h"
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 1
diff changeset
41 #include "driver.h"
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 1
diff changeset
42
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 #define OpenDriverA DrvOpen
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 #define CloseDriver DrvClose
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 1
diff changeset
45
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 1
diff changeset
46 #pragma pack(1)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 static PWINE_ACMSTREAM ACM_GetStream(HACMSTREAM has)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
50 return (PWINE_ACMSTREAM)has;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54 * acmDriverAddA (MSACM32.2)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 MMRESULT WINAPI acmDriverAddA(PHACMDRIVERID phadid, HINSTANCE hinstModule,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57 LPARAM lParam, DWORD dwPriority, DWORD fdwAdd)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 if (!phadid)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60 return MMSYSERR_INVALPARAM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 /* Check if any unknown flags */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 if (fdwAdd &
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64 ~(ACM_DRIVERADDF_FUNCTION|ACM_DRIVERADDF_NOTIFYHWND|
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 ACM_DRIVERADDF_GLOBAL))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 return MMSYSERR_INVALFLAG;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 /* Check if any incompatible flags */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 if ((fdwAdd & ACM_DRIVERADDF_FUNCTION) &&
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 (fdwAdd & ACM_DRIVERADDF_NOTIFYHWND))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 return MMSYSERR_INVALFLAG;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 /* FIXME: in fact, should GetModuleFileName(hinstModule) and do a
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74 * LoadDriver on it, to be sure we can call SendDriverMessage on the
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 * hDrvr handle.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 *phadid = (HACMDRIVERID) MSACM_RegisterDriver(NULL, NULL, hinstModule);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79 /* FIXME: lParam, dwPriority and fdwAdd ignored */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
81 return MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 * acmDriverClose (MSACM32.4)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
87 MMRESULT WINAPI acmDriverClose(HACMDRIVER had, DWORD fdwClose)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89 PWINE_ACMDRIVER p;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90 PWINE_ACMDRIVER* tp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
91
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92 if (fdwClose)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
93 return MMSYSERR_INVALFLAG;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 p = MSACM_GetDriver(had);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 if (!p)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97 return MMSYSERR_INVALHANDLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 for (tp = &(p->obj.pACMDriverID->pACMDriverList); *tp; *tp = (*tp)->pNextACMDriver) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 if (*tp == p) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
101 *tp = (*tp)->pNextACMDriver;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106 if (p->hDrvr && !p->obj.pACMDriverID->pACMDriverList)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107 CloseDriver(p->hDrvr);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109 HeapFree(MSACM_hHeap, 0, p);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 return MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
113
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 * acmDriverEnum (MSACM32.7)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 MMRESULT WINAPI acmDriverEnum(ACMDRIVERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
119 PWINE_ACMDRIVERID p;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
120 DWORD fdwSupport;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122 if (!fnCallback) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123 return MMSYSERR_INVALPARAM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126 if (fdwEnum && ~(ACM_DRIVERENUMF_NOLOCAL|ACM_DRIVERENUMF_DISABLED)) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127 return MMSYSERR_INVALFLAG;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
129
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
130 for (p = MSACM_pFirstACMDriverID; p; p = p->pNextACMDriverID) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
131 fdwSupport = ACMDRIVERDETAILS_SUPPORTF_CODEC;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
132 if (!p->bEnabled) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
133 if (fdwEnum & ACM_DRIVERENUMF_DISABLED)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
134 fdwSupport |= ACMDRIVERDETAILS_SUPPORTF_DISABLED;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
135 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
136 continue;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 (*fnCallback)((HACMDRIVERID) p, dwInstance, fdwSupport);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
139 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
140
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 return MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
145 * acmDriverID (MSACM32.8)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
146 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147 MMRESULT WINAPI acmDriverID(HACMOBJ hao, PHACMDRIVERID phadid, DWORD fdwDriverID)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149 PWINE_ACMOBJ pao;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
150
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
151 pao = MSACM_GetObj(hao);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
152 if (!pao)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
153 return MMSYSERR_INVALHANDLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
154
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
155 if (!phadid)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
156 return MMSYSERR_INVALPARAM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
157
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
158 if (fdwDriverID)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
159 return MMSYSERR_INVALFLAG;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
160
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161 *phadid = (HACMDRIVERID) pao->pACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
162
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163 return MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
164 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
165
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167 * acmDriverMessage (MSACM32.9)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
168 * FIXME
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169 * Not implemented
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
170 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
171 LRESULT WINAPI acmDriverMessage(HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
172 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
173 PWINE_ACMDRIVER pad = MSACM_GetDriver(had);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
174 if (!pad)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
175 return MMSYSERR_INVALPARAM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
176
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
177 /* FIXME: Check if uMsg legal */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
178
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
179 if (!SendDriverMessage(pad->hDrvr, uMsg, lParam1, lParam2))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
180 return MMSYSERR_NOTSUPPORTED;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
182 return MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
183 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 * acmDriverOpen (MSACM32.10)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
188 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
189 MMRESULT WINAPI acmDriverOpen(PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
191 PWINE_ACMDRIVERID padid;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 PWINE_ACMDRIVER pad;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193 ICOPEN icopen;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194 HDRVR hdrv;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
196
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
197
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 TRACE("(%p, %x, %08lu)\n", phad, hadid, fdwOpen);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200 if (!phad)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201 return MMSYSERR_INVALPARAM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 padid = MSACM_GetDriverID(hadid);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204 if (!padid)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 return MMSYSERR_INVALHANDLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207 if (fdwOpen)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208 return MMSYSERR_INVALFLAG;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 pad = HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVER));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
211 if (!pad) return MMSYSERR_NOMEM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
212
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
213 pad->obj.pACMDriverID = padid;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
214 icopen.fccType = mmioFOURCC('a', 'u', 'd', 'c');
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
215 icopen.fccHandler = (long)padid->pszFileName;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
216 icopen.dwSize = sizeof(ICOPEN);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
217 icopen.dwFlags = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
218
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
219 if (!padid->hInstModule)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
220 pad->hDrvr = OpenDriverA((long)&icopen);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222 pad->hDrvr = padid->hInstModule;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224 if (!pad->hDrvr) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
225 HeapFree(MSACM_hHeap, 0, pad);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 return MMSYSERR_ERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 pad->pfnDriverProc = GetProcAddress(pad->hDrvr, "DriverProc");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
230
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231 /* insert new pad at beg of list */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 pad->pNextACMDriver = padid->pACMDriverList;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 padid->pACMDriverList = pad;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
235 /* FIXME: Create a WINE_ACMDRIVER32 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
236 *phad = (HACMDRIVER)pad;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
237
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238 return MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 * acmDriverRemove (MSACM32.12)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 MMRESULT WINAPI acmDriverRemove(HACMDRIVERID hadid, DWORD fdwRemove)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
245 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 PWINE_ACMDRIVERID padid;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248 padid = MSACM_GetDriverID(hadid);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249 if (!padid)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250 return MMSYSERR_INVALHANDLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
251
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252 if (fdwRemove)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
253 return MMSYSERR_INVALFLAG;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
254
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
255 MSACM_UnregisterDriver(padid);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
256
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
257 return MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
258 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
259
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
261
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
262 /**********************************************************************/
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
263
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
264 HANDLE MSACM_hHeap = (HANDLE) NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
265 PWINE_ACMDRIVERID MSACM_pFirstACMDriverID = NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266 PWINE_ACMDRIVERID MSACM_pLastACMDriverID = NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
268 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269 * MSACM_RegisterDriver32()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
271 PWINE_ACMDRIVERID MSACM_RegisterDriver(LPSTR pszDriverAlias, LPSTR pszFileName,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
272 HINSTANCE hinstModule)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
273 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274 // File names are stored in driver.c. I reuse this variable to store driver ID
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
275 // in it. If it's <0x10000, it is primary codec for corresponding format.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
276 //
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
277 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
278 PWINE_ACMDRIVERID padid;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
279
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
280 TRACE("('%s', '%x', 0x%08x)\n", pszDriverAlias, pszFileName, hinstModule);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
281
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
282 padid = (PWINE_ACMDRIVERID) HeapAlloc(MSACM_hHeap, 0, sizeof(WINE_ACMDRIVERID));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
283 padid->pszDriverAlias = (char*)malloc(strlen(pszDriverAlias)+1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
284 strcpy(padid->pszDriverAlias, pszDriverAlias);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
285 // 1~strdup(pszDriverAlias);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
286 padid->pszFileName = pszFileName;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
287 padid->hInstModule = hinstModule;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
288 padid->bEnabled = TRUE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
289 padid->pACMDriverList = NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
290 padid->pNextACMDriverID = NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
291 padid->pPrevACMDriverID = MSACM_pLastACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
292 if (MSACM_pLastACMDriverID)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
293 MSACM_pLastACMDriverID->pNextACMDriverID = padid;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
294 MSACM_pLastACMDriverID = padid;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
295 if (!MSACM_pFirstACMDriverID)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
296 MSACM_pFirstACMDriverID = padid;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
297
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
298 return padid;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
299 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
300
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
301 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
302 * MSACM_RegisterAllDrivers32()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
303 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
304 void MSACM_RegisterAllDrivers(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
305 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
306 LPSTR pszBuffer;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
307 DWORD dwBufferLength;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
308
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
309 if (MSACM_pFirstACMDriverID)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
310 return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
311
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
312 MSACM_RegisterDriver("divxa32", (LPSTR)0x161, 0); // DivX/WMA [07]
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
313 MSACM_RegisterDriver("msadp32", (LPSTR)0x2, 0); // MS ADPCM [08]
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
314 MSACM_RegisterDriver("l3codeca", (LPSTR)0x55, 0); // MPEG Layer-3 [12]
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
315 // MSACM_RegisterDriver("imaadp32", (LPSTR)0x11, 0); // IMA ADPCM [13]
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
316 // MSACM_RegisterDriver("msgsm32", (LPSTR)0x32, 0); // MS GSM 6.10 [14]
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
318
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
319 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
320 * MSACM_UnregisterDriver32()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
321 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
322 PWINE_ACMDRIVERID MSACM_UnregisterDriver(PWINE_ACMDRIVERID p)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
323 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
324 PWINE_ACMDRIVERID pNextACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
325
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
326 while (p->pACMDriverList)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
327 acmDriverClose((HACMDRIVER) p->pACMDriverList, 0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
328
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
329 if (p->pszDriverAlias)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
330 HeapFree(MSACM_hHeap, 0, p->pszDriverAlias);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
331 // if (p->pszFileName)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332 // HeapFree(MSACM_hHeap, 0, p->pszFileName);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
333
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
334 if (p == MSACM_pFirstACMDriverID)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
335 MSACM_pFirstACMDriverID = p->pNextACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
336 if (p == MSACM_pLastACMDriverID)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
337 MSACM_pLastACMDriverID = p->pPrevACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
338
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
339 if (p->pPrevACMDriverID)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
340 p->pPrevACMDriverID->pNextACMDriverID = p->pNextACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
341 if (p->pNextACMDriverID)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
342 p->pNextACMDriverID->pPrevACMDriverID = p->pPrevACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
343
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
344 pNextACMDriverID = p->pNextACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
345
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
346 HeapFree(MSACM_hHeap, 0, p);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
347
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
348 return pNextACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
349 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
350
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
351 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
352 * MSACM_UnregisterAllDrivers32()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
353 * FIXME
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
354 * Where should this function be called?
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
355 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
356 void MSACM_UnregisterAllDrivers(void)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
357 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
358 PWINE_ACMDRIVERID p;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
359
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
360 for (p = MSACM_pFirstACMDriverID; p; p = MSACM_UnregisterDriver(p));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
361 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
362
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
363 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364 * MSACM_GetDriverID32()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
365 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
366 PWINE_ACMDRIVERID MSACM_GetDriverID(HACMDRIVERID hDriverID)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
367 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
368 return (PWINE_ACMDRIVERID)hDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
369 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
370
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
371 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
372 * MSACM_GetDriver32()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
373 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
374 PWINE_ACMDRIVER MSACM_GetDriver(HACMDRIVER hDriver)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
375 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
376 return (PWINE_ACMDRIVER)hDriver;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
377 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
378
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
379 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
380 * MSACM_GetObj32()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
381 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
382 PWINE_ACMOBJ MSACM_GetObj(HACMOBJ hObj)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
383 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
384 return (PWINE_ACMOBJ)hObj;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
385 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
386
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
387
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
388
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
389 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
390 * acmStreamOpen (MSACM32.40)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
391 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
392 MMRESULT WINAPI acmStreamOpen(PHACMSTREAM phas, HACMDRIVER had, PWAVEFORMATEX pwfxSrc,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
393 PWAVEFORMATEX pwfxDst, PWAVEFILTER pwfltr, DWORD dwCallback,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
394 DWORD dwInstance, DWORD fdwOpen)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
395 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
396 PWINE_ACMSTREAM was;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
397 PWINE_ACMDRIVER wad;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
398 MMRESULT ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
399 int wfxSrcSize;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
400 int wfxDstSize;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
401
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 1
diff changeset
402 //printf("gcc-3.0 bug, pwfxSrc=%p, pwfxSrc->cbSize=%d\n", pwfxSrc, pwfxSrc->cbSize);
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 1
diff changeset
403
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
404 TRACE("(%p, 0x%08x, %p, %p, %p, %ld, %ld, %ld)\n",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
405 phas, had, pwfxSrc, pwfxDst, pwfltr, dwCallback, dwInstance, fdwOpen);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
406
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
407 TRACE("src [wFormatTag=%u, nChannels=%u, nSamplesPerSec=%lu, nAvgBytesPerSec=%lu, nBlockAlign=%u, wBitsPerSample=%u, cbSize=%u]\n",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
408 pwfxSrc->wFormatTag, pwfxSrc->nChannels, pwfxSrc->nSamplesPerSec, pwfxSrc->nAvgBytesPerSec,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
409 pwfxSrc->nBlockAlign, pwfxSrc->wBitsPerSample, pwfxSrc->cbSize);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
410
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
411 TRACE("dst [wFormatTag=%u, nChannels=%u, nSamplesPerSec=%lu, nAvgBytesPerSec=%lu, nBlockAlign=%u, wBitsPerSample=%u, cbSize=%u]\n",
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
412 pwfxDst->wFormatTag, pwfxDst->nChannels, pwfxDst->nSamplesPerSec, pwfxDst->nAvgBytesPerSec,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
413 pwfxDst->nBlockAlign, pwfxDst->wBitsPerSample, pwfxDst->cbSize);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
414
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
415 #define SIZEOF_WFX(wfx) (sizeof(WAVEFORMATEX) + ((wfx->wFormatTag == WAVE_FORMAT_PCM) ? 0 : wfx->cbSize))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
416 wfxSrcSize = SIZEOF_WFX(pwfxSrc);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
417 wfxDstSize = SIZEOF_WFX(pwfxDst);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
418 #undef SIZEOF_WFX
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
419
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
420 was = HeapAlloc(MSACM_hHeap, 0, sizeof(*was) + wfxSrcSize + wfxDstSize + ((pwfltr) ? sizeof(WAVEFILTER) : 0));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
421 if (was == NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
422 return MMSYSERR_NOMEM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
423
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
424 was->drvInst.cbStruct = sizeof(was->drvInst);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
425 was->drvInst.pwfxSrc = (PWAVEFORMATEX)((LPSTR)was + sizeof(*was));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
426 memcpy(was->drvInst.pwfxSrc, pwfxSrc, wfxSrcSize);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
427 was->drvInst.pwfxDst = (PWAVEFORMATEX)((LPSTR)was + sizeof(*was) + wfxSrcSize);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
428 memcpy(was->drvInst.pwfxDst, pwfxDst, wfxDstSize);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
429 if (pwfltr) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
430 was->drvInst.pwfltr = (PWAVEFILTER)((LPSTR)was + sizeof(*was) + wfxSrcSize + wfxDstSize);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
431 memcpy(was->drvInst.pwfltr, pwfltr, sizeof(WAVEFILTER));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
432 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
433 was->drvInst.pwfltr = NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
434 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
435 was->drvInst.dwCallback = dwCallback;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
436 was->drvInst.dwInstance = dwInstance;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
437 was->drvInst.fdwOpen = fdwOpen;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
438 was->drvInst.fdwDriver = 0L;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
439 was->drvInst.dwDriver = 0L;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
440 was->drvInst.has = (HACMSTREAM)was;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
441
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
442 if (had) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
443 if (!(wad = MSACM_GetDriver(had))) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
444 ret = MMSYSERR_INVALPARAM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
445 goto errCleanUp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
446 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
447
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
448 was->obj.pACMDriverID = wad->obj.pACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
449 was->pDrv = wad;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
450 was->hAcmDriver = 0; /* not to close it in acmStreamClose */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
451
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
452 ret = SendDriverMessage(wad->hDrvr, ACMDM_STREAM_OPEN, (DWORD)&was->drvInst, 0L);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
453 if (ret != MMSYSERR_NOERROR)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
454 goto errCleanUp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
455 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
456 PWINE_ACMDRIVERID wadi;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
457 short drv_tag;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
458 ret = ACMERR_NOTPOSSIBLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
459 /* if(pwfxSrc->wFormatTag==1)//compression
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
460 drv_tag=pwfxDst->wFormatTag;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
461 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
462 if(pwfxDst->wFormatTag==1)//decompression
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
463 drv_tag=pwfxSrc->wFormatTag;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
464 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
465 goto errCleanUp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
466
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
467 ret=acmDriverOpen2(drv_tag);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
468 if (ret == MMSYSERR_NOERROR) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
469 if ((wad = MSACM_GetDriver(had)) != 0) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
470 was->obj.pACMDriverID = wad->obj.pACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
471 was->pDrv = wad;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
472 was->hAcmDriver = had;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
473
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
474 ret = SendDriverMessage(wad->hDrvr, ACMDM_STREAM_OPEN, (DWORD)&was->drvInst, 0L);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
475 if (ret == MMSYSERR_NOERROR) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
476 if (fdwOpen & ACM_STREAMOPENF_QUERY) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
477 acmDriverClose(had, 0L);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
478 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
479 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
480 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
481 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
482 acmDriverClose(had, 0L);*/
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
483 if(MSACM_pFirstACMDriverID==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
484 MSACM_RegisterAllDrivers();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
485
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
486 for (wadi = MSACM_pFirstACMDriverID; wadi; wadi = wadi->pNextACMDriverID) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
487 ret = acmDriverOpen(&had, (HACMDRIVERID)wadi, 0L);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
488 if (ret == MMSYSERR_NOERROR) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
489 if ((wad = MSACM_GetDriver(had)) != 0) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
490 was->obj.pACMDriverID = wad->obj.pACMDriverID;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
491 was->pDrv = wad;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
492 was->hAcmDriver = had;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
493
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
494 ret = SendDriverMessage(wad->hDrvr, ACMDM_STREAM_OPEN, (DWORD)&was->drvInst, 0L);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
495 if (ret == MMSYSERR_NOERROR) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
496 if (fdwOpen & ACM_STREAMOPENF_QUERY) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
497 acmDriverClose(had, 0L);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
498 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
499 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
500 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
501 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
502 // no match, close this acm driver and try next one
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
503 acmDriverClose(had, 0L);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
504 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
505 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
506 if (ret != MMSYSERR_NOERROR) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
507 ret = ACMERR_NOTPOSSIBLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
508 goto errCleanUp;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
509 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
510 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
511 ret = MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
512 if (!(fdwOpen & ACM_STREAMOPENF_QUERY)) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
513 if (phas)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
514 *phas = (HACMSTREAM)was;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
515 TRACE("=> (%d)\n", ret);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
516 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
517 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
518 errCleanUp:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
519 if (phas)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
520 *phas = (HACMSTREAM)0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
521 HeapFree(MSACM_hHeap, 0, was);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
522 TRACE("=> (%d)\n", ret);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
523 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
524 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
525
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
526
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
527 MMRESULT WINAPI acmStreamClose(HACMSTREAM has, DWORD fdwClose)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
528 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
529 PWINE_ACMSTREAM was;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
530 MMRESULT ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
531
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
532 TRACE("(0x%08x, %ld)\n", has, fdwClose);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
533
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
534 if ((was = ACM_GetStream(has)) == NULL) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
535 return MMSYSERR_INVALHANDLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
536 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
537 ret = SendDriverMessage(was->pDrv->hDrvr, ACMDM_STREAM_CLOSE, (DWORD)&was->drvInst, 0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
538 if (ret == MMSYSERR_NOERROR) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
539 if (was->hAcmDriver)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
540 acmDriverClose(was->hAcmDriver, 0L);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
541 HeapFree(MSACM_hHeap, 0, was);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
542 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
543 TRACE("=> (%d)\n", ret);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
544 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
545 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
546
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
547 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
548 * acmStreamConvert (MSACM32.38)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
549 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
550 MMRESULT WINAPI acmStreamConvert(HACMSTREAM has, PACMSTREAMHEADER pash,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
551 DWORD fdwConvert)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
552 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
553 PWINE_ACMSTREAM was;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
554 MMRESULT ret = MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
555 PACMDRVSTREAMHEADER padsh;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
556
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
557 TRACE("(0x%08x, %p, %ld)\n", has, pash, fdwConvert);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
558
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
559 if ((was = ACM_GetStream(has)) == NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
560 return MMSYSERR_INVALHANDLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
561 if (!pash || pash->cbStruct < sizeof(ACMSTREAMHEADER))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
562 return MMSYSERR_INVALPARAM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
563
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
564 if (!(pash->fdwStatus & ACMSTREAMHEADER_STATUSF_PREPARED))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
565 return ACMERR_UNPREPARED;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
566
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
567 /* Note: the ACMSTREAMHEADER and ACMDRVSTREAMHEADER structs are of same
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
568 * size. some fields are private to msacm internals, and are exposed
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
569 * in ACMSTREAMHEADER in the dwReservedDriver array
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
570 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
571 padsh = (PACMDRVSTREAMHEADER)pash;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
572
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
573 /* check that pointers have not been modified */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
574 if (padsh->pbPreparedSrc != padsh->pbSrc ||
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
575 padsh->cbPreparedSrcLength < padsh->cbSrcLength ||
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
576 padsh->pbPreparedDst != padsh->pbDst ||
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
577 padsh->cbPreparedDstLength < padsh->cbDstLength) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
578 return MMSYSERR_INVALPARAM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
579 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
580
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
581 padsh->fdwConvert = fdwConvert;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
582
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
583 ret = SendDriverMessage(was->pDrv->hDrvr, ACMDM_STREAM_CONVERT, (DWORD)&was->drvInst, (DWORD)padsh);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
584 if (ret == MMSYSERR_NOERROR) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
585 padsh->fdwStatus |= ACMSTREAMHEADER_STATUSF_DONE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
586 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
587 TRACE("=> (%d)\n", ret);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
588 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
589 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
590
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
591
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
592 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
593 * acmStreamPrepareHeader (MSACM32.41)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
594 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
595 MMRESULT WINAPI acmStreamPrepareHeader(HACMSTREAM has, PACMSTREAMHEADER pash,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
596 DWORD fdwPrepare)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
597 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
598 PWINE_ACMSTREAM was;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
599 MMRESULT ret = MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
600 PACMDRVSTREAMHEADER padsh;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
601
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
602 TRACE("(0x%08x, %p, %ld)\n", has, pash, fdwPrepare);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
603
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
604 if ((was = ACM_GetStream(has)) == NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
605 return MMSYSERR_INVALHANDLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
606 if (!pash || pash->cbStruct < sizeof(ACMSTREAMHEADER))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
607 return MMSYSERR_INVALPARAM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
608 if (fdwPrepare)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
609 ret = MMSYSERR_INVALFLAG;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
610
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
611 if (pash->fdwStatus & ACMSTREAMHEADER_STATUSF_DONE)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
612 return MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
613
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
614 /* Note: the ACMSTREAMHEADER and ACMDRVSTREAMHEADER structs are of same
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
615 * size. some fields are private to msacm internals, and are exposed
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
616 * in ACMSTREAMHEADER in the dwReservedDriver array
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
617 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
618 padsh = (PACMDRVSTREAMHEADER)pash;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
619
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
620 padsh->fdwConvert = fdwPrepare;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
621 padsh->padshNext = NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
622 padsh->fdwDriver = padsh->dwDriver = 0L;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
623
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
624 padsh->fdwPrepared = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
625 padsh->dwPrepared = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
626 padsh->pbPreparedSrc = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
627 padsh->cbPreparedSrcLength = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
628 padsh->pbPreparedDst = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
629 padsh->cbPreparedDstLength = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
630
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
631 ret = SendDriverMessage(was->pDrv->hDrvr, ACMDM_STREAM_PREPARE, (DWORD)&was->drvInst, (DWORD)padsh);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
632 if (ret == MMSYSERR_NOERROR || ret == MMSYSERR_NOTSUPPORTED) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
633 ret = MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
634 padsh->fdwStatus &= ~(ACMSTREAMHEADER_STATUSF_DONE|ACMSTREAMHEADER_STATUSF_INQUEUE);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
635 padsh->fdwStatus |= ACMSTREAMHEADER_STATUSF_PREPARED;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
636 padsh->fdwPrepared = padsh->fdwStatus;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
637 padsh->dwPrepared = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
638 padsh->pbPreparedSrc = padsh->pbSrc;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
639 padsh->cbPreparedSrcLength = padsh->cbSrcLength;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
640 padsh->pbPreparedDst = padsh->pbDst;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
641 padsh->cbPreparedDstLength = padsh->cbDstLength;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
642 } else {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
643 padsh->fdwPrepared = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
644 padsh->dwPrepared = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
645 padsh->pbPreparedSrc = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
646 padsh->cbPreparedSrcLength = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
647 padsh->pbPreparedDst = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
648 padsh->cbPreparedDstLength = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
649 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
650 TRACE("=> (%d)\n", ret);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
651 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
652 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
653
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
654 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
655 * acmStreamReset (MSACM32.42)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
656 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
657 MMRESULT WINAPI acmStreamReset(HACMSTREAM has, DWORD fdwReset)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
658 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
659 PWINE_ACMSTREAM was;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
660 MMRESULT ret = MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
661
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
662 TRACE("(0x%08x, %ld)\n", has, fdwReset);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
663
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
664 if (fdwReset) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
665 ret = MMSYSERR_INVALFLAG;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
666 } else if ((was = ACM_GetStream(has)) == NULL) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
667 return MMSYSERR_INVALHANDLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
668 } else if (was->drvInst.fdwOpen & ACM_STREAMOPENF_ASYNC) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
669 ret = SendDriverMessage(was->pDrv->hDrvr, ACMDM_STREAM_RESET, (DWORD)&was->drvInst, 0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
670 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
671 TRACE("=> (%d)\n", ret);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
672 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
673 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
674
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
675 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
676 * acmStreamSize (MSACM32.43)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
677 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
678 MMRESULT WINAPI acmStreamSize(HACMSTREAM has, DWORD cbInput,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
679 LPDWORD pdwOutputBytes, DWORD fdwSize)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
680 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
681 PWINE_ACMSTREAM was;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
682 ACMDRVSTREAMSIZE adss;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
683 MMRESULT ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
684
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
685 TRACE("(0x%08x, %ld, %p, %ld)\n", has, cbInput, pdwOutputBytes, fdwSize);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
686
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
687 if ((was = ACM_GetStream(has)) == NULL) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
688 return MMSYSERR_INVALHANDLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
689 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
690 if ((fdwSize & ~ACM_STREAMSIZEF_QUERYMASK) != 0) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
691 return MMSYSERR_INVALFLAG;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
692 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
693
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
694 *pdwOutputBytes = 0L;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
695
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
696 switch (fdwSize & ACM_STREAMSIZEF_QUERYMASK) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
697 case ACM_STREAMSIZEF_DESTINATION:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
698 adss.cbDstLength = cbInput;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
699 adss.cbSrcLength = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
700 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
701 case ACM_STREAMSIZEF_SOURCE:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
702 adss.cbSrcLength = cbInput;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
703 adss.cbDstLength = 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
704 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
705 default:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
706 return MMSYSERR_INVALFLAG;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
707 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
708
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
709 adss.cbStruct = sizeof(adss);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
710 adss.fdwSize = fdwSize;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
711 ret = SendDriverMessage(was->pDrv->hDrvr, ACMDM_STREAM_SIZE,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
712 (DWORD)&was->drvInst, (DWORD)&adss);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
713 if (ret == MMSYSERR_NOERROR) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
714 switch (fdwSize & ACM_STREAMSIZEF_QUERYMASK) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
715 case ACM_STREAMSIZEF_DESTINATION:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
716 *pdwOutputBytes = adss.cbSrcLength;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
717 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
718 case ACM_STREAMSIZEF_SOURCE:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
719 *pdwOutputBytes = adss.cbDstLength;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
720 break;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
721 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
722 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
723 TRACE("=> (%d) [%lu]\n", ret, *pdwOutputBytes);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
724 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
725 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
726
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
727 /***********************************************************************
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
728 * acmStreamUnprepareHeader (MSACM32.44)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
729 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
730 MMRESULT WINAPI acmStreamUnprepareHeader(HACMSTREAM has, PACMSTREAMHEADER pash,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
731 DWORD fdwUnprepare)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
732 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
733 PWINE_ACMSTREAM was;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
734 MMRESULT ret = MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
735 PACMDRVSTREAMHEADER padsh;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
736
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
737 TRACE("(0x%08x, %p, %ld)\n", has, pash, fdwUnprepare);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
738
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
739 if ((was = ACM_GetStream(has)) == NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
740 return MMSYSERR_INVALHANDLE;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
741 if (!pash || pash->cbStruct < sizeof(ACMSTREAMHEADER))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
742 return MMSYSERR_INVALPARAM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
743
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
744 if (!(pash->fdwStatus & ACMSTREAMHEADER_STATUSF_PREPARED))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
745 return ACMERR_UNPREPARED;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
746
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
747 /* Note: the ACMSTREAMHEADER and ACMDRVSTREAMHEADER structs are of same
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
748 * size. some fields are private to msacm internals, and are exposed
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
749 * in ACMSTREAMHEADER in the dwReservedDriver array
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
750 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
751 padsh = (PACMDRVSTREAMHEADER)pash;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
752
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
753 /* check that pointers have not been modified */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
754 if (padsh->pbPreparedSrc != padsh->pbSrc ||
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
755 padsh->cbPreparedSrcLength < padsh->cbSrcLength ||
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
756 padsh->pbPreparedDst != padsh->pbDst ||
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
757 padsh->cbPreparedDstLength < padsh->cbDstLength) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
758 return MMSYSERR_INVALPARAM;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
759 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
760
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
761 padsh->fdwConvert = fdwUnprepare;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
762
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
763 ret = SendDriverMessage(was->pDrv->hDrvr, ACMDM_STREAM_UNPREPARE, (DWORD)&was->drvInst, (DWORD)padsh);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
764 if (ret == MMSYSERR_NOERROR || ret == MMSYSERR_NOTSUPPORTED) {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
765 ret = MMSYSERR_NOERROR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
766 padsh->fdwStatus &= ~(ACMSTREAMHEADER_STATUSF_DONE|ACMSTREAMHEADER_STATUSF_INQUEUE|ACMSTREAMHEADER_STATUSF_PREPARED);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
767 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
768 TRACE("=> (%d)\n", ret);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
769 return ret;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
770 }