[Scummvm-cvs-logs] CVS: scummvm/sound mixer.cpp,1.99,1.100 rate.cpp,1.21,1.22 rate.h,1.14,1.15

Max Horn fingolfin at users.sourceforge.net
Sat Aug 2 12:10:05 CEST 2003


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

Modified Files:
	mixer.cpp rate.cpp rate.h 
Log Message:
some more tweaks

Index: mixer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mixer.cpp,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -d -r1.99 -r1.100
--- mixer.cpp	2 Aug 2003 16:11:12 -0000	1.99
+++ mixer.cpp	2 Aug 2003 19:09:51 -0000	1.100
@@ -716,8 +716,7 @@
 	}
 
 	const int volume = _mixer->getVolume();
-	st_size_t tmpLen = len;
-	_converter->flow(*_input, data, &tmpLen, volume);
+	_converter->flow(*_input, data, len, volume);
 #else
 	byte *s, *end;
 
@@ -837,8 +836,7 @@
 	}
 
 	const int volume = _mixer->getVolume();
-	st_size_t tmpLen = len;
-	_converter->flow(*_input, data, &tmpLen, volume);
+	_converter->flow(*_input, data, len, volume);
 #else
 	if (_pos == _endOfData) {
 		// Normally, the stream stays around even if all its data is used up.
@@ -960,8 +958,7 @@
 	}
 
 	const int volume = _mixer->getVolume();
-	st_size_t tmpLen = len;
-	_converter->flow(*_input, data, &tmpLen, volume);
+	_converter->flow(*_input, data, len, volume);
 #else
 	const int volume = _mixer->getVolume();
 
@@ -1044,8 +1041,7 @@
 	}
 
 	const int volume = _mixer->getMusicVolume();
-	st_size_t tmpLen = len;
-	_converter->flow(*_input, data, &tmpLen, volume);
+	_converter->flow(*_input, data, len, volume);
 #else
 	mad_timer_t frame_duration;
 	const int volume = _mixer->getMusicVolume();
@@ -1198,8 +1194,7 @@
 	}
 
 	const int volume = isMusicChannel() ? _mixer->getMusicVolume() : _mixer->getVolume();
-	st_size_t tmpLen = len;
-	_converter->flow(*_input, data, &tmpLen, volume);
+	_converter->flow(*_input, data, len, volume);
 #else
 	if (_end_pos > 0 && ov_pcm_tell(_ov_file) >= _end_pos) {
 		destroy();

Index: rate.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/rate.cpp,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- rate.cpp	2 Aug 2003 18:29:52 -0000	1.21
+++ rate.cpp	2 Aug 2003 19:09:52 -0000	1.22
@@ -66,8 +66,8 @@
 
 public:
 	LinearRateConverter(st_rate_t inrate, st_rate_t outrate);
-	int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol);
-	int drain(st_sample_t *obuf, st_size_t *osamp, st_volume_t vol) {
+	int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol);
+	int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
 		return (ST_SUCCESS);
 	}
 };
@@ -108,14 +108,13 @@
  * Return number of samples processed.
  */
 template<bool stereo, bool reverseStereo>
