diff --git a/src/pcm/PcmExport.cxx b/src/pcm/PcmExport.cxx index 512c72e2a..d1ecb20e3 100644 --- a/src/pcm/PcmExport.cxx +++ b/src/pcm/PcmExport.cxx @@ -20,11 +20,14 @@ #include "config.h" #include "PcmExport.hxx" #include "Order.hxx" -#include "PcmDop.hxx" #include "PcmPack.hxx" #include "util/ByteReverse.hxx" #include "util/ConstBuffer.hxx" +#ifdef ENABLE_DSD +#include "PcmDop.hxx" +#endif + #include void @@ -39,11 +42,16 @@ PcmExport::Open(SampleFormat sample_format, unsigned _channels, alsa_channel_order = _alsa_channel_order ? sample_format : SampleFormat::UNDEFINED; + +#ifdef ENABLE_DSD dop = _dop && sample_format == SampleFormat::DSD; if (dop) /* after the conversion to DoP, the DSD samples are stuffed inside fake 24 bit samples */ sample_format = SampleFormat::S24_P32; +#else + (void)_dop; +#endif shift8 = _shift8 && sample_format == SampleFormat::S24_P32; pack24 = _pack && sample_format == SampleFormat::S24_P32; @@ -69,12 +77,14 @@ PcmExport::GetFrameSize(const AudioFormat &audio_format) const /* packed 24 bit samples (3 bytes per sample) */ return audio_format.channels * 3; +#ifdef ENABLE_DSD if (dop) /* the DSD-over-USB draft says that DSD 1-bit samples are enclosed within 24 bit samples, and MPD's representation of 24 bit is padded to 32 bit (4 bytes per sample) */ return channels * 4; +#endif return audio_format.GetFrameSize(); } @@ -86,10 +96,12 @@ PcmExport::Export(ConstBuffer data) data = ToAlsaChannelOrder(order_buffer, data, alsa_channel_order, channels); +#ifdef ENABLE_DSD if (dop) data = pcm_dsd_to_dop(dop_buffer, channels, ConstBuffer::FromVoid(data)) .ToVoid(); +#endif if (pack24) { const auto src = ConstBuffer::FromVoid(data); @@ -134,9 +146,11 @@ PcmExport::CalcSourceSize(size_t size) const /* 32 bit to 24 bit conversion (4 to 3 bytes) */ size = (size / 3) * 4; +#ifdef ENABLE_DSD if (dop) /* DoP doubles the transport size */ size /= 2; +#endif return size; } diff --git a/src/pcm/PcmExport.hxx b/src/pcm/PcmExport.hxx index a01f8ba18..61ccddb0d 100644 --- a/src/pcm/PcmExport.hxx +++ b/src/pcm/PcmExport.hxx @@ -40,6 +40,7 @@ struct PcmExport { */ PcmBuffer order_buffer; +#ifdef ENABLE_DSD /** * The buffer is used to convert DSD samples to the * DoP format. @@ -47,6 +48,7 @@ struct PcmExport { * @see #dop */ PcmBuffer dop_buffer; +#endif /** * The buffer is used to pack samples, removing padding. @@ -77,12 +79,14 @@ struct PcmExport { */ SampleFormat alsa_channel_order; +#ifdef ENABLE_DSD /** * Convert DSD to DSD-over-PCM (DoP)? Input format must be * SampleFormat::DSD and output format must be * SampleFormat::S24_P32. */ bool dop; +#endif /** * Convert (padded) 24 bit samples to 32 bit by shifting 8