gl/eagl: Fix automatic resize behaviour
authorMart Raudsepp <mart@leio.tech>
Thu, 26 Nov 2020 12:52:26 +0000 (14:52 +0200)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Thu, 3 Dec 2020 08:18:29 +0000 (08:18 +0000)
https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/681
added a layoutSubViews, which never gets called, because it should have been
called layoutSubviews (non-capital "v"). However after fixing that, it still
doesn't work correctly, because window_width/height values are immediately
updated and then draw_cb will never trigger the resize path, because the
values are already up to date.
Update the values inside the resize path again instead, so the check for
entering the resize path is logically always correct.
This makes the layoutSubviews unnecessary, as it only updated the internal
size values prematurely, so it is deleted instead of method naming fixed.

These changes were originally done to avoid accessing UIKit objects on the
main thread, but no additional accesses are added here, only internal
private variable assignments under the same draw_lock, so there should be
no threading issues reintroduced.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/945>

gst-libs/gst/gl/eagl/gstglwindow_eagl.m

index b7364be..482605b 100644 (file)
@@ -313,6 +313,9 @@ draw_cb (gpointer data)
     if (window->queue_resize || window_eagl->priv->window_width != size.width ||
         window_eagl->priv->window_height != size.height) {
 
+      window_eagl->priv->window_width = size.width;
+      window_eagl->priv->window_height = size.height;
+
       gst_gl_context_eagl_resize (eagl_context);
 
       gst_gl_window_resize (window, window_eagl->priv->window_width,
@@ -368,16 +371,6 @@ gst_gl_window_eagl_get_layer (GstGLWindowEagl * window_eagl)
   window_eagl = window;
 }
 
--(void) layoutSubViews
-{
-  g_mutex_lock (&window_eagl->priv->draw_lock);
-  [super layoutSubviews];
-  CGSize rect = self.bounds.size;
-  self->window_eagl->priv->window_width = rect.width;
-  self->window_eagl->priv->window_height = rect.height;
-  g_mutex_unlock (&window_eagl->priv->draw_lock);
-}
-
 @end
 
 void