eglglessink: Fix aspect-ratio issues caused by scaling on RPi
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 28 Feb 2013 10:27:44 +0000 (11:27 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 28 Feb 2013 10:29:24 +0000 (11:29 +0100)
ext/eglgles/video_platform_wrapper.c

index d9e799fe4fb439c1ba8dc83ae6ed9cc544708f84..085b8184d1fbb92c26c5f54b06fb7ae69fdedeb2 100644 (file)
@@ -669,6 +669,7 @@ platform_free_eglimage (EGLDisplay display, EGLContext context, GLuint tex_id,
 #ifdef USE_EGL_RPI
 #include <bcm_host.h>
 #include <gst/video/gstvideopool.h>
+#include <gst/video/gstvideosink.h>
 
 typedef struct
 {
@@ -685,6 +686,7 @@ platform_create_native_window (gint width, gint height, gpointer * window_data)
   RPIWindowData *data;
   VC_RECT_T dst_rect;
   VC_RECT_T src_rect;
+  GstVideoRectangle src, dst, res;
 
   uint32_t dp_height;
   uint32_t dp_width;
@@ -699,10 +701,19 @@ platform_create_native_window (gint width, gint height, gpointer * window_data)
   GST_DEBUG ("Got display size: %dx%d\n", dp_width, dp_height);
   GST_DEBUG ("Source size: %dx%d\n", width, height);
 
-  dst_rect.x = 0;
-  dst_rect.y = 0;
-  dst_rect.width = dp_width;
-  dst_rect.height = dp_height;
+  /* Center width*height frame inside dp_width*dp_height */
+  src.w = width;
+  src.h = height;
+  src.x = src.y = 0;
+  dst.w = dp_width;
+  dst.h = dp_height;
+  dst.x = dst.y = 0;
+  gst_video_sink_center_rect (&src, &dst, &res, TRUE);
+
+  dst_rect.x = res.x;
+  dst_rect.y = res.y;
+  dst_rect.width = res.w;
+  dst_rect.height = res.h;
 
   src_rect.x = 0;
   src_rect.y = 0;