Author: akhaldi Date: Sun Jul 19 22:38:20 2015 New Revision: 68448
URL: http://svn.reactos.org/svn/reactos?rev=68448&view=rev Log: [MCIQTZ32] Sync with Wine Staging 1.7.47. CORE-9924
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 Jul 19 22:38:20 2015 @@ -33,7 +33,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(mciqtz);
-static DWORD MCIQTZ_mciClose(UINT, DWORD, LPMCI_GENERIC_PARMS); +static DWORD CALLBACK MCIQTZ_taskThread(LPVOID arg); static DWORD MCIQTZ_mciStop(UINT, DWORD, LPMCI_GENERIC_PARMS);
/*======================================================================* @@ -70,6 +70,40 @@ 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] */ @@ -88,12 +122,26 @@ if (!wma) 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; }
/************************************************************************** @@ -109,10 +157,17 @@
if (wma) { /* finish all outstanding things */ - MCIQTZ_mciClose(dwDevID, MCI_WAIT, NULL); + MCIQTZ_relayTaskMessage(dwDevID, MCI_CLOSE_DRIVER, MCI_WAIT, 0);
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); + DeleteCriticalSection(&wma->cs); mciSetDriverData(dwDevID, 0); + CloseHandle(wma->stop_event); HeapFree(GetProcessHeap(), 0, wma); return 1; } @@ -138,6 +193,20 @@ MessageBoxA(0, "Sample QTZ Wine Driver !", "MM-Wine Driver", MB_OK);
return 1; +} + +/************************************************************************** + * MCIQTZ_mciNotify [internal] + * + * Notifications in MCI work like a 1-element queue. + * Each new notification request supersedes the previous one. + */ +static void MCIQTZ_mciNotify(DWORD_PTR hWndCallBack, WINE_MCIQTZ* wma, UINT wStatus) +{ + MCIDEVICEID wDevID = wma->notify_devid; + HANDLE old = InterlockedExchangePointer(&wma->callback, NULL); + if (old) mciDriverNotify(old, wDevID, MCI_NOTIFY_SUPERSEDED); + mciDriverNotify(HWND_32(LOWORD(hWndCallBack)), wDevID, wStatus); }
/*************************************************************************** @@ -153,9 +222,6 @@
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpOpenParms);
- if (!lpOpenParms) - return MCIERR_NULL_PARAMETER_BLOCK; - wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) return MCIERR_INVALID_DEVICE_ID; @@ -198,6 +264,12 @@ hr = IGraphBuilder_QueryInterface(wma->pgraph, &IID_IBasicVideo, (void**)&wma->vidbasic); if (FAILED(hr)) { TRACE("Cannot get IBasicVideo interface (hr = %x)\n", hr); + goto err; + } + + hr = IGraphBuilder_QueryInterface(wma->pgraph, &IID_IBasicAudio, (void**)&wma->audio); + if (FAILED(hr)) { + TRACE("Cannot get IBasicAudio interface (hr = %x)\n", hr); goto err; }
@@ -243,6 +315,9 @@ return 0;
err: + if (wma->audio) + IBasicAudio_Release(wma->audio); + wma->audio = NULL; if (wma->vidbasic) IBasicVideo_Release(wma->vidbasic); wma->vidbasic = NULL; @@ -287,6 +362,7 @@ if (wma->opened) { IVideoWindow_Release(wma->vidwin); IBasicVideo_Release(wma->vidbasic); + IBasicAudio_Release(wma->audio); IMediaSeeking_Release(wma->seek); IMediaEvent_Release(wma->mevent); IGraphBuilder_Release(wma->pgraph); @@ -300,6 +376,63 @@ }
/*************************************************************************** + * MCIQTZ_notifyThread [internal] + */ +static DWORD CALLBACK MCIQTZ_notifyThread(LPVOID parm) +{ + WINE_MCIQTZ* wma = (WINE_MCIQTZ *)parm; + HRESULT hr; + HANDLE handle[2]; + DWORD n = 0, ret = 0; + + handle[n++] = wma->stop_event; + IMediaEvent_GetEventHandle(wma->mevent, (OAEVENT *)&handle[n++]); + + for (;;) { + DWORD r; + HANDLE old; + + r = WaitForMultipleObjects(n, handle, FALSE, INFINITE); + if (r == WAIT_OBJECT_0) { + TRACE("got stop event\n"); + old = InterlockedExchangePointer(&wma->callback, NULL); + if (old) + mciDriverNotify(old, wma->notify_devid, MCI_NOTIFY_ABORTED); + break; + } + else if (r == WAIT_OBJECT_0+1) { + LONG event_code; + LONG_PTR p1, p2; + do { + hr = IMediaEvent_GetEvent(wma->mevent, &event_code, &p1, &p2, 0); + if (SUCCEEDED(hr)) { + TRACE("got event_code = 0x%02x\n", event_code); + IMediaEvent_FreeEventParams(wma->mevent, event_code, p1, p2); + } + } while (hr == S_OK && event_code != EC_COMPLETE); + if (hr == S_OK && event_code == EC_COMPLETE) { + old = InterlockedExchangePointer(&wma->callback, NULL); + if (old) + mciDriverNotify(old, wma->notify_devid, MCI_NOTIFY_SUCCESSFUL); + break; + } + } + else { + TRACE("Unknown error (%d)\n", (int)r); + break; + } + } + + hr = IMediaControl_Stop(wma->pmctrl); + if (FAILED(hr)) { + TRACE("Cannot stop filtergraph (hr = %x)\n", hr); + ret = MCIERR_INTERNAL; + } + + return ret; +} + +/*************************************************************************** * MCIQTZ_mciPlay [internal] */ static DWORD MCIQTZ_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) @@ -312,12 +445,17 @@
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; + + ResetEvent(wma->stop_event); + if (dwFlags & MCI_NOTIFY) { + HANDLE old; + old = InterlockedExchangePointer(&wma->callback, HWND_32(LOWORD(lpParms->dwCallback))); + if (old) + mciDriverNotify(old, wma->notify_devid, MCI_NOTIFY_ABORTED); + }
IMediaSeeking_GetTimeFormat(wma->seek, &format); if (dwFlags & MCI_FROM) { @@ -345,8 +483,11 @@
IVideoWindow_put_Visible(wma->vidwin, OATRUE);
- if (dwFlags & MCI_NOTIFY) - mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), wDevID, MCI_NOTIFY_SUCCESSFUL); + wma->thread = CreateThread(NULL, 0, MCIQTZ_notifyThread, wma, 0, NULL); + if (!wma->thread) { + TRACE("Can't create thread\n"); + return MCIERR_INTERNAL; + } return 0; }
@@ -360,9 +501,6 @@ LONGLONG newpos;
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); - - if (!lpParms) - return MCIERR_NULL_PARAMETER_BLOCK;
wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) @@ -390,7 +528,7 @@ }
if (dwFlags & MCI_NOTIFY) - mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), wDevID, MCI_NOTIFY_SUCCESSFUL); + MCIQTZ_mciNotify(lpParms->dwCallback, wma, MCI_NOTIFY_SUCCESSFUL);
return 0; } @@ -401,7 +539,6 @@ static DWORD MCIQTZ_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { WINE_MCIQTZ* wma; - HRESULT hr;
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms);
@@ -412,10 +549,11 @@ if (!wma->opened) return 0;
- hr = IMediaControl_Stop(wma->pmctrl); - if (FAILED(hr)) { - TRACE("Cannot stop filtergraph (hr = %x)\n", hr); - return MCIERR_INTERNAL; + if (wma->thread) { + SetEvent(wma->stop_event); + WaitForSingleObject(wma->thread, INFINITE); + CloseHandle(wma->thread); + wma->thread = NULL; }
if (!wma->parent) @@ -455,9 +593,6 @@ WINE_MCIQTZ* wma;
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); - - if (!lpParms) - return MCIERR_NULL_PARAMETER_BLOCK;
wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) @@ -554,9 +689,6 @@ WINE_MCIQTZ* wma;
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); - - if (!lpParms) - return MCIERR_NULL_PARAMETER_BLOCK;
wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) @@ -611,9 +743,6 @@ 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) @@ -669,19 +798,9 @@ if (state == State_Stopped) lpParms->dwReturn = MAKEMCIRESOURCE(MCI_MODE_STOP, MCI_MODE_STOP); else if (state == State_Running) { - LONG code; - LONG_PTR p1, p2; - lpParms->dwReturn = MAKEMCIRESOURCE(MCI_MODE_PLAY, MCI_MODE_PLAY); - - do { - hr = IMediaEvent_GetEvent(wma->mevent, &code, &p1, &p2, 0); - if (hr == S_OK && code == EC_COMPLETE){ - lpParms->dwReturn = MAKEMCIRESOURCE(MCI_MODE_STOP, MCI_MODE_STOP); - IMediaControl_Stop(wma->pmctrl); - } - } while (hr == S_OK); - + if (!wma->thread || WaitForSingleObject(wma->thread, 0) == WAIT_OBJECT_0) + lpParms->dwReturn = MAKEMCIRESOURCE(MCI_MODE_STOP, MCI_MODE_STOP); } else if (state == State_Paused) lpParms->dwReturn = MAKEMCIRESOURCE(MCI_MODE_PAUSE, MCI_MODE_PAUSE); ret = MCI_RESOURCE_RETURNED; @@ -707,7 +826,7 @@ }
if (dwFlags & MCI_NOTIFY) - mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), wDevID, MCI_NOTIFY_SUCCESSFUL); + MCIQTZ_mciNotify(lpParms->dwCallback, wma, MCI_NOTIFY_SUCCESSFUL);
return ret; } @@ -724,9 +843,6 @@ DWORD ret = MCIERR_UNRECOGNIZED_COMMAND;
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms); - - if (!lpParms) - return MCIERR_NULL_PARAMETER_BLOCK;
wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) @@ -790,8 +906,6 @@
TRACE("(%04x, %08X, %p)\n", wDevID, dwFlags, lpParms);
- if (!lpParms) - return MCIERR_NULL_PARAMETER_BLOCK; if (!wma) return MCIERR_INVALID_DEVICE_ID; if (dwFlags & MCI_TEST) @@ -834,9 +948,6 @@ DWORD res = 0;
TRACE("%04x, %08x, %p\n", wDevID, dwFlags, lpParms); - - if (!lpParms) - return MCIERR_NULL_PARAMETER_BLOCK;
wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) @@ -895,18 +1006,115 @@ 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; + DWORD ret = 0; + + TRACE("(%04x, %08x, %p)\n", wDevID, dwFlags, lpParms);
wma = MCIQTZ_mciGetOpenDev(wDevID); if (!wma) return MCIERR_INVALID_DEVICE_ID;
- MCIQTZ_mciStop(wDevID, MCI_WAIT, NULL); - + if (!(dwFlags & MCI_DGV_SETAUDIO_ITEM)) { + FIXME("Unknown flags (%08x)\n", dwFlags); + return 0; + } + + if (dwFlags & MCI_DGV_SETAUDIO_ITEM) { + switch (lpParms->dwItem) { + case MCI_DGV_SETAUDIO_VOLUME: + if (dwFlags & MCI_DGV_SETAUDIO_VALUE) { + long vol = -10000; + HRESULT hr; + if (lpParms->dwValue > 1000) { + ret = MCIERR_OUTOFRANGE; + break; + } + if (dwFlags & MCI_TEST) + break; + vol += (long)lpParms->dwValue * 10; + hr = IBasicAudio_put_Volume(wma->audio, vol); + if (FAILED(hr)) { + WARN("Cannot set volume (hr = %x)\n", hr); + ret = MCIERR_INTERNAL; + } + } + break; + default: + FIXME("Unknown item %08x\n", lpParms->dwItem); + break; + } + } + + 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_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; }
@@ -941,22 +1149,25 @@ return 1;
switch (wMsg) { - 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_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); + 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); /* Digital Video specific */ - case MCI_SETAUDIO: return MCIQTZ_mciSetAudio (dwDevID, dwParam1, (LPMCI_DGV_SETAUDIO_PARMSW) dwParam2); + case MCI_SETAUDIO: 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); + if (!dwParam2) return MCIERR_NULL_PARAMETER_BLOCK; + return MCIQTZ_relayTaskMessage(dwDevID, wMsg, dwParam1, dwParam2); case MCI_PUT: case MCI_RECORD: case MCI_RESUME:
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 Jul 19 22:38:20 2015 @@ -26,6 +26,17 @@ #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; @@ -35,9 +46,16 @@ IMediaEvent* mevent; IVideoWindow* vidwin; IBasicVideo* vidbasic; + IBasicAudio* audio; DWORD time_format; UINT command_table; - HWND parent; + HWND parent; + MCIDEVICEID notify_devid; + 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=6... ============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Sun Jul 19 22:38:20 2015 @@ -97,7 +97,7 @@ reactos/dll/win32/mapi32 # Synced to WineStaging-1.7.37 reactos/dll/win32/mciavi32 # Synced to WineStaging-1.7.37 reactos/dll/win32/mcicda # Synced to WineStaging-1.7.37 -reactos/dll/win32/mciqtz32 # Synced to WineStaging-1.7.37 +reactos/dll/win32/mciqtz32 # Synced to WineStaging-1.7.47 reactos/dll/win32/mciseq # Synced to WineStaging-1.7.37 reactos/dll/win32/mciwave # Synced to WineStaging-1.7.37 reactos/dll/win32/mgmtapi # Synced to WineStaging-1.7.37