diff options
author | Max Kellermann <max@duempel.org> | 2014-10-23 22:31:54 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-10-23 22:39:51 +0200 |
commit | 200cdb6b0ad7b6691cd06e21a52d4dc09a685a1b (patch) | |
tree | 8062145131116104cad49a3a838a58afc099b33a /src/pcm | |
parent | d9fb40203a54cd899c40afe3445fda3f818d91be (diff) | |
download | mpd-200cdb6b0ad7b6691cd06e21a52d4dc09a685a1b.tar.gz mpd-200cdb6b0ad7b6691cd06e21a52d4dc09a685a1b.tar.xz mpd-200cdb6b0ad7b6691cd06e21a52d4dc09a685a1b.zip |
pcm/PcmConvert: assign {src,dest}_format at the end
Fixes assertion failure in destructor by not assigning
{src,dest}_format when an error occurs.
Diffstat (limited to 'src/pcm')
-rw-r--r-- | src/pcm/PcmConvert.cxx | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/pcm/PcmConvert.cxx b/src/pcm/PcmConvert.cxx index 77efc367a..438566759 100644 --- a/src/pcm/PcmConvert.cxx +++ b/src/pcm/PcmConvert.cxx @@ -59,36 +59,34 @@ PcmConvert::Open(const AudioFormat _src_format, const AudioFormat _dest_format, assert(_src_format.IsValid()); assert(_dest_format.IsValid()); - src_format = _src_format; - dest_format = _dest_format; - - AudioFormat format = src_format; + AudioFormat format = _src_format; if (format.format == SampleFormat::DSD) format.format = SampleFormat::FLOAT; - enable_resampler = format.sample_rate != dest_format.sample_rate; + enable_resampler = format.sample_rate != _dest_format.sample_rate; if (enable_resampler) { - if (!resampler.Open(format, dest_format.sample_rate, error)) + if (!resampler.Open(format, _dest_format.sample_rate, error)) return false; format.format = resampler.GetOutputSampleFormat(); - format.sample_rate = dest_format.sample_rate; + format.sample_rate = _dest_format.sample_rate; } - enable_format = format.format != dest_format.format; + enable_format = format.format != _dest_format.format; if (enable_format && - !format_converter.Open(format.format, dest_format.format, error)) { + !format_converter.Open(format.format, _dest_format.format, + error)) { if (enable_resampler) resampler.Close(); return false; } - format.format = dest_format.format; + format.format = _dest_format.format; - enable_channels = format.channels != dest_format.channels; + enable_channels = format.channels != _dest_format.channels; if (enable_channels && !channels_converter.Open(format.format, format.channels, - dest_format.channels, error)) { + _dest_format.channels, error)) { if (enable_format) format_converter.Close(); if (enable_resampler) @@ -96,6 +94,9 @@ PcmConvert::Open(const AudioFormat _src_format, const AudioFormat _dest_format, return false; } + src_format = _src_format; + dest_format = _dest_format; + return true; } |