diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2020-08-29 15:41:57 -0300 |
---|---|---|
committer | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2020-09-01 13:05:29 -0300 |
commit | e6a13e5d577462550a6a9a1415afaeba291d4389 (patch) | |
tree | d0b785e9ec5292ffa71e3fd78bfed277312a7559 /src | |
parent | aed286aa462471a1cb0f91a4a45d0027a25ea7c2 (diff) | |
download | mutter-e6a13e5d577462550a6a9a1415afaeba291d4389.tar.gz |
monitor-stream-src: Add before-paint watch to catch scanouts
Scanouts are taken away after painting. However, when we're
streaming, what we actually want is to capture whatever is
going to end up on screen - and that includes the scanout
if there's any.
Add a before-paint watch that only records new frames if a
scanout is set.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1421
Diffstat (limited to 'src')
-rw-r--r-- | src/backends/meta-screen-cast-monitor-stream-src.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/backends/meta-screen-cast-monitor-stream-src.c b/src/backends/meta-screen-cast-monitor-stream-src.c index 0f086cab9..b0b3b3763 100644 --- a/src/backends/meta-screen-cast-monitor-stream-src.c +++ b/src/backends/meta-screen-cast-monitor-stream-src.c @@ -127,6 +127,25 @@ stage_painted (MetaStage *stage, meta_screen_cast_stream_src_maybe_record_frame (src, flags); } +static void +before_stage_painted (MetaStage *stage, + ClutterStageView *view, + ClutterPaintContext *paint_context, + gpointer user_data) +{ + MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (user_data); + CoglScanout *scanout; + + scanout = clutter_stage_view_peek_scanout (view); + if (scanout) + { + MetaScreenCastRecordFlag flags; + + flags = META_SCREEN_CAST_RECORD_FLAG_NONE; + meta_screen_cast_stream_src_maybe_record_frame (src, flags); + } +} + static MetaBackend * get_backend (MetaScreenCastMonitorStreamSrc *monitor_src) { @@ -345,6 +364,9 @@ meta_screen_cast_monitor_stream_src_enable (MetaScreenCastStreamSrc *src) G_GNUC_FALLTHROUGH; case META_SCREEN_CAST_CURSOR_MODE_HIDDEN: add_view_watches (monitor_src, + META_STAGE_WATCH_BEFORE_PAINT, + before_stage_painted); + add_view_watches (monitor_src, META_STAGE_WATCH_AFTER_ACTOR_PAINT, stage_painted); break; |