aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/decoder/plugins/DsdiffDecoderPlugin.cxx11
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);