[Scummvm-cvs-logs] CVS: scummvm/sound mixer.cpp,1.55,1.56

Max Horn fingolfin at users.sourceforge.net
Wed Jul 2 03:51:02 CEST 2003


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

Modified Files:
	mixer.cpp 
Log Message:
cleanup (code easier to read; slightly less rounding errors for the volume; and on BE systems, READ_BE_UINT16 is actually faster ;-)

Index: mixer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mixer.cpp,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -d -r1.55 -r1.56
--- mixer.cpp	27 Jun 2003 05:02:01 -0000	1.55
+++ mixer.cpp	2 Jul 2003 10:50:04 -0000	1.56
@@ -539,7 +539,7 @@
 
 	do {
 		do {
-			if (reverse_stereo == false) {
+			if (!reverse_stereo) {
 				*data = clamped_add_16(*data, left.interpolate(fp_pos));
 				data++;
 				*data = clamped_add_16(*data, right.interpolate(fp_pos));
@@ -577,11 +577,11 @@
 static int16 *mix_signed_mono_16(int16 *data, uint *len_ptr, byte **s_ptr, uint32 *fp_pos_ptr,
 										 int fp_speed, const int16 *vol_tab, byte *s_end, bool reverse_stereo) {
 	uint32 fp_pos = *fp_pos_ptr;
-	unsigned char volume = ((int)vol_tab[1]) / 8;
+	unsigned char volume = ((int)vol_tab[1]);
 	byte *s = *s_ptr;
 	uint len = *len_ptr;
 	do {
-		int16 sample = (((int16)(*s << 8) | *(s + 1)) * volume) / 32;
+		int16 sample = ((int16)READ_BE_UINT16(s) * volume) / 256;
 		fp_pos += fp_speed;
 
 		*data = clamped_add_16(*data, sample);
@@ -608,21 +608,24 @@
 static int16 *mix_signed_stereo_16(int16 *data, uint *len_ptr, byte **s_ptr, uint32 *fp_pos_ptr,
 										 int fp_speed, const int16 *vol_tab, byte *s_end, bool reverse_stereo) {
 	uint32 fp_pos = *fp_pos_ptr;
-	unsigned char volume = ((int)vol_tab[1]) / 8;
+	unsigned char volume = (int)vol_tab[1];
 	byte *s = *s_ptr;
 	uint len = *len_ptr;
+
 	do {
+		int16 leftS = ((int16)READ_BE_UINT16(s) * volume) / 256;
+		int16 rightS = ((int16)READ_BE_UINT16(s+2) * volume) / 256;
 		fp_pos += fp_speed;
 
-		if (reverse_stereo == false) {
-			*data = clamped_add_16(*data, (((int16)(*(s) << 8) | *(s + 1)) * volume) / 32);
+		if (!reverse_stereo) {
+			*data = clamped_add_16(*data, leftS);
 			data++;
-			*data = clamped_add_16(*data, (((int16)(*(s + 2) << 8) | *(s + 3)) * volume) / 32);
+			*data = clamped_add_16(*data, rightS);
 			data++;
 		} else {
-			*data = clamped_add_16(*data, (((int16)(*(s + 2) << 8) | *(s + 3)) * volume) / 32);
+			*data = clamped_add_16(*data, rightS);
 			data++;
-			*data = clamped_add_16(*data, (((int16)(*(s) << 8) | *(s + 1)) * volume) / 32);
+			*data = clamped_add_16(*data, leftS);
 			data++;
 		}
 		s += (fp_pos >> 16) << 2;





More information about the Scummvm-git-logs mailing list