git-svn-id: svn+ssh://jackaudio.org/trunk/jack@4108 0c269be4-1314-0410-8aa9-9f06e86f4224tags/0.120.1
| @@ -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 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__ | #ifdef __GNUC__ | ||||
| # define likely(x) __builtin_expect((x),1) | # define likely(x) __builtin_expect((x),1) | ||||
| # define unlikely(x) __builtin_expect((x),0) | # define unlikely(x) __builtin_expect((x),0) | ||||
| @@ -2834,6 +2834,10 @@ jack_deliver_event (jack_engine_t *engine, jack_client_internal_t *client, | |||||
| } | } | ||||
| break; | break; | ||||
| case LatencyCallback: | |||||
| jack_client_handle_latency_callback (client->private_client, event, (client->control->type == ClientDriver)); | |||||
| break; | |||||
| default: | default: | ||||
| /* internal clients don't need to know */ | /* internal clients don't need to know */ | ||||
| break; | break; | ||||
| @@ -3290,6 +3294,8 @@ jack_compute_new_latency (jack_engine_t *engine) | |||||
| jack_deliver_event (engine, client, &event); | jack_deliver_event (engine, client, &event); | ||||
| } | } | ||||
| jack_deliver_event (engine, engine->driver->internal_client, &event); | |||||
| /* now issue playback latency callbacks in reverse graphorder | /* now issue playback latency callbacks in reverse graphorder | ||||
| */ | */ | ||||
| event.x.n = 1; | 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, client, &event); | ||||
| } | } | ||||
| jack_deliver_event (engine, engine->driver->internal_client, &event); | |||||
| jack_slist_free (reverse_list); | jack_slist_free (reverse_list); | ||||
| } | } | ||||
| @@ -570,7 +570,7 @@ jack_port_recalculate_latency (jack_port_t *port, jack_latency_callback_mode_t m | |||||
| } | } | ||||
| int | 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; | jack_latency_callback_mode_t mode = (event->x.n==0) ? JackCaptureLatency : JackPlaybackLatency; | ||||
| JSList *node; | 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); | 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) { | 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 ); | status = jack_client_handle_session_callback (client, &event ); | ||||
| break; | break; | ||||
| case LatencyCallback: | case LatencyCallback: | ||||
| status = jack_client_handle_latency_callback (client, &event ); | |||||
| status = jack_client_handle_latency_callback (client, &event, 0 ); | |||||
| break; | break; | ||||
| } | } | ||||