From 2a9685cb3ad50702bad8789ab4c7d7837a4579fe Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 5 Nov 2009 20:01:18 +0100 Subject: [PATCH] output/jack: use jack_client_open() instead of jack_client_new() jack_client_new() is deprecated. This requires libjack 0.100 (released nearly 5 years ago). We havn't been testing older libjack versions anyway. As a side effect, there is the new option "autostart". --- NEWS | 1 + configure.ac | 2 +- doc/user.xml | 11 +++++++++++ src/output/jack_output_plugin.c | 27 +++++++++++++++++++++++---- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index 004b0b2e5..88f7a8fa5 100644 --- a/NEWS +++ b/NEWS @@ -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 @@ -745,6 +745,17 @@ cd mpd-version Player Daemon". + + + autostart + yes|no + + + If set to yes, then + libjack will automatically + launch the JACK daemon. Disabled by default. + + ports 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) {