From 814b46b6a67d748a91cb7b1b5ba93ed54d03c4f9 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 4 Jun 2009 18:26:04 +0200 Subject: [PATCH] ghostpad: avoid excessive notify for caps Avoid an object property notify if the caps on the other pad were already set (and thus notified). --- gst/gstghostpad.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/gst/gstghostpad.c b/gst/gstghostpad.c index bcf71ded5e..f736693ee2 100644 --- a/gst/gstghostpad.c +++ b/gst/gstghostpad.c @@ -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