From 14190cd8a1f0df42f2b9a33a16789c85b69356a3 Mon Sep 17 00:00:00 2001 From: Valentin Corfu Date: Tue, 11 Feb 2014 04:06:36 -0500 Subject: [PATCH] jack: Allow to specify a client name as parameters The current jack client name contains the process id of the application providing the audio samples. This leads to unpredictable jack client names which makes handling of the connections by a controlling application very hard. This modification now, allows to specify a client name as parameters in the configuration file. The implementation is backward compatible and simply adds a new configuration option to the plugin. [reformatted and small refactoring by tiwai] Signed-off-by: Valentin Corfu Signed-off-by: Takashi Iwai --- jack/pcm_jack.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/jack/pcm_jack.c b/jack/pcm_jack.c index c51fe84..4213708 100644 --- a/jack/pcm_jack.c +++ b/jack/pcm_jack.c @@ -356,9 +356,16 @@ static int snd_pcm_jack_open(snd_pcm_t **pcmp, const char *name, return -EINVAL; } - if (snprintf(jack_client_name, sizeof(jack_client_name), "alsa-jack.%s%s.%d.%d", name, - stream == SND_PCM_STREAM_PLAYBACK ? "P" : "C", getpid(), num++) - >= (int)sizeof(jack_client_name)) { + if (name == NULL) + err = snprintf(jack_client_name, sizeof(jack_client_name), + "alsa-jack.%s%s.%d.%d", name, + stream == SND_PCM_STREAM_PLAYBACK ? "P" : "C", + getpid(), num++); + else + err = snprintf(jack_client_name, sizeof(jack_client_name), + "%s", name); + + if (err >= (int)sizeof(jack_client_name)) { fprintf(stderr, "%s: WARNING: JACK client name '%s' truncated to %d characters, might not be unique\n", __func__, jack_client_name, (int)strlen(jack_client_name)); } @@ -369,7 +376,7 @@ static int snd_pcm_jack_open(snd_pcm_t **pcmp, const char *name, snd_pcm_jack_free(jack); return -ENOENT; } - + jack->areas = calloc(jack->channels, sizeof(snd_pcm_channel_area_t)); if (! jack->areas) { snd_pcm_jack_free(jack); @@ -423,6 +430,10 @@ SND_PCM_PLUGIN_DEFINE_FUNC(jack) continue; if (strcmp(id, "comment") == 0 || strcmp(id, "type") == 0 || strcmp(id, "hint") == 0) continue; + if (strcmp(id, "name") == 0) { + snd_config_get_string(n, &name); + continue; + } if (strcmp(id, "playback_ports") == 0) { if (snd_config_get_type(n) != SND_CONFIG_TYPE_COMPOUND) { SNDERR("Invalid type for %s", id); -- 2.47.1