From: Sebastian Dröge Date: Thu, 27 Sep 2012 12:28:05 +0000 (+0200) Subject: eglglessink: Correctly resize if the surface dimensions change X-Git-Tag: 1.19.3~507^2~14608 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c3fb44aef392292762e0608faa55778c25fab399;p=platform%2Fupstream%2Fgstreamer.git eglglessink: Correctly resize if the surface dimensions change --- diff --git a/ext/eglgles/gsteglglessink.c b/ext/eglgles/gsteglglessink.c index 6dad020..a7c44fb 100644 --- a/ext/eglgles/gsteglglessink.c +++ b/ext/eglgles/gsteglglessink.c @@ -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;