Sync avifil32, hnetcfg, initpki, localspl, localui, mciavi32, mciqtz32, mciseq and...
[reactos.git] / reactos / dll / win32 / mciqtz32 / mciqtz.c
index 8371227..b98e163 100644 (file)
@@ -105,6 +105,7 @@ static DWORD MCIQTZ_drvClose(DWORD dwDevID)
         /* finish all outstanding things */
         MCIQTZ_mciClose(dwDevID, MCI_WAIT, NULL);
 
+        mciSetDriverData(dwDevID, 0);
         HeapFree(GetProcessHeap(), 0, wma);
         return 1;
     }
@@ -166,7 +167,7 @@ static DWORD MCIQTZ_mciOpen(UINT wDevID, DWORD dwFlags,
         goto err;
     }
 
-    if (!((dwFlags & MCI_OPEN_ELEMENT) && (dwFlags & MCI_OPEN_ELEMENT))) {
+    if (!(dwFlags & MCI_OPEN_ELEMENT) || (dwFlags & MCI_OPEN_ELEMENT_ID)) {
         TRACE("Wrong dwFlags %x\n", dwFlags);
         goto err;
     }
@@ -353,10 +354,8 @@ static DWORD MCIQTZ_mciGetDevCaps(UINT wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_P
     if (!wma)
         return MCIERR_INVALID_DEVICE_ID;
 
-    if (!(dwFlags & MCI_STATUS_ITEM)) {
-        WARN("No capability item specified\n");
-        return MCIERR_UNRECOGNIZED_COMMAND;
-    }
+    if (!(dwFlags & MCI_GETDEVCAPS_ITEM))
+        return MCIERR_MISSING_PARAMETER;
 
     switch (lpParms->dwItem) {
         case MCI_GETDEVCAPS_CAN_RECORD:
@@ -395,9 +394,44 @@ static DWORD MCIQTZ_mciGetDevCaps(UINT wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_P
             lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
             TRACE("MCI_GETDEVCAPS_CAN_SAVE = %08x\n", lpParms->dwReturn);
             break;
+        case MCI_DGV_GETDEVCAPS_CAN_REVERSE:
+            lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+            TRACE("MCI_DGV_GETDEVCAPS_CAN_REVERSE = %08x\n", lpParms->dwReturn);
+            break;
+        case MCI_DGV_GETDEVCAPS_CAN_STRETCH:
+            lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); /* FIXME */
+            TRACE("MCI_DGV_GETDEVCAPS_CAN_STRETCH = %08x\n", lpParms->dwReturn);
+            break;
+        case MCI_DGV_GETDEVCAPS_CAN_LOCK:
+            lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+            TRACE("MCI_DGV_GETDEVCAPS_CAN_LOCK = %08x\n", lpParms->dwReturn);
+            break;
+        case MCI_DGV_GETDEVCAPS_CAN_FREEZE:
+            lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+            TRACE("MCI_DGV_GETDEVCAPS_CAN_FREEZE = %08x\n", lpParms->dwReturn);
+            break;
+        case MCI_DGV_GETDEVCAPS_CAN_STR_IN:
+            lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+            TRACE("MCI_DGV_GETDEVCAPS_CAN_STRETCH_INPUT = %08x\n", lpParms->dwReturn);
+            break;
+        case MCI_DGV_GETDEVCAPS_HAS_STILL:
+            lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
+            TRACE("MCI_DGV_GETDEVCAPS_HAS_STILL = %08x\n", lpParms->dwReturn);
+            break;
+        case MCI_DGV_GETDEVCAPS_CAN_TEST:
+            lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); /* FIXME */
+            TRACE("MCI_DGV_GETDEVCAPS_CAN_TEST = %08x\n", lpParms->dwReturn);
+            break;
+        case MCI_DGV_GETDEVCAPS_MAX_WINDOWS:
+            lpParms->dwReturn = 1;
+            TRACE("MCI_DGV_GETDEVCAPS_MAX_WINDOWS = %u\n", lpParms->dwReturn);
+            return 0;
         default:
-            ERR("Unknown capability %08x\n", lpParms->dwItem);
-            return MCIERR_UNRECOGNIZED_COMMAND;
+            WARN("Unknown capability %08x\n", lpParms->dwItem);
+            /* Fall through */
+        case MCI_DGV_GETDEVCAPS_MAXIMUM_RATE: /* unknown to w2k */
+        case MCI_DGV_GETDEVCAPS_MINIMUM_RATE: /* unknown to w2k */
+            return MCIERR_UNSUPPORTED_FUNCTION;
     }
 
     return MCI_RESOURCE_RETURNED;
@@ -435,8 +469,25 @@ static DWORD MCIQTZ_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_DGV_SET_PARMS lpPar
         }
     }
 
