Browse Source

[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
tags/0.120.1
torben 15 years ago
parent
commit
d80ebd924f
3 changed files with 18 additions and 2 deletions
  1. +2
    -0
      jack/internal.h
  2. +8
    -0
      jackd/engine.c
  3. +8
    -2
      libjack/client.c

+ 2
- 0
jack/internal.h View File

@@ -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)


+ 8
- 0
jackd/engine.c View File

@@ -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);
}



+ 8
- 2
libjack/client.c View File

@@ -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;
}


Loading…
Cancel
Save