1 /* -*- tab-width: 8; c-basic-offset: 4 -*- */
4 * Digital video MCI Wine Driver
6 * Copyright 1999 Eric POUECH
15 #include "debugtools.h"
17 DEFAULT_DEBUG_CHANNEL(mciavi
)
21 int nUseCount
; /* Incremented for each shared open */
22 BOOL16 fShareable
; /* TRUE if first open was shareable */
23 WORD wNotifyDeviceID
; /* MCI device ID with a pending notification */
24 HANDLE16 hCallback
; /* Callback handle for pending notification */
25 HMMIO hFile
; /* mmio file handle open as Element */
26 WORD wStatus
; /* One of MCI_MODE_XXX */
27 MCI_OPEN_PARMSA openParms
;
31 /*======================================================================*
32 * MCI AVI implemantation *
33 *======================================================================*/
35 /**************************************************************************
36 * AVI_drvOpen [internal]
38 static DWORD
AVI_drvOpen(LPSTR str
, LPMCI_OPEN_DRIVER_PARMSA modp
)
40 WINE_MCIAVI
* wma
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(WINE_MCIAVI
));
45 wma
->wDevID
= modp
->wDeviceID
;
46 mciSetDriverData(wma
->wDevID
, (DWORD
)wma
);
47 modp
->wCustomCommandTable
= MCI_NO_COMMAND_TABLE
;
48 modp
->wType
= MCI_DEVTYPE_DIGITAL_VIDEO
;
49 return modp
->wDeviceID
;
52 /**************************************************************************
53 * MCIAVI_drvClose [internal]
55 static DWORD
AVI_drvClose(DWORD dwDevID
)
57 WINE_MCIAVI
* wma
= (WINE_MCIAVI
*)mciGetDriverData(dwDevID
);
60 HeapFree(GetProcessHeap(), 0, wma
);
61 mciSetDriverData(dwDevID
, 0);
67 /**************************************************************************
68 * AVI_mciGetOpenDev [internal]
70 static WINE_MCIAVI
* AVI_mciGetOpenDev(UINT16 wDevID
)
72 WINE_MCIAVI
* wma
= (WINE_MCIAVI
*)mciGetDriverData(wDevID
);
74 if (wma
== NULL
|| wma
->nUseCount
== 0) {
75 WARN("Invalid wDevID=%u\n", wDevID
);
81 static DWORD
AVI_mciStop(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
);
83 /***************************************************************************
84 * AVI_mciOpen [internal]
86 static DWORD
AVI_mciOpen(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_OPEN_PARMSA lpParms
)
88 WINE_MCIAVI
* wma
= (WINE_MCIAVI
*)mciGetDriverData(wDevID
);
90 TRACE("(%04x, %08lX, %p) : semi-stub\n", wDevID
, dwFlags
, lpParms
);
92 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
93 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
95 if (wma
->nUseCount
> 0) {
96 /* The driver is already open on this channel */
97 /* If the driver was opened shareable before and this open specifies */
98 /* shareable then increment the use count */
99 if (wma
->fShareable
&& (dwFlags
& MCI_OPEN_SHAREABLE
))
102 return MCIERR_MUST_USE_SHAREABLE
;
105 wma
->fShareable
= dwFlags
& MCI_OPEN_SHAREABLE
;
107 if (dwFlags
& MCI_OPEN_ELEMENT
) {
108 TRACE("MCI_OPEN_ELEMENT !\n");
109 /* return MCIERR_NO_ELEMENT_ALLOWED; */
112 wma
->openParms
.dwCallback
= lpParms
->dwCallback
;
113 wma
->openParms
.wDeviceID
= (WORD
)lpParms
->wDeviceID
;
114 wma
->openParms
.lpstrDeviceType
= lpParms
->lpstrDeviceType
;
115 wma
->openParms
.lpstrElementName
= lpParms
->lpstrElementName
;
116 wma
->openParms
.lpstrAlias
= lpParms
->lpstrAlias
;
118 wma
->wNotifyDeviceID
= lpParms
->wDeviceID
;
119 /* FIXME: do real open */
120 wma
->wStatus
= MCI_MODE_STOP
;
121 wma
->dwTimeFormat
= MCI_FORMAT_TMSF
;
127 /***************************************************************************
128 * AVI_mciClose [internal]
130 static DWORD
AVI_mciClose(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
132 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
134 TRACE("(%04x, %08lX, %p) : semi-stub\n", wDevID
, dwFlags
, lpParms
);
136 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
138 if (wma
->nUseCount
== 1) {
139 AVI_mciStop(wDevID
, 0, NULL
);
140 /* FIXME: do real closing */
146 /***************************************************************************
147 * AVI_mciPlay [internal]
149 static DWORD
AVI_mciPlay(UINT16 wDevID
, DWORD dwFlags
, LPMCI_PLAY_PARMS lpParms
)
151 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
153 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
155 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
156 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
158 wma
->wStatus
= MCI_MODE_PLAY
;
159 if (lpParms
&& (dwFlags
& MCI_NOTIFY
)) {
160 TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms
->dwCallback
);
161 mciDriverNotify16((HWND16
)LOWORD(lpParms
->dwCallback
),
162 wma
->wNotifyDeviceID
, MCI_NOTIFY_SUCCESSFUL
);
167 /***************************************************************************
168 * AVI_mciRecord [internal]
170 static DWORD
AVI_mciRecord(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RECORD_PARMS lpParms
)
172 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
174 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
176 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
177 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
179 wma
->wStatus
= MCI_MODE_RECORD
;
183 /***************************************************************************
184 * AVI_mciStop [internal]
186 static DWORD
AVI_mciStop(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
188 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
190 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
192 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
193 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
195 wma
->wStatus
= MCI_MODE_STOP
;
199 /***************************************************************************
200 * AVI_mciPause [internal]
202 static DWORD
AVI_mciPause(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
204 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
206 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
208 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
209 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
211 wma
->wStatus
= MCI_MODE_PAUSE
;
215 /***************************************************************************
216 * AVI_mciResume [internal]
218 static DWORD
AVI_mciResume(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
220 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
222 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
224 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
225 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
227 wma
->wStatus
= MCI_MODE_PLAY
;
231 /***************************************************************************
232 * AVI_mciSeek [internal]
234 static DWORD
AVI_mciSeek(UINT16 wDevID
, DWORD dwFlags
, LPMCI_SEEK_PARMS lpParms
)
236 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
238 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
240 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
241 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
246 /***************************************************************************
247 * AVI_mciSet [internal]
249 static DWORD
AVI_mciSet(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_SET_PARMS lpParms
)
251 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
253 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
255 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
256 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
258 if (dwFlags
& MCI_SET_TIME_FORMAT
) {
259 switch (lpParms
->dwTimeFormat
) {
260 case MCI_FORMAT_MILLISECONDS
:
261 TRACE("MCI_FORMAT_MILLISECONDS !\n");
262 wma
->dwTimeFormat
= MCI_FORMAT_MILLISECONDS
;
264 case MCI_FORMAT_FRAMES
:
265 TRACE("MCI_FORMAT_FRAMES !\n");
266 wma
->dwTimeFormat
= MCI_FORMAT_FRAMES
;
269 WARN("Bad time format %lu!\n", lpParms
->dwTimeFormat
);
270 return MCIERR_BAD_TIME_FORMAT
;
274 if (dwFlags
& MCI_SET_DOOR_OPEN
) {
275 TRACE("No support for door open !\n");
276 return MCIERR_UNSUPPORTED_FUNCTION
;
278 if (dwFlags
& MCI_SET_DOOR_CLOSED
) {
279 TRACE("No support for door close !\n");
280 return MCIERR_UNSUPPORTED_FUNCTION
;
282 if (dwFlags
& MCI_SET_ON
) {
285 strcpy(buffer
, "MCI_SET_ON:");
287 if (dwFlags
& MCI_SET_VIDEO
) {
288 strncat(buffer
, " video", sizeof(buffer
));
290 if (dwFlags
& MCI_SET_AUDIO
) {
291 strncat(buffer
, " audio", sizeof(buffer
));
292 if (lpParms
->dwAudio
& MCI_SET_AUDIO_ALL
)
293 strncat(buffer
, " all", sizeof(buffer
));
294 if (lpParms
->dwAudio
& MCI_SET_AUDIO_LEFT
)
295 strncat(buffer
, " left", sizeof(buffer
));
296 if (lpParms
->dwAudio
& MCI_SET_AUDIO_RIGHT
)
297 strncat(buffer
, " right", sizeof(buffer
));
299 if (dwFlags
& MCI_DGV_SET_SEEK_EXACTLY
) {
300 strncat(buffer
, " seek_exactly", sizeof(buffer
));
302 TRACE("%s\n", buffer
);
305 if (dwFlags
& MCI_SET_OFF
) {
308 strcpy(buffer
, "MCI_SET_OFF:");
309 if (dwFlags
& MCI_SET_VIDEO
) {
310 strncat(buffer
, " video", sizeof(buffer
));
312 if (dwFlags
& MCI_SET_AUDIO
) {
313 strncat(buffer
, " audio", sizeof(buffer
));
314 if (lpParms
->dwAudio
& MCI_SET_AUDIO_ALL
)
315 strncat(buffer
, " all", sizeof(buffer
));
316 if (lpParms
->dwAudio
& MCI_SET_AUDIO_LEFT
)
317 strncat(buffer
, " left", sizeof(buffer
));
318 if (lpParms
->dwAudio
& MCI_SET_AUDIO_RIGHT
)
319 strncat(buffer
, " right", sizeof(buffer
));
321 if (dwFlags
& MCI_DGV_SET_SEEK_EXACTLY
) {
322 strncat(buffer
, " seek_exactly", sizeof(buffer
));
324 TRACE("%s\n", buffer
);
326 if (dwFlags
& MCI_DGV_SET_FILEFORMAT
) {
328 if (dwFlags
& MCI_DGV_SET_STILL
)
331 switch (lpParms
->dwFileFormat
) {
332 case MCI_DGV_FF_AVI
: TRACE("Setting file format (%s) to 'AVI'\n", str
); break;
333 case MCI_DGV_FF_AVSS
: TRACE("Setting file format (%s) to 'AVSS'\n", str
); break;
334 case MCI_DGV_FF_DIB
: TRACE("Setting file format (%s) to 'DIB'\n", str
); break;
335 case MCI_DGV_FF_JFIF
: TRACE("Setting file format (%s) to 'JFIF'\n", str
); break;
336 case MCI_DGV_FF_JPEG
: TRACE("Setting file format (%s) to 'JPEG'\n", str
); break;
337 case MCI_DGV_FF_MPEG
: TRACE("Setting file format (%s) to 'MPEG'\n", str
); break;
338 case MCI_DGV_FF_RDIB
: TRACE("Setting file format (%s) to 'RLE DIB'\n", str
); break;
339 case MCI_DGV_FF_RJPEG
: TRACE("Setting file format (%s) to 'RJPEG'\n", str
); break;
340 default: TRACE("Setting unknown file format (%s): %ld\n", str
, lpParms
->dwFileFormat
);
344 if (dwFlags
& MCI_DGV_SET_SPEED
) {
345 TRACE("Setting speed to %ld\n", lpParms
->dwSpeed
);
351 /***************************************************************************
352 * AVI_mciStatus [internal]
354 static DWORD
AVI_mciStatus(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_STATUS_PARMSA lpParms
)
356 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
359 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
361 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
362 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
364 if (dwFlags
& MCI_STATUS_ITEM
) {
365 switch (lpParms
->dwItem
) {
366 case MCI_STATUS_CURRENT_TRACK
:
367 lpParms
->dwReturn
= 1;
368 TRACE("MCI_STATUS_CURRENT_TRACK => %lu\n", lpParms
->dwReturn
);
370 case MCI_STATUS_LENGTH
:
371 if (dwFlags
& MCI_TRACK
) {
372 /* lpParms->dwTrack contains track # */
373 lpParms
->dwReturn
= 0x1234;
375 lpParms
->dwReturn
= 0x4321;
377 TRACE("MCI_STATUS_LENGTH => %lu\n", lpParms
->dwReturn
);
379 case MCI_STATUS_MODE
:
380 lpParms
->dwReturn
= MAKEMCIRESOURCE(wma
->wStatus
, wma
->wStatus
);
381 ret
= MCI_RESOURCE_RETURNED
;
382 TRACE("MCI_STATUS_MODE => %u\n", LOWORD(lpParms
->dwReturn
));
384 case MCI_STATUS_MEDIA_PRESENT
:
385 TRACE("MCI_STATUS_MEDIA_PRESENT => TRUE\n");
386 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
387 ret
= MCI_RESOURCE_RETURNED
;
389 case MCI_STATUS_NUMBER_OF_TRACKS
:
390 lpParms
->dwReturn
= 3;
391 TRACE("MCI_STATUS_NUMBER_OF_TRACKS => %lu\n", lpParms
->dwReturn
);
393 case MCI_STATUS_POSITION
:
394 /* FIXME: do I need to use MCI_TRACK ? */
395 lpParms
->dwReturn
= 0x0123;
396 TRACE("MCI_STATUS_POSITION %s => %lu\n",
397 (dwFlags
& MCI_STATUS_START
) ? "start" : "current", lpParms
->dwReturn
);
399 case MCI_STATUS_READY
:
400 lpParms
->dwReturn
= (wma
->wStatus
== MCI_MODE_NOT_READY
) ?
401 MAKEMCIRESOURCE(FALSE
, MCI_FALSE
) : MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
402 ret
= MCI_RESOURCE_RETURNED
;
403 TRACE("MCI_STATUS_READY = %u\n", LOWORD(lpParms
->dwReturn
));
405 case MCI_STATUS_TIME_FORMAT
:
406 lpParms
->dwReturn
= MAKEMCIRESOURCE(wma
->dwTimeFormat
, wma
->dwTimeFormat
);
407 TRACE("MCI_STATUS_TIME_FORMAT => %u\n", LOWORD(lpParms
->dwReturn
));
408 ret
= MCI_RESOURCE_RETURNED
;
411 FIXME("Unknowm command %08lX !\n", lpParms
->dwItem
);
412 return MCIERR_UNRECOGNIZED_COMMAND
;
415 WARN("No Status-Item!\n");
416 return MCIERR_UNRECOGNIZED_COMMAND
;
418 if (dwFlags
& MCI_NOTIFY
) {
419 TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms
->dwCallback
);
420 mciDriverNotify16((HWND16
)LOWORD(lpParms
->dwCallback
),
421 wma
->wNotifyDeviceID
, MCI_NOTIFY_SUCCESSFUL
);
427 /***************************************************************************
428 * AVI_mciGetDevCaps [internal]
430 static DWORD
AVI_mciGetDevCaps(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GETDEVCAPS_PARMS lpParms
)
432 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
435 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
437 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
438 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
440 if (dwFlags
& MCI_GETDEVCAPS_ITEM
) {
441 switch (lpParms
->dwItem
) {
442 case MCI_GETDEVCAPS_DEVICE_TYPE
:
443 TRACE("MCI_GETDEVCAPS_DEVICE_TYPE !\n");
444 lpParms
->dwReturn
= MAKEMCIRESOURCE(MCI_DEVTYPE_DIGITAL_VIDEO
, MCI_DEVTYPE_DIGITAL_VIDEO
);
445 ret
= MCI_RESOURCE_RETURNED
;
447 case MCI_GETDEVCAPS_HAS_AUDIO
:
448 TRACE("MCI_GETDEVCAPS_HAS_AUDIO !\n");
449 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
450 ret
= MCI_RESOURCE_RETURNED
;
452 case MCI_GETDEVCAPS_HAS_VIDEO
:
453 TRACE("MCI_GETDEVCAPS_HAS_VIDEO !\n");
454 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
455 ret
= MCI_RESOURCE_RETURNED
;
457 case MCI_GETDEVCAPS_USES_FILES
:
458 TRACE("MCI_GETDEVCAPS_USES_FILES !\n");
459 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
460 ret
= MCI_RESOURCE_RETURNED
;
462 case MCI_GETDEVCAPS_COMPOUND_DEVICE
:
463 TRACE("MCI_GETDEVCAPS_COMPOUND_DEVICE !\n");
464 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
465 ret
= MCI_RESOURCE_RETURNED
;
467 case MCI_GETDEVCAPS_CAN_EJECT
:
468 TRACE("MCI_GETDEVCAPS_CAN_EJECT !\n");
469 lpParms
->dwReturn
= MAKEMCIRESOURCE(FALSE
, MCI_FALSE
);
470 ret
= MCI_RESOURCE_RETURNED
;
472 case MCI_GETDEVCAPS_CAN_PLAY
:
473 TRACE("MCI_GETDEVCAPS_CAN_PLAY !\n");
474 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
475 ret
= MCI_RESOURCE_RETURNED
;
477 case MCI_GETDEVCAPS_CAN_RECORD
:
478 TRACE("MCI_GETDEVCAPS_CAN_RECORD !\n");
479 lpParms
->dwReturn
= MAKEMCIRESOURCE(FALSE
, MCI_FALSE
);
480 ret
= MCI_RESOURCE_RETURNED
;
482 case MCI_GETDEVCAPS_CAN_SAVE
:
483 TRACE("MCI_GETDEVCAPS_CAN_SAVE !\n");
484 lpParms
->dwReturn
= MAKEMCIRESOURCE(FALSE
, MCI_FALSE
);
485 ret
= MCI_RESOURCE_RETURNED
;
488 FIXME("Unknown capability (%08lx) !\n", lpParms
->dwItem
);
489 return MCIERR_UNRECOGNIZED_COMMAND
;
492 WARN("No GetDevCaps-Item !\n");
493 return MCIERR_UNRECOGNIZED_COMMAND
;
498 /***************************************************************************
499 * AVI_mciInfo [internal]
501 static DWORD
AVI_mciInfo(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_INFO_PARMSA lpParms
)
504 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
506 TRACE("(%04X, %08lX, %p) : stub;\n", wDevID
, dwFlags
, lpParms
);
508 if (lpParms
== NULL
|| lpParms
->lpstrReturn
== NULL
)
509 return MCIERR_NULL_PARAMETER_BLOCK
;
510 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
512 TRACE("buf=%p, len=%lu\n", lpParms
->lpstrReturn
, lpParms
->dwRetSize
);
515 case MCI_INFO_PRODUCT
:
516 str
= "Wine's AVI player";
522 /* FIXME: the following manifest constants are not defined in <WINE>/include/mmsystem.h */
523 case MCI_INFO_COPYRIGHT
:
529 WARN("Don't know this info command (%lu)\n", dwFlags
);
530 return MCIERR_UNRECOGNIZED_COMMAND
;
532 return MCI_WriteString(lpParms
->lpstrReturn
, lpParms
->dwRetSize
, str
);
535 /***************************************************************************
536 * AVI_mciPut [internal]
538 static DWORD
AVI_mciPut(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_PUT_PARMS lpParms
)
540 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
544 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
546 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
547 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
549 if (dwFlags
& MCI_DGV_RECT
) {
556 if (dwFlags
& MCI_DGV_PUT_CLIENT
) {
557 strncat(buffer
, "PUT_CLIENT", sizeof(buffer
));
559 if (dwFlags
& MCI_DGV_PUT_DESTINATION
) {
560 strncat(buffer
, "PUT_DESTINATION", sizeof(buffer
));
562 if (dwFlags
& MCI_DGV_PUT_FRAME
) {
563 strncat(buffer
, "PUT_FRAME", sizeof(buffer
));
565 if (dwFlags
& MCI_DGV_PUT_SOURCE
) {
566 strncat(buffer
, "PUT_SOURCE", sizeof(buffer
));
568 if (dwFlags
& MCI_DGV_PUT_VIDEO
) {
569 strncat(buffer
, "PUT_VIDEO", sizeof(buffer
));
571 if (dwFlags
& MCI_DGV_PUT_WINDOW
) {
572 strncat(buffer
, "PUT_WINDOW", sizeof(buffer
));
574 TRACE("%s (%d,%d,%d,%d)\n", buffer
, rc
.left
, rc
.top
, rc
.right
, rc
.bottom
);
579 /***************************************************************************
580 * AVI_mciWindow [internal]
582 static DWORD
AVI_mciWindow(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_WINDOW_PARMSA lpParms
)
584 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
586 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
588 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
589 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
591 if (dwFlags
& MCI_DGV_WINDOW_HWND
) {
592 TRACE("Setting hWnd to %08lx\n", (DWORD
)lpParms
->hWnd
);
594 if (dwFlags
& MCI_DGV_WINDOW_STATE
) {
595 TRACE("Setting nCmdShow to %d\n", lpParms
->nCmdShow
);
597 if (dwFlags
& MCI_DGV_WINDOW_TEXT
) {
598 TRACE("Setting caption to '%s'\n", lpParms
->lpstrText
);
604 /*****************************************************************************
605 * AVI_mciLoad [internal]
607 static DWORD
AVI_mciLoad(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_LOAD_PARMSA lpParms
)
609 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
611 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
613 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
614 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
619 /******************************************************************************
620 * AVI_mciSave [internal]
622 static DWORD
AVI_mciSave(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_SAVE_PARMSA lpParms
)
624 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
626 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
628 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
629 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
634 /******************************************************************************
635 * AVI_mciFreeze [internal]
637 static DWORD
AVI_mciFreeze(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RECT_PARMS lpParms
)
639 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
641 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
643 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
644 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
649 /******************************************************************************
650 * AVI_mciRealize [internal]
652 static DWORD
AVI_mciRealize(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
654 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
656 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
658 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
659 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
664 /******************************************************************************
665 * AVI_mciUnFreeze [internal]
667 static DWORD
AVI_mciUnFreeze(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RECT_PARMS lpParms
)
669 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
671 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
673 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
674 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
679 /******************************************************************************
680 * AVI_mciUpdate [internal]
682 static DWORD
AVI_mciUpdate(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_UPDATE_PARMS lpParms
)
684 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
686 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
688 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
689 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
694 /******************************************************************************
695 * AVI_mciWhere [internal]
697 static DWORD
AVI_mciWhere(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RECT_PARMS lpParms
)
699 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
701 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
703 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
704 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
709 /******************************************************************************
710 * AVI_mciStep [internal]
712 static DWORD
AVI_mciStep(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_STEP_PARMS lpParms
)
714 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
716 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
718 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
719 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
724 /******************************************************************************
725 * AVI_mciCopy [internal]
727 static DWORD
AVI_mciCopy(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_COPY_PARMS lpParms
)
729 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
731 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
733 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
734 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
739 /******************************************************************************
740 * AVI_mciCut [internal]
742 static DWORD
AVI_mciCut(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_CUT_PARMS lpParms
)
744 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
746 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
748 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
749 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
754 /******************************************************************************
755 * AVI_mciDelete [internal]
757 static DWORD
AVI_mciDelete(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_DELETE_PARMS lpParms
)
759 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
761 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
763 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
764 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
769 /******************************************************************************
770 * AVI_mciPaste [internal]
772 static DWORD
AVI_mciPaste(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_PASTE_PARMS lpParms
)
774 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
776 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
778 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
779 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
784 /******************************************************************************
785 * AVI_mciCue [internal]
787 static DWORD
AVI_mciCue(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_CUE_PARMS lpParms
)
789 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
791 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
793 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
794 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
799 /******************************************************************************
800 * AVI_mciCapture [internal]
802 static DWORD
AVI_mciCapture(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_CAPTURE_PARMSA lpParms
)
804 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
806 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
808 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
809 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
814 /******************************************************************************
815 * AVI_mciMonitor [internal]
817 static DWORD
AVI_mciMonitor(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_MONITOR_PARMS lpParms
)
819 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
821 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
823 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
824 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
829 /******************************************************************************
830 * AVI_mciReserve [internal]
832 static DWORD
AVI_mciReserve(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RESERVE_PARMSA lpParms
)
834 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
836 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
838 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
839 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
844 /******************************************************************************
845 * AVI_mciSetAudio [internal]
847 static DWORD
AVI_mciSetAudio(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_SETAUDIO_PARMSA lpParms
)
849 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
851 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
853 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
854 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
859 /******************************************************************************
860 * AVI_mciSignal [internal]
862 static DWORD
AVI_mciSignal(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_SIGNAL_PARMS lpParms
)
864 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
866 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
868 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
869 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
874 /******************************************************************************
875 * AVI_mciSetVideo [internal]
877 static DWORD
AVI_mciSetVideo(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_SETVIDEO_PARMSA lpParms
)
879 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
881 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
883 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
884 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
889 /******************************************************************************
890 * AVI_mciQuality [internal]
892 static DWORD
AVI_mciQuality(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_QUALITY_PARMSA lpParms
)
894 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
896 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
898 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
899 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
904 /******************************************************************************
905 * AVI_mciList [internal]
907 static DWORD
AVI_mciList(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_LIST_PARMSA lpParms
)
909 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
911 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
913 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
914 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
919 /******************************************************************************
920 * AVI_mciUndo [internal]
922 static DWORD
AVI_mciUndo(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
924 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
926 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
928 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
929 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
934 /******************************************************************************
935 * AVI_mciConfigure [internal]
937 static DWORD
AVI_mciConfigure(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
939 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
941 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
943 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
944 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
949 /******************************************************************************
950 * AVI_mciRestore [internal]
952 static DWORD
AVI_mciRestore(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RESTORE_PARMSA lpParms
)
954 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
956 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
958 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
959 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
964 /*======================================================================*
965 * MCI AVI entry points *
966 *======================================================================*/
968 /**************************************************************************
969 * MCIAVI_DriverProc [sample driver]
971 LONG CALLBACK
MCIAVI_DriverProc(DWORD dwDevID
, HDRVR hDriv
, DWORD wMsg
,
972 DWORD dwParam1
, DWORD dwParam2
)
975 case DRV_LOAD
: return 1;
976 case DRV_FREE
: return 1;
977 case DRV_OPEN
: return AVI_drvOpen((LPSTR
)dwParam1
, (LPMCI_OPEN_DRIVER_PARMSA
)dwParam2
);
978 case DRV_CLOSE
: return AVI_drvClose(dwDevID
);
979 case DRV_ENABLE
: return 1;
980 case DRV_DISABLE
: return 1;
981 case DRV_QUERYCONFIGURE
: return 1;
982 case DRV_CONFIGURE
: MessageBoxA(0, "Sample AVI Wine Driver !", "MM-Wine Driver", MB_OK
); return 1;
983 case DRV_INSTALL
: return DRVCNF_RESTART
;
984 case DRV_REMOVE
: return DRVCNF_RESTART
;
986 case MCI_OPEN_DRIVER
: return AVI_mciOpen (dwDevID
, dwParam1
, (LPMCI_DGV_OPEN_PARMSA
) dwParam2
);
987 case MCI_CLOSE_DRIVER
: return AVI_mciClose (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
988 case MCI_PLAY
: return AVI_mciPlay (dwDevID
, dwParam1
, (LPMCI_PLAY_PARMS
) dwParam2
);
989 case MCI_RECORD
: return AVI_mciRecord (dwDevID
, dwParam1
, (LPMCI_DGV_RECORD_PARMS
) dwParam2
);
990 case MCI_STOP
: return AVI_mciStop (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
991 case MCI_SET
: return AVI_mciSet (dwDevID
, dwParam1
, (LPMCI_DGV_SET_PARMS
) dwParam2
);
992 case MCI_PAUSE
: return AVI_mciPause (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
993 case MCI_RESUME
: return AVI_mciResume (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
994 case MCI_STATUS
: return AVI_mciStatus (dwDevID
, dwParam1
, (LPMCI_DGV_STATUS_PARMSA
) dwParam2
);
995 case MCI_GETDEVCAPS
: return AVI_mciGetDevCaps(dwDevID
, dwParam1
, (LPMCI_GETDEVCAPS_PARMS
) dwParam2
);
996 case MCI_INFO
: return AVI_mciInfo (dwDevID
, dwParam1
, (LPMCI_DGV_INFO_PARMSA
) dwParam2
);
997 case MCI_SEEK
: return AVI_mciSeek (dwDevID
, dwParam1
, (LPMCI_SEEK_PARMS
) dwParam2
);
998 case MCI_PUT
: return AVI_mciPut (dwDevID
, dwParam1
, (LPMCI_DGV_PUT_PARMS
) dwParam2
);
999 case MCI_WINDOW
: return AVI_mciWindow (dwDevID
, dwParam1
, (LPMCI_DGV_WINDOW_PARMSA
) dwParam2
);
1000 case MCI_LOAD
: return AVI_mciLoad (dwDevID
, dwParam1
, (LPMCI_DGV_LOAD_PARMSA
) dwParam2
);
1001 case MCI_SAVE
: return AVI_mciSave (dwDevID
, dwParam1
, (LPMCI_DGV_SAVE_PARMSA
) dwParam2
);
1002 case MCI_FREEZE
: return AVI_mciFreeze (dwDevID
, dwParam1
, (LPMCI_DGV_RECT_PARMS
) dwParam2
);
1003 case MCI_REALIZE
: return AVI_mciRealize (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
1004 case MCI_UNFREEZE
: return AVI_mciUnFreeze (dwDevID
, dwParam1
, (LPMCI_DGV_RECT_PARMS
) dwParam2
);
1005 case MCI_UPDATE
: return AVI_mciUpdate (dwDevID
, dwParam1
, (LPMCI_DGV_UPDATE_PARMS
) dwParam2
);
1006 case MCI_WHERE
: return AVI_mciWhere (dwDevID
, dwParam1
, (LPMCI_DGV_RECT_PARMS
) dwParam2
);
1007 case MCI_STEP
: return AVI_mciStep (dwDevID
, dwParam1
, (LPMCI_DGV_STEP_PARMS
) dwParam2
);
1008 case MCI_COPY
: return AVI_mciCopy (dwDevID
, dwParam1
, (LPMCI_DGV_COPY_PARMS
) dwParam2
);
1009 case MCI_CUT
: return AVI_mciCut (dwDevID
, dwParam1
, (LPMCI_DGV_CUT_PARMS
) dwParam2
);
1010 case MCI_DELETE
: return AVI_mciDelete (dwDevID
, dwParam1
, (LPMCI_DGV_DELETE_PARMS
) dwParam2
);
1011 case MCI_PASTE
: return AVI_mciPaste (dwDevID
, dwParam1
, (LPMCI_DGV_PASTE_PARMS
) dwParam2
);
1012 case MCI_CUE
: return AVI_mciCue (dwDevID
, dwParam1
, (LPMCI_DGV_CUE_PARMS
) dwParam2
);
1013 /* Digital Video specific */
1014 case MCI_CAPTURE
: return AVI_mciCapture (dwDevID
, dwParam1
, (LPMCI_DGV_CAPTURE_PARMSA
) dwParam2
);
1015 case MCI_MONITOR
: return AVI_mciMonitor (dwDevID
, dwParam1
, (LPMCI_DGV_MONITOR_PARMS
) dwParam2
);
1016 case MCI_RESERVE
: return AVI_mciReserve (dwDevID
, dwParam1
, (LPMCI_DGV_RESERVE_PARMSA
) dwParam2
);
1017 case MCI_SETAUDIO
: return AVI_mciSetAudio (dwDevID
, dwParam1
, (LPMCI_DGV_SETAUDIO_PARMSA
) dwParam2
);
1018 case MCI_SIGNAL
: return AVI_mciSignal (dwDevID
, dwParam1
, (LPMCI_DGV_SIGNAL_PARMS
) dwParam2
);
1019 case MCI_SETVIDEO
: return AVI_mciSetVideo (dwDevID
, dwParam1
, (LPMCI_DGV_SETVIDEO_PARMSA
) dwParam2
);
1020 case MCI_QUALITY
: return AVI_mciQuality (dwDevID
, dwParam1
, (LPMCI_DGV_QUALITY_PARMSA
) dwParam2
);
1021 case MCI_LIST
: return AVI_mciList (dwDevID
, dwParam1
, (LPMCI_DGV_LIST_PARMSA
) dwParam2
);
1022 case MCI_UNDO
: return AVI_mciUndo (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
1023 case MCI_CONFIGURE
: return AVI_mciConfigure (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
1024 case MCI_RESTORE
: return AVI_mciRestore (dwDevID
, dwParam1
, (LPMCI_DGV_RESTORE_PARMSA
) dwParam2
);
1028 WARN("Unsupported command=%s\n", MCI_MessageToString(wMsg
));
1032 FIXME("Shouldn't receive a MCI_OPEN or CLOSE message\n");
1035 TRACE("Sending msg=%s to default driver proc\n", MCI_MessageToString(wMsg
));
1036 return DefDriverProc(dwDevID
, hDriv
, wMsg
, dwParam1
, dwParam2
);
1038 return MCIERR_UNRECOGNIZED_COMMAND
;