aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/pcm/PcmConvert.cxx11
-rw-r--r--src/pcm/PcmConvert.hxx7
2 files changed, 12 insertions, 6 deletions
diff --git a/src/pcm/PcmConvert.cxx b/src/pcm/PcmConvert.cxx
index cca2f701e..05ed92faf 100644
--- a/src/pcm/PcmConvert.cxx
+++ b/src/pcm/PcmConvert.cxx
@@ -56,6 +56,10 @@ PcmConvert::Open(AudioFormat _src_format, AudioFormat _dest_format,
src_format = _src_format;
dest_format = _dest_format;
+ is_dsd = src_format.format == SampleFormat::DSD;
+ if (is_dsd)
+ src_format.format = SampleFormat::FLOAT;
+
return true;
}
@@ -277,8 +281,7 @@ PcmConvert::Convert(const void *src, size_t src_size,
size_t *dest_size_r,
Error &error)
{
- AudioFormat float_format;
- if (src_format.format == SampleFormat::DSD) {
+ if (is_dsd) {
size_t f_size;
const float *f = dsd.ToFloat(src_format.channels,
false, (const uint8_t *)src,
@@ -289,10 +292,6 @@ PcmConvert::Convert(const void *src, size_t src_size,
return nullptr;
}
- float_format = src_format;
- float_format.format = SampleFormat::FLOAT;
-
- src_format = float_format;
src = f;
src_size = f_size;
}
diff --git a/src/pcm/PcmConvert.hxx b/src/pcm/PcmConvert.hxx
index 02743b6cc..0672c2955 100644
--- a/src/pcm/PcmConvert.hxx
+++ b/src/pcm/PcmConvert.hxx
@@ -51,6 +51,13 @@ class PcmConvert {
AudioFormat src_format, dest_format;
+ /**
+ * Do we get DSD source data? Then this flag is true and
+ * src_format.format is set to SampleFormat::FLOAT, because
+ * the #PcmDsd class will convert it to floating point.
+ */
+ bool is_dsd;
+
public:
PcmConvert();
~PcmConvert();