eglglessink: GlViewPort() should use actual surface size
authorReynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
Mon, 17 Sep 2012 21:00:16 +0000 (18:00 -0300)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 18 Oct 2012 12:35:11 +0000 (14:35 +0200)
ext/eglgles/gsteglglessink.c
ext/eglgles/gsteglglessink.h

index 9bb395e..13e90d9 100644 (file)
@@ -1183,6 +1183,15 @@ gst_eglglessink_init_egl_surface (GstEglGlesSink * eglglessink)
     goto HANDLE_EGL_ERROR_LOCKED;
   }
 
+  /* Save surface dims */
+  eglQuerySurface (eglglessink->display, eglglessink->surface, EGL_WIDTH,
+      &eglglessink->surface_width);
+  eglQuerySurface (eglglessink->display, eglglessink->surface, EGL_HEIGHT,
+      &eglglessink->surface_height);
+
+  GST_INFO_OBJECT (eglglessink, "Got surface of %dx%d pixels",
+      eglglessink->surface_width, eglglessink->surface_height);
+
   /* We have a surface! */
   eglglessink->have_surface = TRUE;
   g_mutex_unlock (eglglessink->flow_lock);
@@ -1509,7 +1518,8 @@ gst_eglglessink_render_and_display (GstEglGlesSink * eglglessink,
        * The way it is right now makes this happen only for the first buffer
        * though so I guess it should work */
       if (gst_eglglessink_setup_vbo (eglglessink, FALSE)) {
-        glViewport (0, 0, w, h);
+        glViewport (0, 0, eglglessink->surface_width,
+            eglglessink->surface_height);
       } else {
         GST_ERROR_OBJECT (eglglessink, "VBO setup failed");
         goto HANDLE_ERROR;
index 6c255c0..7606eae 100644 (file)
@@ -159,6 +159,8 @@ struct _GstEglGlesSink
   gboolean force_rendering_slow;
   gint window_default_width;
   gint window_default_height;
+  EGLint surface_width;
+  EGLint surface_height;
 };
 
 struct _GstEglGlesSinkClass