From 62000670e3b574cf7fd761ee081693735781e768 Mon Sep 17 00:00:00 2001 From: Nils Schneider <nils@nilsschneider.net> Date: Sun, 14 Aug 2016 18:45:32 +0200 Subject: [PATCH] Support S24_P32/S32/FLOAT sample formats on Pulse This is based on a patch from Ian Scott in 2014. It was never committed, so I figured I'd fix the outstanding issue and resubmit it. https://www.mail-archive.com/mpd-devel%40musicpd.org/msg00139.html --- NEWS | 2 ++ src/output/plugins/PulseOutputPlugin.cxx | 26 ++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 9a7a69ec9..9b9ceadef 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,6 @@ ver 0.19.19 (not yet released) +* output + - pulse: support 32 bit, 24 bit and floating point playback ver 0.19.18 (2016/08/05) * decoder diff --git a/src/output/plugins/PulseOutputPlugin.cxx b/src/output/plugins/PulseOutputPlugin.cxx index a9a84bc24..230114559 100644 --- a/src/output/plugins/PulseOutputPlugin.cxx +++ b/src/output/plugins/PulseOutputPlugin.cxx @@ -574,12 +574,30 @@ pulse_output_open(AudioOutput *ao, AudioFormat &audio_format, return false; } - /* MPD doesn't support the other pulseaudio sample formats, so - we just force MPD to send us everything as 16 bit */ - audio_format.format = SampleFormat::S16; + /* Use the sample formats that our version of PulseAudio and MPD + have in common, otherwise force MPD to send 16 bit */ pa_sample_spec ss; - ss.format = PA_SAMPLE_S16NE; + + switch (audio_format.format) { + case SampleFormat::FLOAT: + ss.format = PA_SAMPLE_FLOAT32NE; + break; + case SampleFormat::S32: + ss.format = PA_SAMPLE_S32NE; + break; + case SampleFormat::S24_P32: + ss.format = PA_SAMPLE_S24_32NE; + break; + case SampleFormat::S16: + ss.format = PA_SAMPLE_S16NE; + break; + default: + audio_format.format = SampleFormat::S16; + ss.format = PA_SAMPLE_S16NE; + break; + } + ss.rate = audio_format.sample_rate; ss.channels = audio_format.channels;