output/Thread: reconfigure ConvertFilter for its new input AudioFormat

If the input AudioFormat changes but the out_audio_format doesn't
change (e.g. because there is a fixed "format" setting in this
"audio_output" section), the ConvertFilter needs to be reconfigured.
This didn't happen, resulting in awful static noise after changing
songs.
This commit is contained in:
Max Kellermann 2017-01-15 01:18:34 +01:00
parent 917cedf893
commit d14ec6aea5
2 changed files with 13 additions and 0 deletions

1
NEWS
View File

@ -7,6 +7,7 @@ ver 0.20.2 (not yet released)
* resampler
- libsamplerate: reset state after seeking
* output
- fix static noise after changing to a different audio format
- alsa: fix the DSD_U32 sample rate
- alsa: fix the DSD_U32 byte order
- alsa: support DSD_U16

View File

@ -140,6 +140,18 @@ AudioOutput::Open()
}
open = true;
} else if (f != out_audio_format) {
/* reconfigure the final ConvertFilter for its new
input AudioFormat */
try {
convert_filter_set(convert_filter.Get(),
out_audio_format);
} catch (const std::runtime_error &e) {
Close(false);
std::throw_with_nested(FormatRuntimeError("Failed to convert for \"%s\" [%s]",
name, plugin.name));
}
}
if (f != source.GetInputAudioFormat() || f != out_audio_format) {