aboutsummaryrefslogtreecommitdiffstats
path: root/src/pcm
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-10-23 22:31:54 +0200
committerMax Kellermann <max@duempel.org>2014-10-23 22:39:51 +0200
commit200cdb6b0ad7b6691cd06e21a52d4dc09a685a1b (patch)
tree8062145131116104cad49a3a838a58afc099b33a /src/pcm
parentd9fb40203a54cd899c40afe3445fda3f818d91be (diff)
downloadmpd-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.cxx25
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;
}