[Scummvm-cvs-logs] CVS: scummvm/sound mixer.cpp,1.12,1.13 mixer.h,1.6,1.7

Pawe? Ko?odziejski aquadran at users.sourceforge.net
Wed Oct 2 10:34:26 CEST 2002


Update of /cvsroot/scummvm/scummvm/sound
In directory usw-pr-cvs1:/tmp/cvs-serv1845/sound

Modified Files:
	mixer.cpp mixer.h 
Log Message:
added panning control in imuse and reverse stereo support

Index: mixer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mixer.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- mixer.cpp	2 Oct 2002 10:12:19 -0000	1.12
+++ mixer.cpp	2 Oct 2002 17:31:54 -0000	1.13
@@ -343,7 +343,7 @@
 }
 
 static int16 * mix_signed_mono_8(int16 * data, uint * len_ptr, byte ** s_ptr, uint32 * fp_pos_ptr,
-								int fp_speed, const int16 * vol_tab, byte * s_end) {
+								int fp_speed, const int16 * vol_tab, byte * s_end, bool reverse_stereo) {
 	uint32 fp_pos = *fp_pos_ptr;
 	byte *s = *s_ptr;
 	uint len = *len_ptr;
@@ -382,7 +382,7 @@
 }
 
 static int16 * mix_unsigned_mono_8(int16 * data, uint * len_ptr, byte ** s_ptr, uint32 * fp_pos_ptr,
-											int fp_speed, const int16 * vol_tab, byte * s_end) {
+											int fp_speed, const int16 * vol_tab, byte * s_end, bool reverse_stereo) {
 	uint32 fp_pos = *fp_pos_ptr;
 	byte *s = *s_ptr;
 	uint len = *len_ptr;
@@ -421,13 +421,13 @@
 }
 
 static int16 * mix_signed_stereo_8(int16 * data, uint * len_ptr, byte ** s_ptr, uint32 * fp_pos_ptr,
-										int fp_speed, const int16 * vol_tab, byte *s_end) {
+										int fp_speed, const int16 * vol_tab, byte *s_end, bool reverse_stereo) {
 	warning("Mixing stereo signed 8 bit is not supported yet ");
 
 	return data;
 }
 static int16 * mix_unsigned_stereo_8(int16 * data, uint * len_ptr, byte ** s_ptr, uint32 * fp_pos_ptr,
-										int fp_speed, const int16 * vol_tab, byte * s_end) {
+										int fp_speed, const int16 * vol_tab, byte * s_end, bool reverse_stereo) {
 	uint32 fp_pos = *fp_pos_ptr;
 	byte *s = *s_ptr;
 	uint len = *len_ptr;
@@ -438,10 +438,17 @@
 
 	do {
 		do {
-			*data = clamped_add_16(*data, left.interpolate(fp_pos));
-			data++;
-			*data = clamped_add_16(*data, right.interpolate(fp_pos));
-			data++;
+			if (reverse_stereo == false) {
+				*data = clamped_add_16(*data, left.interpolate(fp_pos));
+				data++;
+				*data = clamped_add_16(*data, right.interpolate(fp_pos));
+				data++;
+			} else {
+				*data = clamped_add_16(*data, right.interpolate(fp_pos));
+				data++;
+				*data = clamped_add_16(*data, left.interpolate(fp_pos));
+				data++;
+			}
 
 			fp_pos += fp_speed;
 			inc = (fp_pos >> 16) << 1;
@@ -467,7 +474,7 @@
 	return data;
 }
 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) {
+										 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;
 	byte *s = *s_ptr;
@@ -492,13 +499,13 @@
 	return data;
 }
 static int16 *mix_unsigned_mono_16(int16 *data, uint * len_ptr, byte ** s_ptr, uint32 * fp_pos_ptr,
-										 int fp_speed, const int16 * vol_tab, byte * s_end) {
+										 int fp_speed, const int16 * vol_tab, byte * s_end, bool reverse_stereo) {
 	warning("Mixing mono unsigned 16 bit is not supported yet ");
 
 	return data;
 }
 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) {
+										 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;
 	byte *s = *s_ptr;
@@ -506,11 +513,17 @@
 	do {
 		fp_pos += fp_speed;
 
-		*data = clamped_add_16(*data, (((int16)(*(s) << 8) | *(s + 1)) * volume) / 32);
-		data++;
-		*data = clamped_add_16(*data, (((int16)(*(s + 2) << 8) | *(s + 3)) * volume) / 32);
-		data++;
-
+		if (reverse_stereo == false) {
+			*data = clamped_add_16(*data, (((int16)(*(s) << 8) | *(s + 1)) * volume) / 32);
+			data++;
+			*data = clamped_add_16(*data, (((int16)(*(s + 2) << 8) | *(s + 3)) * volume) / 32);
+			data++;
+		} else {
+			*data = clamped_add_16(*data, (((int16)(*(s + 2) << 8) | *(s + 3)) * volume) / 32);
+			data++;
+			*data = clamped_add_16(*data, (((int16)(*(s) << 8) | *(s + 1)) * volume) / 32);
+			data++;
+		}
 		s += (fp_pos >> 16) << 2;
 		fp_pos &= 0x0000FFFF;
 	} while ((--len) && (s < s_end));
@@ -522,7 +535,7 @@
 	return data;
 }
 static int16 * mix_unsigned_stereo_16(int16 * data, uint * len_ptr, byte ** s_ptr, uint32 * fp_pos_ptr,
-											 int fp_speed, const int16 * vol_tab, byte * s_end) {
+											 int fp_speed, const int16 * vol_tab, byte * s_end, bool reverse_stereo) {
 	warning("Mixing stereo unsigned 16 bit is not supported yet ");
 
 	return data;
@@ -530,7 +543,7 @@
 
 static int16 * (*mixer_helper_table[8]) (int16 * data, uint * len_ptr, byte ** s_ptr,
 										 uint32 * fp_pos_ptr, int fp_speed, const int16 * vol_tab,
-										 byte * s_end) = { 
+										 byte * s_end, bool reverse_stereo) = { 
 	mix_signed_mono_8, mix_unsigned_mono_8, 
 	mix_signed_stereo_8, mix_unsigned_stereo_8,
 	mix_signed_mono_16, mix_unsigned_mono_16, 
@@ -578,7 +591,7 @@
 	const uint32 fp_speed = _fpSpeed;
 	const int16 *vol_tab = _mixer->_volumeTable;
 
-	mixer_helper_table[_flags & 0x07] (data, &len, &s, &fp_pos, fp_speed, vol_tab, end);
+	mixer_helper_table[_flags & 0x07] (data, &len, &s, &fp_pos, fp_speed, vol_tab, end, (_flags & FLAG_REVERSE_STEREO) ? true : false);
 
 	_pos = s - (byte *)_ptr;
 	_fpPos = fp_pos;
@@ -667,14 +680,14 @@
 	fp_pos = _fpPos;
 
 	if (_pos < end_of_data) {
-		mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, end_of_data);
+		mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, end_of_data, (_flags & FLAG_REVERSE_STEREO) ? true : false);
 	} else {
-		mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, _endOfBuffer);
+		mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, _endOfBuffer, (_flags & FLAG_REVERSE_STEREO) ? true : false);
 		if (len != 0) {
 			//FIXME: what is wrong ?
 			warning("bad play sound in stream(wrap around)");
 			_pos = _ptr;
-			mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, end_of_data);
+			mixer_helper_table[_flags & 0x07] (data, &len, &_pos, &fp_pos, fp_speed, vol_tab, end_of_data, (_flags & FLAG_REVERSE_STEREO) ? true : false);
 		}
 	}
 	_timeOut = 3;

Index: mixer.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mixer.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- mixer.h	2 Oct 2002 10:12:19 -0000	1.6
+++ mixer.h	2 Oct 2002 17:31:55 -0000	1.7
@@ -177,6 +177,7 @@
 		FLAG_16BITS = 4,						/* sound is 16 bits wide */
 		FLAG_AUTOFREE = 8,					/* sound buffer is freed automagically at the end of playing */
 		FLAG_FILE = 16,							/* sound is a FILE * that's read from */
+		FLAG_REVERSE_STEREO = 32,		/* sound should be reverse stereo */
 	};
 	int playRaw(PlayingSoundHandle * handle, void * sound, uint32 size, uint rate, byte flags);
 	int playRaw(PlayingSoundHandle * handle, void * sound, uint32 size, uint rate, byte flags, int id);





More information about the Scummvm-git-logs mailing list