diff options
author | Max Kellermann <max@duempel.org> | 2014-08-23 16:12:18 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2014-08-26 07:11:53 +0200 |
commit | a86aaef4d0075df581857cdabb624a24885afa2b (patch) | |
tree | 1e12f2bf79bd6fb629f80c41de9a1937df0c614b | |
parent | e463244db3f54fe049657ebf3845e75976696bef (diff) | |
download | mpd-a86aaef4d0075df581857cdabb624a24885afa2b.tar.gz mpd-a86aaef4d0075df581857cdabb624a24885afa2b.tar.xz mpd-a86aaef4d0075df581857cdabb624a24885afa2b.zip |
output/alsa: support native DSD playback
Translate SampleFormat::DSD to SND_PCM_FORMAT_DSD_U8, which was added
to alsa-lib 1.0.27.1.
Diffstat (limited to '')
-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; |