From d54811fe22c274ed31d897864ac0a33349f460e0 Mon Sep 17 00:00:00 2001 From: Miika Pekkarinen Date: Sat, 2 Jul 2005 16:52:30 +0000 Subject: Fixed mono playback support for mp3. Added two other event handlers in playback.c. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6986 a1c6a512-1295-4272-9138-f99709370657 --- apps/dsp.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'apps/dsp.c') diff --git a/apps/dsp.c b/apps/dsp.c index 56ebacb24c..b24e261371 100644 --- a/apps/dsp.c +++ b/apps/dsp.c @@ -269,7 +269,6 @@ void convert_stereo_mode(long *dest, long *src, int samplecount) } } -/* Not yet functional. */ void scale_up(long *dest, short *src, int samplecount) { int i; @@ -287,8 +286,6 @@ void scale_up_convert_stereo_mode(long *dest, short *src, int samplecount) for (i = 0; i < samplecount; i++) { dest[i] = (long)(src[i*2+0] << SAMPLE_DEPTH); dest[i+samplecount] = (long)(src[i*2+1] << SAMPLE_DEPTH); - //dest[i] = (long)(((src[i*2 + 0] << 8)&0x7fff) | ((1L << 31) & src[i*2+0]<<15)); - //dest[i+samplecount] = (long)(((src[i*2 + 1] << 8)&0x7fff) | ((1L << 31) & src[i*2+1]<<15)); } } @@ -307,21 +304,22 @@ int dsp_process(char *dest, char *src, int samplecount) p = src; /* Scale up to 32-bit samples. */ if (dsp_config.sample_depth <= SAMPLE_DEPTH) { - if (dsp_config.stereo_mode == STEREO_INTERLEAVED) + if (dsp_config.stereo_mode == STEREO_INTERLEAVED) { scale_up_convert_stereo_mode((long *)samplebuf, (short *)p, copy_n); - else + } else { scale_up((long *)samplebuf, (short *)p, copy_n); + } p = samplebuf; fracbits = 31; } /* Convert to non-interleaved stereo. */ else if (dsp_config.stereo_mode == STEREO_INTERLEAVED) { - convert_stereo_mode((long *)samplebuf, (long *)p, copy_n); + convert_stereo_mode((long *)samplebuf, (long *)p, copy_n / 2); p = samplebuf; - } - + } + /* Apply DSP functions. */ if (dsp_config.stereo_mode == STEREO_INTERLEAVED) { channel = 0; @@ -330,6 +328,12 @@ int dsp_process(char *dest, char *src, int samplecount) channel = 1; process((short *)dest, (long *)p, copy_n / 2); dest += rc; + } else if (dsp_config.stereo_mode == STEREO_MONO) { + channel = 0; + rc = process((short *)dest, (long *)p, copy_n) * 4; + channel = 1; + process((short *)dest, (long *)p, copy_n); + dest += rc; } else { rc = process((short *)dest, (long *)p, copy_n) * 2; dest += rc * 2; -- cgit v1.2.3