[Scummvm-cvs-logs] CVS: scummvm/sound mixer.cpp,1.27,1.28

Max Horn fingolfin at users.sourceforge.net
Mon Nov 18 17:51:02 CET 2002


Update of /cvsroot/scummvm/scummvm/sound
In directory sc8-pr-cvs1:/tmp/cvs-serv30029/sound

Modified Files:
	mixer.cpp 
Log Message:
Patch #639931: ALL: Fix for possible mixer distortion

Index: mixer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mixer.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- mixer.cpp	15 Nov 2002 10:47:36 -0000	1.27
+++ mixer.cpp	19 Nov 2002 01:50:15 -0000	1.28
@@ -837,8 +837,10 @@
 
 		while ((_posInFrame < _synth.pcm.length) && (len > 0)) {
 			int16 sample = (int16)((scale_sample(*ch) * volume) / 32);
-			*data++ += sample;
-			*data++ += sample;
+			*data = clamped_add_16(*data, sample);
+			data++;
+			*data = clamped_add_16(*data, sample);
+			data++;
 			len--;
 			ch++;
 			_posInFrame++;
@@ -957,8 +959,10 @@
 		ch = _synth.pcm.samples[0] + _posInFrame;
 		while ((_posInFrame < _synth.pcm.length) && (len > 0)) {
 			int16 sample = (int16)((scale_sample(*ch++) * volume) / 32);
-			*data++ += sample;
-			*data++ += sample;
+			*data = clamped_add_16(*data, sample);
+			data++;
+			*data = clamped_add_16(*data, sample);
+			data++;
 			len--;
 			_posInFrame++;
 		}
@@ -1083,10 +1087,12 @@
 	// Mix the samples in
 	for (uint i = 0; i < len; i++) {
 		int16 sample = (int16) ((int32) samples[i * channels] * volume / 256);
-		*data++ += sample;
+		*data = clamped_add_16(*data, sample);
+		data++;
 		if (channels > 1)
 			sample = (int16) ((int32) samples[i * channels + 1] * volume / 256);
-		*data++ += sample;
+		*data = clamped_add_16(*data, sample);
+		data++;
 	}
 
 	delete [] samples;





More information about the Scummvm-git-logs mailing list