aboutsummaryrefslogtreecommitdiff
path: root/src/output/alsa_output_plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/output/alsa_output_plugin.c')
-rw-r--r--src/output/alsa_output_plugin.c64
1 files changed, 2 insertions, 62 deletions
diff --git a/src/output/alsa_output_plugin.c b/src/output/alsa_output_plugin.c
index d8b18427..4470e05e 100644
--- a/src/output/alsa_output_plugin.c
+++ b/src/output/alsa_output_plugin.c
@@ -55,14 +55,6 @@ struct alsa_data {
/** use memory mapped I/O? */
bool use_mmap;
- /**
- * Enable DSD over USB according to the dCS suggested
- * standard?
- *
- * @see http://www.dcsltd.co.uk/page/assets/DSDoverUSB.pdf
- */
- bool dsd_usb;
-
/** libasound's buffer_time setting (in microseconds) */
unsigned int buffer_time;
@@ -136,8 +128,6 @@ alsa_configure(struct alsa_data *ad, const struct config_param *param)
ad->use_mmap = config_get_block_bool(param, "use_mmap", false);
- ad->dsd_usb = config_get_block_bool(param, "dsd_usb", false);
-
ad->buffer_time = config_get_block_unsigned(param, "buffer_time",
MPD_ALSA_BUFFER_TIME_US);
ad->period_time = config_get_block_unsigned(param, "period_time", 0);
@@ -226,7 +216,6 @@ get_bitformat(enum sample_format sample_format)
{
switch (sample_format) {
case SAMPLE_FORMAT_UNDEFINED:
- case SAMPLE_FORMAT_DSD:
return SND_PCM_FORMAT_UNKNOWN;
case SAMPLE_FORMAT_S8:
@@ -586,65 +575,16 @@ error:
}
static bool
-alsa_setup_dsd(struct alsa_data *ad, struct audio_format *audio_format,
- bool *shift8_r, bool *packed_r, bool *reverse_endian_r,
- GError **error_r)
-{
- assert(ad->dsd_usb);
- assert(audio_format->format == SAMPLE_FORMAT_DSD);
-
- /* pass 24 bit to alsa_setup() */
-
- struct audio_format usb_format = *audio_format;
- usb_format.format = SAMPLE_FORMAT_S24_P32;
- usb_format.sample_rate /= 2;
-
- const struct audio_format check = usb_format;
-
- if (!alsa_setup(ad, &usb_format, packed_r, reverse_endian_r, error_r))
- return false;
-
- /* if the device allows only 32 bit, shift all DSD-over-USB
- samples left by 8 bit and leave the lower 8 bit cleared;
- the DSD-over-USB documentation does not specify whether
- this is legal, but there is anecdotical evidence that this
- is possible (and the only option for some devices) */
- *shift8_r = usb_format.format == SAMPLE_FORMAT_S32;
- if (usb_format.format == SAMPLE_FORMAT_S32)
- usb_format.format = SAMPLE_FORMAT_S24_P32;
-
- if (!audio_format_equals(&usb_format, &check)) {
- /* no bit-perfect playback, which is required
- for DSD over USB */
- g_set_error(error_r, alsa_output_quark(), 0,
- "Failed to configure DSD-over-USB on ALSA device \"%s\"",
- alsa_device(ad));
- return false;
- }
-
- return true;
-}
-
-static bool
alsa_setup_or_dsd(struct alsa_data *ad, struct audio_format *audio_format,
GError **error_r)
{
bool shift8 = false, packed, reverse_endian;
- const bool dsd_usb = ad->dsd_usb &&
- audio_format->format == SAMPLE_FORMAT_DSD;
- const bool success = dsd_usb
- ? alsa_setup_dsd(ad, audio_format,
- &shift8, &packed, &reverse_endian,
- error_r)
- : alsa_setup(ad, audio_format, &packed, &reverse_endian,
- error_r);
+ const bool success = alsa_setup(ad, audio_format, &packed, &reverse_endian, error_r);
if (!success)
return false;
- pcm_export_open(&ad->export,
- audio_format->format, audio_format->channels,
- dsd_usb, shift8, packed, reverse_endian);
+ pcm_export_open(&ad->export, audio_format->format, shift8, packed, reverse_endian);
return true;
}