4 * Copyright 1998 Patrik Stridvall
18 /***********************************************************************
19 * acmDriverAddA (MSACM32.2)
21 MMRESULT32 WINAPI
acmDriverAdd32A(
22 PHACMDRIVERID32 phadid
, HINSTANCE32 hinstModule
,
23 LPARAM lParam
, DWORD dwPriority
, DWORD fdwAdd
)
25 PWINE_ACMLOCALDRIVER32 pld
;
27 return MMSYSERR_INVALPARAM
;
29 /* Check if any unknown flags */
31 ~(ACM_DRIVERADDF_FUNCTION
|ACM_DRIVERADDF_NOTIFYHWND
|
32 ACM_DRIVERADDF_GLOBAL
))
33 return MMSYSERR_INVALFLAG
;
35 /* Check if any incompatible flags */
36 if((fdwAdd
& ACM_DRIVERADDF_FUNCTION
) &&
37 (fdwAdd
& ACM_DRIVERADDF_NOTIFYHWND
))
38 return MMSYSERR_INVALFLAG
;
40 pld
= HeapAlloc(MSACM_hHeap32
, 0, sizeof(WINE_ACMLOCALDRIVER32
));
41 pld
->pfnDriverProc
= (DRIVERPROC32
)
42 GetProcAddress32(hinstModule
, "DriverProc");
43 *phadid
= (HACMDRIVERID32
) MSACM_RegisterDriver32(NULL
, NULL
, pld
);
45 /* FIXME: lParam, dwPriority and fdwAdd ignored */
47 return MMSYSERR_NOERROR
;
50 /***********************************************************************
51 * acmDriverAddW (MSACM32.3)
55 MMRESULT32 WINAPI
acmDriverAdd32W(
56 PHACMDRIVERID32 phadid
, HINSTANCE32 hinstModule
,
57 LPARAM lParam
, DWORD dwPriority
, DWORD fdwAdd
)
59 FIXME(msacm
, "(%p, 0x%08x, %ld, %ld, %ld): stub\n",
60 phadid
, hinstModule
, lParam
, dwPriority
, fdwAdd
62 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
63 return MMSYSERR_ERROR
;
66 /***********************************************************************
67 * acmDriverClose (MSACM32.4)
69 MMRESULT32 WINAPI
acmDriverClose32(
70 HACMDRIVER32 had
, DWORD fdwClose
)
75 return MMSYSERR_INVALFLAG
;
77 p
= MSACM_GetDriver32(had
);
79 return MMSYSERR_INVALHANDLE
;
81 p
->obj
.pACMDriverID
->pACMDriver
= NULL
;
83 /* FIXME: CloseDriver32 not implemented */
86 CloseDriver32(p
->hDrvr
, 0, 0);
89 HeapFree(MSACM_hHeap32
, 0, p
);
91 return MMSYSERR_NOERROR
;
94 /***********************************************************************
95 * acmDriverDetailsA (MSACM32.5)
97 MMRESULT32 WINAPI
acmDriverDetails32A(
98 HACMDRIVERID32 hadid
, PACMDRIVERDETAILS32A padd
, DWORD fdwDetails
)
100 PWINE_ACMDRIVERID32 p
;
102 BOOL32 bOpenTemporary
;
104 p
= MSACM_GetDriverID32(hadid
);
106 return MMSYSERR_INVALHANDLE
;
109 return MMSYSERR_INVALFLAG
;
111 bOpenTemporary
= !p
->pACMDriver
;
113 bOpenTemporary
= TRUE
;
114 acmDriverOpen32((PHACMDRIVER32
) &p
->pACMDriver
, hadid
, 0);
118 * How does the driver know if the ANSI or
119 * the UNICODE variant of PACMDRIVERDETAILS is used?
120 * It might check cbStruct or does it only accept ANSI.
122 mmr
= (MMRESULT32
) acmDriverMessage32(
123 (HACMDRIVER32
) p
->pACMDriver
, ACMDM_DRIVER_DETAILS
,
128 acmDriverClose32((HACMDRIVER32
) p
->pACMDriver
, 0);
129 p
->pACMDriver
= NULL
;
135 /***********************************************************************
136 * acmDriverDetailsW (MSACM32.6)
140 MMRESULT32 WINAPI
acmDriverDetails32W(
141 HACMDRIVERID32 hadid
, PACMDRIVERDETAILS32W padd
, DWORD fdwDetails
)
143 FIXME(msacm
, "(0x%08x, %p, %ld): stub\n", hadid
, padd
, fdwDetails
);
144 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
145 return MMSYSERR_ERROR
;
148 /***********************************************************************
149 * acmDriverEnum (MSACM32.7)
151 MMRESULT32 WINAPI
acmDriverEnum32(
152 ACMDRIVERENUMCB32 fnCallback
, DWORD dwInstance
, DWORD fdwEnum
)
154 PWINE_ACMDRIVERID32 p
;
158 return MMSYSERR_INVALPARAM
;
161 if(fdwEnum
&& ~(ACM_DRIVERENUMF_NOLOCAL
|ACM_DRIVERENUMF_DISABLED
))
163 return MMSYSERR_INVALFLAG
;
166 p
= MSACM_pFirstACMDriverID32
;
169 (*fnCallback
)((HACMDRIVERID32
) p
, dwInstance
, ACMDRIVERDETAILS_SUPPORTF_CODEC
);
170 p
= p
->pNextACMDriverID
;
173 return MMSYSERR_NOERROR
;
176 /***********************************************************************
177 * acmDriverID (MSACM32.8)
179 MMRESULT32 WINAPI
acmDriverID32(
180 HACMOBJ32 hao
, PHACMDRIVERID32 phadid
, DWORD fdwDriverID
)
184 pao
= MSACM_GetObj32(hao
);
186 return MMSYSERR_INVALHANDLE
;
189 return MMSYSERR_INVALPARAM
;
192 return MMSYSERR_INVALFLAG
;
194 *phadid
= (HACMDRIVERID32
) pao
->pACMDriverID
;
196 return MMSYSERR_NOERROR
;
199 /***********************************************************************
200 * acmDriverMessage (MSACM32.9)
204 LRESULT WINAPI
acmDriverMessage32(
205 HACMDRIVER32 had
, UINT32 uMsg
, LPARAM lParam1
, LPARAM lParam2
)
207 PWINE_ACMDRIVER32 pad
= MSACM_GetDriver32(had
);
209 return MMSYSERR_INVALPARAM
;
211 /* FIXME: Check if uMsg legal */
213 if(!SendDriverMessage32(pad
->hDrvr
, uMsg
, lParam1
, lParam2
))
214 return MMSYSERR_NOTSUPPORTED
;
216 return MMSYSERR_NOERROR
;
220 /***********************************************************************
221 * acmDriverOpen (MSACM32.10)
223 MMRESULT32 WINAPI
acmDriverOpen32(
224 PHACMDRIVER32 phad
, HACMDRIVERID32 hadid
, DWORD fdwOpen
)
226 PWINE_ACMDRIVERID32 padid
;
229 return MMSYSERR_INVALPARAM
;
231 padid
= MSACM_GetDriverID32(hadid
);
233 return MMSYSERR_INVALHANDLE
;
236 return MMSYSERR_INVALFLAG
;
238 if(padid
->pACMDriver
)
240 /* FIXME: Is it allowed? */
241 ERR(msacm
, "Can't open driver twice\n");
242 return MMSYSERR_ERROR
;
245 padid
->pACMDriver
= HeapAlloc(
246 MSACM_hHeap32
, 0, sizeof(WINE_ACMDRIVER32
)
248 padid
->pACMDriver
->obj
.pACMDriverID
= padid
;
250 if(!padid
->pACMLocalDriver
)
251 padid
->pACMDriver
->hDrvr
=
252 OpenDriver32A(padid
->pszDriverAlias
, "drivers32", 0);
255 padid
->pACMDriver
->hDrvr
= MSACM_OpenDriverProc32(
256 padid
->pACMLocalDriver
->pfnDriverProc
260 if(!padid
->pACMDriver
->hDrvr
)
261 return MMSYSERR_ERROR
;
263 /* FIXME: Create a WINE_ACMDRIVER32 */
264 *phad
= (HACMDRIVER32
) NULL
;
266 return MMSYSERR_ERROR
;
269 /***********************************************************************
270 * acmDriverPriority (MSACM32.11)
272 MMRESULT32 WINAPI
acmDriverPriority32(
273 HACMDRIVERID32 hadid
, DWORD dwPriority
, DWORD fdwPriority
)
275 PWINE_ACMDRIVERID32 padid
;
278 LONG lBufferLength
= sizeof(szBuffer
);
281 DWORD dwPriorityCounter
;
283 padid
= MSACM_GetDriverID32(hadid
);
285 return MMSYSERR_INVALHANDLE
;
287 /* Check for unknown flags */
289 ~(ACM_DRIVERPRIORITYF_ENABLE
|ACM_DRIVERPRIORITYF_DISABLE
|
290 ACM_DRIVERPRIORITYF_BEGIN
|ACM_DRIVERPRIORITYF_END
))
291 return MMSYSERR_INVALFLAG
;
293 /* Check for incompatible flags */
294 if((fdwPriority
& ACM_DRIVERPRIORITYF_ENABLE
) &&
295 (fdwPriority
& ACM_DRIVERPRIORITYF_DISABLE
))
296 return MMSYSERR_INVALFLAG
;
298 /* Check for incompatible flags */
299 if((fdwPriority
& ACM_DRIVERPRIORITYF_BEGIN
) &&
300 (fdwPriority
& ACM_DRIVERPRIORITYF_END
))
301 return MMSYSERR_INVALFLAG
;
303 lError
= RegOpenKey32A(HKEY_CURRENT_USER
,
304 "Software\\Microsoft\\Multimedia\\"
305 "Audio Compression Manager\\Priority v4.00",
308 /* FIXME: Create key */
309 if(lError
!= ERROR_SUCCESS
)
310 return MMSYSERR_ERROR
;
312 for(dwPriorityCounter
= 1; ; dwPriorityCounter
++)
314 snprintf(szSubKey
, 17, "Priorty%ld", dwPriorityCounter
);
315 lError
= RegQueryValue32A(hPriorityKey
, szSubKey
, szBuffer
, &lBufferLength
);
316 if(lError
!= ERROR_SUCCESS
)
319 FIXME(msacm
, "(0x%08x, %ld, %ld): stub (partial)\n",
320 hadid
, dwPriority
, fdwPriority
325 RegCloseKey(hPriorityKey
);
327 return MMSYSERR_ERROR
;
330 /***********************************************************************
331 * acmDriverRemove (MSACM32.12)
333 MMRESULT32 WINAPI
acmDriverRemove32(
334 HACMDRIVERID32 hadid
, DWORD fdwRemove
)
336 PWINE_ACMDRIVERID32 padid
;
338 padid
= MSACM_GetDriverID32(hadid
);
340 return MMSYSERR_INVALHANDLE
;
343 return MMSYSERR_INVALFLAG
;
345 MSACM_UnregisterDriver32(padid
);
347 return MMSYSERR_NOERROR
;