From fc85f6738ba7381d778f73535cb9963d47962d30 Mon Sep 17 00:00:00 2001 From: columbarius Date: Wed, 16 Jun 2021 18:35:37 +0200 Subject: [PATCH] screencast: only restart wlroots loop if stream is active This prevents the wlroots loop from running after the first roundtrip to query the buffer informations from the screencopy protocol. --- src/screencast/pipewire_screencast.c | 3 +++ src/screencast/wlr_screencast.c | 14 ++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/screencast/pipewire_screencast.c b/src/screencast/pipewire_screencast.c index 6c812ce..bbc419b 100644 --- a/src/screencast/pipewire_screencast.c +++ b/src/screencast/pipewire_screencast.c @@ -72,6 +72,9 @@ static void pwr_handle_stream_state_changed(void *data, switch (state) { case PW_STREAM_STATE_STREAMING: cast->pwr_stream_state = true; + if (!cast->wlr_frame) { + xdpw_wlr_register_cb(cast); + } break; default: cast->pwr_stream_state = false; diff --git a/src/screencast/wlr_screencast.c b/src/screencast/wlr_screencast.c index 8de8aef..349a52d 100644 --- a/src/screencast/wlr_screencast.c +++ b/src/screencast/wlr_screencast.c @@ -52,12 +52,14 @@ void xdpw_wlr_frame_free(struct xdpw_screencast_instance *cast) { return ; } - uint64_t delay_ns = fps_limit_measure_end(&cast->fps_limit, cast->framerate); - if (delay_ns > 0) { - xdpw_add_timer(cast->ctx->state, delay_ns, - (xdpw_event_loop_timer_func_t) xdpw_wlr_register_cb, cast); - } else { - xdpw_wlr_register_cb(cast); + if (cast->pwr_stream_state) { + uint64_t delay_ns = fps_limit_measure_end(&cast->fps_limit, cast->framerate); + if (delay_ns > 0) { + xdpw_add_timer(cast->ctx->state, delay_ns, + (xdpw_event_loop_timer_func_t) xdpw_wlr_register_cb, cast); + } else { + xdpw_wlr_register_cb(cast); + } } }