summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2022-12-03 19:20:25 -0300
committerRobert Mader <robert.mader@collabora.com>2023-04-07 12:49:53 +0200
commitbc2f1145d867213715748fa0ac3e90bfd5a8429a (patch)
tree371fcba003d63e7e3ffc08820d354808e0a2b0a6
parent7f28fa6c79c4af398ea45f25d956b2b908fb4277 (diff)
downloadmutter-bc2f1145d867213715748fa0ac3e90bfd5a8429a.tar.gz
screen-cast/monitor-src: Record DMA-BUF frames immediately
Instead of always, unconditionally scheduling an idle callback for frame recording, try to record a DMA-BUF only frame, and only if that's not possible, schedule the idle callback. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2804>
-rw-r--r--src/backends/meta-screen-cast-monitor-stream-src.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/backends/meta-screen-cast-monitor-stream-src.c b/src/backends/meta-screen-cast-monitor-stream-src.c
index ed0d854c1..6bcffd9a5 100644
--- a/src/backends/meta-screen-cast-monitor-stream-src.c
+++ b/src/backends/meta-screen-cast-monitor-stream-src.c
@@ -158,14 +158,24 @@ stage_painted (MetaStage *stage,
MetaScreenCastMonitorStreamSrc *monitor_src =
META_SCREEN_CAST_MONITOR_STREAM_SRC (user_data);
MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (monitor_src);
+ MetaScreenCastRecordResult record_result;
+ MetaScreenCastRecordFlag flags;
if (monitor_src->maybe_record_idle_id)
return;
- monitor_src->maybe_record_idle_id = g_idle_add (maybe_record_frame_on_idle,
- src);
- g_source_set_name_by_id (monitor_src->maybe_record_idle_id,
- "[mutter] maybe_record_frame_on_idle [monitor-src]");
+ flags = META_SCREEN_CAST_RECORD_FLAG_DMABUF_ONLY;
+ record_result = meta_screen_cast_stream_src_maybe_record_frame (src,
+ flags,
+ NULL);
+
+ if (!(record_result & META_SCREEN_CAST_RECORD_RESULT_RECORDED_FRAME))
+ {
+ monitor_src->maybe_record_idle_id = g_idle_add (maybe_record_frame_on_idle,
+ src);
+ g_source_set_name_by_id (monitor_src->maybe_record_idle_id,
+ "[mutter] maybe_record_frame_on_idle [monitor-src]");
+ }
}
static void