[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