-int LinearRateConverter<stereo, reverseStereo>::flow(AudioInputStream &input, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol)
+int LinearRateConverter<stereo, reverseStereo>::flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol)
 {
 	st_sample_t *ostart, *oend;
-	st_sample_t out;
-	unsigned long tmp;
+	st_sample_t out[2], tmpOut;
 
 	ostart = obuf;
-	oend = obuf + *osamp * 2;
+	oend = obuf + osamp * 2;
 
 	while (obuf < oend) {
 
@@ -140,25 +139,25 @@
 		while (ipos > opos + 1) {
 
 			// interpolate
-			out = (st_sample_t) (ilast[reverseStereo ? 1 : 0] + (((icur[reverseStereo ? 1 : 0] - ilast[reverseStereo ? 1 : 0]) * opos_frac + (1UL << (FRAC_BITS-1))) >> FRAC_BITS));
+			tmpOut = (st_sample_t)(ilast[0] + (((icur[0] - ilast[0]) * opos_frac + (1UL << (FRAC_BITS-1))) >> FRAC_BITS));
 			// adjust volume
-			out = out * vol / 256;
-	
-			// output left channel sample
-			clampedAdd(*obuf++, out);
+			out[0] = out[1] = (st_sample_t)((tmpOut * vol) >> 8);
 			
 			if (stereo) {
 				// interpolate
-				out = (st_sample_t) (ilast[reverseStereo ? 0 : 1] + (((icur[reverseStereo ? 0 : 1] - ilast[reverseStereo ? 0 : 1]) * opos_frac + (1UL << (FRAC_BITS-1))) >> FRAC_BITS));
+				tmpOut = (st_sample_t)(ilast[1] + (((icur[1] - ilast[1]) * opos_frac + (1UL << (FRAC_BITS-1))) >> FRAC_BITS));
 				// adjust volume
-				out = out * vol / 256;
+				out[reverseStereo ? 0 : 1] = (st_sample_t)((tmpOut * vol) >> 8);
 			}
 	
-			// output right channel sample
-			clampedAdd(*obuf++, out);
+			// output left channel
+			clampedAdd(*obuf++, out[0]);
+	
+			// output right channel
+			clampedAdd(*obuf++, out[1]);
 	
 			// Increment output position
-			tmp = opos_frac + opos_inc_frac;
+			unsigned long tmp = opos_frac + opos_inc_frac;
 			opos += opos_inc + (tmp >> FRAC_BITS);
 			opos_frac = tmp & ((1UL << FRAC_BITS) - 1);
 
@@ -169,7 +168,6 @@
 	}
 
 the_end:
-	*osamp = (obuf - ostart) / 2;
 	return (ST_SUCCESS);
 }
 
@@ -183,20 +181,20 @@
 template<bool stereo, bool reverseStereo>
 class CopyRateConverter : public RateConverter {
 public:
-	virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol) {
+	virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
 		int16 tmp[2];
-		st_size_t len = *osamp;
+		st_size_t len = osamp;
 		assert(input.isStereo() == stereo);
 		while (!input.eof() && len--) {
-			tmp[0] = tmp[1] = input.read() * vol / 256;
+			tmp[0] = tmp[1] = (input.read() * vol) >> 8;
 			if (stereo)
-				tmp[reverseStereo ? 0 : 1] = input.read() * vol / 256;
+				tmp[reverseStereo ? 0 : 1] = (input.read() * vol) >> 8;
 			clampedAdd(*obuf++, tmp[0]);
 			clampedAdd(*obuf++, tmp[1]);
 		}
 		return (ST_SUCCESS);
 	}
-	virtual int drain(st_sample_t *obuf, st_size_t *osamp, st_volume_t vol) {
+	virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) {
 		return (ST_SUCCESS);
 	}
 };

Index: rate.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/rate.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- rate.h	2 Aug 2003 16:31:31 -0000	1.14
+++ rate.h	2 Aug 2003 19:09:52 -0000	1.15
@@ -48,14 +48,14 @@
 #define ST_SUCCESS (0)
 
 static inline void clampedAdd(int16& a, int b) {
-	int val = a + b;
+	register int val = a + b;
 
 	if (val > ST_SAMPLE_MAX)
-		a = ST_SAMPLE_MAX;
+		val = ST_SAMPLE_MAX;
 	else if (val < ST_SAMPLE_MIN)
-		a = ST_SAMPLE_MIN;
-	else
-		a = val;
+		val = ST_SAMPLE_MIN;
+
+	a = val;
 }
 
 // Q&D hack to get this SOX stuff to work
@@ -68,19 +68,21 @@
 public:
 	RateConverter() {}
 	virtual ~RateConverter() {}
-	virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol) = 0;
-	virtual int drain(st_sample_t *obuf, st_size_t *osamp, st_volume_t vol) = 0;
+	virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol) = 0;
+	virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) = 0;
 };
 
+/*
 class ResampleRateConverter : public RateConverter {
 protected:
 	eff_struct effp;
 public:
 	ResampleRateConverter(st_rate_t inrate, st_rate_t outrate, int quality);
 	~ResampleRateConverter();
-	virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t *osamp, st_volume_t vol);
-	virtual int drain(st_sample_t *obuf, st_size_t *osamp, st_volume_t vol);
+	virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol);
+	virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol);
 };
+*/
 
 RateConverter *makeRateConverter(st_rate_t inrate, st_rate_t outrate, bool stereo, bool reverseStereo = false);
 





More information about the Scummvm-git-logs mailing list