From d090e2c34312b010ac80d68cf66eb74de9e0f001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 28 Jun 2022 09:38:34 +0300 Subject: [PATCH] glvideomixer: Only consider property changes a geometry change if there as an actual change Part-of: --- .../gst-plugins-base/ext/gl/gstglvideomixer.c | 66 ++++++++++++------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/subprojects/gst-plugins-base/ext/gl/gstglvideomixer.c b/subprojects/gst-plugins-base/ext/gl/gstglvideomixer.c index e331ee66f2..e9dc5b0678 100644 --- a/subprojects/gst-plugins-base/ext/gl/gstglvideomixer.c +++ b/subprojects/gst-plugins-base/ext/gl/gstglvideomixer.c @@ -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); }