Author: akhaldi Date: Sun Jun 5 19:30:31 2016 New Revision: 71561
URL: http://svn.reactos.org/svn/reactos?rev=71561&view=rev Log: [MCIQTZ32] Sync with Wine Staging 1.9.11. CORE-11368
Modified: trunk/reactos/dll/win32/mciqtz32/mciqtz.c trunk/reactos/dll/win32/mciqtz32/mciqtz_private.h trunk/reactos/media/doc/README.WINE
Modified: trunk/reactos/dll/win32/mciqtz32/mciqtz.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mciqtz32/mciqtz.c... ============================================================================== --- trunk/reactos/dll/win32/mciqtz32/mciqtz.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mciqtz32/mciqtz.c [iso-8859-1] Sun Jun 5 19:30:31 2016 @@ -33,7 +33,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(mciqtz);
-static DWORD CALLBACK MCIQTZ_taskThread(LPVOID arg); +static DWORD MCIQTZ_mciClose(UINT, DWORD, LPMCI_GENERIC_PARMS); static DWORD MCIQTZ_mciStop(UINT, DWORD, LPMCI_GENERIC_PARMS);
/*======================================================================* @@ -70,40 +70,6 @@ return wma; }
-/*************************************************************************** - * MCIQTZ_relayTaskMessage [internal] - */ -static LRESULT MCIQTZ_relayTaskMessage(DWORD_PTR dwDevID, UINT wMsg, - DWORD dwFlags, LPARAM lpParms) -{ - WINE_MCIQTZ *wma; - LRESULT res; - HANDLE handles[2]; - DWORD ret; - TRACE("(%08lX, %08x, %08x, %08lx)\n", dwDevID, wMsg, dwFlags, lpParms); - - wma = MCIQTZ_mciGetOpenDev(dwDevID); - if (!wma) - return MCIERR_INVALID_DEVICE_ID; - EnterCriticalSection(&wma->cs); - wma->task.devid = dwDevID; - wma->task.msg = wMsg; - wma->task.flags = dwFlags; - wma->task.parms = lpParms; - SetEvent(wma->task.notify); - handles[0] = wma->task.done; - handles[1] = wma->task.thread; - ret = WaitForMultipleObjects(sizeof(handles)/sizeof(handles[0]), handles, - FALSE, INFINITE); - if (ret == WAIT_OBJECT_0) - res = wma->task.res; - else - res = MCIERR_INTERNAL; - LeaveCriticalSection(&wma->cs); - - return res; -} - /************************************************************************** * MCIQTZ_drvOpen [internal] */ @@ -123,25 +89,12 @@ return 0;
wma->stop_event = CreateEventW(NULL, FALSE, FALSE, NULL); - wma->task.notify = CreateEventW(NULL, FALSE, FALSE, NULL); - if (!wma->task.notify) goto err; - wma->task.done = CreateEventW(NULL, FALSE, FALSE, NULL); - if (!wma->task.done) goto err; - wma->task.thread = CreateThread(NULL, 0, MCIQTZ_taskThread, &wma->task, 0, NULL); - if (!wma->task.thread) goto err; - InitializeCriticalSection(&wma->cs); - wma->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": WINE_MCIQTZ"); modp->wType = MCI_DEVTYPE_DIGITAL_VIDEO; wma->wDevID = modp->wDeviceID; modp->wCustomCommandTable = wma->command_table = mciLoadCommandResource(MCIQTZ_hInstance, mciAviWStr, 0); mciSetDriverData(wma->wDevID, (DWORD_PTR)wma);
return modp->wDeviceID; -err: - if (wma->task.notify) CloseHandle(wma->task.notify); - if (wma->task.done) CloseHandle(wma->task.done); - HeapFree(GetProcessHeap(), 0, wma); - return 0; }
/************************************************************************** @@ -157,16 +110,9 @@
if (wma) { /* finish all outstanding things */ - MCIQTZ_relayTaskMessage(dwDevID, MCI_CLOSE_DRIVER, MCI_WAIT, 0); + MCIQTZ_mciClose(dwDevID, MCI_WAIT, NULL);
mciFreeCommandResource(wma->command_table); - MCIQTZ_relayTaskMessage(dwDevID, MCI_CLOSE, MCI_WAIT, 0); - WaitForSingleObject(wma->task.thread, INFINITE); - CloseHandle(wma->task.notify); - CloseHandle(wma->task.done); - CloseHandle(wma->task.thread); - wma->cs.DebugInfo->Spare[0] = 0; - DeleteCriticalSection(&wma->cs); mciSetDriverData(dwDevID, 0); CloseHandle(wma->stop_event); HeapFree(GetProcessHeap(), 0, wma); @@ -222,6 +168,9 @@ RECT rc = { 0, 0, 0, 0 };
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpOpenParms); + + if(!lpOpenParms) + return MCIERR_NULL_PARAMETER_BLOCK;
wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) @@ -446,6 +395,9 @@
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms);
+ if(!lpParms) + return MCIERR_NULL_PARAMETER_BLOCK; + wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) return MCIERR_INVALID_DEVICE_ID; @@ -503,6 +455,9 @@
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms);
+ if(!lpParms) + return MCIERR_NULL_PARAMETER_BLOCK; + wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) return MCIERR_INVALID_DEVICE_ID; @@ -587,6 +542,29 @@ }
/*************************************************************************** + * MCIQTZ_mciResume [internal] + */ +static DWORD MCIQTZ_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +{ + WINE_MCIQTZ* wma; + HRESULT hr; + + TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); + + wma = MCIQTZ_mciGetOpenDev(wDevID); + if (!wma) + return MCIERR_INVALID_DEVICE_ID; + + hr = IMediaControl_Run(wma->pmctrl); + if (FAILED(hr)) { + TRACE("Cannot run filtergraph (hr = %x)\n", hr); + return MCIERR_INTERNAL; + } + + return 0; +} + +/*************************************************************************** * MCIQTZ_mciGetDevCaps [internal] */ static DWORD MCIQTZ_mciGetDevCaps(UINT wDevID, DWORD dwFlags, LPMCI_GETDEVCAPS_PARMS lpParms) @@ -594,6 +572,9 @@ WINE_MCIQTZ* wma;
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); + + if(!lpParms) + return MCIERR_NULL_PARAMETER_BLOCK;
wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) @@ -690,6 +671,9 @@ WINE_MCIQTZ* wma;
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); + + if(!lpParms) + return MCIERR_NULL_PARAMETER_BLOCK;
wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) @@ -744,6 +728,9 @@ DWORD ret = MCI_INTEGER_RETURNED;
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); + + if(!lpParms) + return MCIERR_NULL_PARAMETER_BLOCK;
wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) @@ -845,6 +832,9 @@
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms);
+ if(!lpParms) + return MCIERR_NULL_PARAMETER_BLOCK; + wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) return MCIERR_INVALID_DEVICE_ID; @@ -906,6 +896,9 @@ WINE_MCIQTZ *wma = MCIQTZ_mciGetOpenDev(wDevID);
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); + + if(!lpParms) + return MCIERR_NULL_PARAMETER_BLOCK;
if (!wma) return MCIERR_INVALID_DEVICE_ID; @@ -951,6 +944,9 @@
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms);
+ if(!lpParms) + return MCIERR_NULL_PARAMETER_BLOCK; + if (!wma) return MCIERR_INVALID_DEVICE_ID;
@@ -996,6 +992,9 @@ DWORD res = 0;
TRACE("%04x, %08x, %p\n", wDevID, dwFlags, lpParms); + + if(!lpParms) + return MCIERR_NULL_PARAMETER_BLOCK;
wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) @@ -1058,6 +1057,9 @@
TRACE("(%04x, %08x, %p)\n", wDevID, dwFlags, lpParms);
+ if(!lpParms) + return MCIERR_NULL_PARAMETER_BLOCK; + wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) return MCIERR_INVALID_DEVICE_ID; @@ -1096,79 +1098,6 @@ return ret; }
-/*************************************************************************** - * MCIQTZ_taskThread [internal] - */ -static DWORD CALLBACK MCIQTZ_taskThread(LPVOID arg) -{ - WINE_MCIQTZ_TASK *task = (WINE_MCIQTZ_TASK *)arg; - - for (;;) { - DWORD ret = WaitForSingleObject(task->notify, INFINITE); - if (ret != WAIT_OBJECT_0) { - TRACE("Got error (%u)\n", ret); - continue; - } - - switch (task->msg) { - case MCI_OPEN_DRIVER: - task->res = MCIQTZ_mciOpen(task->devid, task->flags, (LPMCI_DGV_OPEN_PARMSW)task->parms); - break; - case MCI_CLOSE_DRIVER: - task->res = MCIQTZ_mciClose(task->devid, task->flags, (LPMCI_GENERIC_PARMS)task->parms); - break; - case MCI_PLAY: - task->res = MCIQTZ_mciPlay(task->devid, task->flags, (LPMCI_PLAY_PARMS)task->parms); - break; - case MCI_SEEK: - task->res = MCIQTZ_mciSeek(task->devid, task->flags, (LPMCI_SEEK_PARMS)task->parms); - break; - case MCI_STOP: - task->res = MCIQTZ_mciStop(task->devid, task->flags, (LPMCI_GENERIC_PARMS)task->parms); - break; - case MCI_PAUSE: - task->res = MCIQTZ_mciPause(task->devid, task->flags, (LPMCI_GENERIC_PARMS)task->parms); - break; - case MCI_GETDEVCAPS: - task->res = MCIQTZ_mciGetDevCaps(task->devid, task->flags, (LPMCI_GETDEVCAPS_PARMS)task->parms); - break; - case MCI_SET: - task->res = MCIQTZ_mciSet(task->devid, task->flags, (LPMCI_DGV_SET_PARMS)task->parms); - break; - case MCI_STATUS: - task->res = MCIQTZ_mciStatus(task->devid, task->flags, (LPMCI_DGV_STATUS_PARMSW)task->parms); - break; - case MCI_WHERE: - task->res = MCIQTZ_mciWhere(task->devid, task->flags, (LPMCI_DGV_RECT_PARMS)task->parms); - break; - case MCI_SETAUDIO: - task->res = MCIQTZ_mciSetAudio(task->devid, task->flags, (LPMCI_DGV_SETAUDIO_PARMSW)task->parms); - break; - case MCI_UPDATE: - task->res = MCIQTZ_mciUpdate(task->devid, task->flags, (LPMCI_DGV_UPDATE_PARMS)task->parms); - break; - case MCI_WINDOW: - task->res = MCIQTZ_mciWindow(task->devid, task->flags, (LPMCI_DGV_WINDOW_PARMSW)task->parms); - break; - case MCI_PUT: - task->res = MCIQTZ_mciPut(task->devid, task->flags, (MCI_GENERIC_PARMS*)task->parms); - break; - case MCI_CLOSE: - /* Special internal message */ - SetEvent(task->done); - goto end; - default: - FIXME("Shouldn't receive another message (%04x)\n", task->msg); - task->res = MCIERR_UNRECOGNIZED_COMMAND; - break; - } - SetEvent(task->done); - } - -end: - return 0; -} - /*======================================================================* * MCI QTZ entry points * *======================================================================*/ @@ -1200,28 +1129,26 @@ return 1;
switch (wMsg) { - case MCI_OPEN_DRIVER: - case MCI_PLAY: - case MCI_SEEK: - case MCI_GETDEVCAPS: - case MCI_SET: - case MCI_STATUS: - case MCI_WHERE: - if (!dwParam2) return MCIERR_NULL_PARAMETER_BLOCK; - return MCIQTZ_relayTaskMessage(dwDevID, wMsg, dwParam1, dwParam2); - case MCI_CLOSE_DRIVER: - case MCI_STOP: - case MCI_PAUSE: - return MCIQTZ_relayTaskMessage(dwDevID, wMsg, dwParam1, dwParam2); + case MCI_OPEN_DRIVER: return MCIQTZ_mciOpen (dwDevID, dwParam1, (LPMCI_DGV_OPEN_PARMSW) dwParam2); + case MCI_CLOSE_DRIVER: return MCIQTZ_mciClose (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2); + case MCI_PLAY: return MCIQTZ_mciPlay (dwDevID, dwParam1, (LPMCI_PLAY_PARMS) dwParam2); + case MCI_SEEK: return MCIQTZ_mciSeek (dwDevID, dwParam1, (LPMCI_SEEK_PARMS) dwParam2); + case MCI_STOP: return MCIQTZ_mciStop (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2); + case MCI_PAUSE: return MCIQTZ_mciPause (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2); + case MCI_RESUME: return MCIQTZ_mciResume (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2); + case MCI_GETDEVCAPS: return MCIQTZ_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS) dwParam2); + 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: + case MCI_SETAUDIO: return MCIQTZ_mciSetAudio (dwDevID, dwParam1, (LPMCI_DGV_SETAUDIO_PARMSW) dwParam2); case MCI_UPDATE: + return MCIQTZ_mciUpdate(dwDevID, dwParam1, (LPMCI_DGV_UPDATE_PARMS)dwParam2); case MCI_WINDOW: + return MCIQTZ_mciWindow(dwDevID, dwParam1, (LPMCI_DGV_WINDOW_PARMSW)dwParam2); case MCI_PUT: - if (!dwParam2) return MCIERR_NULL_PARAMETER_BLOCK; - return MCIQTZ_relayTaskMessage(dwDevID, wMsg, dwParam1, dwParam2); + return MCIQTZ_mciPut(dwDevID, dwParam1, (MCI_GENERIC_PARMS*)dwParam2); case MCI_RECORD: - case MCI_RESUME: case MCI_INFO: case MCI_LOAD: case MCI_SAVE:
Modified: trunk/reactos/dll/win32/mciqtz32/mciqtz_private.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mciqtz32/mciqtz_p... ============================================================================== --- trunk/reactos/dll/win32/mciqtz32/mciqtz_private.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mciqtz32/mciqtz_private.h [iso-8859-1] Sun Jun 5 19:30:31 2016 @@ -26,17 +26,6 @@ #include <dshow.h>
typedef struct { - HANDLE thread; - HANDLE notify; - HANDLE done; - DWORD msg; - DWORD_PTR devid; - DWORD flags; - DWORD_PTR parms; - LRESULT res; -} WINE_MCIQTZ_TASK; - -typedef struct { MCIDEVICEID wDevID; BOOL opened; BOOL uninit; @@ -54,8 +43,6 @@ HANDLE callback; HANDLE thread; HANDLE stop_event; - CRITICAL_SECTION cs; - WINE_MCIQTZ_TASK task; } WINE_MCIQTZ;
#endif /* __WINE_PRIVATE_MCIQTZ_H */
Modified: trunk/reactos/media/doc/README.WINE URL: http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=7... ============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Sun Jun 5 19:30:31 2016 @@ -94,7 +94,7 @@ reactos/dll/win32/mapi32 # Synced to WineStaging-1.9.4 reactos/dll/win32/mciavi32 # Synced to WineStaging-1.9.11 reactos/dll/win32/mcicda # Synced to WineStaging-1.9.4 -reactos/dll/win32/mciqtz32 # Synced to WineStaging-1.9.4 +reactos/dll/win32/mciqtz32 # Synced to WineStaging-1.9.11 reactos/dll/win32/mciseq # Synced to WineStaging-1.9.4 reactos/dll/win32/mciwave # Synced to WineStaging-1.9.4 reactos/dll/win32/mgmtapi # Synced to WineStaging-1.9.4