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.
This commit is contained in:
Max Kellermann 2014-08-23 16:12:18 +02:00
parent e463244db3
commit a86aaef4d0
2 changed files with 15 additions and 1 deletions

2
NEWS
View File

@ -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

View File

@ -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,9 +242,15 @@ get_bitformat(SampleFormat sample_format)
{
switch (sample_format) {
case SampleFormat::UNDEFINED:
case SampleFormat::DSD:
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;