Commit 2e28ed8f authored by Max Kellermann's avatar Max Kellermann

wavpack: obey all decoder commands, stop at CUE track border

It used to ignore the decoder_data() return value.
parent 4c4f8bf0
......@@ -4,6 +4,7 @@ ver 0.16.4 (2011/??/??)
* decoder:
- ffmpeg: workaround for semantic API change in recent ffmpeg versions
- flac: validate the sample rate when scanning the tag
- wavpack: obey all decoder commands, stop at CUE track border
* output:
- alsa: fix SIGFPE when alsa announces a period size of 0
......
......@@ -194,8 +194,9 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek)
decoder_initialized(decoder, &audio_format, can_seek, total_time);
while (true) {
if (decoder_get_command(decoder) == DECODE_COMMAND_SEEK) {
enum decoder_command cmd = decoder_get_command(decoder);
while (cmd != DECODE_COMMAND_STOP) {
if (cmd == DECODE_COMMAND_SEEK) {
if (can_seek) {
unsigned where = decoder_seek_where(decoder) *
audio_format.sample_rate;
......@@ -210,10 +211,6 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek)
}
}
if (decoder_get_command(decoder) == DECODE_COMMAND_STOP) {
break;
}
uint32_t samples_got = WavpackUnpackSamples(wpc, chunk,
samples_requested);
if (samples_got == 0)
......@@ -224,9 +221,9 @@ wavpack_decode(struct decoder *decoder, WavpackContext *wpc, bool can_seek)
format_samples(bytes_per_sample, chunk,
samples_got * audio_format.channels);
decoder_data(decoder, NULL, chunk,
samples_got * output_sample_size,
bitrate);
cmd = decoder_data(decoder, NULL, chunk,
samples_got * output_sample_size,
bitrate);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment