annotate loader/afl.c @ 10150:b34ede44dada

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