diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2007-02-27 19:14:21 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2007-02-27 19:14:21 +0000 |
| commit | b5b4a16b6dc2c5afb34f83b0395c5806ac20ff7c (patch) | |
| tree | 22fd53c73473991e193e786ee93e7822b397cbd7 | |
| parent | 92e6bcbe17d56d9acb50c52edc8f55233156ae8f (diff) | |
| download | rockbox-b5b4a16b6dc2c5afb34f83b0395c5806ac20ff7c.zip rockbox-b5b4a16b6dc2c5afb34f83b0395c5806ac20ff7c.tar.gz rockbox-b5b4a16b6dc2c5afb34f83b0395c5806ac20ff7c.tar.bz2 rockbox-b5b4a16b6dc2c5afb34f83b0395c5806ac20ff7c.tar.xz | |
Fix a problem when dithering mono audio. Left samples weren't being duplicated into right channel in pcm buffer.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12509 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/dsp.c | 23 |
1 files changed, 18 insertions, 5 deletions
@@ -476,17 +476,16 @@ static void sample_output_dithered(int count, struct dsp_data *data, const int32_t min = data->clip_min; const int32_t max = data->clip_max; const int32_t range = max - min; - const int dinc = dsp->data.num_channels; - int ch; - for (ch = 0; ch < dinc; ch++) + int16_t *d; + + for (ch = 0; ch < dsp->data.num_channels; ch++) { struct dither_data * const dither = &dither_data[ch]; int32_t *s = src[ch]; - int16_t *d = &dst[ch]; int i; - for (i = 0; i < count; i++, s++, d += dinc) + for (i = 0, d = &dst[ch]; i < count; i++, s++, d += 2) { int32_t output, sample; int32_t random; @@ -530,6 +529,20 @@ static void sample_output_dithered(int count, struct dsp_data *data, *d = output >> scale; } } + + if (dsp->data.num_channels == 2) + return; + + /* Have to duplicate left samples into the right channel since + pcm buffer and hardware is interleaved stereo */ + d = &dst[0]; + + do + { + int16_t s = *d++; + *d++ = s; + } + while (--count > 0); } /** |