---<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->state != STATE_STOPPED) {<br>
<br>- /* if recovering, reset the mix position */<br>- if ((dsb->state == STATE_STARTING) || recover) {<br>- dsb->primary_mixpos = writepos;<br>- }<br>
-<br> /* if the buffer was starting, it must be playing now */<br> if (dsb->state == STATE_STARTING)<br> dsb->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("Only %d/%d bytes from buffer %p\n", 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->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->hwbuf && !(device->drvdesc.dwFlags & DSDDESC_DONTNEEDPRIMARYLOCK));<br> BOOL mustlock = FALSE;<br>@@ -352,9 +350,6 @@ static void DSOUND_PerformMix(DirectSoundDevice *device)<br>
playpos,writepos,device->playpos,device->mixpos,device->buflen);<br> assert(device->playpos < device->buflen);<br> <br>- mixplaypos = DSOUND_bufpos_to_mixpos(device, device->playpos);<br>
- mixplaypos2 = DSOUND_bufpos_to_mixpos(device, playpos);<br>-<br> /* calc maximum prebuff */<br> prebuff_max = (device->prebuf * device->fraglen);<br> if (!device->hwbuf && playpos + prebuff_max >= device->helfrags * device->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, &all_stopped);<br> <br>- if (frag + writepos > device->buflen)<br>
- {<br>- DWORD todo = device->buflen - writepos;<br>- device->normfunction(device->mix_buffer + DSOUND_bufpos_to_mixpos(device, writepos), device->buffer + writepos, todo);<br>- device->normfunction(device->mix_buffer, device->buffer, frag - todo);<br>
- }<br>- else<br>- device->normfunction(device->mix_buffer + DSOUND_bufpos_to_mixpos(device, writepos), device->buffer + writepos, frag);<br>-<br> /* update the mix position, taking wrap-around into account */<br>
device->mixpos = writepos + frag;<br> device->mixpos %= device->buflen;<br>-- <br>1.7.2.3<br><br><br>