Akihiro Sagawa : winmm: Don' t allow to set time division property while playing.
Alexandre Julliard
julliard at winehq.org
Tue Jul 10 15:36:43 CDT 2018
Module: wine
Branch: master
Commit: 2cb326260b68634fec7a3a402808710fea159d99
URL: https://source.winehq.org/git/wine.git/?a=commit;h=2cb326260b68634fec7a3a402808710fea159d99
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Tue Jun 26 22:10:45 2018 +0900
winmm: Don't allow to set time division property while playing.
Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winmm/tests/midi.c | 6 ++++++
dlls/winmm/winmm.c | 8 ++++++--
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/dlls/winmm/tests/midi.c b/dlls/winmm/tests/midi.c
index 3b8bd22..c46286b 100644
--- a/dlls/winmm/tests/midi.c
+++ b/dlls/winmm/tests/midi.c
@@ -885,6 +885,12 @@ static void test_midiStream(UINT udev, HWND hwnd)
ok(ret > expected && ret < expected + MARGIN, "expected greater than %ums, got %ums\n", expected, ret);
expected = ret;
+ /* shouldn't set time division property while playing */
+ midiprop.tdiv.cbStruct = sizeof(midiprop.tdiv);
+ midiprop.tdiv.dwTimeDiv = 24;
+ rc = midiStreamProperty(hm, (void*)&midiprop, MIDIPROP_SET | MIDIPROP_TIMEDIV);
+ ok(rc == MMSYSERR_INVALPARAM, "midiStreamProperty(SET|TIMEDIV, dev=%d) rc=%s\n", udev, mmsys_error(rc));
+
ret = WaitForSingleObject(records.done, INFINITE);
ok(ret == WAIT_OBJECT_0, "WaitForSingleObject failed, got %d\n", ret);
diff --git a/dlls/winmm/winmm.c b/dlls/winmm/winmm.c
index ef7dcdf..4bba1a7 100644
--- a/dlls/winmm/winmm.c
+++ b/dlls/winmm/winmm.c
@@ -1539,9 +1539,13 @@ MMRESULT WINAPI midiStreamProperty(HMIDISTRM hMidiStrm, LPBYTE lpPropData, DWORD
ret = MMSYSERR_INVALPARAM;
} else if (dwProperty & MIDIPROP_SET) {
EnterCriticalSection(&lpMidiStrm->lock);
- lpMidiStrm->dwTimeDiv = mptd->dwTimeDiv;
+ if (lpMidiStrm->status != MSM_STATUS_PLAYING) {
+ lpMidiStrm->dwTimeDiv = mptd->dwTimeDiv;
+ TRACE("Setting time div to %d\n", mptd->dwTimeDiv);
+ }
+ else
+ ret = MMSYSERR_INVALPARAM;
LeaveCriticalSection(&lpMidiStrm->lock);
- TRACE("Setting time div to %d\n", mptd->dwTimeDiv);
} else if (dwProperty & MIDIPROP_GET) {
mptd->dwTimeDiv = lpMidiStrm->dwTimeDiv;
TRACE("Getting time div <= %d\n", mptd->dwTimeDiv);
More information about the wine-cvs
mailing list