From 0b59a49179a16a39ec0e4a857de01a41c2e3bb81 Mon Sep 17 00:00:00 2001 From: Kenny Levinsen Date: Sat, 4 Apr 2026 17:26:39 +0000 Subject: [PATCH] ext_image_capture_source_v1: switch to new frame scheduling --- types/ext_image_capture_source_v1/scene.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/types/ext_image_capture_source_v1/scene.c b/types/ext_image_capture_source_v1/scene.c index 7d4b8928a..29f38b268 100644 --- a/types/ext_image_capture_source_v1/scene.c +++ b/types/ext_image_capture_source_v1/scene.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include "types/wlr_output.h" @@ -134,11 +135,8 @@ static void source_stop(struct wlr_ext_image_capture_source_v1 *base) { static void source_request_frame(struct wlr_ext_image_capture_source_v1 *base, bool schedule_frame) { struct scene_node_source *source = wl_container_of(base, source, base); - if (source->output.frame_pending) { - wlr_output_send_frame(&source->output); - } - if (schedule_frame) { - wlr_output_update_needs_frame(&source->output); + if (schedule_frame && source->scene_output != NULL) { + wlr_frame_scheduler_schedule_frame(source->scene_output->frame_scheduler); } } @@ -246,6 +244,12 @@ static bool output_commit(struct wlr_output *output, const struct wlr_output_sta pixman_region32_fini(&full_damage); + struct wlr_output_event_present present_event = { + .commit_seq = output->commit_seq + 1, + .presented = true, + }; + output_defer_present(output, present_event); + return true; } @@ -283,11 +287,7 @@ static void source_handle_output_frame(struct wl_listener *listener, void *data) return; } - if (!wlr_scene_output_needs_frame(source->scene_output)) { - return; - } - - // We can only emit frames with damage + // Only render when there's actual damage to commit if (!pixman_region32_empty(&source->scene_output->pending_commit_damage)) { source_render(source); } @@ -331,7 +331,7 @@ struct wlr_ext_image_capture_source_v1 *wlr_ext_image_capture_source_v1_create_w wl_signal_add(&source->scene_output->events.destroy, &source->scene_output_destroy); source->output_frame.notify = source_handle_output_frame; - wl_signal_add(&source->output.events.frame, &source->output_frame); + wl_signal_add(&source->scene_output->frame_scheduler->events.frame, &source->output_frame); return &source->base; }