diff options
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | src/output/plugins/AlsaOutputPlugin.cxx | 12 |
2 files changed, 14 insertions, 0 deletions
@@ -52,6 +52,8 @@ ver 0.19 (not yet released) - mp4v2: support playback of MP4 files. * encoder: - shine: new encoder plugin +* output + - alsa: support native DSD playback * threads: - the update thread runs at "idle" priority - the output thread runs at "real-time" priority diff --git a/src/output/plugins/AlsaOutputPlugin.cxx b/src/output/plugins/AlsaOutputPlugin.cxx index d91eeea9f..9f299642e 100644 --- a/src/output/plugins/AlsaOutputPlugin.cxx +++ b/src/output/plugins/AlsaOutputPlugin.cxx @@ -22,6 +22,7 @@ #include "../OutputAPI.hxx" #include "mixer/MixerList.hxx" #include "pcm/PcmExport.hxx" +#include "config/ConfigError.hxx" #include "util/Manual.hxx" #include "util/Error.hxx" #include "util/Domain.hxx" @@ -32,6 +33,11 @@ #include <string> +#if SND_LIB_VERSION >= 0x1001c +/* alsa-lib supports DSD since version 1.0.27.1 */ +#define HAVE_ALSA_DSD +#endif + static const char default_device[] = "default"; static constexpr unsigned MPD_ALSA_BUFFER_TIME_US = 500000; @@ -236,8 +242,14 @@ get_bitformat(SampleFormat sample_format) { switch (sample_format) { case SampleFormat::UNDEFINED: + return SND_PCM_FORMAT_UNKNOWN; + case SampleFormat::DSD: +#ifdef HAVE_ALSA_DSD + return SND_PCM_FORMAT_DSD_U8; +#else return SND_PCM_FORMAT_UNKNOWN; +#endif case SampleFormat::S8: return SND_PCM_FORMAT_S8; |