1 /* -*- tab-width: 8; c-basic-offset: 4 -*- */
4 * Digital video MCI Wine Driver
6 * Copyright 1999 Eric POUECH
16 #include "debugtools.h"
18 DEFAULT_DEBUG_CHANNEL(mciavi
)
22 int nUseCount
; /* Incremented for each shared open */
23 BOOL16 fShareable
; /* TRUE if first open was shareable */
24 WORD wNotifyDeviceID
; /* MCI device ID with a pending notification */
25 HANDLE16 hCallback
; /* Callback handle for pending notification */
26 HMMIO hFile
; /* mmio file handle open as Element */
27 WORD wStatus
; /* One of MCI_MODE_XXX */
28 MCI_OPEN_PARMSA openParms
;
32 /*======================================================================*
33 * MCI AVI implemantation *
34 *======================================================================*/
36 /**************************************************************************
37 * AVI_drvOpen [internal]
39 static DWORD
AVI_drvOpen(LPSTR str
, LPMCI_OPEN_DRIVER_PARMSA modp
)
41 WINE_MCIAVI
* wma
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(WINE_MCIAVI
));
46 wma
->wDevID
= modp
->wDeviceID
;
47 mciSetDriverData(wma
->wDevID
, (DWORD
)wma
);
48 modp
->wCustomCommandTable
= MCI_NO_COMMAND_TABLE
;
49 modp
->wType
= MCI_DEVTYPE_DIGITAL_VIDEO
;
50 return modp
->wDeviceID
;
53 /**************************************************************************
54 * MCIAVI_drvClose [internal]
56 static DWORD
AVI_drvClose(DWORD dwDevID
)
58 WINE_MCIAVI
* wma
= (WINE_MCIAVI
*)mciGetDriverData(dwDevID
);
61 HeapFree(GetProcessHeap(), 0, wma
);
62 mciSetDriverData(dwDevID
, 0);
68 /**************************************************************************
69 * AVI_mciGetOpenDev [internal]
71 static WINE_MCIAVI
* AVI_mciGetOpenDev(UINT16 wDevID
)
73 WINE_MCIAVI
* wma
= (WINE_MCIAVI
*)mciGetDriverData(wDevID
);
75 if (wma
== NULL
|| wma
->nUseCount
== 0) {
76 WARN("Invalid wDevID=%u\n", wDevID
);
82 static DWORD
AVI_mciStop(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
);
84 /***************************************************************************
85 * AVI_mciOpen [internal]
87 static DWORD
AVI_mciOpen(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_OPEN_PARMSA lpParms
)
89 WINE_MCIAVI
* wma
= (WINE_MCIAVI
*)mciGetDriverData(wDevID
);
91 TRACE("(%04x, %08lX, %p) : semi-stub\n", wDevID
, dwFlags
, lpParms
);
93 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
94 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
96 if (wma
->nUseCount
> 0) {
97 /* The driver is already open on this channel */
98 /* If the driver was opened shareable before and this open specifies */
99 /* shareable then increment the use count */
100 if (wma
->fShareable
&& (dwFlags
& MCI_OPEN_SHAREABLE
))
103 return MCIERR_MUST_USE_SHAREABLE
;
106 wma
->fShareable
= dwFlags
& MCI_OPEN_SHAREABLE
;
108 if (dwFlags
& MCI_OPEN_ELEMENT
) {
109 TRACE("MCI_OPEN_ELEMENT !\n");
110 /* return MCIERR_NO_ELEMENT_ALLOWED; */
113 wma
->openParms
.dwCallback
= lpParms
->dwCallback
;
114 wma
->openParms
.wDeviceID
= (WORD
)lpParms
->wDeviceID
;
115 wma
->openParms
.lpstrDeviceType
= lpParms
->lpstrDeviceType
;
116 wma
->openParms
.lpstrElementName
= lpParms
->lpstrElementName
;
117 wma
->openParms
.lpstrAlias
= lpParms
->lpstrAlias
;
119 wma
->wNotifyDeviceID
= lpParms
->wDeviceID
;
120 /* FIXME: do real open */
121 wma
->wStatus
= MCI_MODE_STOP
;
122 wma
->dwTimeFormat
= MCI_FORMAT_TMSF
;
128 /***************************************************************************
129 * AVI_mciClose [internal]
131 static DWORD
AVI_mciClose(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
133 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
135 TRACE("(%04x, %08lX, %p) : semi-stub\n", wDevID
, dwFlags
, lpParms
);
137 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
139 if (wma
->nUseCount
== 1) {
140 AVI_mciStop(wDevID
, 0, NULL
);
141 /* FIXME: do real closing */
147 /***************************************************************************
148 * AVI_mciPlay [internal]
150 static DWORD
AVI_mciPlay(UINT16 wDevID
, DWORD dwFlags
, LPMCI_PLAY_PARMS lpParms
)
152 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
154 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
156 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
157 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
159 wma
->wStatus
= MCI_MODE_PLAY
;
160 if (lpParms
&& (dwFlags
& MCI_NOTIFY
)) {
161 TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms
->dwCallback
);
162 mciDriverNotify16((HWND16
)LOWORD(lpParms
->dwCallback
),
163 wma
->wNotifyDeviceID
, MCI_NOTIFY_SUCCESSFUL
);
168 /***************************************************************************
169 * AVI_mciRecord [internal]
171 static DWORD
AVI_mciRecord(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RECORD_PARMS lpParms
)
173 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
175 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
177 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
178 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
180 wma
->wStatus
= MCI_MODE_RECORD
;
184 /***************************************************************************
185 * AVI_mciStop [internal]
187 static DWORD
AVI_mciStop(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
189 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
191 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
193 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
194 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
196 wma
->wStatus
= MCI_MODE_STOP
;
200 /***************************************************************************
201 * AVI_mciPause [internal]
203 static DWORD
AVI_mciPause(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
205 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
207 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
209 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
210 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
212 wma
->wStatus
= MCI_MODE_PAUSE
;
216 /***************************************************************************
217 * AVI_mciResume [internal]
219 static DWORD
AVI_mciResume(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
221 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
223 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
225 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
226 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
228 wma
->wStatus
= MCI_MODE_PLAY
;
232 /***************************************************************************
233 * AVI_mciSeek [internal]
235 static DWORD
AVI_mciSeek(UINT16 wDevID
, DWORD dwFlags
, LPMCI_SEEK_PARMS lpParms
)
237 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
239 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
241 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
242 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
247 /***************************************************************************
248 * AVI_mciSet [internal]
250 static DWORD
AVI_mciSet(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_SET_PARMS lpParms
)
252 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
254 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
256 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
257 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
259 if (dwFlags
& MCI_SET_TIME_FORMAT
) {
260 switch (lpParms
->dwTimeFormat
) {
261 case MCI_FORMAT_MILLISECONDS
:
262 TRACE("MCI_FORMAT_MILLISECONDS !\n");
263 wma
->dwTimeFormat
= MCI_FORMAT_MILLISECONDS
;
265 case MCI_FORMAT_FRAMES
:
266 TRACE("MCI_FORMAT_FRAMES !\n");
267 wma
->dwTimeFormat
= MCI_FORMAT_FRAMES
;
270 WARN("Bad time format %lu!\n", lpParms
->dwTimeFormat
);
271 return MCIERR_BAD_TIME_FORMAT
;
275 if (dwFlags
& MCI_SET_DOOR_OPEN
) {
276 TRACE("No support for door open !\n");
277 return MCIERR_UNSUPPORTED_FUNCTION
;
279 if (dwFlags
& MCI_SET_DOOR_CLOSED
) {
280 TRACE("No support for door close !\n");
281 return MCIERR_UNSUPPORTED_FUNCTION
;
283 if (dwFlags
& MCI_SET_ON
) {
286 strcpy(buffer
, "MCI_SET_ON:");
288 if (dwFlags
& MCI_SET_VIDEO
) {
289 strncat(buffer
, " video", sizeof(buffer
));
291 if (dwFlags
& MCI_SET_AUDIO
) {
292 strncat(buffer
, " audio", sizeof(buffer
));
293 if (lpParms
->dwAudio
& MCI_SET_AUDIO_ALL
)
294 strncat(buffer
, " all", sizeof(buffer
));
295 if (lpParms
->dwAudio
& MCI_SET_AUDIO_LEFT
)
296 strncat(buffer
, " left", sizeof(buffer
));
297 if (lpParms
->dwAudio
& MCI_SET_AUDIO_RIGHT
)
298 strncat(buffer
, " right", sizeof(buffer
));
300 if (dwFlags
& MCI_DGV_SET_SEEK_EXACTLY
) {
301 strncat(buffer
, " seek_exactly", sizeof(buffer
));
303 TRACE("%s\n", buffer
);
306 if (dwFlags
& MCI_SET_OFF
) {
309 strcpy(buffer
, "MCI_SET_OFF:");
310 if (dwFlags
& MCI_SET_VIDEO
) {
311 strncat(buffer
, " video", sizeof(buffer
));
313 if (dwFlags
& MCI_SET_AUDIO
) {
314 strncat(buffer
, " audio", sizeof(buffer
));
315 if (lpParms
->dwAudio
& MCI_SET_AUDIO_ALL
)
316 strncat(buffer
, " all", sizeof(buffer
));
317 if (lpParms
->dwAudio
& MCI_SET_AUDIO_LEFT
)
318 strncat(buffer
, " left", sizeof(buffer
));
319 if (lpParms
->dwAudio
& MCI_SET_AUDIO_RIGHT
)
320 strncat(buffer
, " right", sizeof(buffer
));
322 if (dwFlags
& MCI_DGV_SET_SEEK_EXACTLY
) {
323 strncat(buffer
, " seek_exactly", sizeof(buffer
));
325 TRACE("%s\n", buffer
);
327 if (dwFlags
& MCI_DGV_SET_FILEFORMAT
) {
329 if (dwFlags
& MCI_DGV_SET_STILL
)
332 switch (lpParms
->dwFileFormat
) {
333 case MCI_DGV_FF_AVI
: TRACE("Setting file format (%s) to 'AVI'\n", str
); break;
334 case MCI_DGV_FF_AVSS
: TRACE("Setting file format (%s) to 'AVSS'\n", str
); break;
335 case MCI_DGV_FF_DIB
: TRACE("Setting file format (%s) to 'DIB'\n", str
); break;
336 case MCI_DGV_FF_JFIF
: TRACE("Setting file format (%s) to 'JFIF'\n", str
); break;
337 case MCI_DGV_FF_JPEG
: TRACE("Setting file format (%s) to 'JPEG'\n", str
); break;
338 case MCI_DGV_FF_MPEG
: TRACE("Setting file format (%s) to 'MPEG'\n", str
); break;
339 case MCI_DGV_FF_RDIB
: TRACE("Setting file format (%s) to 'RLE DIB'\n", str
); break;
340 case MCI_DGV_FF_RJPEG
: TRACE("Setting file format (%s) to 'RJPEG'\n", str
); break;
341 default: TRACE("Setting unknown file format (%s): %ld\n", str
, lpParms
->dwFileFormat
);
345 if (dwFlags
& MCI_DGV_SET_SPEED
) {
346 TRACE("Setting speed to %ld\n", lpParms
->dwSpeed
);
352 /***************************************************************************
353 * AVI_mciStatus [internal]
355 static DWORD
AVI_mciStatus(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_STATUS_PARMSA lpParms
)
357 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
360 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
362 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
363 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
365 if (dwFlags
& MCI_STATUS_ITEM
) {
366 switch (lpParms
->dwItem
) {
367 case MCI_STATUS_CURRENT_TRACK
:
368 lpParms
->dwReturn
= 1;
369 TRACE("MCI_STATUS_CURRENT_TRACK => %lu\n", lpParms
->dwReturn
);
371 case MCI_STATUS_LENGTH
:
372 if (dwFlags
& MCI_TRACK
) {
373 /* lpParms->dwTrack contains track # */
374 lpParms
->dwReturn
= 0x1234;
376 lpParms
->dwReturn
= 0x4321;
378 TRACE("MCI_STATUS_LENGTH => %lu\n", lpParms
->dwReturn
);
380 case MCI_STATUS_MODE
:
381 lpParms
->dwReturn
= MAKEMCIRESOURCE(wma
->wStatus
, wma
->wStatus
);
382 ret
= MCI_RESOURCE_RETURNED
;
383 TRACE("MCI_STATUS_MODE => %u\n", LOWORD(lpParms
->dwReturn
));
385 case MCI_STATUS_MEDIA_PRESENT
:
386 TRACE("MCI_STATUS_MEDIA_PRESENT => TRUE\n");
387 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
388 ret
= MCI_RESOURCE_RETURNED
;
390 case MCI_STATUS_NUMBER_OF_TRACKS
:
391 lpParms
->dwReturn
= 3;
392 TRACE("MCI_STATUS_NUMBER_OF_TRACKS => %lu\n", lpParms
->dwReturn
);
394 case MCI_STATUS_POSITION
:
395 /* FIXME: do I need to use MCI_TRACK ? */
396 lpParms
->dwReturn
= 0x0123;
397 TRACE("MCI_STATUS_POSITION %s => %lu\n",
398 (dwFlags
& MCI_STATUS_START
) ? "start" : "current", lpParms
->dwReturn
);
400 case MCI_STATUS_READY
:
401 lpParms
->dwReturn
= (wma
->wStatus
== MCI_MODE_NOT_READY
) ?
402 MAKEMCIRESOURCE(FALSE
, MCI_FALSE
) : MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
403 ret
= MCI_RESOURCE_RETURNED
;
404 TRACE("MCI_STATUS_READY = %u\n", LOWORD(lpParms
->dwReturn
));
406 case MCI_STATUS_TIME_FORMAT
:
407 lpParms
->dwReturn
= MAKEMCIRESOURCE(wma
->dwTimeFormat
, wma
->dwTimeFormat
);
408 TRACE("MCI_STATUS_TIME_FORMAT => %u\n", LOWORD(lpParms
->dwReturn
));
409 ret
= MCI_RESOURCE_RETURNED
;
412 FIXME("Unknowm command %08lX !\n", lpParms
->dwItem
);
413 return MCIERR_UNRECOGNIZED_COMMAND
;
416 WARN("No Status-Item!\n");
417 return MCIERR_UNRECOGNIZED_COMMAND
;
419 if (dwFlags
& MCI_NOTIFY
) {
420 TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms
->dwCallback
);
421 mciDriverNotify16((HWND16
)LOWORD(lpParms
->dwCallback
),
422 wma
->wNotifyDeviceID
, MCI_NOTIFY_SUCCESSFUL
);
428 /***************************************************************************
429 * AVI_mciGetDevCaps [internal]
431 static DWORD
AVI_mciGetDevCaps(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GETDEVCAPS_PARMS lpParms
)
433 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
436 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
438 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
439 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
441 if (dwFlags
& MCI_GETDEVCAPS_ITEM
) {
442 switch (lpParms
->dwItem
) {
443 case MCI_GETDEVCAPS_DEVICE_TYPE
:
444 TRACE("MCI_GETDEVCAPS_DEVICE_TYPE !\n");
445 lpParms
->dwReturn
= MAKEMCIRESOURCE(MCI_DEVTYPE_DIGITAL_VIDEO
, MCI_DEVTYPE_DIGITAL_VIDEO
);
446 ret
= MCI_RESOURCE_RETURNED
;
448 case MCI_GETDEVCAPS_HAS_AUDIO
:
449 TRACE("MCI_GETDEVCAPS_HAS_AUDIO !\n");
450 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
451 ret
= MCI_RESOURCE_RETURNED
;
453 case MCI_GETDEVCAPS_HAS_VIDEO
:
454 TRACE("MCI_GETDEVCAPS_HAS_VIDEO !\n");
455 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
456 ret
= MCI_RESOURCE_RETURNED
;
458 case MCI_GETDEVCAPS_USES_FILES
:
459 TRACE("MCI_GETDEVCAPS_USES_FILES !\n");
460 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
461 ret
= MCI_RESOURCE_RETURNED
;
463 case MCI_GETDEVCAPS_COMPOUND_DEVICE
:
464 TRACE("MCI_GETDEVCAPS_COMPOUND_DEVICE !\n");
465 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
466 ret
= MCI_RESOURCE_RETURNED
;
468 case MCI_GETDEVCAPS_CAN_EJECT
:
469 TRACE("MCI_GETDEVCAPS_CAN_EJECT !\n");
470 lpParms
->dwReturn
= MAKEMCIRESOURCE(FALSE
, MCI_FALSE
);
471 ret
= MCI_RESOURCE_RETURNED
;
473 case MCI_GETDEVCAPS_CAN_PLAY
:
474 TRACE("MCI_GETDEVCAPS_CAN_PLAY !\n");
475 lpParms
->dwReturn
= MAKEMCIRESOURCE(TRUE
, MCI_TRUE
);
476 ret
= MCI_RESOURCE_RETURNED
;
478 case MCI_GETDEVCAPS_CAN_RECORD
:
479 TRACE("MCI_GETDEVCAPS_CAN_RECORD !\n");
480 lpParms
->dwReturn
= MAKEMCIRESOURCE(FALSE
, MCI_FALSE
);
481 ret
= MCI_RESOURCE_RETURNED
;
483 case MCI_GETDEVCAPS_CAN_SAVE
:
484 TRACE("MCI_GETDEVCAPS_CAN_SAVE !\n");
485 lpParms
->dwReturn
= MAKEMCIRESOURCE(FALSE
, MCI_FALSE
);
486 ret
= MCI_RESOURCE_RETURNED
;
489 FIXME("Unknown capability (%08lx) !\n", lpParms
->dwItem
);
490 return MCIERR_UNRECOGNIZED_COMMAND
;
493 WARN("No GetDevCaps-Item !\n");
494 return MCIERR_UNRECOGNIZED_COMMAND
;
499 /***************************************************************************
500 * AVI_mciInfo [internal]
502 static DWORD
AVI_mciInfo(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_INFO_PARMSA lpParms
)
505 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
508 TRACE("(%04X, %08lX, %p) : stub;\n", wDevID
, dwFlags
, lpParms
);
510 if (lpParms
== NULL
|| lpParms
->lpstrReturn
== NULL
)
511 return MCIERR_NULL_PARAMETER_BLOCK
;
512 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
514 TRACE("buf=%p, len=%lu\n", lpParms
->lpstrReturn
, lpParms
->dwRetSize
);
517 case MCI_INFO_PRODUCT
:
518 str
= "Wine's AVI player";
524 /* FIXME: the following manifest constants are not defined in <WINE>/include/mmsystem.h */
525 case MCI_INFO_COPYRIGHT
:
531 WARN("Don't know this info command (%lu)\n", dwFlags
);
532 return MCIERR_UNRECOGNIZED_COMMAND
;
535 if (lpParms
->dwRetSize
<= strlen(str
)) {
536 lstrcpynA(lpParms
->lpstrReturn
, str
, lpParms
->dwRetSize
- 1);
537 ret
= MCIERR_PARAM_OVERFLOW
;
539 strcpy(lpParms
->lpstrReturn
, str
);
542 *lpParms
->lpstrReturn
= 0;
547 /***************************************************************************
548 * AVI_mciPut [internal]
550 static DWORD
AVI_mciPut(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_PUT_PARMS lpParms
)
552 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
556 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
558 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
559 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
561 if (dwFlags
& MCI_DGV_RECT
) {
568 if (dwFlags
& MCI_DGV_PUT_CLIENT
) {
569 strncat(buffer
, "PUT_CLIENT", sizeof(buffer
));
571 if (dwFlags
& MCI_DGV_PUT_DESTINATION
) {
572 strncat(buffer
, "PUT_DESTINATION", sizeof(buffer
));
574 if (dwFlags
& MCI_DGV_PUT_FRAME
) {
575 strncat(buffer
, "PUT_FRAME", sizeof(buffer
));
577 if (dwFlags
& MCI_DGV_PUT_SOURCE
) {
578 strncat(buffer
, "PUT_SOURCE", sizeof(buffer
));
580 if (dwFlags
& MCI_DGV_PUT_VIDEO
) {
581 strncat(buffer
, "PUT_VIDEO", sizeof(buffer
));
583 if (dwFlags
& MCI_DGV_PUT_WINDOW
) {
584 strncat(buffer
, "PUT_WINDOW", sizeof(buffer
));
586 TRACE("%s (%d,%d,%d,%d)\n", buffer
, rc
.left
, rc
.top
, rc
.right
, rc
.bottom
);
591 /***************************************************************************
592 * AVI_mciWindow [internal]
594 static DWORD
AVI_mciWindow(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_WINDOW_PARMSA lpParms
)
596 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
598 TRACE("(%04x, %08lX, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
600 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
601 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
603 if (dwFlags
& MCI_DGV_WINDOW_HWND
) {
604 TRACE("Setting hWnd to %08lx\n", (DWORD
)lpParms
->hWnd
);
606 if (dwFlags
& MCI_DGV_WINDOW_STATE
) {
607 TRACE("Setting nCmdShow to %d\n", lpParms
->nCmdShow
);
609 if (dwFlags
& MCI_DGV_WINDOW_TEXT
) {
610 TRACE("Setting caption to '%s'\n", lpParms
->lpstrText
);
616 /*****************************************************************************
617 * AVI_mciLoad [internal]
619 static DWORD
AVI_mciLoad(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_LOAD_PARMSA lpParms
)
621 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
623 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
625 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
626 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
631 /******************************************************************************
632 * AVI_mciSave [internal]
634 static DWORD
AVI_mciSave(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_SAVE_PARMSA lpParms
)
636 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
638 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
640 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
641 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
646 /******************************************************************************
647 * AVI_mciFreeze [internal]
649 static DWORD
AVI_mciFreeze(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RECT_PARMS lpParms
)
651 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
653 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
655 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
656 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
661 /******************************************************************************
662 * AVI_mciRealize [internal]
664 static DWORD
AVI_mciRealize(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
666 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
668 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
670 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
671 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
676 /******************************************************************************
677 * AVI_mciUnFreeze [internal]
679 static DWORD
AVI_mciUnFreeze(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RECT_PARMS lpParms
)
681 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
683 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
685 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
686 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
691 /******************************************************************************
692 * AVI_mciUpdate [internal]
694 static DWORD
AVI_mciUpdate(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_UPDATE_PARMS lpParms
)
696 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
698 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
700 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
701 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
706 /******************************************************************************
707 * AVI_mciWhere [internal]
709 static DWORD
AVI_mciWhere(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RECT_PARMS lpParms
)
711 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
713 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
715 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
716 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
721 /******************************************************************************
722 * AVI_mciStep [internal]
724 static DWORD
AVI_mciStep(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_STEP_PARMS lpParms
)
726 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
728 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
730 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
731 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
736 /******************************************************************************
737 * AVI_mciCopy [internal]
739 static DWORD
AVI_mciCopy(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_COPY_PARMS lpParms
)
741 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
743 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
745 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
746 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
751 /******************************************************************************
752 * AVI_mciCut [internal]
754 static DWORD
AVI_mciCut(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_CUT_PARMS lpParms
)
756 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
758 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
760 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
761 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
766 /******************************************************************************
767 * AVI_mciDelete [internal]
769 static DWORD
AVI_mciDelete(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_DELETE_PARMS lpParms
)
771 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
773 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
775 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
776 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
781 /******************************************************************************
782 * AVI_mciPaste [internal]
784 static DWORD
AVI_mciPaste(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_PASTE_PARMS lpParms
)
786 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
788 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
790 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
791 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
796 /******************************************************************************
797 * AVI_mciCue [internal]
799 static DWORD
AVI_mciCue(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_CUE_PARMS lpParms
)
801 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
803 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
805 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
806 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
811 /******************************************************************************
812 * AVI_mciCapture [internal]
814 static DWORD
AVI_mciCapture(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_CAPTURE_PARMSA lpParms
)
816 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
818 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
820 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
821 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
826 /******************************************************************************
827 * AVI_mciMonitor [internal]
829 static DWORD
AVI_mciMonitor(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_MONITOR_PARMS lpParms
)
831 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
833 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
835 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
836 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
841 /******************************************************************************
842 * AVI_mciReserve [internal]
844 static DWORD
AVI_mciReserve(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RESERVE_PARMSA lpParms
)
846 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
848 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
850 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
851 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
856 /******************************************************************************
857 * AVI_mciSetAudio [internal]
859 static DWORD
AVI_mciSetAudio(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_SETAUDIO_PARMSA lpParms
)
861 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
863 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
865 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
866 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
871 /******************************************************************************
872 * AVI_mciSignal [internal]
874 static DWORD
AVI_mciSignal(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_SIGNAL_PARMS lpParms
)
876 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
878 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
880 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
881 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
886 /******************************************************************************
887 * AVI_mciSetVideo [internal]
889 static DWORD
AVI_mciSetVideo(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_SETVIDEO_PARMSA lpParms
)
891 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
893 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
895 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
896 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
901 /******************************************************************************
902 * AVI_mciQuality [internal]
904 static DWORD
AVI_mciQuality(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_QUALITY_PARMSA lpParms
)
906 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
908 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
910 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
911 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
916 /******************************************************************************
917 * AVI_mciList [internal]
919 static DWORD
AVI_mciList(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_LIST_PARMSA lpParms
)
921 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
923 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
925 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
926 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
931 /******************************************************************************
932 * AVI_mciUndo [internal]
934 static DWORD
AVI_mciUndo(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
936 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
938 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
940 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
941 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
946 /******************************************************************************
947 * AVI_mciConfigure [internal]
949 static DWORD
AVI_mciConfigure(UINT16 wDevID
, DWORD dwFlags
, LPMCI_GENERIC_PARMS lpParms
)
951 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
953 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
955 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
956 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
961 /******************************************************************************
962 * AVI_mciRestore [internal]
964 static DWORD
AVI_mciRestore(UINT16 wDevID
, DWORD dwFlags
, LPMCI_DGV_RESTORE_PARMSA lpParms
)
966 WINE_MCIAVI
* wma
= AVI_mciGetOpenDev(wDevID
);
968 TRACE("(%04x, %08lx, %p) : stub\n", wDevID
, dwFlags
, lpParms
);
970 if (lpParms
== NULL
) return MCIERR_NULL_PARAMETER_BLOCK
;
971 if (wma
== NULL
) return MCIERR_INVALID_DEVICE_ID
;
976 /*======================================================================*
977 * MCI AVI entry points *
978 *======================================================================*/
980 /**************************************************************************
981 * MCIAVI_DriverProc [sample driver]
983 LONG CALLBACK
MCIAVI_DriverProc(DWORD dwDevID
, HDRVR hDriv
, DWORD wMsg
,
984 DWORD dwParam1
, DWORD dwParam2
)
987 case DRV_LOAD
: return 1;
988 case DRV_FREE
: return 1;
989 case DRV_OPEN
: return AVI_drvOpen((LPSTR
)dwParam1
, (LPMCI_OPEN_DRIVER_PARMSA
)dwParam2
);
990 case DRV_CLOSE
: return AVI_drvClose(dwDevID
);
991 case DRV_ENABLE
: return 1;
992 case DRV_DISABLE
: return 1;
993 case DRV_QUERYCONFIGURE
: return 1;
994 case DRV_CONFIGURE
: MessageBoxA(0, "Sample AVI Wine Driver !", "MM-Wine Driver", MB_OK
); return 1;
995 case DRV_INSTALL
: return DRVCNF_RESTART
;
996 case DRV_REMOVE
: return DRVCNF_RESTART
;
998 case MCI_OPEN_DRIVER
: return AVI_mciOpen (dwDevID
, dwParam1
, (LPMCI_DGV_OPEN_PARMSA
) dwParam2
);
999 case MCI_CLOSE_DRIVER
: return AVI_mciClose (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
1000 case MCI_PLAY
: return AVI_mciPlay (dwDevID
, dwParam1
, (LPMCI_PLAY_PARMS
) dwParam2
);
1001 case MCI_RECORD
: return AVI_mciRecord (dwDevID
, dwParam1
, (LPMCI_DGV_RECORD_PARMS
) dwParam2
);
1002 case MCI_STOP
: return AVI_mciStop (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
1003 case MCI_SET
: return AVI_mciSet (dwDevID
, dwParam1
, (LPMCI_DGV_SET_PARMS
) dwParam2
);
1004 case MCI_PAUSE
: return AVI_mciPause (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
1005 case MCI_RESUME
: return AVI_mciResume (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
1006 case MCI_STATUS
: return AVI_mciStatus (dwDevID
, dwParam1
, (LPMCI_DGV_STATUS_PARMSA
) dwParam2
);
1007 case MCI_GETDEVCAPS
: return AVI_mciGetDevCaps(dwDevID
, dwParam1
, (LPMCI_GETDEVCAPS_PARMS
) dwParam2
);
1008 case MCI_INFO
: return AVI_mciInfo (dwDevID
, dwParam1
, (LPMCI_DGV_INFO_PARMSA
) dwParam2
);
1009 case MCI_SEEK
: return AVI_mciSeek (dwDevID
, dwParam1
, (LPMCI_SEEK_PARMS
) dwParam2
);
1010 case MCI_PUT
: return AVI_mciPut (dwDevID
, dwParam1
, (LPMCI_DGV_PUT_PARMS
) dwParam2
);
1011 case MCI_WINDOW
: return AVI_mciWindow (dwDevID
, dwParam1
, (LPMCI_DGV_WINDOW_PARMSA
) dwParam2
);
1012 case MCI_LOAD
: return AVI_mciLoad (dwDevID
, dwParam1
, (LPMCI_DGV_LOAD_PARMSA
) dwParam2
);
1013 case MCI_SAVE
: return AVI_mciSave (dwDevID
, dwParam1
, (LPMCI_DGV_SAVE_PARMSA
) dwParam2
);
1014 case MCI_FREEZE
: return AVI_mciFreeze (dwDevID
, dwParam1
, (LPMCI_DGV_RECT_PARMS
) dwParam2
);
1015 case MCI_REALIZE
: return AVI_mciRealize (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
1016 case MCI_UNFREEZE
: return AVI_mciUnFreeze (dwDevID
, dwParam1
, (LPMCI_DGV_RECT_PARMS
) dwParam2
);
1017 case MCI_UPDATE
: return AVI_mciUpdate (dwDevID
, dwParam1
, (LPMCI_DGV_UPDATE_PARMS
) dwParam2
);
1018 case MCI_WHERE
: return AVI_mciWhere (dwDevID
, dwParam1
, (LPMCI_DGV_RECT_PARMS
) dwParam2
);
1019 case MCI_STEP
: return AVI_mciStep (dwDevID
, dwParam1
, (LPMCI_DGV_STEP_PARMS
) dwParam2
);
1020 case MCI_COPY
: return AVI_mciCopy (dwDevID
, dwParam1
, (LPMCI_DGV_COPY_PARMS
) dwParam2
);
1021 case MCI_CUT
: return AVI_mciCut (dwDevID
, dwParam1
, (LPMCI_DGV_CUT_PARMS
) dwParam2
);
1022 case MCI_DELETE
: return AVI_mciDelete (dwDevID
, dwParam1
, (LPMCI_DGV_DELETE_PARMS
) dwParam2
);
1023 case MCI_PASTE
: return AVI_mciPaste (dwDevID
, dwParam1
, (LPMCI_DGV_PASTE_PARMS
) dwParam2
);
1024 case MCI_CUE
: return AVI_mciCue (dwDevID
, dwParam1
, (LPMCI_DGV_CUE_PARMS
) dwParam2
);
1025 /* Digital Video specific */
1026 case MCI_CAPTURE
: return AVI_mciCapture (dwDevID
, dwParam1
, (LPMCI_DGV_CAPTURE_PARMSA
) dwParam2
);
1027 case MCI_MONITOR
: return AVI_mciMonitor (dwDevID
, dwParam1
, (LPMCI_DGV_MONITOR_PARMS
) dwParam2
);
1028 case MCI_RESERVE
: return AVI_mciReserve (dwDevID
, dwParam1
, (LPMCI_DGV_RESERVE_PARMSA
) dwParam2
);
1029 case MCI_SETAUDIO
: return AVI_mciSetAudio (dwDevID
, dwParam1
, (LPMCI_DGV_SETAUDIO_PARMSA
) dwParam2
);
1030 case MCI_SIGNAL
: return AVI_mciSignal (dwDevID
, dwParam1
, (LPMCI_DGV_SIGNAL_PARMS
) dwParam2
);
1031 case MCI_SETVIDEO
: return AVI_mciSetVideo (dwDevID
, dwParam1
, (LPMCI_DGV_SETVIDEO_PARMSA
) dwParam2
);
1032 case MCI_QUALITY
: return AVI_mciQuality (dwDevID
, dwParam1
, (LPMCI_DGV_QUALITY_PARMSA
) dwParam2
);
1033 case MCI_LIST
: return AVI_mciList (dwDevID
, dwParam1
, (LPMCI_DGV_LIST_PARMSA
) dwParam2
);
1034 case MCI_UNDO
: return AVI_mciUndo (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
1035 case MCI_CONFIGURE
: return AVI_mciConfigure (dwDevID
, dwParam1
, (LPMCI_GENERIC_PARMS
) dwParam2
);
1036 case MCI_RESTORE
: return AVI_mciRestore (dwDevID
, dwParam1
, (LPMCI_DGV_RESTORE_PARMSA
) dwParam2
);
1040 WARN("Unsupported command [%lu]\n", wMsg
);
1044 FIXME("Shouldn't receive a MCI_OPEN or CLOSE message\n");
1047 TRACE("Sending msg [%lu] to default driver proc\n", wMsg
);
1048 return DefDriverProc(dwDevID
, hDriv
, wMsg
, dwParam1
, dwParam2
);
1050 return MCIERR_UNRECOGNIZED_COMMAND
;