1
0
Fork 0
forked from len0rd/rockbox

Clamp output when converting from libmad's s3.28 format to 16-bit integers.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12894 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Dave Chapman 2007-03-22 22:47:04 +00:00
parent 176cd65e4c
commit 8b40769554

View file

@ -555,6 +555,7 @@ static void audio_thread(void)
{
int32_t* left;
int32_t* right;
int32_t sample;
int i;
size_t n = 0;
size_t len;
@ -655,15 +656,33 @@ static void audio_thread(void)
left = &synth.pcm.samples[0][0];
right = &synth.pcm.samples[1][0];
for (i = 0 ; i < framelength; i++) {
*(pcmbuf_head++) = *(left++) >> 13;
*(pcmbuf_head++) = *(right++) >> 13;
/* libmad outputs s3.28 */
sample = *(left++) >> 13;
if (sample > 32767)
sample = 32767;
else if (sample < -32768)
sample = -32768;
*(pcmbuf_head++) = sample;
sample = *(right++) >> 13;
if (sample > 32767)
sample = 32767;
else if (sample < -32768)
sample = -32768;
*(pcmbuf_head++) = sample;
if (pcmbuf_head >= pcmbuf_end) { pcmbuf_head = pcm_buffer; }
}
} else { /* mono */
int16_t sample;
left = &synth.pcm.samples[0][0];
for (i = 0 ; i < framelength; i++) {
sample = *(left++) >> 13;
if (sample > 32767)
sample = 32767;
else if (sample < -32768)
sample = -32768;
*(pcmbuf_head++) = sample;
*(pcmbuf_head++) = sample;
if (pcmbuf_head >= pcmbuf_end) { pcmbuf_head = pcm_buffer; }