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