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* left;
|
||||||
int32_t* right;
|
int32_t* right;
|
||||||
|
int32_t sample;
|
||||||
int i;
|
int i;
|
||||||
size_t n = 0;
|
size_t n = 0;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
@ -655,15 +656,33 @@ static void audio_thread(void)
|
||||||
left = &synth.pcm.samples[0][0];
|
left = &synth.pcm.samples[0][0];
|
||||||
right = &synth.pcm.samples[1][0];
|
right = &synth.pcm.samples[1][0];
|
||||||
for (i = 0 ; i < framelength; i++) {
|
for (i = 0 ; i < framelength; i++) {
|
||||||
*(pcmbuf_head++) = *(left++) >> 13;
|
/* libmad outputs s3.28 */
|
||||||
*(pcmbuf_head++) = *(right++) >> 13;
|
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; }
|
if (pcmbuf_head >= pcmbuf_end) { pcmbuf_head = pcm_buffer; }
|
||||||
}
|
}
|
||||||
} else { /* mono */
|
} else { /* mono */
|
||||||
int16_t sample;
|
|
||||||
left = &synth.pcm.samples[0][0];
|
left = &synth.pcm.samples[0][0];
|
||||||
for (i = 0 ; i < framelength; i++) {
|
for (i = 0 ; i < framelength; i++) {
|
||||||
sample = *(left++) >> 13;
|
sample = *(left++) >> 13;
|
||||||
|
|
||||||
|
if (sample > 32767)
|
||||||
|
sample = 32767;
|
||||||
|
else if (sample < -32768)
|
||||||
|
sample = -32768;
|
||||||
|
|
||||||
*(pcmbuf_head++) = sample;
|
*(pcmbuf_head++) = sample;
|
||||||
*(pcmbuf_head++) = sample;
|
*(pcmbuf_head++) = sample;
|
||||||
if (pcmbuf_head >= pcmbuf_end) { pcmbuf_head = pcm_buffer; }
|
if (pcmbuf_head >= pcmbuf_end) { pcmbuf_head = pcm_buffer; }
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue