diff --git a/pipewire-jack/src/pipewire-jack.c b/pipewire-jack/src/pipewire-jack.c index 42013b1b8..881b0116b 100644 --- a/pipewire-jack/src/pipewire-jack.c +++ b/pipewire-jack/src/pipewire-jack.c @@ -4720,6 +4720,17 @@ static int do_activate(struct client *c) return res; } +static int +do_emit_buffer_size(struct spa_loop *loop, + bool async, uint32_t seq, const void *data, size_t size, void *user_data) +{ + struct client *c = user_data; + c->buffer_frames = c->rt.position->clock.duration; + pw_log_debug("%p: emit buffersize %d", c, c->buffer_frames); + c->bufsize_callback(c->buffer_frames, c->bufsize_arg); + return 0; +} + SPA_EXPORT int jack_activate (jack_client_t *client) { @@ -4760,8 +4771,12 @@ done: if (res < 0) { c->active = false; pw_data_loop_stop(c->loop); + } else if (SPA_LIKELY(c->bufsize_callback != NULL)) { + pw_thread_loop_unlock(c->context.loop); + pw_data_loop_invoke(c->loop, + do_emit_buffer_size, SPA_ID_INVALID, NULL, 0, true, c); + pw_thread_loop_lock(c->context.loop); } - pw_log_debug("%p: activate result:%d", c, res); thaw_callbacks(c); pw_thread_loop_unlock(c->context.loop);