[PATCH 13/13] dsound: Removed unused/conflicting code/vars. Added call to DSOUND_PullBuffer(). (resend)

Krzysztof Nikiel knik00 at gmail.com
Fri Feb 11 05:54:03 CST 2011


---
 dlls/dsound/mixer.c |   24 +++++-------------------
 1 files changed, 5 insertions(+), 19 deletions(-)

diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c
index 3542bdb..4e9e2c9 100644
--- a/dlls/dsound/mixer.c
+++ b/dlls/dsound/mixer.c
@@ -223,17 +223,15 @@ static DWORD DSOUND_MixToPrimary(const
DirectSoundDevice *device, DWORD writepos
 				DSOUND_CheckEvent(dsb, 0, 0);
 			} else if (dsb->state != STATE_STOPPED) {

-				/* if recovering, reset the mix position */
-				if ((dsb->state == STATE_STARTING) || recover) {
-					dsb->primary_mixpos = writepos;
-				}
-
 				/* if the buffer was starting, it must be playing now */
 				if (dsb->state == STATE_STARTING)
 					dsb->state = STATE_PLAYING;

 				/* mix next buffer into the main buffer */
-				len = DSOUND_MixOne(dsb, writepos, mixlen);
+				len = DSOUND_PullBuffer(dsb, writepos, mixlen);
+				if (len != mixlen)
+					ERR("Only %d/%d bytes from buffer %p\n", len, mixlen, dsb);
+

 				if (!minlen) minlen = len;

@@ -333,7 +331,7 @@ static void DSOUND_PerformMix(DirectSoundDevice *device)

 	if (device->priolevel != DSSCL_WRITEPRIMARY) {
 		BOOL recover = FALSE, all_stopped = FALSE;
-		DWORD playpos, writepos, writelead, maxq, frag, prebuff_max,
prebuff_left, size1, size2, mixplaypos, mixplaypos2;
+		DWORD playpos, writepos, writelead, maxq, frag, prebuff_max,
prebuff_left, size1, size2;
 		LPVOID buf1, buf2;
 		BOOL lock = (device->hwbuf && !(device->drvdesc.dwFlags &
DSDDESC_DONTNEEDPRIMARYLOCK));
 		BOOL mustlock = FALSE;
@@ -352,9 +350,6 @@ static void DSOUND_PerformMix(DirectSoundDevice *device)
 		      playpos,writepos,device->playpos,device->mixpos,device->buflen);
 		assert(device->playpos < device->buflen);

-		mixplaypos = DSOUND_bufpos_to_mixpos(device, device->playpos);
-		mixplaypos2 = DSOUND_bufpos_to_mixpos(device, playpos);
-
 		/* calc maximum prebuff */
 		prebuff_max = (device->prebuf * device->fraglen);
 		if (!device->hwbuf && playpos + prebuff_max >= device->helfrags *
device->fraglen)
@@ -425,15 +420,6 @@ static void DSOUND_PerformMix(DirectSoundDevice *device)
 		/* do the mixing */
 		frag = DSOUND_MixToPrimary(device, writepos, maxq, mustlock,
recover, &all_stopped);

-		if (frag + writepos > device->buflen)
-		{
-			DWORD todo = device->buflen - writepos;
-			device->normfunction(device->mix_buffer +
DSOUND_bufpos_to_mixpos(device, writepos), device->buffer + writepos,
todo);
-			device->normfunction(device->mix_buffer, device->buffer, frag - todo);
-		}
-		else
-			device->normfunction(device->mix_buffer +
DSOUND_bufpos_to_mixpos(device, writepos), device->buffer + writepos,
frag);
-
 		/* update the mix position, taking wrap-around into account */
 		device->mixpos = writepos + frag;
 		device->mixpos %= device->buflen;
-- 
1.7.2.3



More information about the wine-patches mailing list