diff options
Diffstat (limited to 'audio/out/ao_jack.c')
-rw-r--r-- | audio/out/ao_jack.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/audio/out/ao_jack.c b/audio/out/ao_jack.c index 6e9b652f2d..727a5f5050 100644 --- a/audio/out/ao_jack.c +++ b/audio/out/ao_jack.c @@ -51,6 +51,8 @@ struct priv { int num_ports; jack_port_t *ports[MP_NUM_CHANNELS]; + + int activated; }; static int process(jack_nframes_t nframes, void *arg) @@ -134,6 +136,20 @@ err_port_register: return -1; } +static void resume(struct ao *ao) +{ + struct priv *p = ao->priv; + if (!p->activated) { + p->activated = true; + + if (jack_activate(p->client)) + MP_FATAL(ao, "activate failed\n"); + + if (p->connect) + connect_to_outports(ao); + } +} + static int init(struct ao *ao) { struct priv *p = ao->priv; @@ -173,17 +189,8 @@ static int init(struct ao *ao) jack_set_process_callback(p->client, process, ao); - if (jack_activate(p->client)) { - MP_FATAL(ao, "activate failed\n"); - goto err_activate; - } - ao->samplerate = jack_get_sample_rate(p->client); - if (p->connect) - if (connect_to_outports(ao)) - goto err_connect; - jack_latency_range_t jack_latency_range; jack_port_get_latency_range(p->ports[0], JackPlaybackLatency, &jack_latency_range); @@ -196,9 +203,6 @@ static int init(struct ao *ao) return 0; err_chmap_sel_get_def: -err_connect: - jack_deactivate(p->client); -err_activate: err_create_ports: jack_client_close(p->client); err_client_open: @@ -221,6 +225,7 @@ const struct ao_driver audio_out_jack = { .name = "jack", .init = init, .uninit = uninit, + .resume = resume, .priv_size = sizeof(struct priv), .priv_defaults = &(const struct priv) { .cfg_client_name = "mpv", |