[PATCH 1/5] winmm: Don't allow to set time division property while playing.
Andrew Eikum
aeikum at codeweavers.com
Mon Jul 9 09:39:41 CDT 2018
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
On Tue, Jun 26, 2018 at 10:10:45PM +0900, Akihiro Sagawa wrote:
> Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
> ---
> 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-devel
mailing list