---<br> dlls/dsound/mixer.c |   24 +++++-------------------<br> 1 files changed, 5 insertions(+), 19 deletions(-)<br><br>diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c<br>index 3542bdb..4e9e2c9 100644<br>--- a/dlls/dsound/mixer.c<br>
+++ b/dlls/dsound/mixer.c<br>@@ -223,17 +223,15 @@ static DWORD DSOUND_MixToPrimary(const DirectSoundDevice *device, DWORD writepos<br>                 DSOUND_CheckEvent(dsb, 0, 0);<br>             } else if (dsb-&gt;state != STATE_STOPPED) {<br>
 <br>-                /* if recovering, reset the mix position */<br>-                if ((dsb-&gt;state == STATE_STARTING) || recover) {<br>-                    dsb-&gt;primary_mixpos = writepos;<br>-                }<br>
-<br>                 /* if the buffer was starting, it must be playing now */<br>                 if (dsb-&gt;state == STATE_STARTING)<br>                     dsb-&gt;state = STATE_PLAYING;<br> <br>                 /* mix next buffer into the main buffer */<br>
-                len = DSOUND_MixOne(dsb, writepos, mixlen);<br>+                len = DSOUND_PullBuffer(dsb, writepos, mixlen);<br>+                if (len != mixlen)<br>+                    ERR(&quot;Only %d/%d bytes from buffer %p\n&quot;, len, mixlen, dsb);<br>
+<br> <br>                 if (!minlen) minlen = len;<br> <br>@@ -333,7 +331,7 @@ static void DSOUND_PerformMix(DirectSoundDevice *device)<br> <br>     if (device-&gt;priolevel != DSSCL_WRITEPRIMARY) {<br>         BOOL recover = FALSE, all_stopped = FALSE;<br>
-        DWORD playpos, writepos, writelead, maxq, frag, prebuff_max, prebuff_left, size1, size2, mixplaypos, mixplaypos2;<br>+        DWORD playpos, writepos, writelead, maxq, frag, prebuff_max, prebuff_left, size1, size2;<br>
         LPVOID buf1, buf2;<br>         BOOL lock = (device-&gt;hwbuf &amp;&amp; !(device-&gt;drvdesc.dwFlags &amp; DSDDESC_DONTNEEDPRIMARYLOCK));<br>         BOOL mustlock = FALSE;<br>@@ -352,9 +350,6 @@ static void DSOUND_PerformMix(DirectSoundDevice *device)<br>
               playpos,writepos,device-&gt;playpos,device-&gt;mixpos,device-&gt;buflen);<br>         assert(device-&gt;playpos &lt; device-&gt;buflen);<br> <br>-        mixplaypos = DSOUND_bufpos_to_mixpos(device, device-&gt;playpos);<br>
-        mixplaypos2 = DSOUND_bufpos_to_mixpos(device, playpos);<br>-<br>         /* calc maximum prebuff */<br>         prebuff_max = (device-&gt;prebuf * device-&gt;fraglen);<br>         if (!device-&gt;hwbuf &amp;&amp; playpos + prebuff_max &gt;= device-&gt;helfrags * device-&gt;fraglen)<br>
@@ -425,15 +420,6 @@ static void DSOUND_PerformMix(DirectSoundDevice *device)<br>         /* do the mixing */<br>         frag = DSOUND_MixToPrimary(device, writepos, maxq, mustlock, recover, &amp;all_stopped);<br> <br>-        if (frag + writepos &gt; device-&gt;buflen)<br>
-        {<br>-            DWORD todo = device-&gt;buflen - writepos;<br>-            device-&gt;normfunction(device-&gt;mix_buffer + DSOUND_bufpos_to_mixpos(device, writepos), device-&gt;buffer + writepos, todo);<br>-            device-&gt;normfunction(device-&gt;mix_buffer, device-&gt;buffer, frag - todo);<br>
-        }<br>-        else<br>-            device-&gt;normfunction(device-&gt;mix_buffer + DSOUND_bufpos_to_mixpos(device, writepos), device-&gt;buffer + writepos, frag);<br>-<br>         /* update the mix position, taking wrap-around into account */<br>
         device-&gt;mixpos = writepos + frag;<br>         device-&gt;mixpos %= device-&gt;buflen;<br>-- <br>1.7.2.3<br><br><br>