summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2009-01-05 02:29:58 +0000
committerMichael Sevakis <jethead71@rockbox.org>2009-01-05 02:29:58 +0000
commit6920a5be449b258ebbde6e709607dddb00511a6b (patch)
treeb09e3560a3b19ae1dad59c9c92ea15878cd683e3
parent96474e3b4d889690286d7bea049d594338b27afd (diff)
downloadrockbox-6920a5be449b258ebbde6e709607dddb00511a6b.tar.gz
rockbox-6920a5be449b258ebbde6e709607dddb00511a6b.zip
rockdoom: Mixing 512 samples in an interrupt handler is too much. Gigabeast FIFOs are very tight and it will channel swap and crackle. It's better to minimize time in the audio callback anyway so change it to 128. It should probably even be 64. Use faster saturation code too.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19679 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/doom/i_sound.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/apps/plugins/doom/i_sound.c b/apps/plugins/doom/i_sound.c
index 2f4f594077..35cecd8abb 100644
--- a/apps/plugins/doom/i_sound.c
+++ b/apps/plugins/doom/i_sound.c
@@ -48,7 +48,7 @@
48// mixing buffer, and the samplerate of the raw data. 48// mixing buffer, and the samplerate of the raw data.
49 49
50// Needed for calling the actual sound output. 50// Needed for calling the actual sound output.
51#define SAMPLECOUNT 512 51#define SAMPLECOUNT 128
52 52
53#define NUM_CHANNELS 24 53#define NUM_CHANNELS 24
54// It is 2 for 16bit, and 2 for two channels. 54// It is 2 for 16bit, and 2 for two channels.
@@ -99,6 +99,13 @@ int *vol_lookup; // Volume lookups.
99 99
100int *steptable; // Pitch to stepping lookup. (Not setup properly right now) 100int *steptable; // Pitch to stepping lookup. (Not setup properly right now)
101 101
102static inline int32_t clip_sample16(int32_t sample)
103{
104 if ((int16_t)sample != sample)
105 sample = 0x7fff ^ (sample >> 31);
106 return sample;
107}
108
102// 109//
103// This function loads the sound data from the WAD lump for single sound. 110// This function loads the sound data from the WAD lump for single sound.
104// It is used to cache all the sounddata at startup. 111// It is used to cache all the sounddata at startup.
@@ -371,7 +378,7 @@ void I_UpdateSound( void )
371 signed short* leftend; 378 signed short* leftend;
372 379
373 // Step in mixbuffer, left and right, thus two. 380 // Step in mixbuffer, left and right, thus two.
374 int step; 381 const int step = 2;
375 382
376 // Mixing channel index. 383 // Mixing channel index.
377 int chan; 384 int chan;
@@ -380,7 +387,6 @@ void I_UpdateSound( void )
380 // are in global mixbuffer, alternating. 387 // are in global mixbuffer, alternating.
381 leftout = mixbuffer; 388 leftout = mixbuffer;
382 rightout = mixbuffer +1; 389 rightout = mixbuffer +1;
383 step = 2;
384 390
385 // Determine end, for left channel only 391 // Determine end, for left channel only
386 // (right channel is implicit). 392 // (right channel is implicit).
@@ -431,20 +437,10 @@ void I_UpdateSound( void )
431 // else if (dl < -128) *leftout = -128; 437 // else if (dl < -128) *leftout = -128;
432 // else *leftout = dl; 438 // else *leftout = dl;
433 439
434 if (dl > 0x7fff) 440 *leftout = clip_sample16(dl);
435 *leftout = 0x7fff;
436 else if (dl < -0x8000)
437 *leftout = -0x8000;
438 else
439 *leftout = (signed short)dl;
440 441
441 // Same for right hardware channel. 442 // Same for right hardware channel.
442 if (dr > 0x7fff) 443 *rightout = clip_sample16(dr);
443 *rightout = 0x7fff;
444 else if (dr < -0x8000)
445 *rightout = -0x8000;
446 else
447 *rightout = (signed short)dr;
448 444
449 // Increment current pointers in mixbuffer. 445 // Increment current pointers in mixbuffer.
450 leftout += step; 446 leftout += step;