ghostpad: avoid excessive notify for caps
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 4 Jun 2009 16:26:04 +0000 (18:26 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 4 Jun 2009 16:26:04 +0000 (18:26 +0200)
Avoid an object property notify if the caps on the other pad were already
set (and thus notified).

gst/gstghostpad.c

index bcf71de..f736693 100644 (file)
@@ -673,14 +673,19 @@ static void
 on_int_notify (GstPad * internal, GParamSpec * unused, GstGhostPad * pad)
 {
   GstCaps *caps;
+  gboolean changed;
 
   g_object_get (internal, "caps", &caps, NULL);
 
   GST_OBJECT_LOCK (pad);
-  gst_caps_replace (&(GST_PAD_CAPS (pad)), caps);
+  changed = (GST_PAD_CAPS (pad) != caps);
+  if (changed)
+    gst_caps_replace (&(GST_PAD_CAPS (pad)), caps);
   GST_OBJECT_UNLOCK (pad);
 
-  g_object_notify (G_OBJECT (pad), "caps");
+  if (changed)
+    g_object_notify (G_OBJECT (pad), "caps");
+
   if (caps)
     gst_caps_unref (caps);
 }
@@ -689,17 +694,20 @@ static void
 on_src_target_notify (GstPad * target, GParamSpec * unused, GstGhostPad * pad)
 {
   GstCaps *caps;
+  gboolean changed;
 
   g_object_get (target, "caps", &caps, NULL);
 
   GST_OBJECT_LOCK (pad);
+  changed = (GST_PAD_CAPS (pad) != caps);
   gst_caps_replace (&(GST_PAD_CAPS (pad)), caps);
   GST_OBJECT_UNLOCK (pad);
 
-  g_object_notify (G_OBJECT (pad), "caps");
+  if (changed)
+    g_object_notify (G_OBJECT (pad), "caps");
+
   if (caps)
     gst_caps_unref (caps);
-
 }
 
 static gboolean