[Scummvm-cvs-logs] CVS: residual sound.cpp,1.1,1.2
James Brown
ender at users.sourceforge.net
Sun Aug 17 09:03:07 CEST 2003
Update of /cvsroot/scummvm/residual
In directory sc8-pr-cvs1:/tmp/cvs-serv8466
Modified Files:
sound.cpp
Log Message:
Clamp mixer values
Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/residual/sound.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- sound.cpp 15 Aug 2003 19:41:26 -0000 1.1
+++ sound.cpp 17 Aug 2003 16:02:48 -0000 1.2
@@ -21,6 +21,20 @@
#include <cstring>
#include <SDL_endian.h>
+#define ST_SAMPLE_MAX 0x7fffL
+#define ST_SAMPLE_MIN (-ST_SAMPLE_MAX - 1L)
+
+static inline void clampedAdd(int16_t& a, int b) {
+ register int val = a + b;
+
+ if (val > ST_SAMPLE_MAX)
+ val = ST_SAMPLE_MAX;
+ else if (val < ST_SAMPLE_MIN)
+ val = ST_SAMPLE_MIN;
+
+ a = val;
+}
+
static uint16_t imcTable1[] = {
0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e,
0x0010, 0x0011, 0x0013, 0x0015, 0x0017, 0x0019, 0x001c, 0x001f,
@@ -265,7 +279,7 @@
void Sound::mix(int16_t *data, int samples) {
while (samples > 0 && currPos_ < numSamples_) {
- *data += samples_[currPos_];
+ clampedAdd(*data, samples_[currPos_]);
data++;
if (numChannels_ == 1) {
*data += samples_[currPos_];
More information about the Scummvm-git-logs
mailing list