Make use of digitalv.h file.
diff --git a/include/digitalv.h b/include/digitalv.h
new file mode 100644
index 0000000..fb22bc8
--- /dev/null
+++ b/include/digitalv.h
@@ -0,0 +1,1002 @@
+/* -*- tab-width: 8; c-basic-offset: 4 -*- */
+
+/*
+ * Wine Digital Video extensions
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define MCI_TEST 0x00000020L
+
+/* Message values */
+
+#define MCI_CAPTURE 0x0870
+#define MCI_MONITOR 0x0871
+#define MCI_RESERVE 0x0872
+#define MCI_SETAUDIO 0x0873
+#define MCI_SIGNAL 0x0875
+#define MCI_SETVIDEO 0x0876
+#define MCI_QUALITY 0x0877
+#define MCI_LIST 0x0878
+#define MCI_UNDO 0x0879
+#define MCI_CONFIGURE 0x087A
+#define MCI_RESTORE 0x087B
+
+/* Return and string constant values */
+
+#define MCI_ON 1
+#define MCI_OFF 0
+
+#define MCI_DGV_FILE_MODE_SAVING 0x0001
+#define MCI_DGV_FILE_MODE_LOADING 0x0002
+#define MCI_DGV_FILE_MODE_EDITING 0x0003
+#define MCI_DGV_FILE_MODE_IDLE 0x0004
+
+/* These identifiers are used only by device drivers */
+
+#define MCI_ON_S 0x00008000L
+#define MCI_OFF_S 0x00008001L
+#define MCI_DGV_FILE_S 0x00008002L
+#define MCI_DGV_INPUT_S 0x00008003L
+
+#define MCI_DGV_FILE_MODE_SAVING_S 0x00008004L
+#define MCI_DGV_FILE_MODE_LOADING_S 0x00008005L
+#define MCI_DGV_FILE_MODE_EDITING_S 0x00008006L
+#define MCI_DGV_FILE_MODE_IDLE_S 0x00008007L
+
+#define MCI_DGV_SETVIDEO_SRC_NTSC_S 0x00008010L
+#define MCI_DGV_SETVIDEO_SRC_RGB_S 0x00008011L
+#define MCI_DGV_SETVIDEO_SRC_SVIDEO_S 0x00008012L
+#define MCI_DGV_SETVIDEO_SRC_PAL_S 0x00008013L
+#define MCI_DGV_SETVIDEO_SRC_SECAM_S 0x00008014L
+#define MCI_DGV_SETVIDEO_SRC_GENERIC_S 0x00008015L
+
+#define MCI_DGV_SETAUDIO_SRC_LEFT_S 0x00008020L
+#define MCI_DGV_SETAUDIO_SRC_RIGHT_S 0x00008021L
+#define MCI_DGV_SETAUDIO_SRC_AVERAGE_S 0x00008022L
+#define MCI_DGV_SETAUDIO_SRC_STEREO_S 0x00008023L
+
+/* Window message for signal notification */
+
+#ifndef MM_MCISIGNAL
+#define MM_MCISIGNAL 0x3CB
+#endif
+
+/* error values */
+
+#define MCIERR_DGV_DEVICE_LIMIT (MCIERR_CUSTOM_DRIVER_BASE+0)
+#define MCIERR_DGV_IOERR (MCIERR_CUSTOM_DRIVER_BASE+1)
+#define MCIERR_DGV_WORKSPACE_EMPTY (MCIERR_CUSTOM_DRIVER_BASE+2)
+#define MCIERR_DGV_DISK_FULL (MCIERR_CUSTOM_DRIVER_BASE+3)
+#define MCIERR_DGV_DEVICE_MEMORY_FULL (MCIERR_CUSTOM_DRIVER_BASE+4)
+#define MCIERR_DGV_BAD_CLIPBOARD_RANGE (MCIERR_CUSTOM_DRIVER_BASE+5)
+
+/* defines for monitor methods */
+
+#define MCI_DGV_METHOD_PRE 0x0000a000L
+#define MCI_DGV_METHOD_POST 0x0000a001L
+#define MCI_DGV_METHOD_DIRECT 0x0000a002L
+
+/* defines for known file formats */
+
+#define MCI_DGV_FF_AVSS 0x00004000L
+#define MCI_DGV_FF_AVI 0x00004001L
+#define MCI_DGV_FF_DIB 0x00004002L
+#define MCI_DGV_FF_RDIB 0x00004003L
+#define MCI_DGV_FF_JPEG 0x00004004L
+#define MCI_DGV_FF_RJPEG 0x00004005L
+#define MCI_DGV_FF_JFIF 0x00004006L
+#define MCI_DGV_FF_MPEG 0x00004007L
+
+/* values for dwItem field of MCI_CAPABILITY_PARMS structure */
+
+#define MCI_DGV_GETDEVCAPS_CAN_LOCK 0x00004000L
+#define MCI_DGV_GETDEVCAPS_CAN_STRETCH 0x00004001L
+#define MCI_DGV_GETDEVCAPS_CAN_FREEZE 0x00004002L
+#define MCI_DGV_GETDEVCAPS_MAX_WINDOWS 0x00004003L
+#define MCI_DGV_GETDEVCAPS_CAN_REVERSE 0x00004004L
+#define MCI_DGV_GETDEVCAPS_HAS_STILL 0x00004005L
+#define MCI_DGV_GETDEVCAPS_PALETTES 0x00004006L
+#define MCI_DGV_GETDEVCAPS_CAN_STR_IN 0x00004008L
+#define MCI_DGV_GETDEVCAPS_CAN_TEST 0x00004009L
+#define MCI_DGV_GETDEVCAPS_MAXIMUM_RATE 0x0000400aL
+#define MCI_DGV_GETDEVCAPS_MINIMUM_RATE 0x0000400bL
+
+/* flags for dwFlags parameter of MCI_CAPTURE command message */
+
+#define MCI_DGV_CAPTURE_AS 0x00010000L
+#define MCI_DGV_CAPTURE_AT 0x00020000L
+
+/* flags for dwFlags parameter of MCI_COPY command message */
+
+#define MCI_DGV_COPY_AT 0x00010000L
+#define MCI_DGV_COPY_AUDIO_STREAM 0x00020000L
+#define MCI_DGV_COPY_VIDEO_STREAM 0x00040000L
+
+/* flags for dwFlags parameter of MCI_CUE command message */
+
+#define MCI_DGV_CUE_INPUT 0x00010000L
+#define MCI_DGV_CUE_OUTPUT 0x00020000L
+#define MCI_DGV_CUE_NOSHOW 0x00040000L
+
+/* flags for dwFlags parameter of MCI_CUT command message */
+
+#define MCI_DGV_CUT_AT 0x00010000L
+#define MCI_DGV_CUT_AUDIO_STREAM 0x00020000L
+#define MCI_DGV_CUT_VIDEO_STREAM 0x00040000L
+
+/* flags for dwFlags parameter of MCI_DELETE command message */
+
+#define MCI_DGV_DELETE_AT 0x00010000L
+#define MCI_DGV_DELETE_AUDIO_STREAM 0x00020000L
+#define MCI_DGV_DELETE_VIDEO_STREAM 0x00040000L
+
+/* flags for dwFlags parameter of MCI_FREEZE command message */
+
+#define MCI_DGV_FREEZE_AT 0x00010000L
+#define MCI_DGV_FREEZE_OUTSIDE 0x00020000L
+
+/* flags for dwFlags parameter of MCI_INFO command message */
+
+#define MCI_DGV_INFO_TEXT 0x00010000L
+#define MCI_DGV_INFO_ITEM 0X00020000L
+
+/* values for dwItem field of MCI_DGV_INFO_PARMS structure */
+
+#define MCI_INFO_VERSION 0x00000400L
+
+#define MCI_DGV_INFO_USAGE 0x00004000L
+#define MCI_DGV_INFO_AUDIO_QUALITY 0x00004001L
+#define MCI_DGV_INFO_STILL_QUALITY 0x00004002L
+#define MCI_DGV_INFO_VIDEO_QUALITY 0x00004003L
+#define MCI_DGV_INFO_AUDIO_ALG 0x00004004L
+#define MCI_DGV_INFO_STILL_ALG 0x00004005L
+#define MCI_DGV_INFO_VIDEO_ALG 0x00004006L
+
+/* flags for dwFlags parameter of MCI_LIST command message */
+
+#define MCI_DGV_LIST_ITEM 0x00010000L
+#define MCI_DGV_LIST_COUNT 0x00020000L
+#define MCI_DGV_LIST_NUMBER 0x00040000L
+#define MCI_DGV_LIST_ALG 0x00080000L
+
+/* values for dwItem field of MCI_DGV_LIST_PARMS structure */
+
+#define MCI_DGV_LIST_AUDIO_ALG 0x00004000L
+#define MCI_DGV_LIST_AUDIO_QUALITY 0x00004001L
+#define MCI_DGV_LIST_AUDIO_STREAM 0x00004002L
+#define MCI_DGV_LIST_STILL_ALG 0x00004003L
+#define MCI_DGV_LIST_STILL_QUALITY 0x00004004L
+#define MCI_DGV_LIST_VIDEO_ALG 0x00004005L
+#define MCI_DGV_LIST_VIDEO_QUALITY 0x00004006L
+#define MCI_DGV_LIST_VIDEO_STREAM 0x00004007L
+#define MCI_DGV_LIST_VIDEO_SOURCE 0x00004008L
+
+
+/* flags for dwFlags parameter of MCI_MONITOR command message */
+
+#define MCI_DGV_MONITOR_METHOD 0x00010000L
+#define MCI_DGV_MONITOR_SOURCE 0x00020000L
+
+/* values for dwSource parameter of the MCI_DGV_MONITOR_PARMS struture */
+
+#define MCI_DGV_MONITOR_INPUT 0x00004000L
+#define MCI_DGV_MONITOR_FILE 0x00004001L
+
+/* flags for dwFlags parameter of MCI_OPEN command message */
+
+#define MCI_DGV_OPEN_WS 0x00010000L
+#define MCI_DGV_OPEN_PARENT 0x00020000L
+#define MCI_DGV_OPEN_NOSTATIC 0x00040000L
+#define MCI_DGV_OPEN_16BIT 0x00080000L
+#define MCI_DGV_OPEN_32BIT 0x00100000L
+
+/* flags for dwFlags parameter of MCI_PASTE command message */
+
+#define MCI_DGV_PASTE_AT 0x00010000L
+#define MCI_DGV_PASTE_AUDIO_STREAM 0x00020000L
+#define MCI_DGV_PASTE_VIDEO_STREAM 0x00040000L
+#define MCI_DGV_PASTE_INSERT 0x00080000L
+#define MCI_DGV_PASTE_OVERWRITE 0x00100000L
+
+/* flags for dwFlags parameter of MCI_PLAY command message */
+
+#define MCI_DGV_PLAY_REPEAT 0x00010000L
+#define MCI_DGV_PLAY_REVERSE 0x00020000L
+
+/* flags for dwFlags parameter of MCI_PUT command message */
+
+#define MCI_DGV_RECT 0x00010000L
+#define MCI_DGV_PUT_SOURCE 0x00020000L
+#define MCI_DGV_PUT_DESTINATION 0x00040000L
+#define MCI_DGV_PUT_FRAME 0x00080000L
+#define MCI_DGV_PUT_VIDEO 0x00100000L
+#define MCI_DGV_PUT_WINDOW 0x00200000L
+#define MCI_DGV_PUT_CLIENT 0x00400000L
+
+/* flags for dwFlags parameter of MCI_QUALITY command message */
+
+#define MCI_QUALITY_ITEM 0x00010000L
+#define MCI_QUALITY_NAME 0x00020000L
+#define MCI_QUALITY_ALG 0x00040000L
+#define MCI_QUALITY_DIALOG 0x00080000L
+#define MCI_QUALITY_HANDLE 0x00100000L
+
+/* values for dwItem field of MCI_QUALITY_PARMS structure */
+
+#define MCI_QUALITY_ITEM_AUDIO 0x00004000L
+#define MCI_QUALITY_ITEM_STILL 0x00004001L
+#define MCI_QUALITY_ITEM_VIDEO 0x00004002L
+
+/* flags for dwFlags parameter of MCI_REALIZE command message */
+
+#define MCI_DGV_REALIZE_NORM 0x00010000L
+#define MCI_DGV_REALIZE_BKGD 0x00020000L
+
+/* flags for dwFlags parameter of MCI_RECORD command message */
+
+#define MCI_DGV_RECORD_HOLD 0x00020000L
+#define MCI_DGV_RECORD_AUDIO_STREAM 0x00040000L
+#define MCI_DGV_RECORD_VIDEO_STREAM 0x00080000L
+
+/* flags for dwFlags parameters of MCI_RESERVE command message */
+
+#define MCI_DGV_RESERVE_IN 0x00010000L
+#define MCI_DGV_RESERVE_SIZE 0x00020000L
+
+/* flags for dwFlags parameter of MCI_RESTORE command message */
+
+#define MCI_DGV_RESTORE_FROM 0x00010000L
+#define MCI_DGV_RESTORE_AT 0x00020000L
+
+/* flags for dwFlags parameters of MCI_SAVE command message */
+
+#define MCI_DGV_SAVE_ABORT 0x00020000L
+#define MCI_DGV_SAVE_KEEPRESERVE 0x00040000L
+
+/* flags for dwFlags parameters of MCI_SET command message */
+
+#define MCI_DGV_SET_SEEK_EXACTLY 0x00010000L
+#define MCI_DGV_SET_SPEED 0x00020000L
+#define MCI_DGV_SET_STILL 0x00040000L
+#define MCI_DGV_SET_FILEFORMAT 0x00080000L
+
+/* flags for the dwFlags parameter of MCI_SETAUDIO command message */
+
+#define MCI_DGV_SETAUDIO_OVER 0x00010000L
+#define MCI_DGV_SETAUDIO_CLOCKTIME 0x00020000L
+#define MCI_DGV_SETAUDIO_ALG 0x00040000L
+#define MCI_DGV_SETAUDIO_QUALITY 0x00080000L
+#define MCI_DGV_SETAUDIO_RECORD 0x00100000L
+#define MCI_DGV_SETAUDIO_LEFT 0x00200000L
+#define MCI_DGV_SETAUDIO_RIGHT 0x00400000L
+#define MCI_DGV_SETAUDIO_ITEM 0x00800000L
+#define MCI_DGV_SETAUDIO_VALUE 0x01000000L
+#define MCI_DGV_SETAUDIO_INPUT 0x02000000L
+#define MCI_DGV_SETAUDIO_OUTPUT 0x04000000L
+
+/* values for the dwItem parameter of MCI_DGV_SETAUDIO_PARMS */
+
+#define MCI_DGV_SETAUDIO_TREBLE 0x00004000L
+#define MCI_DGV_SETAUDIO_BASS 0x00004001L
+#define MCI_DGV_SETAUDIO_VOLUME 0x00004002L
+#define MCI_DGV_SETAUDIO_STREAM 0x00004003L
+#define MCI_DGV_SETAUDIO_SOURCE 0x00004004L
+#define MCI_DGV_SETAUDIO_SAMPLESPERSEC 0x00004005L
+#define MCI_DGV_SETAUDIO_AVGBYTESPERSEC 0x00004006L
+#define MCI_DGV_SETAUDIO_BLOCKALIGN 0x00004007L
+#define MCI_DGV_SETAUDIO_BITSPERSAMPLE 0x00004008L
+
+/* values for the dwValue parameter of MCI_DGV_SETAUDIO_PARMS
+ used with MCI_DGV_SETAUDIO_SOURCE */
+
+#define MCI_DGV_SETAUDIO_SOURCE_STEREO 0x00000000L
+#define MCI_DGV_SETAUDIO_SOURCE_LEFT 0x00000001L
+#define MCI_DGV_SETAUDIO_SOURCE_RIGHT 0x00000002L
+#define MCI_DGV_SETAUDIO_SOURCE_AVERAGE 0x00004000L
+
+/* flags for the dwFlags parameter of MCI_SETVIDEO command */
+
+#define MCI_DGV_SETVIDEO_QUALITY 0x00010000L
+#define MCI_DGV_SETVIDEO_ALG 0x00020000L
+#define MCI_DGV_SETVIDEO_CLOCKTIME 0x00040000L
+#define MCI_DGV_SETVIDEO_SRC_NUMBER 0x00080000L
+#define MCI_DGV_SETVIDEO_ITEM 0x00100000L
+#define MCI_DGV_SETVIDEO_OVER 0x00200000L
+#define MCI_DGV_SETVIDEO_RECORD 0x00400000L
+#define MCI_DGV_SETVIDEO_STILL 0x00800000L
+#define MCI_DGV_SETVIDEO_VALUE 0x01000000L
+#define MCI_DGV_SETVIDEO_INPUT 0x02000000L
+#define MCI_DGV_SETVIDEO_OUTPUT 0x04000000L
+
+/* values for the dwTo field of MCI_SETVIDEO_PARMS
+ used with MCI_DGV_SETVIDEO_SOURCE */
+
+#define MCI_DGV_SETVIDEO_SRC_NTSC 0x00004000L
+#define MCI_DGV_SETVIDEO_SRC_RGB 0x00004001L
+#define MCI_DGV_SETVIDEO_SRC_SVIDEO 0x00004002L
+#define MCI_DGV_SETVIDEO_SRC_PAL 0x00004003L
+#define MCI_DGV_SETVIDEO_SRC_SECAM 0x00004004L
+#define MCI_DGV_SETVIDEO_SRC_GENERIC 0x00004005L
+
+/* values for the dwItem field of MCI_SETVIDEO_PARMS */
+
+#define MCI_DGV_SETVIDEO_BRIGHTNESS 0x00004000L
+#define MCI_DGV_SETVIDEO_COLOR 0x00004001L
+#define MCI_DGV_SETVIDEO_CONTRAST 0x00004002L
+#define MCI_DGV_SETVIDEO_TINT 0x00004003L
+#define MCI_DGV_SETVIDEO_SHARPNESS 0x00004004L
+#define MCI_DGV_SETVIDEO_GAMMA 0x00004005L
+#define MCI_DGV_SETVIDEO_STREAM 0x00004006L
+#define MCI_DGV_SETVIDEO_PALHANDLE 0x00004007L
+#define MCI_DGV_SETVIDEO_FRAME_RATE 0x00004008L
+#define MCI_DGV_SETVIDEO_SOURCE 0x00004009L
+#define MCI_DGV_SETVIDEO_KEY_INDEX 0x0000400aL
+#define MCI_DGV_SETVIDEO_KEY_COLOR 0x0000400bL
+#define MCI_DGV_SETVIDEO_BITSPERPEL 0x0000400cL
+
+/* flags for the dwFlags parameter of MCI_SIGNAL */
+
+#define MCI_DGV_SIGNAL_AT 0x00010000L
+#define MCI_DGV_SIGNAL_EVERY 0x00020000L
+#define MCI_DGV_SIGNAL_USERVAL 0x00040000L
+#define MCI_DGV_SIGNAL_CANCEL 0x00080000L
+#define MCI_DGV_SIGNAL_POSITION 0x00100000L
+
+/* flags for the dwFlags parameter of MCI_STATUS command */
+
+#define MCI_DGV_STATUS_NOMINAL 0x00020000L
+#define MCI_DGV_STATUS_REFERENCE 0x00040000L
+#define MCI_DGV_STATUS_LEFT 0x00080000L
+#define MCI_DGV_STATUS_RIGHT 0x00100000L
+#define MCI_DGV_STATUS_DISKSPACE 0x00200000L
+#define MCI_DGV_STATUS_INPUT 0x00400000L
+#define MCI_DGV_STATUS_OUTPUT 0x00800000L
+#define MCI_DGV_STATUS_RECORD 0x01000000L
+
+/* values for dwItem field of MCI_STATUS_PARMS structure */
+
+#define MCI_DGV_STATUS_AUDIO_INPUT 0x00004000L
+#define MCI_DGV_STATUS_HWND 0x00004001L
+#define MCI_DGV_STATUS_SPEED 0x00004003L
+#define MCI_DGV_STATUS_HPAL 0x00004004L
+#define MCI_DGV_STATUS_BRIGHTNESS 0x00004005L
+#define MCI_DGV_STATUS_COLOR 0x00004006L
+#define MCI_DGV_STATUS_CONTRAST 0x00004007L
+#define MCI_DGV_STATUS_FILEFORMAT 0x00004008L
+#define MCI_DGV_STATUS_AUDIO_SOURCE 0x00004009L
+#define MCI_DGV_STATUS_GAMMA 0x0000400aL
+#define MCI_DGV_STATUS_MONITOR 0x0000400bL
+#define MCI_DGV_STATUS_MONITOR_METHOD 0x0000400cL
+#define MCI_DGV_STATUS_FRAME_RATE 0x0000400eL
+#define MCI_DGV_STATUS_BASS 0x0000400fL
+#define MCI_DGV_STATUS_SIZE 0x00004010L
+#define MCI_DGV_STATUS_SEEK_EXACTLY 0x00004011L
+#define MCI_DGV_STATUS_SHARPNESS 0x00004012L
+#define MCI_DGV_STATUS_SMPTE 0x00004013L
+#define MCI_DGV_STATUS_AUDIO 0x00004014L
+#define MCI_DGV_STATUS_TINT 0x00004015L
+#define MCI_DGV_STATUS_TREBLE 0x00004016L
+#define MCI_DGV_STATUS_UNSAVED 0x00004017L
+#define MCI_DGV_STATUS_VIDEO 0x00004018L
+#define MCI_DGV_STATUS_VOLUME 0x00004019L
+#define MCI_DGV_STATUS_AUDIO_RECORD 0x0000401aL
+#define MCI_DGV_STATUS_VIDEO_SOURCE 0x0000401bL
+#define MCI_DGV_STATUS_VIDEO_RECORD 0x0000401cL
+#define MCI_DGV_STATUS_STILL_FILEFORMAT 0x0000401dL
+#define MCI_DGV_STATUS_VIDEO_SRC_NUM 0x0000401eL
+#define MCI_DGV_STATUS_FILE_MODE 0x0000401fL
+#define MCI_DGV_STATUS_FILE_COMPLETION 0x00004020L
+#define MCI_DGV_STATUS_WINDOW_VISIBLE 0x00004021L
+#define MCI_DGV_STATUS_WINDOW_MINIMIZED 0x00004022L
+#define MCI_DGV_STATUS_WINDOW_MAXIMIZED 0x00004023L
+#define MCI_DGV_STATUS_KEY_INDEX 0x00004024L
+#define MCI_DGV_STATUS_KEY_COLOR 0x00004025L
+#define MCI_DGV_STATUS_PAUSE_MODE 0x00004026L
+#define MCI_DGV_STATUS_SAMPLESPERSEC 0x00004027L
+#define MCI_DGV_STATUS_AVGBYTESPERSEC 0x00004028L
+#define MCI_DGV_STATUS_BLOCKALIGN 0x00004029L
+#define MCI_DGV_STATUS_BITSPERSAMPLE 0x0000402aL
+#define MCI_DGV_STATUS_BITSPERPEL 0x0000402bL
+#define MCI_DGV_STATUS_FORWARD 0x0000402cL
+#define MCI_DGV_STATUS_AUDIO_STREAM 0x0000402dL
+#define MCI_DGV_STATUS_VIDEO_STREAM 0x0000402eL
+
+/* flags for dwFlags parameter of MCI_STEP command message */
+
+#define MCI_DGV_STEP_REVERSE 0x00010000L
+#define MCI_DGV_STEP_FRAMES 0x00020000L
+
+/* flags for dwFlags parameter of MCI_STOP command message */
+
+#define MCI_DGV_STOP_HOLD 0x00010000L
+
+/* flags for dwFlags parameter of MCI_UPDATE command message */
+
+#define MCI_DGV_UPDATE_HDC 0x00020000L
+#define MCI_DGV_UPDATE_PAINT 0x00040000L
+
+/* flags for dwFlags parameter of MCI_WHERE command message */
+
+#define MCI_DGV_WHERE_SOURCE 0x00020000L
+#define MCI_DGV_WHERE_DESTINATION 0x00040000L
+#define MCI_DGV_WHERE_FRAME 0x00080000L
+#define MCI_DGV_WHERE_VIDEO 0x00100000L
+#define MCI_DGV_WHERE_WINDOW 0x00200000L
+#define MCI_DGV_WHERE_MAX 0x00400000L
+
+/* flags for dwFlags parameter of MCI_WINDOW command message */
+
+#define MCI_DGV_WINDOW_HWND 0x00010000L
+#define MCI_DGV_WINDOW_STATE 0x00040000L
+#define MCI_DGV_WINDOW_TEXT 0x00080000L
+
+/* flags for hWnd parameter of MCI_DGV_WINDOW_PARMS parameter block */
+
+#define MCI_DGV_WINDOW_DEFAULT 0x00000000L
+
+/* parameter block for MCI_WHERE, MCI_PUT, MCI_FREEZE, MCI_UNFREEZE cmds */
+
+typedef struct {
+ DWORD dwCallback;
+ RECT16 rc;
+} MCI_DGV_RECT_PARMS16, *LPMCI_DGV_RECT_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ RECT rc;
+} MCI_DGV_RECT_PARMS, *LPMCI_DGV_RECT_PARMS;
+
+/* parameter block for MCI_CAPTURE command message */
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrFileName;
+ RECT16 rc;
+} MCI_DGV_CAPTURE_PARMS16, *LPMCI_DGV_CAPTURE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_CAPTURE_PARMSA, *LPMCI_DGV_CAPTURE_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ LPWSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_CAPTURE_PARMSW, *LPMCI_DGV_CAPTURE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_CAPTURE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_CAPTURE_PARMS)
+
+/* parameter block for MCI_CLOSE command message */
+
+typedef MCI_GENERIC_PARMS MCI_CLOSE_PARMS, *LPMCI_CLOSE_PARMS;
+
+/* parameter block for MCI_COPY command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT16 rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_COPY_PARMS16, *LPMCI_DGV_COPY_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_COPY_PARMS, *LPMCI_DGV_COPY_PARMS;
+
+/* parameter block for MCI_CUE command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwTo;
+} MCI_DGV_CUE_PARMS, *LPMCI_DGV_CUE_PARMS;
+
+/* parameter block for MCI_CUT command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT16 rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_CUT_PARMS16, * LPMCI_DGV_CUT_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_CUT_PARMS, * LPMCI_DGV_CUT_PARMS;
+
+/* parameter block for MCI_DELETE command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT16 rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_DELETE_PARMS16, * LPMCI_DGV_DELETE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_DELETE_PARMS, * LPMCI_DGV_DELETE_PARMS;
+
+/* parameter block for MCI_FREEZE command message */
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_FREEZE_PARMS16, * LPMCI_DGV_FREEZE_PARMS16;
+typedef MCI_DGV_RECT_PARMS MCI_DGV_FREEZE_PARMS, * LPMCI_DGV_FREEZE_PARMS;
+
+/* parameter block for MCI_INFO command message */
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwItem;
+} MCI_DGV_INFO_PARMS16, * LPMCI_DGV_INFO_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwItem;
+} MCI_DGV_INFO_PARMSA, * LPMCI_DGV_INFO_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ LPWSTR lpstrReturn;
+ DWORD dwRetSize;
+ DWORD dwItem;
+} MCI_DGV_INFO_PARMSW, *LPMCI_DGV_INFO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_INFO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_INFO_PARMS)
+
+/* parameter block for MCI_LIST command message */
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrReturn;
+ DWORD dwLength;
+ DWORD dwNumber;
+ DWORD dwItem;
+ LPSTR lpstrAlgorithm;
+} MCI_DGV_LIST_PARMS16, *LPMCI_DGV_LIST_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrReturn;
+ DWORD dwLength;
+ DWORD dwNumber;
+ DWORD dwItem;
+ LPSTR lpstrAlgorithm;
+} MCI_DGV_LIST_PARMSA, *LPMCI_DGV_LIST_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ LPWSTR lpstrReturn;
+ DWORD dwLength;
+ DWORD dwNumber;
+ DWORD dwItem;
+ LPWSTR lpstrAlgorithm;
+} MCI_DGV_LIST_PARMSW, *LPMCI_DGV_LIST_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_LIST_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_LIST_PARMS)
+
+/* parameter block for MCI_LOAD command message */
+
+typedef MCI_LOAD_PARMS16 MCI_DGV_LOAD_PARMS16 , * LPMCI_DGV_LOAD_PARMS16;
+typedef MCI_LOAD_PARMSA MCI_DGV_LOAD_PARMSA, * LPMCI_DGV_LOAD_PARMSA;
+typedef MCI_LOAD_PARMSW MCI_DGV_LOAD_PARMSW, * LPMCI_DGV_LOAD_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_LOAD_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_LOAD_PARMS)
+
+/* parameter block for MCI_MONITOR command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwSource;
+ DWORD dwMethod;
+} MCI_DGV_MONITOR_PARMS, * LPMCI_DGV_MONITOR_PARMS;
+
+/* parameter block for MCI_OPEN command message */
+
+typedef struct {
+ DWORD dwCallback;
+ UINT16 wDeviceID;
+ UINT16 wReserved0;
+ LPSTR lpstrDeviceType;
+ LPSTR lpstrElementName;
+ LPSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND16 hWndParent;
+ UINT16 wReserved1;
+} MCI_DGV_OPEN_PARMS16, *LPMCI_DGV_OPEN_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ UINT wDeviceID;
+ LPSTR lpstrDeviceType;
+ LPSTR lpstrElementName;
+ LPSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_DGV_OPEN_PARMSA, *LPMCI_DGV_OPEN_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ UINT wDeviceID;
+ LPWSTR lpstrDeviceType;
+ LPWSTR lpstrElementName;
+ LPWSTR lpstrAlias;
+ DWORD dwStyle;
+ HWND hWndParent;
+} MCI_DGV_OPEN_PARMSW, *LPMCI_DGV_OPEN_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_OPEN_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_OPEN_PARMS)
+
+/* parameter block for MCI_PAUSE command message */
+
+typedef MCI_GENERIC_PARMS MCI_DGV_PAUSE_PARMS, * LPMCI_DGV_PAUSE_PARMS;
+
+/* parameter block for MCI_PASTE command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwTo;
+ RECT16 rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_PASTE_PARMS16, * LPMCI_DGV_PASTE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwTo;
+ RECT rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_PASTE_PARMS, * LPMCI_DGV_PASTE_PARMS;
+
+/* parameter block for MCI_PLAY command message */
+
+typedef MCI_PLAY_PARMS MCI_DGV_PLAY_PARMS, * LPMCI_DGV_PLAY_PARMS;
+
+/* parameter block for MCI_PUT command message */
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_PUT_PARMS16, * LPMCI_DGV_PUT_PARMS16;
+typedef MCI_DGV_RECT_PARMS MCI_DGV_PUT_PARMS, * LPMCI_DGV_PUT_PARMS;
+
+/* parameter block for MCI_QUALITY command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ LPSTR lpstrName;
+ DWORD lpstrAlgorithm;
+ DWORD dwHandle;
+} MCI_DGV_QUALITY_PARMS16, *LPMCI_DGV_QUALITY_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ LPSTR lpstrName;
+ DWORD lpstrAlgorithm;
+ DWORD dwHandle;
+} MCI_DGV_QUALITY_PARMSA, *LPMCI_DGV_QUALITY_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ LPWSTR lpstrName;
+ DWORD lpstrAlgorithm;
+ DWORD dwHandle;
+} MCI_DGV_QUALITY_PARMSW, *LPMCI_DGV_QUALITY_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_QUALITY_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_QUALITY_PARMS)
+
+/* parameter block for MCI_REALIZE command message */
+
+typedef MCI_GENERIC_PARMS MCI_REALIZE_PARMS, * LPMCI_REALIZE_PARMS;
+
+/* parameter block for MCI_RECORD command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT16 rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_RECORD_PARMS16, * LPMCI_DGV_RECORD_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+ RECT rc;
+ DWORD dwAudioStream;
+ DWORD dwVideoStream;
+} MCI_DGV_RECORD_PARMS, * LPMCI_DGV_RECORD_PARMS;
+
+/* parameter block for MCI_RESERVE command message */
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrPath;
+ DWORD dwSize;
+} MCI_DGV_RESERVE_PARMS16, *LPMCI_DGV_RESERVE_PARMS16A;
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrPath;
+ DWORD dwSize;
+} MCI_DGV_RESERVE_PARMSA, *LPMCI_DGV_RESERVE_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ LPWSTR lpstrPath;
+ DWORD dwSize;
+} MCI_DGV_RESERVE_PARMSW, *LPMCI_DGV_RESERVE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_RESERVE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_RESERVE_PARMS)
+
+/* parameter block for MCI_RESTORE command message */
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrFileName;
+ RECT16 rc;
+} MCI_DGV_RESTORE_PARMS16, *LPMCI_DGV_RESTORE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_RESTORE_PARMSA, *LPMCI_DGV_RESTORE_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ LPWSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_RESTORE_PARMSW, *LPMCI_DGV_RESTORE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_RESTORE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_RESTORE_PARMS)
+
+/* parameter block for MCI_RESUME command message */
+
+typedef MCI_GENERIC_PARMS MCI_DGV_RESUME_PARMS, * LPMCI_DGV_RESUME_PARMS;
+
+/* parameter block for MCI_SAVE command message */
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrFileName;
+ RECT16 rc;
+} MCI_DGV_SAVE_PARMS16, *LPMCI_DGV_SAVE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ LPSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_SAVE_PARMSA, *LPMCI_DGV_SAVE_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ LPWSTR lpstrFileName;
+ RECT rc;
+} MCI_DGV_SAVE_PARMSW, *LPMCI_DGV_SAVE_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_SAVE_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_SAVE_PARMS)
+
+/* parameter block for MCI_SET command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+ DWORD dwFileFormat;
+ DWORD dwSpeed;
+} MCI_DGV_SET_PARMS, *LPMCI_DGV_SET_PARMS;
+
+/* parameter block for MCI_SETAUDIO command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ LPSTR lpstrAlgorithm;
+ LPSTR lpstrQuality;
+} MCI_DGV_SETAUDIO_PARMS16, *LPMCI_DGV_SETAUDIO_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ LPSTR lpstrAlgorithm;
+ LPSTR lpstrQuality;
+} MCI_DGV_SETAUDIO_PARMSA, *LPMCI_DGV_SETAUDIO_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ LPWSTR lpstrAlgorithm;
+ LPWSTR lpstrQuality;
+} MCI_DGV_SETAUDIO_PARMSW, *LPMCI_DGV_SETAUDIO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_SETAUDIO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_SETAUDIO_PARMS)
+
+/* parameter block for MCI_SIGNAL command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwPosition;
+ DWORD dwPeriod;
+ DWORD dwUserParm;
+} MCI_DGV_SIGNAL_PARMS, * LPMCI_DGV_SIGNAL_PARMS;
+
+/* parameter block for MCI_SETVIDEO command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ LPSTR lpstrAlgorithm;
+ LPSTR lpstrQuality;
+ DWORD dwSourceNumber;
+} MCI_DGV_SETVIDEO_PARMS16, *LPMCI_DGV_SETVIDEO_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ LPSTR lpstrAlgorithm;
+ LPSTR lpstrQuality;
+ DWORD dwSourceNumber;
+} MCI_DGV_SETVIDEO_PARMSA, *LPMCI_DGV_SETVIDEO_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwItem;
+ DWORD dwValue;
+ DWORD dwOver;
+ LPWSTR lpstrAlgorithm;
+ LPWSTR lpstrQuality;
+ DWORD dwSourceNumber;
+} MCI_DGV_SETVIDEO_PARMSW, *LPMCI_DGV_SETVIDEO_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_SETVIDEO_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_SETVIDEO_PARMS)
+
+/* parameter block for MCI_STATUS command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwReturn;
+ DWORD dwItem;
+ DWORD dwTrack;
+ LPSTR lpstrDrive;
+ DWORD dwReference;
+} MCI_DGV_STATUS_PARMS16, *LPMCI_DGV_STATUS_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwReturn;
+ DWORD dwItem;
+ DWORD dwTrack;
+ LPSTR lpstrDrive;
+ DWORD dwReference;
+} MCI_DGV_STATUS_PARMSA, *LPMCI_DGV_STATUS_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwReturn;
+ DWORD dwItem;
+ DWORD dwTrack;
+ LPWSTR lpstrDrive;
+ DWORD dwReference;
+} MCI_DGV_STATUS_PARMSW, *LPMCI_DGV_STATUS_PARMSW;
+
+DECL_WINELIB_TYPE_AW(MCI_DGV_STATUS_PARMS)
+DECL_WINELIB_TYPE_AW(LPMCI_DGV_STATUS_PARMS)
+
+/* parameter block for MCI_STEP command message */
+
+typedef struct {
+ DWORD dwCallback;
+ DWORD dwFrames;
+} MCI_DGV_STEP_PARMS, *LPMCI_DGV_STEP_PARMS;
+
+/* parameter block for MCI_STOP command message */
+
+typedef MCI_GENERIC_PARMS MCI_DGV_STOP_PARMS, * LPMCI_DGV_STOP_PARMS;
+
+/* parameter block for MCI_UNFREEZE command message */
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_UNFREEZE_PARMS16, * LPMCI_DGV_UNFREEZE_PARMS16;
+typedef MCI_DGV_RECT_PARMS MCI_DGV_UNFREEZE_PARMS, * LPMCI_DGV_UNFREEZE_PARMS;
+
+/* parameter block for MCI_UPDATE command message */
+
+typedef struct {
+ DWORD dwCallback;
+ RECT16 rc;
+ HDC16 hDC;
+ UINT16 wReserved0;
+} MCI_DGV_UPDATE_PARMS16, * LPMCI_DGV_UPDATE_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ RECT rc;
+ HDC hDC;
+} MCI_DGV_UPDATE_PARMS, * LPMCI_DGV_UPDATE_PARMS;
+
+/* parameter block for MCI_WHERE command message */
+
+typedef MCI_DGV_RECT_PARMS16 MCI_DGV_WHERE_PARMS16, * LPMCI_DGV_WHERE_PARMS16;
+typedef MCI_DGV_RECT_PARMS MCI_DGV_WHERE_PARMS, * LPMCI_DGV_WHERE_PARMS;
+
+/* parameter block for MCI_WINDOW command message */
+
+typedef struct {
+ DWORD dwCallback;
+ HWND16 hWnd;
+ UINT16 wReserved1;
+ UINT16 nCmdShow;
+ UINT16 wReserved2;
+ LPSTR lpstrText;
+} MCI_DGV_WINDOW_PARMS16, *LPMCI_DGV_WINDOW_PARMS16;
+
+typedef struct {
+ DWORD dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPSTR lpstrText;
+} MCI_DGV_WINDOW_PARMSA, *LPMCI_DGV_WINDOW_PARMSA;
+
+typedef struct {
+ DWORD dwCallback;
+ HWND hWnd;
+ UINT nCmdShow;
+ LPWSTR lpstrText;
+} MCI_DGV_WINDOW_PARMSW, *LPMCI_DGV_WINDOW_PARMSW;
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/multimedia/mciavi.c b/multimedia/mciavi.c
index aaaab4b..a5f4e84 100644
--- a/multimedia/mciavi.c
+++ b/multimedia/mciavi.c
@@ -1,3 +1,5 @@
+/* -*- tab-width: 8; c-basic-offset: 4 -*- */
+
/*
* Digital video MCI Wine Driver
*
@@ -11,6 +13,7 @@
#include "xmalloc.h"
#include "debug.h"
#include "callback.h"
+#include "digitalv.h"
#include "options.h"
typedef struct {
@@ -19,6 +22,7 @@
WORD wNotifyDeviceID; /* MCI device ID with a pending notification */
HANDLE16 hCallback; /* Callback handle for pending notification */
HMMIO hFile; /* mmio file handle open as Element */
+ WORD wStatus; /* One of MCI_MODE_XXX */
MCI_OPEN_PARMSA openParms;
DWORD dwTimeFormat;
} WINE_MCIAVI;
@@ -44,17 +48,20 @@
static DWORD AVI_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms);
-static DWORD AVI_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMSA lpParms)
+/***************************************************************************
+ * AVI_mciOpen [internal]
+ */
+static DWORD AVI_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_OPEN_PARMSA lpParms)
{
WINE_MCIAVI* wma;
-
+
TRACE(mciavi, "(%04x, %08lX, %p) : semi-stub\n", wDevID, dwFlags, lpParms);
-
+
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
if (wDevID > MAX_MCIAVIDRV) return MCIERR_INVALID_DEVICE_ID;
-
+
wma = &MCIAviDev[wDevID];
-
+
if (wma->nUseCount > 0) {
/* The driver is already open on this channel */
/* If the driver was opened shareable before and this open specifies */
@@ -71,28 +78,31 @@
TRACE(cdaudio,"MCI_OPEN_ELEMENT !\n");
/* return MCIERR_NO_ELEMENT_ALLOWED; */
}
-
+
wma->openParms.dwCallback = lpParms->dwCallback;
wma->openParms.wDeviceID = (WORD)lpParms->wDeviceID;
wma->openParms.lpstrDeviceType = lpParms->lpstrDeviceType;
wma->openParms.lpstrElementName = lpParms->lpstrElementName;
wma->openParms.lpstrAlias = lpParms->lpstrAlias;
-
+
wma->wNotifyDeviceID = lpParms->wDeviceID;
/* FIXME: do real open */
- /* wmcda->mciMode = MCI_MODE_STOP; */
+ wma->wStatus = MCI_MODE_STOP;
wma->dwTimeFormat = MCI_FORMAT_TMSF;
-
+
return 0;
-
+
}
+/***************************************************************************
+ * AVI_mciClose [internal]
+ */
static DWORD AVI_mciClose(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
-
+
TRACE(mciavi, "(%04x, %08lX, %p) : semi-stub\n", wDevID, dwFlags, lpParms);
-
+
if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
if (wma->nUseCount == 1) {
@@ -103,56 +113,292 @@
return 0;
}
+/***************************************************************************
+ * AVI_mciPlay [internal]
+ */
static DWORD AVI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ wma->wStatus = MCI_MODE_PLAY;
+ if (lpParms && (dwFlags & MCI_NOTIFY)) {
+ TRACE(mcimidi, "MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
+ mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
+ wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ }
return 0;
}
-static DWORD AVI_mciRecord(UINT16 wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms)
+/***************************************************************************
+ * AVI_mciRecord [internal]
+ */
+static DWORD AVI_mciRecord(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_RECORD_PARMS lpParms)
{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ wma->wStatus = MCI_MODE_RECORD;
return 0;
}
+/***************************************************************************
+ * AVI_mciStop [internal]
+ */
static DWORD AVI_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ wma->wStatus = MCI_MODE_STOP;
return 0;
}
-static DWORD AVI_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
-{
- TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
- return 0;
-}
-
+/***************************************************************************
+ * AVI_mciPause [internal]
+ */
static DWORD AVI_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ wma->wStatus = MCI_MODE_PAUSE;
return 0;
}
+/***************************************************************************
+ * AVI_mciResume [internal]
+ */
static DWORD AVI_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ wma->wStatus = MCI_MODE_PLAY;
return 0;
}
-static DWORD AVI_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
+/***************************************************************************
+ * AVI_mciSeek [internal]
+ */
+static DWORD AVI_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
return 0;
}
+/***************************************************************************
+ * AVI_mciSet [internal]
+ */
+static DWORD AVI_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_SET_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ if (dwFlags & MCI_SET_TIME_FORMAT) {
+ switch (lpParms->dwTimeFormat) {
+ case MCI_FORMAT_MILLISECONDS:
+ TRACE(mciavi, "MCI_FORMAT_MILLISECONDS !\n");
+ wma->dwTimeFormat = MCI_FORMAT_MILLISECONDS;
+ break;
+ case MCI_FORMAT_FRAMES:
+ TRACE(mciavi, "MCI_FORMAT_FRAMES !\n");
+ wma->dwTimeFormat = MCI_FORMAT_FRAMES;
+ break;
+ default:
+ WARN(mciavi, "Bad time format %lu!\n", lpParms->dwTimeFormat);
+ return MCIERR_BAD_TIME_FORMAT;
+ }
+ }
+
+ if (dwFlags & MCI_SET_DOOR_OPEN) {
+ TRACE(mciavi, "No support for door open !\n");
+ return MCIERR_UNSUPPORTED_FUNCTION;
+ }
+ if (dwFlags & MCI_SET_DOOR_CLOSED) {
+ TRACE(mciavi, "No support for door close !\n");
+ return MCIERR_UNSUPPORTED_FUNCTION;
+ }
+ if (dwFlags & MCI_SET_ON) {
+ dbg_decl_str(mciavi, 256);
+
+ dsprintf(mciavi, "MCI_SET_ON:");
+
+ if (dwFlags & MCI_SET_VIDEO) {
+ dsprintf(mciavi, " video");
+ }
+ if (dwFlags & MCI_SET_AUDIO) {
+ dsprintf(mciavi, " audio");
+ if (lpParms->dwAudio & MCI_SET_AUDIO_ALL)
+ dsprintf(mciavi, " all");
+ if (lpParms->dwAudio & MCI_SET_AUDIO_LEFT)
+ dsprintf(mciavi, " left");
+ if (lpParms->dwAudio & MCI_SET_AUDIO_RIGHT)
+ dsprintf(mciavi, " right");
+ }
+ if (dwFlags & MCI_DGV_SET_SEEK_EXACTLY) {
+ dsprintf(mciavi, " seek_exactly");
+ }
+ TRACE(mciavi, "%s\n", dbg_str(mciavi));
+ }
+
+ if (dwFlags & MCI_SET_OFF) {
+ dbg_decl_str(mciavi, 256);
+
+ dsprintf(mciavi, "MCI_SET_OFF:");
+ if (dwFlags & MCI_SET_VIDEO) {
+ dsprintf(mciavi, " video");
+ }
+ if (dwFlags & MCI_SET_AUDIO) {
+ dsprintf(mciavi, " audio");
+ if (lpParms->dwAudio & MCI_SET_AUDIO_ALL)
+ dsprintf(mciavi, " all");
+ if (lpParms->dwAudio & MCI_SET_AUDIO_LEFT)
+ dsprintf(mciavi, " left");
+ if (lpParms->dwAudio & MCI_SET_AUDIO_RIGHT)
+ dsprintf(mciavi, " right");
+ }
+ if (dwFlags & MCI_DGV_SET_SEEK_EXACTLY) {
+ dsprintf(mciavi, " seek_exactly");
+ }
+ TRACE(mciavi, "%s\n", dbg_str(mciavi));
+ }
+ if (dwFlags & MCI_DGV_SET_FILEFORMAT) {
+ LPSTR str = "save";
+ if (dwFlags & MCI_DGV_SET_STILL)
+ str = "capture";
+
+ switch (lpParms->dwFileFormat) {
+ case MCI_DGV_FF_AVI: TRACE(mciavi, "Setting file format (%s) to 'AVI'\n", str); break;
+ case MCI_DGV_FF_AVSS: TRACE(mciavi, "Setting file format (%s) to 'AVSS'\n", str); break;
+ case MCI_DGV_FF_DIB: TRACE(mciavi, "Setting file format (%s) to 'DIB'\n", str); break;
+ case MCI_DGV_FF_JFIF: TRACE(mciavi, "Setting file format (%s) to 'JFIF'\n", str); break;
+ case MCI_DGV_FF_JPEG: TRACE(mciavi, "Setting file format (%s) to 'JPEG'\n", str); break;
+ case MCI_DGV_FF_MPEG: TRACE(mciavi, "Setting file format (%s) to 'MPEG'\n", str); break;
+ case MCI_DGV_FF_RDIB: TRACE(mciavi, "Setting file format (%s) to 'RLE DIB'\n", str); break;
+ case MCI_DGV_FF_RJPEG: TRACE(mciavi, "Setting file format (%s) to 'RJPEG'\n", str); break;
+ default: TRACE(mciavi, "Setting unknown file format (%s): %ld\n", str, lpParms->dwFileFormat);
+ }
+ }
+
+ if (dwFlags & MCI_DGV_SET_SPEED) {
+ TRACE(mciavi, "Setting speed to %ld\n", lpParms->dwSpeed);
+ }
+
+ return 0;
+}
+
+/***************************************************************************
+ * AVI_mciStatus [internal]
+ */
+static DWORD AVI_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_STATUS_PARMSA lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ if (dwFlags & MCI_STATUS_ITEM) {
+ switch (lpParms->dwItem) {
+ case MCI_STATUS_CURRENT_TRACK:
+ lpParms->dwReturn = 1;
+ TRACE(mciavi, "MCI_STATUS_CURRENT_TRACK => %lu\n", lpParms->dwReturn);
+ break;
+ case MCI_STATUS_LENGTH:
+ if (dwFlags & MCI_TRACK) {
+ /* lpParms->dwTrack contains track # */
+ lpParms->dwReturn = 0x1234;
+ } else {
+ lpParms->dwReturn = 0x4321;
+ }
+ TRACE(mciavi, "MCI_STATUS_LENGTH => %lu\n", lpParms->dwReturn);
+ break;
+ case MCI_STATUS_MODE:
+ lpParms->dwReturn = wma->wStatus;
+ TRACE(mciavi, "MCI_STATUS_MODE => %lu\n", lpParms->dwReturn);
+ break;
+ case MCI_STATUS_MEDIA_PRESENT:
+ TRACE(mciavi, "MCI_STATUS_MEDIA_PRESENT => TRUE\n");
+ lpParms->dwReturn = TRUE;
+ break;
+ case MCI_STATUS_NUMBER_OF_TRACKS:
+ lpParms->dwReturn = 3;
+ TRACE(mciavi, "MCI_STATUS_NUMBER_OF_TRACKS => %lu\n", lpParms->dwReturn);
+ break;
+ case MCI_STATUS_POSITION:
+ /* FIXME: do I need to use MCI_TRACK ? */
+ lpParms->dwReturn = 0x0123;
+ TRACE(mciavi, "MCI_STATUS_POSITION %s => %lu\n",
+ (dwFlags & MCI_STATUS_START) ? "start" : "current", lpParms->dwReturn);
+ break;
+ case MCI_STATUS_READY:
+ lpParms->dwReturn = (wma->wStatus != MCI_MODE_NOT_READY);
+ TRACE(mciavi, "MCI_STATUS_READY = %lu\n", lpParms->dwReturn);
+ break;
+ case MCI_STATUS_TIME_FORMAT:
+ lpParms->dwReturn = wma->dwTimeFormat;
+ TRACE(mciavi, "MCI_STATUS_TIME_FORMAT => %lu\n", lpParms->dwReturn);
+ break;
+ default:
+ WARN(mciavi, "Unknowm command %08lX !\n", lpParms->dwItem);
+ return MCIERR_UNRECOGNIZED_COMMAND;
+ }
+ } else {
+ WARN(mciavi, "No Status-Item!\n");
+ return MCIERR_UNRECOGNIZED_COMMAND;
+ }
+ if (dwFlags & MCI_NOTIFY) {
+ TRACE(mciavi, "MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
+ mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
+ wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ }
+
+ return 0;
+}
+
+/***************************************************************************
+ * AVI_mciGetDevCaps [internal]
+ */
static DWORD AVI_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms)
{
- WINE_MCIAVI* wmm = AVI_mciGetOpenDev(wDevID);
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
- if (wmm == NULL) return MCIERR_INVALID_DEVICE_ID;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
if (dwFlags & MCI_GETDEVCAPS_ITEM) {
switch (lpParms->dwItem) {
@@ -203,12 +449,15 @@
return 0;
}
-static DWORD AVI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMSA lpParms)
+/***************************************************************************
+ * AVI_mciInfo [internal]
+ */
+static DWORD AVI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_INFO_PARMSA lpParms)
{
DWORD ret = 0;
LPSTR str = 0;
WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
-
+
TRACE(mciavi, "(%04X, %08lX, %p) : stub;\n", wDevID, dwFlags, lpParms);
if (lpParms == NULL || lpParms->lpstrReturn == NULL) {
@@ -246,22 +495,443 @@
return ret;
}
-static DWORD AVI_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
+/***************************************************************************
+ * AVI_mciPut [internal]
+ */
+static DWORD AVI_mciPut(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_PUT_PARMS lpParms)
{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+ RECT rc;
+ dbg_decl_str(mciavi, 256);
+
TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ if (dwFlags & MCI_DGV_RECT) {
+ rc = lpParms->rc;
+ } else {
+ SetRectEmpty(&rc);
+ }
+
+ if (dwFlags & MCI_DGV_PUT_CLIENT) {
+ dsprintf(mciavi, "PUT_CLIENT");
+ }
+ if (dwFlags & MCI_DGV_PUT_DESTINATION) {
+ dsprintf(mciavi, "PUT_DESTINATION");
+ }
+ if (dwFlags & MCI_DGV_PUT_FRAME) {
+ dsprintf(mciavi, "PUT_FRAME");
+ }
+ if (dwFlags & MCI_DGV_PUT_SOURCE) {
+ dsprintf(mciavi, "PUT_SOURCE");
+ }
+ if (dwFlags & MCI_DGV_PUT_VIDEO) {
+ dsprintf(mciavi, "PUT_VIDEO");
+ }
+ if (dwFlags & MCI_DGV_PUT_WINDOW) {
+ dsprintf(mciavi, "PUT_WINDOW");
+ }
+ dsprintf(mciavi, " (%d,%d,%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom);
+
return 0;
}
+/***************************************************************************
+ * AVI_mciWindow [internal]
+ */
+static DWORD AVI_mciWindow(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_WINDOW_PARMSA lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lX, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ if (dwFlags & MCI_DGV_WINDOW_HWND) {
+ TRACE(mciavi, "Setting hWnd to %08lx\n", (DWORD)lpParms->hWnd);
+ }
+ if (dwFlags & MCI_DGV_WINDOW_STATE) {
+ TRACE(mciavi, "Setting nCmdShow to %d\n", lpParms->nCmdShow);
+ }
+ if (dwFlags & MCI_DGV_WINDOW_TEXT) {
+ TRACE(mciavi, "Setting caption to '%s'\n", lpParms->lpstrText);
+ }
+
+ return 0;
+}
+
+/*****************************************************************************
+ * AVI_mciLoad [internal]
+ */
+static DWORD AVI_mciLoad(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_LOAD_PARMSA lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciSave [internal]
+ */
+static DWORD AVI_mciSave(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_SAVE_PARMSA lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciFreeze [internal]
+ */
+static DWORD AVI_mciFreeze(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciRealize [internal]
+ */
+static DWORD AVI_mciRealize(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciUnFreeze [internal]
+ */
+static DWORD AVI_mciUnFreeze(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciUpdate [internal]
+ */
+static DWORD AVI_mciUpdate(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_UPDATE_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciWhere [internal]
+ */
+static DWORD AVI_mciWhere(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciStep [internal]
+ */
+static DWORD AVI_mciStep(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_STEP_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciCopy [internal]
+ */
+static DWORD AVI_mciCopy(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_COPY_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciCut [internal]
+ */
+static DWORD AVI_mciCut(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_CUT_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciDelete [internal]
+ */
+static DWORD AVI_mciDelete(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_DELETE_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciPaste [internal]
+ */
+static DWORD AVI_mciPaste(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_PASTE_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciCue [internal]
+ */
+static DWORD AVI_mciCue(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_CUE_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciCapture [internal]
+ */
+static DWORD AVI_mciCapture(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_CAPTURE_PARMSA lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciMonitor [internal]
+ */
+static DWORD AVI_mciMonitor(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_MONITOR_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciReserve [internal]
+ */
+static DWORD AVI_mciReserve(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_RESERVE_PARMSA lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciSetAudio [internal]
+ */
+static DWORD AVI_mciSetAudio(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_SETAUDIO_PARMSA lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciSignal [internal]
+ */
+static DWORD AVI_mciSignal(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_SIGNAL_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciSetVideo [internal]
+ */
+static DWORD AVI_mciSetVideo(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_SETVIDEO_PARMSA lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciQuality [internal]
+ */
+static DWORD AVI_mciQuality(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_QUALITY_PARMSA lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciList [internal]
+ */
+static DWORD AVI_mciList(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_LIST_PARMSA lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciUndo [internal]
+ */
+static DWORD AVI_mciUndo(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciConfigure [internal]
+ */
+static DWORD AVI_mciConfigure(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
+
+/******************************************************************************
+ * AVI_mciRestore [internal]
+ */
+static DWORD AVI_mciRestore(UINT16 wDevID, DWORD dwFlags, LPMCI_DGV_RESTORE_PARMSA lpParms)
+{
+ WINE_MCIAVI* wma = AVI_mciGetOpenDev(wDevID);
+
+ TRACE(mciavi, "(%04x, %08lx, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+ if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;
+ if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;
+
+ return 0;
+}
/*======================================================================*
* MCI AVI entry points *
*======================================================================*/
/**************************************************************************
- * MCIAVI_DriverProc32 [sample driver]
+ * MCIAVI_DriverProc [sample driver]
*/
-LONG MCIAVI_DriverProc32(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg,
- DWORD dwParam1, DWORD dwParam2)
+LONG MCIAVI_DriverProc(DWORD dwDevID, HDRVR16 hDriv, DWORD wMsg,
+ DWORD dwParam1, DWORD dwParam2)
{
switch (wMsg) {
case DRV_LOAD: return 1;
@@ -274,34 +944,49 @@
case DRV_CONFIGURE: MessageBoxA(0, "Sample AVI Wine Driver !", "MM-Wine Driver", MB_OK); return 1;
case DRV_INSTALL: return DRVCNF_RESTART;
case DRV_REMOVE: return DRVCNF_RESTART;
- case MCI_OPEN_DRIVER: return AVI_mciOpen (dwDevID, dwParam1, (LPMCI_OPEN_PARMSA) dwParam2);
- case MCI_CLOSE_DRIVER: return AVI_mciClose (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
- case MCI_PLAY: return AVI_mciPlay (dwDevID, dwParam1, (LPMCI_PLAY_PARMS) dwParam2);
- case MCI_RECORD: return AVI_mciRecord (dwDevID, dwParam1, (LPMCI_RECORD_PARMS) dwParam2);
- case MCI_STOP: return AVI_mciStop (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
- case MCI_SET: return AVI_mciSet (dwDevID, dwParam1, (LPMCI_SET_PARMS) dwParam2);
- case MCI_PAUSE: return AVI_mciPause (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
- case MCI_RESUME: return AVI_mciResume (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
- case MCI_STATUS: return AVI_mciStatus (dwDevID, dwParam1, (LPMCI_STATUS_PARMS) dwParam2);
- case MCI_GETDEVCAPS: return AVI_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)dwParam2);
- case MCI_INFO: return AVI_mciInfo (dwDevID, dwParam1, (LPMCI_INFO_PARMSA) dwParam2);
- case MCI_SEEK: return AVI_mciSeek (dwDevID, dwParam1, (LPMCI_SEEK_PARMS) dwParam2);
- case MCI_LOAD:
- case MCI_SAVE:
- case MCI_FREEZE:
- case MCI_PUT:
- case MCI_REALIZE:
- case MCI_UNFREEZE:
- case MCI_UPDATE:
- case MCI_WHERE:
- case MCI_WINDOW:
- case MCI_STEP:
- case MCI_SPIN:
+
+ case MCI_OPEN_DRIVER: return AVI_mciOpen (dwDevID, dwParam1, (LPMCI_DGV_OPEN_PARMSA) dwParam2);
+ case MCI_CLOSE_DRIVER: return AVI_mciClose (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
+ case MCI_PLAY: return AVI_mciPlay (dwDevID, dwParam1, (LPMCI_PLAY_PARMS) dwParam2);
+ case MCI_RECORD: return AVI_mciRecord (dwDevID, dwParam1, (LPMCI_DGV_RECORD_PARMS) dwParam2);
+ case MCI_STOP: return AVI_mciStop (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
+ case MCI_SET: return AVI_mciSet (dwDevID, dwParam1, (LPMCI_DGV_SET_PARMS) dwParam2);
+ case MCI_PAUSE: return AVI_mciPause (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
+ case MCI_RESUME: return AVI_mciResume (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
+ case MCI_STATUS: return AVI_mciStatus (dwDevID, dwParam1, (LPMCI_DGV_STATUS_PARMSA) dwParam2);
+ case MCI_GETDEVCAPS: return AVI_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS) dwParam2);
+ case MCI_INFO: return AVI_mciInfo (dwDevID, dwParam1, (LPMCI_DGV_INFO_PARMSA) dwParam2);
+ case MCI_SEEK: return AVI_mciSeek (dwDevID, dwParam1, (LPMCI_SEEK_PARMS) dwParam2);
+ case MCI_PUT: return AVI_mciPut (dwDevID, dwParam1, (LPMCI_DGV_PUT_PARMS) dwParam2);
+ case MCI_WINDOW: return AVI_mciWindow (dwDevID, dwParam1, (LPMCI_DGV_WINDOW_PARMSA) dwParam2);
+ case MCI_LOAD: return AVI_mciLoad (dwDevID, dwParam1, (LPMCI_DGV_LOAD_PARMSA) dwParam2);
+ case MCI_SAVE: return AVI_mciSave (dwDevID, dwParam1, (LPMCI_DGV_SAVE_PARMSA) dwParam2);
+ case MCI_FREEZE: return AVI_mciFreeze (dwDevID, dwParam1, (LPMCI_DGV_RECT_PARMS) dwParam2);
+ case MCI_REALIZE: return AVI_mciRealize (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
+ case MCI_UNFREEZE: return AVI_mciUnFreeze (dwDevID, dwParam1, (LPMCI_DGV_RECT_PARMS) dwParam2);
+ case MCI_UPDATE: return AVI_mciUpdate (dwDevID, dwParam1, (LPMCI_DGV_UPDATE_PARMS) dwParam2);
+ case MCI_WHERE: return AVI_mciWhere (dwDevID, dwParam1, (LPMCI_DGV_RECT_PARMS) dwParam2);
+ case MCI_STEP: return AVI_mciStep (dwDevID, dwParam1, (LPMCI_DGV_STEP_PARMS) dwParam2);
+ case MCI_COPY: return AVI_mciCopy (dwDevID, dwParam1, (LPMCI_DGV_COPY_PARMS) dwParam2);
+ case MCI_CUT: return AVI_mciCut (dwDevID, dwParam1, (LPMCI_DGV_CUT_PARMS) dwParam2);
+ case MCI_DELETE: return AVI_mciDelete (dwDevID, dwParam1, (LPMCI_DGV_DELETE_PARMS) dwParam2);
+ case MCI_PASTE: return AVI_mciPaste (dwDevID, dwParam1, (LPMCI_DGV_PASTE_PARMS) dwParam2);
+ case MCI_CUE: return AVI_mciCue (dwDevID, dwParam1, (LPMCI_DGV_CUE_PARMS) dwParam2);
+ /* Digital Video specific */
+ case MCI_CAPTURE: return AVI_mciCapture (dwDevID, dwParam1, (LPMCI_DGV_CAPTURE_PARMSA) dwParam2);
+ case MCI_MONITOR: return AVI_mciMonitor (dwDevID, dwParam1, (LPMCI_DGV_MONITOR_PARMS) dwParam2);
+ case MCI_RESERVE: return AVI_mciReserve (dwDevID, dwParam1, (LPMCI_DGV_RESERVE_PARMSA) dwParam2);
+ case MCI_SETAUDIO: return AVI_mciSetAudio (dwDevID, dwParam1, (LPMCI_DGV_SETAUDIO_PARMSA) dwParam2);
+ case MCI_SIGNAL: return AVI_mciSignal (dwDevID, dwParam1, (LPMCI_DGV_SIGNAL_PARMS) dwParam2);
+ case MCI_SETVIDEO: return AVI_mciSetVideo (dwDevID, dwParam1, (LPMCI_DGV_SETVIDEO_PARMSA) dwParam2);
+ case MCI_QUALITY: return AVI_mciQuality (dwDevID, dwParam1, (LPMCI_DGV_QUALITY_PARMSA) dwParam2);
+ case MCI_LIST: return AVI_mciList (dwDevID, dwParam1, (LPMCI_DGV_LIST_PARMSA) dwParam2);
+ case MCI_UNDO: return AVI_mciUndo (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
+ case MCI_CONFIGURE: return AVI_mciConfigure (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
+ case MCI_RESTORE: return AVI_mciRestore (dwDevID, dwParam1, (LPMCI_DGV_RESTORE_PARMSA) dwParam2);
+
+ case MCI_SPIN:
case MCI_ESCAPE:
- case MCI_COPY:
- case MCI_CUT:
- case MCI_DELETE:
- case MCI_PASTE:
WARN(mciavi, "Unsupported command=%s\n", MCI_CommandToString(wMsg));
break;
case MCI_OPEN:
@@ -314,3 +999,5 @@
}
return MCIERR_UNRECOGNIZED_COMMAND;
}
+
+