diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2022-12-03 19:20:25 -0300 |
---|---|---|
committer | Robert Mader <robert.mader@collabora.com> | 2023-04-07 12:49:53 +0200 |
commit | bc2f1145d867213715748fa0ac3e90bfd5a8429a (patch) | |
tree | 371fcba003d63e7e3ffc08820d354808e0a2b0a6 | |
parent | 7f28fa6c79c4af398ea45f25d956b2b908fb4277 (diff) | |
download | mutter-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.c | 18 |
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 |