From d80ebd924f2b75bf77addda2710aa82481e30ea3 Mon Sep 17 00:00:00 2001 From: torben Date: Wed, 12 Jan 2011 17:06:20 +0000 Subject: [PATCH] [latency api] also invoke latency callback for the driver client. git-svn-id: svn+ssh://jackaudio.org/trunk/jack@4108 0c269be4-1314-0410-8aa9-9f06e86f4224 --- jack/internal.h | 2 ++ jackd/engine.c | 8 ++++++++ libjack/client.c | 10 ++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/jack/internal.h b/jack/internal.h index c2009e7..465d3bd 100644 --- a/jack/internal.h +++ b/jack/internal.h @@ -539,6 +539,8 @@ extern int jack_port_name_equals (jack_port_shared_t* port, const char* target); */ extern size_t jack_midi_internal_event_size (); +extern int jack_client_handle_latency_callback (jack_client_t *client, jack_event_t *event, int is_driver); + #ifdef __GNUC__ # define likely(x) __builtin_expect((x),1) # define unlikely(x) __builtin_expect((x),0) diff --git a/jackd/engine.c b/jackd/engine.c index fc4a9ae..4af4315 100644 --- a/jackd/engine.c +++ b/jackd/engine.c @@ -2834,6 +2834,10 @@ jack_deliver_event (jack_engine_t *engine, jack_client_internal_t *client, } break; + case LatencyCallback: + jack_client_handle_latency_callback (client->private_client, event, (client->control->type == ClientDriver)); + break; + default: /* internal clients don't need to know */ break; @@ -3290,6 +3294,8 @@ jack_compute_new_latency (jack_engine_t *engine) jack_deliver_event (engine, client, &event); } + jack_deliver_event (engine, engine->driver->internal_client, &event); + /* now issue playback latency callbacks in reverse graphorder */ event.x.n = 1; @@ -3298,6 +3304,8 @@ jack_compute_new_latency (jack_engine_t *engine) jack_deliver_event (engine, client, &event); } + jack_deliver_event (engine, engine->driver->internal_client, &event); + jack_slist_free (reverse_list); } diff --git a/libjack/client.c b/libjack/client.c index ae64b0e..f5449e8 100644 --- a/libjack/client.c +++ b/libjack/client.c @@ -570,7 +570,7 @@ jack_port_recalculate_latency (jack_port_t *port, jack_latency_callback_mode_t m } int -jack_client_handle_latency_callback (jack_client_t *client, jack_event_t *event) +jack_client_handle_latency_callback (jack_client_t *client, jack_event_t *event, int is_driver) { jack_latency_callback_mode_t mode = (event->x.n==0) ? JackCaptureLatency : JackPlaybackLatency; JSList *node; @@ -589,6 +589,12 @@ jack_client_handle_latency_callback (jack_client_t *client, jack_event_t *event) jack_port_recalculate_latency (port, mode); } } + + /* for a driver invocation, this is enough. + * input and output ports do not depend on each other. + */ + if (is_driver) + return 0; if (! client->control->latency_cbset) { /* @@ -1786,7 +1792,7 @@ jack_client_process_events (jack_client_t* client) status = jack_client_handle_session_callback (client, &event ); break; case LatencyCallback: - status = jack_client_handle_latency_callback (client, &event ); + status = jack_client_handle_latency_callback (client, &event, 0 ); break; }