diff options
Diffstat (limited to '')
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | doc/user.xml | 11 | ||||
-rw-r--r-- | src/output/jack_output_plugin.c | 27 |
4 files changed, 36 insertions, 5 deletions
@@ -32,6 +32,7 @@ ver 0.16 (20??/??/??) - pulse: announce "media.role=music" - pulse: renamed context to "Music Player Daemon" - pulse: connect to server on MPD startup, implement pause + - jack: require libjack 0.100 - jack: don't disconnect during pause - jack: connect to server on MPD startup - jack: added option "client_name" diff --git a/configure.ac b/configure.ac index 792fcd675..5f9b98111 100644 --- a/configure.ac +++ b/configure.ac @@ -700,7 +700,7 @@ AC_ARG_ENABLE(jack, [enable jack support]),, enable_jack=auto) -MPD_AUTO_PKG(jack, JACK, [jack >= 0.4], +MPD_AUTO_PKG(jack, JACK, [jack >= 0.100], [JACK output plugin], [libjack not found]) if test x$enable_jack = xyes; then AC_DEFINE([HAVE_JACK], 1, [Define to enable JACK support]) diff --git a/doc/user.xml b/doc/user.xml index e60c8d282..494e8af75 100644 --- a/doc/user.xml +++ b/doc/user.xml @@ -747,6 +747,17 @@ cd mpd-version</programlisting> </row> <row> <entry> + <varname>autostart</varname> + <parameter>yes|no</parameter> + </entry> + <entry> + If set to <parameter>yes</parameter>, then + <filename>libjack</filename> will automatically + launch the JACK daemon. Disabled by default. + </entry> + </row> + <row> + <entry> <varname>ports</varname> <parameter>A,B</parameter> </entry> diff --git a/src/output/jack_output_plugin.c b/src/output/jack_output_plugin.c index 3d38a9d2d..51c148282 100644 --- a/src/output/jack_output_plugin.c +++ b/src/output/jack_output_plugin.c @@ -43,6 +43,11 @@ static const char *const port_names[2] = { }; struct jack_data { + /** + * libjack options passed to jack_client_open(). + */ + jack_options_t options; + const char *name; /* configuration */ @@ -169,13 +174,17 @@ mpd_jack_disconnect(struct jack_data *jd) static bool mpd_jack_connect(struct jack_data *jd, GError **error_r) { + jack_status_t status; + assert(jd != NULL); jd->shutdown = false; - if ((jd->client = jack_client_new(jd->name)) == NULL) { + jd->client = jack_client_open(jd->name, jd->options, &status); + if (jd->client == NULL) { g_set_error(error_r, jack_output_quark(), 0, - "Failed to connect to JACK server"); + "Failed to connect to JACK server, status=%d", + status); return false; } @@ -212,8 +221,18 @@ mpd_jack_init(G_GNUC_UNUSED const struct audio_format *audio_format, const char *value; jd = g_new(struct jack_data, 1); - jd->name = config_get_block_string(param, "client_name", - "Music Player Daemon"); + jd->options = JackNullOption; + + jd->name = config_get_block_string(param, "client_name", NULL); + if (jd->name != NULL) + jd->options |= JackUseExactName; + else + /* if there's a no configured client name, we don't + care about the JackUseExactName option */ + jd->name = "Music Player Daemon"; + + if (!config_get_block_bool(param, "autostart", false)) + jd->options |= JackNoStartServer; value = config_get_block_string(param, "ports", NULL); if (value != NULL) { |