ximagesrc: grab the server while capturing screen image
authorJakub Adam <jakub.adam@collabora.com>
Mon, 24 Jan 2022 15:49:52 +0000 (16:49 +0100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 27 Oct 2022 18:42:38 +0000 (18:42 +0000)
Makes sure screen resolution doesn't change in the middle of the
process.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1562>

subprojects/gst-plugins-good/sys/ximage/gstximagesrc.c

index 484519f..3e379e1 100644 (file)
@@ -911,12 +911,19 @@ gst_ximage_src_create (GstPushSrc * bs, GstBuffer ** buf)
   s->last_frame_no = next_frame_no;
   GST_OBJECT_UNLOCK (s);
 
+  XGrabServer (s->xcontext->disp);
+
   if (gst_ximage_src_recalc (s) && !gst_base_src_negotiate (GST_BASE_SRC (s))) {
+    XUngrabServer (s->xcontext->disp);
+    XSync (s->xcontext->disp, False);
     return GST_FLOW_NOT_NEGOTIATED;
   }
 
   image = gst_ximage_src_ximage_get (s);
 
+  XUngrabServer (s->xcontext->disp);
+  XSync (s->xcontext->disp, False);
+
   if (!image)
     return GST_FLOW_ERROR;