eglglessink: Correctly resize if the surface dimensions change
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 27 Sep 2012 12:28:05 +0000 (14:28 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 18 Oct 2012 12:35:15 +0000 (14:35 +0200)
ext/eglgles/gsteglglessink.c

index 6dad020..a7c44fb 100644 (file)
@@ -1384,20 +1384,28 @@ HANDLE_ERROR_LOCKED:
   return FALSE;
 }
 
-static void
+static gboolean
 gst_eglglessink_update_surface_dimensions (GstEglGlesSink * eglglessink)
 {
+  gint width, height;
+
   /* Save surface dims */
   eglQuerySurface (eglglessink->eglglesctx->display,
-      eglglessink->eglglesctx->surface, EGL_WIDTH,
-      &eglglessink->eglglesctx->surface_width);
+      eglglessink->eglglesctx->surface, EGL_WIDTH, &width);
   eglQuerySurface (eglglessink->eglglesctx->display,
-      eglglessink->eglglesctx->surface, EGL_HEIGHT,
-      &eglglessink->eglglesctx->surface_height);
+      eglglessink->eglglesctx->surface, EGL_HEIGHT, &height);
+
+  if (width != eglglessink->eglglesctx->surface_width ||
+      height != eglglessink->eglglesctx->surface_height) {
+    eglglessink->eglglesctx->surface_width = width;
+    eglglessink->eglglesctx->surface_height = height;
+    GST_INFO_OBJECT (eglglessink, "Got surface of %dx%d pixels",
+        eglglessink->eglglesctx->surface_width,
+        eglglessink->eglglesctx->surface_height);
+    return TRUE;
+  }
 
-  GST_INFO_OBJECT (eglglessink, "Got surface of %dx%d pixels",
-      eglglessink->eglglesctx->surface_width,
-      eglglessink->eglglesctx->surface_height);
+  return FALSE;
 }
 
 static gboolean
@@ -2009,14 +2017,12 @@ gst_eglglessink_render_and_display (GstEglGlesSink * eglglessink,
           goto HANDLE_ERROR;
       }
 
-      /* Update surface dims */
-      gst_eglglessink_update_surface_dimensions (eglglessink);
-
       /* If no one has set a display rectangle on us initialize
        * a sane default. According to the docs on the xOverlay
        * interface we are supposed to fill the overlay 100%
        */
-      if (!eglglessink->display_region.w || !eglglessink->display_region.h) {
+      if (gst_eglglessink_update_surface_dimensions (eglglessink) ||
+          !eglglessink->display_region.w || !eglglessink->display_region.h) {
         g_mutex_lock (eglglessink->flow_lock);
         if (!eglglessink->force_aspect_ratio) {
           eglglessink->display_region.x = 0;