[PATCH 2/5] winmm: Preserve fractions in microseconds to compensate rounding errors.

Andrew Eikum aeikum at codeweavers.com
Mon Jul 9 09:42:20 CDT 2018


Sorry, didn't mean to sign-off on this, I pushed the wrong button in
my mail client...

On Mon, Jul 09, 2018 at 09:39:56AM -0500, Andrew Eikum wrote:
> > @@ -1178,8 +1181,11 @@ start_header:
> >  
> >  	/* do we have to wait ? */
> >  	if (me->dwDeltaTime) {
> > +	    DWORD delta;
> >  	    EnterCriticalSection(&lpMidiStrm->lock);
> > -	    lpMidiStrm->dwPositionMS += MMSYSTEM_MidiStream_Convert(lpMidiStrm, me->dwDeltaTime);
> > +	    delta = lpMidiStrm->remainder + MMSYSTEM_MidiStream_Convert(lpMidiStrm, me->dwDeltaTime);
> > +	    lpMidiStrm->dwPositionMS += delta / 1000;
> > +	    lpMidiStrm->remainder = delta % 1000;
> >  	    lpMidiStrm->dwPulses += me->dwDeltaTime;
> >  	    LeaveCriticalSection(&lpMidiStrm->lock);

Instead of storing the remainder in a separate variable, does it make
sense to change the units of dwPositionMS to microseconds?

Andrew



More information about the wine-devel mailing list