diff options
Diffstat (limited to 'src/pcm')
-rw-r--r-- | src/pcm/PcmConvert.cxx | 11 | ||||
-rw-r--r-- | src/pcm/PcmConvert.hxx | 7 |
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(); |