From: Maciej Wilczynski Date: Sat, 15 Sep 2018 18:05:31 +0000 (+0200) Subject: Add PA sink configuration option X-Git-Tag: 3.3RC0~215^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=947a0ca291d307272b5bc3fe74f3065e035a4fde;p=thirdparty%2Fshairport-sync.git Add PA sink configuration option --- diff --git a/audio_pa.c b/audio_pa.c index d8f8a9d3..aec4d992 100644 --- a/audio_pa.c +++ b/audio_pa.c @@ -85,6 +85,11 @@ static int init(__attribute__((unused)) int argc, __attribute__((unused)) char * if (config_lookup_string(config.cfg, "pa.application_name", &str)) { config.pa_application_name = (char *)str; } + + /* Get the PulseAudio sink name. */ + if (config_lookup_string(config.cfg, "pa.sink", &str)) { + config.pa_sink = (char *)str; + } } // finish collecting settings @@ -178,8 +183,17 @@ static void start(__attribute__((unused)) int sample_rate, // PA_STREAM_AUTO_TIMING_UPDATE; PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_ADJUST_LATENCY; - // Connect stream to the default audio output sink - if (pa_stream_connect_playback(stream, NULL, &buffer_attr, stream_flags, NULL, NULL) != 0) + int connect_result; + + if (config.pa_sink) { + // Connect stream to the sink specified in the config + connect_result = pa_stream_connect_playback(stream, config.pa_sink, &buffer_attr, stream_flags, NULL, NULL); + } else { + // Connect stream to the default audio output sink + connect_result = pa_stream_connect_playback(stream, NULL, &buffer_attr, stream_flags, NULL, NULL); + } + + if (connect_result != 0) die("could not connect to the pulseaudio playback stream -- the error message is \"%s\".", pa_strerror(pa_context_errno(context))); diff --git a/common.h b/common.h index c25b166a..c5d03aa3 100644 --- a/common.h +++ b/common.h @@ -84,7 +84,9 @@ typedef struct { #ifdef CONFIG_PA char *pa_application_name; // the name under which Shairport Sync shows up as an "Application" in // the Sound Preferences in most desktop Linuxes. -// Defaults to "Shairport Sync". Shairport Sync must be playing to see it. + // Defaults to "Shairport Sync". Shairport Sync must be playing to see it. + + char *pa_sink; // the name (or id) of the sink that Shairport Sync will play on. #endif #ifdef CONFIG_METADATA int metadata_enabled;