-    if (dwFlags & ~MCI_SET_TIME_FORMAT)
-        FIXME("Flags not supported yet %08lX\n", dwFlags & ~MCI_SET_TIME_FORMAT);
+    if (dwFlags & MCI_SET_DOOR_OPEN)
+        FIXME("MCI_SET_DOOR_OPEN not implemented yet\n");
+    if (dwFlags & MCI_SET_DOOR_CLOSED)
+        FIXME("MCI_SET_DOOR_CLOSED not implemented yet\n");
+    if (dwFlags & MCI_SET_AUDIO)
+        FIXME("MCI_SET_AUDIO not implemented yet\n");
+    if (dwFlags & MCI_SET_VIDEO)
+        FIXME("MCI_SET_VIDEO not implemented yet\n");
+    if (dwFlags & MCI_SET_ON)
+        FIXME("MCI_SET_ON not implemented yet\n");
+    if (dwFlags & MCI_SET_OFF)
+        FIXME("MCI_SET_OFF not implemented yet\n");
+    if (dwFlags & MCI_SET_AUDIO_LEFT)
+        FIXME("MCI_SET_AUDIO_LEFT not implemented yet\n");
+    if (dwFlags & MCI_SET_AUDIO_RIGHT)
+        FIXME("MCI_SET_AUDIO_RIGHT not implemented yet\n");
+
+    if (dwFlags & ~0x7f03 /* All MCI_SET flags mask */)
+        ERR("Unknown flags %08x\n", dwFlags & ~0x7f03);
 
     return 0;
 }
@@ -603,6 +654,27 @@ static DWORD MCIQTZ_mciWhere(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lp
     return 0;
 }
 
+/***************************************************************************
+ *                              MCIQTZ_mciSetAudio              [internal]
+ */
+static DWORD MCIQTZ_mciSetAudio(UINT wDevID, DWORD dwFlags, LPMCI_DGV_SETAUDIO_PARMSW lpParms)
+{
+    WINE_MCIQTZ *wma;
+
+    FIXME("(%04x, %08x, %p) : stub\n", wDevID, dwFlags, lpParms);
+
+    if (!lpParms)
+        return MCIERR_NULL_PARAMETER_BLOCK;
+
+    wma = MCIQTZ_mciGetOpenDev(wDevID);
+    if (!wma)
+        return MCIERR_INVALID_DEVICE_ID;
+
+    MCIQTZ_mciStop(wDevID, MCI_WAIT, NULL);
+
+    return 0;
+}
+
 /*======================================================================*
  *                          MCI QTZ entry points                        *
  *======================================================================*/
@@ -643,6 +715,8 @@ LRESULT CALLBACK MCIQTZ_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
         case MCI_SET:           return MCIQTZ_mciSet       (dwDevID, dwParam1, (LPMCI_DGV_SET_PARMS)       dwParam2);
         case MCI_STATUS:        return MCIQTZ_mciStatus    (dwDevID, dwParam1, (LPMCI_DGV_STATUS_PARMSW)   dwParam2);
         case MCI_WHERE:         return MCIQTZ_mciWhere     (dwDevID, dwParam1, (LPMCI_DGV_RECT_PARMS)      dwParam2);
+        /* Digital Video specific */
+        case MCI_SETAUDIO:      return MCIQTZ_mciSetAudio  (dwDevID, dwParam1, (LPMCI_DGV_SETAUDIO_PARMSW) dwParam2);
         case MCI_RECORD:
         case MCI_PAUSE:
         case MCI_RESUME:
@@ -665,7 +739,6 @@ LRESULT CALLBACK MCIQTZ_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
         case MCI_CAPTURE:
         case MCI_MONITOR:
         case MCI_RESERVE:
-        case MCI_SETAUDIO:
         case MCI_SIGNAL:
         case MCI_SETVIDEO:
         case MCI_QUALITY: