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:
parent
176cd65e4c
commit
8b40769554
1 changed files with 22 additions and 3 deletions
|
|
@ -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; }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue