diff options
Diffstat (limited to 'src/decoder')
-rw-r--r-- | src/decoder/plugins/DsdiffDecoderPlugin.cxx | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/decoder/plugins/DsdiffDecoderPlugin.cxx b/src/decoder/plugins/DsdiffDecoderPlugin.cxx index b5584d1fd..c7495fe89 100644 --- a/src/decoder/plugins/DsdiffDecoderPlugin.cxx +++ b/src/decoder/plugins/DsdiffDecoderPlugin.cxx @@ -356,7 +356,7 @@ bit_reverse_buffer(uint8_t *p, uint8_t *end) static bool dsdiff_decode_chunk(Decoder &decoder, InputStream &is, unsigned channels, unsigned sample_rate, - offset_type chunk_size) + const offset_type total_bytes) { uint8_t buffer[8192]; @@ -365,12 +365,13 @@ dsdiff_decode_chunk(Decoder &decoder, InputStream &is, const unsigned buffer_frames = sizeof(buffer) / frame_size; const size_t buffer_size = buffer_frames * frame_size; - while (chunk_size >= frame_size) { + for (offset_type remaining_bytes = total_bytes; + remaining_bytes >= frame_size;) { /* see how much aligned data from the remaining chunk fits into the local buffer */ size_t now_size = buffer_size; - if (chunk_size < (offset_type)now_size) { - unsigned now_frames = chunk_size / frame_size; + if (remaining_bytes < (offset_type)now_size) { + unsigned now_frames = remaining_bytes / frame_size; now_size = now_frames * frame_size; } @@ -378,7 +379,7 @@ dsdiff_decode_chunk(Decoder &decoder, InputStream &is, return false; const size_t nbytes = now_size; - chunk_size -= nbytes; + remaining_bytes -= nbytes; if (lsbitfirst) bit_reverse_buffer(buffer, buffer + nbytes); |