glvideomixer: Only consider property changes a geometry change if there as an actual...
authorSebastian Dröge <sebastian@centricular.com>
Tue, 28 Jun 2022 06:38:34 +0000 (09:38 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 1 Jul 2022 02:41:57 +0000 (05:41 +0300)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2669>

subprojects/gst-plugins-base/ext/gl/gstglvideomixer.c

index e331ee6..e9dc5b0 100644 (file)
@@ -903,22 +903,31 @@ gst_gl_video_mixer_pad_set_property (GObject * object, guint prop_id,
   GstGLVideoMixerPad *pad = GST_GL_VIDEO_MIXER_PAD (object);
   GstGLMixer *mix = GST_GL_MIXER (gst_pad_get_parent (GST_PAD (pad)));
 
+  GST_OBJECT_LOCK (pad);
   switch (prop_id) {
-    case PROP_PAD_XPOS:
-      pad->xpos = g_value_get_int (value);
-      pad->geometry_change = TRUE;
+    case PROP_PAD_XPOS:{
+      gint val = g_value_get_int (value);
+      pad->geometry_change = val != pad->xpos;
+      pad->xpos = val;
       break;
-    case PROP_PAD_YPOS:
-      pad->ypos = g_value_get_int (value);
-      pad->geometry_change = TRUE;
+    }
+    case PROP_PAD_YPOS:{
+      gint val = g_value_get_int (value);
+      pad->geometry_change = val != pad->ypos;
+      pad->ypos = val;
       break;
-    case PROP_PAD_WIDTH:
-      pad->width = g_value_get_int (value);
-      pad->geometry_change = TRUE;
+    }
+    case PROP_PAD_WIDTH:{
+      gint val = g_value_get_int (value);
+      pad->geometry_change = val != pad->width;
+      pad->width = val;
       break;
-    case PROP_PAD_HEIGHT:
-      pad->height = g_value_get_int (value);
-      pad->geometry_change = TRUE;
+    }
+    case PROP_PAD_HEIGHT:{
+      gint val = g_value_get_int (value);
+      pad->geometry_change = val != pad->height;
+      pad->height = val;
+    }
       break;
     case PROP_PAD_ALPHA:
       pad->alpha = g_value_get_double (value);
@@ -953,26 +962,35 @@ gst_gl_video_mixer_pad_set_property (GObject * object, guint prop_id,
     case PROP_PAD_BLEND_FUNCTION_CONSTANT_COLOR_ALPHA:
       pad->blend_constant_color_alpha = g_value_get_double (value);
       break;
-    case PROP_PAD_CROP_LEFT:
-      pad->crop_left = g_value_get_int (value);
-      pad->geometry_change = TRUE;
+    case PROP_PAD_CROP_LEFT:{
+      gint val = g_value_get_int (value);
+      pad->geometry_change = val != pad->crop_left;
+      pad->crop_left = val;
       break;
-    case PROP_PAD_CROP_RIGHT:
-      pad->crop_right = g_value_get_int (value);
-      pad->geometry_change = TRUE;
+    }
+    case PROP_PAD_CROP_RIGHT:{
+      gint val = g_value_get_int (value);
+      pad->geometry_change = val != pad->crop_right;
+      pad->crop_right = val;
       break;
-    case PROP_PAD_CROP_TOP:
-      pad->crop_top = g_value_get_int (value);
-      pad->geometry_change = TRUE;
+    }
+    case PROP_PAD_CROP_TOP:{
+      gint val = g_value_get_int (value);
+      pad->geometry_change = val != pad->crop_top;
+      pad->crop_top = val;
       break;
-    case PROP_PAD_CROP_BOTTOM:
-      pad->crop_bottom = g_value_get_int (value);
-      pad->geometry_change = TRUE;
+    }
+    case PROP_PAD_CROP_BOTTOM:{
+      gint val = g_value_get_int (value);
+      pad->geometry_change = val != pad->crop_bottom;
+      pad->crop_bottom = val;
       break;
+    }
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
   }
+  GST_OBJECT_UNLOCK (pad);
 
   gst_object_unref (mix);
 }