4 * Copyright 1998 Patrik Stridvall
19 /***********************************************************************
20 * acmDriverAddA (MSACM32.2)
22 MMRESULT32 WINAPI
acmDriverAdd32A(
23 PHACMDRIVERID32 phadid
, HINSTANCE32 hinstModule
,
24 LPARAM lParam
, DWORD dwPriority
, DWORD fdwAdd
)
26 PWINE_ACMLOCALDRIVER32 pld
;
28 return MMSYSERR_INVALPARAM
;
30 /* Check if any unknown flags */
32 ~(ACM_DRIVERADDF_FUNCTION
|ACM_DRIVERADDF_NOTIFYHWND
|
33 ACM_DRIVERADDF_GLOBAL
))
34 return MMSYSERR_INVALFLAG
;
36 /* Check if any incompatible flags */
37 if((fdwAdd
& ACM_DRIVERADDF_FUNCTION
) &&
38 (fdwAdd
& ACM_DRIVERADDF_NOTIFYHWND
))
39 return MMSYSERR_INVALFLAG
;
41 pld
= HeapAlloc(MSACM_hHeap32
, 0, sizeof(WINE_ACMLOCALDRIVER32
));
42 pld
->pfnDriverProc
= (DRIVERPROC32
)
43 GetProcAddress32(hinstModule
, "DriverProc");
44 *phadid
= (HACMDRIVERID32
) MSACM_RegisterDriver32(NULL
, NULL
, pld
);
46 /* FIXME: lParam, dwPriority and fdwAdd ignored */
48 return MMSYSERR_NOERROR
;
51 /***********************************************************************
52 * acmDriverAddW (MSACM32.3)
56 MMRESULT32 WINAPI
acmDriverAdd32W(
57 PHACMDRIVERID32 phadid
, HINSTANCE32 hinstModule
,
58 LPARAM lParam
, DWORD dwPriority
, DWORD fdwAdd
)
60 FIXME(msacm
, "(%p, 0x%08x, %ld, %ld, %ld): stub\n",
61 phadid
, hinstModule
, lParam
, dwPriority
, fdwAdd
63 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
64 return MMSYSERR_ERROR
;
67 /***********************************************************************
68 * acmDriverClose (MSACM32.4)
70 MMRESULT32 WINAPI
acmDriverClose32(
71 HACMDRIVER32 had
, DWORD fdwClose
)
76 return MMSYSERR_INVALFLAG
;
78 p
= MSACM_GetDriver32(had
);
80 return MMSYSERR_INVALHANDLE
;
82 p
->obj
.pACMDriverID
->pACMDriver
= NULL
;
84 /* FIXME: CloseDriver32 not implemented */
87 CloseDriver32(p
->hDrvr
, 0, 0);
90 HeapFree(MSACM_hHeap32
, 0, p
);
92 return MMSYSERR_NOERROR
;
95 /***********************************************************************
96 * acmDriverDetailsA (MSACM32.5)
98 MMRESULT32 WINAPI
acmDriverDetails32A(
99 HACMDRIVERID32 hadid
, PACMDRIVERDETAILS32A padd
, DWORD fdwDetails
)
101 PWINE_ACMDRIVERID32 p
;
103 BOOL32 bOpenTemporary
;
105 p
= MSACM_GetDriverID32(hadid
);
107 return MMSYSERR_INVALHANDLE
;
110 return MMSYSERR_INVALFLAG
;
112 bOpenTemporary
= !p
->pACMDriver
;
114 bOpenTemporary
= TRUE
;
115 acmDriverOpen32((PHACMDRIVER32
) &p
->pACMDriver
, hadid
, 0);
119 * How does the driver know if the ANSI or
120 * the UNICODE variant of PACMDRIVERDETAILS is used?
121 * It might check cbStruct or does it only accept ANSI.
123 mmr
= (MMRESULT32
) acmDriverMessage32(
124 (HACMDRIVER32
) p
->pACMDriver
, ACMDM_DRIVER_DETAILS
,
129 acmDriverClose32((HACMDRIVER32
) p
->pACMDriver
, 0);
130 p
->pACMDriver
= NULL
;
136 /***********************************************************************
137 * acmDriverDetailsW (MSACM32.6)
141 MMRESULT32 WINAPI
acmDriverDetails32W(
142 HACMDRIVERID32 hadid
, PACMDRIVERDETAILS32W padd
, DWORD fdwDetails
)
144 FIXME(msacm
, "(0x%08x, %p, %ld): stub\n", hadid
, padd
, fdwDetails
);
145 SetLastError(ERROR_CALL_NOT_IMPLEMENTED
);
146 return MMSYSERR_ERROR
;
149 /***********************************************************************
150 * acmDriverEnum (MSACM32.7)
152 MMRESULT32 WINAPI
acmDriverEnum32(
153 ACMDRIVERENUMCB32 fnCallback
, DWORD dwInstance
, DWORD fdwEnum
)
155 PWINE_ACMDRIVERID32 p
;
159 return MMSYSERR_INVALPARAM
;
162 if(fdwEnum
&& ~(ACM_DRIVERENUMF_NOLOCAL
|ACM_DRIVERENUMF_DISABLED
))
164 return MMSYSERR_INVALFLAG
;
167 p
= MSACM_pFirstACMDriverID32
;
170 (*fnCallback
)((HACMDRIVERID32
) p
, dwInstance
, ACMDRIVERDETAILS_SUPPORTF_CODEC
);
171 p
= p
->pNextACMDriverID
;
174 return MMSYSERR_NOERROR
;
177 /***********************************************************************
178 * acmDriverID (MSACM32.8)
180 MMRESULT32 WINAPI
acmDriverID32(
181 HACMOBJ32 hao
, PHACMDRIVERID32 phadid
, DWORD fdwDriverID
)
185 pao
= MSACM_GetObj32(hao
);
187 return MMSYSERR_INVALHANDLE
;
190 return MMSYSERR_INVALPARAM
;
193 return MMSYSERR_INVALFLAG
;
195 *phadid
= (HACMDRIVERID32
) pao
->pACMDriverID
;
197 return MMSYSERR_NOERROR
;
200 /***********************************************************************
201 * acmDriverMessage (MSACM32.9)
205 LRESULT WINAPI
acmDriverMessage32(
206 HACMDRIVER32 had
, UINT32 uMsg
, LPARAM lParam1
, LPARAM lParam2
)
208 PWINE_ACMDRIVER32 pad
= MSACM_GetDriver32(had
);
210 return MMSYSERR_INVALPARAM
;
212 /* FIXME: Check if uMsg legal */
214 if(!SendDriverMessage32(pad
->hDrvr
, uMsg
, lParam1
, lParam2
))
215 return MMSYSERR_NOTSUPPORTED
;
217 return MMSYSERR_NOERROR
;
221 /***********************************************************************
222 * acmDriverOpen (MSACM32.10)
224 MMRESULT32 WINAPI
acmDriverOpen32(
225 PHACMDRIVER32 phad
, HACMDRIVERID32 hadid
, DWORD fdwOpen
)
227 PWINE_ACMDRIVERID32 padid
;
230 return MMSYSERR_INVALPARAM
;
232 padid
= MSACM_GetDriverID32(hadid
);
234 return MMSYSERR_INVALHANDLE
;
237 return MMSYSERR_INVALFLAG
;
239 if(padid
->pACMDriver
)
241 /* FIXME: Is it allowed? */
242 ERR(msacm
, "Can't open driver twice\n");
243 return MMSYSERR_ERROR
;
246 padid
->pACMDriver
= HeapAlloc(
247 MSACM_hHeap32
, 0, sizeof(WINE_ACMDRIVER32
)
249 padid
->pACMDriver
->obj
.pACMDriverID
= padid
;
251 if(!padid
->pACMLocalDriver
)
252 padid
->pACMDriver
->hDrvr
=
253 OpenDriver32A(padid
->pszDriverAlias
, "drivers32", 0);
256 padid
->pACMDriver
->hDrvr
= MSACM_OpenDriverProc32(
257 padid
->pACMLocalDriver
->pfnDriverProc
261 if(!padid
->pACMDriver
->hDrvr
)
262 return MMSYSERR_ERROR
;
264 /* FIXME: Create a WINE_ACMDRIVER32 */
265 *phad
= (HACMDRIVER32
) NULL
;
267 return MMSYSERR_ERROR
;
270 /***********************************************************************
271 * acmDriverPriority (MSACM32.11)
273 MMRESULT32 WINAPI
acmDriverPriority32(
274 HACMDRIVERID32 hadid
, DWORD dwPriority
, DWORD fdwPriority
)
276 PWINE_ACMDRIVERID32 padid
;
279 LONG lBufferLength
= sizeof(szBuffer
);
282 DWORD dwPriorityCounter
;
284 padid
= MSACM_GetDriverID32(hadid
);
286 return MMSYSERR_INVALHANDLE
;
288 /* Check for unknown flags */
290 ~(ACM_DRIVERPRIORITYF_ENABLE
|ACM_DRIVERPRIORITYF_DISABLE
|
291 ACM_DRIVERPRIORITYF_BEGIN
|ACM_DRIVERPRIORITYF_END
))
292 return MMSYSERR_INVALFLAG
;
294 /* Check for incompatible flags */
295 if((fdwPriority
& ACM_DRIVERPRIORITYF_ENABLE
) &&
296 (fdwPriority
& ACM_DRIVERPRIORITYF_DISABLE
))
297 return MMSYSERR_INVALFLAG
;
299 /* Check for incompatible flags */
300 if((fdwPriority
& ACM_DRIVERPRIORITYF_BEGIN
) &&
301 (fdwPriority
& ACM_DRIVERPRIORITYF_END
))
302 return MMSYSERR_INVALFLAG
;
304 lError
= RegOpenKey32A(HKEY_CURRENT_USER
,
305 "Software\\Microsoft\\Multimedia\\"
306 "Audio Compression Manager\\Priority v4.00",
309 /* FIXME: Create key */
310 if(lError
!= ERROR_SUCCESS
)
311 return MMSYSERR_ERROR
;
313 for(dwPriorityCounter
= 1; ; dwPriorityCounter
++)
315 wsnprintf32A(szSubKey
, 17, "Priorty%ld", dwPriorityCounter
);
316 lError
= RegQueryValue32A(hPriorityKey
, szSubKey
, szBuffer
, &lBufferLength
);
317 if(lError
!= ERROR_SUCCESS
)
320 FIXME(msacm
, "(0x%08x, %ld, %ld): stub (partial)\n",
321 hadid
, dwPriority
, fdwPriority
326 RegCloseKey(hPriorityKey
);
328 return MMSYSERR_ERROR
;
331 /***********************************************************************
332 * acmDriverRemove (MSACM32.12)
334 MMRESULT32 WINAPI
acmDriverRemove32(
335 HACMDRIVERID32 hadid
, DWORD fdwRemove
)
337 PWINE_ACMDRIVERID32 padid
;
339 padid
= MSACM_GetDriverID32(hadid
);
341 return MMSYSERR_INVALHANDLE
;
344 return MMSYSERR_INVALFLAG
;
346 MSACM_UnregisterDriver32(padid
);
348 return MMSYSERR_NOERROR
;