From 91d43bfbe1635b8bbd83e3fb39c9629bac649e59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Tue, 11 Jun 2024 16:51:29 +0200 Subject: [PATCH] screen-cast/src: Allow dropping cursor-frame if nothing changed Allow a screen cast stream source to say that nothing changed in terms of cursor metadata, and treat this together with a cursor-only frame as we not recording anything. Part-of: --- src/backends/meta-screen-cast-stream-src.c | 11 +++++++++++ src/backends/meta-screen-cast-stream-src.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c index 1ac87a2bb..d6e8f417e 100644 --- a/src/backends/meta-screen-cast-stream-src.c +++ b/src/backends/meta-screen-cast-stream-src.c @@ -776,6 +776,8 @@ meta_screen_cast_stream_src_maybe_record_frame_with_timestamp (MetaScreenCastStr { MetaScreenCastStreamSrcPrivate *priv = meta_screen_cast_stream_src_get_instance_private (src); + MetaScreenCastStreamSrcClass *klass = + META_SCREEN_CAST_STREAM_SRC_GET_CLASS (src); MetaScreenCastRecordResult record_result = META_SCREEN_CAST_RECORD_RESULT_RECORDED_NOTHING; MtkRectangle crop_rect; @@ -787,6 +789,15 @@ meta_screen_cast_stream_src_maybe_record_frame_with_timestamp (MetaScreenCastStr COGL_TRACE_BEGIN_SCOPED (MaybeRecordFrame, "Meta::ScreenCastStreamSrc::maybe_record_frame_with_timestamp()"); + if ((flags & META_SCREEN_CAST_RECORD_FLAG_CURSOR_ONLY) && + klass->is_cursor_metadata_valid && + klass->is_cursor_metadata_valid (src)) + { + meta_topic (META_DEBUG_SCREEN_CAST, + "Dropping cursor-only frame as the cursor didn't change"); + return record_result; + } + /* Accumulate the damaged region since we might not schedule a frame capture * eventually but once we do, we should report all the previous damaged areas. */ diff --git a/src/backends/meta-screen-cast-stream-src.h b/src/backends/meta-screen-cast-stream-src.h index 672715df7..2877065c6 100644 --- a/src/backends/meta-screen-cast-stream-src.h +++ b/src/backends/meta-screen-cast-stream-src.h @@ -85,6 +85,7 @@ struct _MetaScreenCastStreamSrcClass gboolean (* get_videocrop) (MetaScreenCastStreamSrc *src, MtkRectangle *crop_rect); + gboolean (* is_cursor_metadata_valid) (MetaScreenCastStreamSrc *src); void (* set_cursor_metadata) (MetaScreenCastStreamSrc *src, struct spa_meta_cursor *spa_meta_cursor);