[mutter/gbsneto/more-screencast: 3/7] monitor-stream-src: Blit scanout when available
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gbsneto/more-screencast: 3/7] monitor-stream-src: Blit scanout when available
- Date: Mon, 31 Aug 2020 14:32:23 +0000 (UTC)
commit bb7f6a0fc077b29cd5aa4665a68b0db3496d61b9
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Fri Aug 28 23:01:11 2020 -0300
monitor-stream-src: Blit scanout when available
When there's a direct scanout set in the stage view, we
have to use it instead of the view's regular onscreen
framebuffer.
Use the new CoglScanout API to implement blitting to the
stream framebuffer.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1421
src/backends/meta-screen-cast-monitor-stream-src.c | 32 +++++++++++++++-------
1 file changed, 22 insertions(+), 10 deletions(-)
---
diff --git a/src/backends/meta-screen-cast-monitor-stream-src.c
b/src/backends/meta-screen-cast-monitor-stream-src.c
index 78aba0a953..8ca0d4e248 100644
--- a/src/backends/meta-screen-cast-monitor-stream-src.c
+++ b/src/backends/meta-screen-cast-monitor-stream-src.c
@@ -520,6 +520,7 @@ meta_screen_cast_monitor_stream_src_record_to_framebuffer (MetaScreenCastStreamS
{
ClutterStageView *view = CLUTTER_STAGE_VIEW (l->data);
CoglFramebuffer *view_framebuffer;
+ CoglScanout *scanout;
MetaRectangle view_layout;
int x, y;
@@ -528,19 +529,30 @@ meta_screen_cast_monitor_stream_src_record_to_framebuffer (MetaScreenCastStreamS
if (!meta_rectangle_overlap (&logical_monitor_layout, &view_layout))
continue;
- view_framebuffer = clutter_stage_view_get_framebuffer (view);
-
x = (int) roundf ((view_layout.x - logical_monitor_layout.x) * view_scale);
y = (int) roundf ((view_layout.y - logical_monitor_layout.y) * view_scale);
- if (!cogl_blit_framebuffer (view_framebuffer,
- framebuffer,
- 0, 0,
- x, y,
- cogl_framebuffer_get_width (view_framebuffer),
- cogl_framebuffer_get_height (view_framebuffer),
- error))
- return FALSE;
+ scanout = clutter_stage_view_peek_scanout (view);
+ if (scanout)
+ {
+ if (!cogl_scanout_blit_to_framebuffer (scanout,
+ framebuffer,
+ x, y,
+ error))
+ return FALSE;
+ }
+ else
+ {
+ view_framebuffer = clutter_stage_view_get_framebuffer (view);
+ if (!cogl_blit_framebuffer (view_framebuffer,
+ framebuffer,
+ 0, 0,
+ x, y,
+ cogl_framebuffer_get_width (view_framebuffer),
+ cogl_framebuffer_get_height (view_framebuffer),
+ error))
+ return FALSE;
+ }
}
cogl_framebuffer_finish (framebuffer);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]