Now that dmix is working well, I felt like trying something new. :)
This patch changes the JACK plugin to use a unique client name, which
allows for multiple ALSA streams to share a JACK server.
Unfortunately, as reported earlier, some apps hang with the JACK plugin,
and some even fail, e.g.
ogg123: pcm_plug.c:884: snd_pcm_plug_hw_params: Assertion `err >= 0'
failed.
I can provide output from pcm_params.c built with RULES_DEBUG defined if
that's useful.
--
Earthling Michel DÃnzer | Debian (powerpc), X and DRI developer
Libre software enthusiast | http://svcs.affero.net/rm.php?r=daenzer
Index: src/pcm/ext/pcm_jack.c
===================================================================
RCS file: /cvsroot/alsa/alsa-lib/src/pcm/ext/pcm_jack.c,v
retrieving revision 1.4
diff -p -u -r1.4 pcm_jack.c
--- src/pcm/ext/pcm_jack.c 28 Oct 2003 18:19:09 -0000 1.4
+++ src/pcm/ext/pcm_jack.c 4 Feb 2004 19:18:07 -0000
@@ -697,6 +697,8 @@ int snd_pcm_jack_open(snd_pcm_t **pcmp,
snd_pcm_jack_t *jack;
int err;
int fd[2];
+ static unsigned int num = 0;
+ char jack_client_name[32];
assert(pcmp);
#ifdef PCM_JACK_DEBUG
@@ -723,17 +725,24 @@ int snd_pcm_jack_open(snd_pcm_t **pcmp,
if (stream == SND_PCM_STREAM_PLAYBACK) {
jack->channels = jack->playback_ports_n;
- jack->client = jack_client_new("alsaP");
}
else {
jack->channels = jack->capture_ports_n;
- jack->client = jack_client_new("alsaC");
}
if (jack->channels == 0) {
SNDERR("define the %s_ports section\n", stream == SND_PCM_STREAM_PLAYBACK ? "playback" : "capture");
goto _free;
}
+
+ if (snprintf(jack_client_name, sizeof(jack_client_name), "alsa%s.%d.%d",
+ stream == SND_PCM_STREAM_PLAYBACK ? "P" : "C", getpid(), num++)
+ >= 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, strlen(jack_client_name));
+ }
+
+ jack->client = jack_client_new(jack_client_name);
if (jack->client==0) {
err = -ENOENT;