diff options
author | Max Kellermann <max@duempel.org> | 2014-08-21 13:05:35 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-08-21 13:05:35 +0200 |
commit | 57cbcdf2ecc8ff2a5b093f01028ea887f088a8aa (patch) | |
tree | 5539770870b77fe62c9f38950d1a18377140c729 | |
parent | 455fd180b124844f567e25ba8e8884be9b6fa145 (diff) | |
download | mpd-57cbcdf2ecc8ff2a5b093f01028ea887f088a8aa.tar.gz mpd-57cbcdf2ecc8ff2a5b093f01028ea887f088a8aa.tar.xz mpd-57cbcdf2ecc8ff2a5b093f01028ea887f088a8aa.zip |
decoder/dsf: make the "scratch" buffer local
This allows the compiler to discard buffer contents between two
function calls.
-rw-r--r-- | src/decoder/plugins/DsfDecoderPlugin.cxx | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/decoder/plugins/DsfDecoderPlugin.cxx b/src/decoder/plugins/DsfDecoderPlugin.cxx index b4f90b15b..585819f52 100644 --- a/src/decoder/plugins/DsfDecoderPlugin.cxx +++ b/src/decoder/plugins/DsfDecoderPlugin.cxx @@ -193,8 +193,11 @@ bit_reverse_buffer(uint8_t *p, uint8_t *end) * order. */ static void -dsf_to_pcm_order(uint8_t *dest, uint8_t *scratch, size_t nrbytes) +dsf_to_pcm_order(uint8_t *dest, size_t nrbytes) { + uint8_t scratch[8192]; + assert(nrbytes <= sizeof(scratch)); + for (unsigned i = 0, j = 0; i < (unsigned)nrbytes; i += 2) { scratch[i] = *(dest+j); j++; @@ -222,10 +225,6 @@ dsf_decode_chunk(Decoder &decoder, InputStream &is, { uint8_t buffer[8192]; - /* scratch buffer for DSF samples to convert to the needed - normal left/right regime of samples */ - uint8_t dsf_scratch_buffer[8192]; - const size_t sample_size = sizeof(buffer[0]); const size_t frame_size = channels * sample_size; const unsigned buffer_frames = sizeof(buffer) / frame_size; @@ -250,7 +249,7 @@ dsf_decode_chunk(Decoder &decoder, InputStream &is, if (bitreverse) bit_reverse_buffer(buffer, buffer + nbytes); - dsf_to_pcm_order(buffer, dsf_scratch_buffer, nbytes); + dsf_to_pcm_order(buffer, nbytes); const auto cmd = decoder_data(decoder, is, buffer, nbytes, sample_rate / 1000); |