jack: fail if jack_get_ports() returns NULL

When jack_get_ports() returns NULL, we cannot have any ports to
connect to, and the device cannot play anything.
This commit is contained in:
Max Kellermann 2009-01-29 23:12:16 +01:00
parent 5bcf415ad0
commit 3baeddbcae

View File

@ -214,8 +214,6 @@ mpd_jack_test_default_device(void)
static int static int
mpd_jack_connect(struct jack_data *jd, struct audio_format *audio_format) mpd_jack_connect(struct jack_data *jd, struct audio_format *audio_format)
{ {
const char **jports;
jd->audio_format = audio_format; jd->audio_format = audio_format;
jd->ringbuffer[0] = jack_ringbuffer_create(jd->ringbuffer_size); jd->ringbuffer[0] = jack_ringbuffer_create(jd->ringbuffer_size);
@ -253,10 +251,18 @@ mpd_jack_connect(struct jack_data *jd, struct audio_format *audio_format)
return -1; return -1;
} }
/* hay que buscar que hay */ if (jd->output_ports[1] == NULL) {
if (!jd->output_ports[1] && /* no output ports were configured - ask libjack for
(jports = jack_get_ports(jd->client, NULL, NULL, defaults */
JackPortIsPhysical | JackPortIsInput))) { const char **jports;
jports = jack_get_ports(jd->client, NULL, NULL,
JackPortIsPhysical | JackPortIsInput);
if (jports == NULL) {
g_warning("no ports found");
return -1;
}
jd->output_ports[0] = g_strdup(jports[0]); jd->output_ports[0] = g_strdup(jports[0]);
jd->output_ports[1] = g_strdup(jports[1] != NULL jd->output_ports[1] = g_strdup(jports[1] != NULL
? jports[1] : jports[0]); ? jports[1] : jports[0]);
@ -265,19 +271,17 @@ mpd_jack_connect(struct jack_data *jd, struct audio_format *audio_format)
free(jports); free(jports);
} }
if ( jd->output_ports[1] ) { if ( (jack_connect(jd->client, jack_port_name(jd->ports[0]),
if ( (jack_connect(jd->client, jack_port_name(jd->ports[0]), jd->output_ports[0])) != 0 ) {
jd->output_ports[0])) != 0 ) { g_warning("%s is not a valid Jack Client / Port",
g_warning("%s is not a valid Jack Client / Port", jd->output_ports[0]);
jd->output_ports[0]); return -1;
return -1; }
} if ( (jack_connect(jd->client, jack_port_name(jd->ports[0]),
if ( (jack_connect(jd->client, jack_port_name(jd->ports[0]), jd->output_ports[1])) != 0 ) {
jd->output_ports[1])) != 0 ) { g_warning("%s is not a valid Jack Client / Port",
g_warning("%s is not a valid Jack Client / Port", jd->output_ports[1]);
jd->output_ports[1]); return -1;
return -1;
}
} }
return 1; return 1;