From 67503c9d43f3f5ed774b653badf1920a95deb3ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Thu, 7 Oct 2010 18:21:13 +0100 Subject: [PATCH] tee: use g_object_notify_by_pspec() if possible Use more efficient g_object_notify_by_pspec() if we're compiling against GLib >= 2.26. --- plugins/elements/gsttee.c | 40 +++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/plugins/elements/gsttee.c b/plugins/elements/gsttee.c index 4f3cc0717a..cf5360cc74 100644 --- a/plugins/elements/gsttee.c +++ b/plugins/elements/gsttee.c @@ -113,6 +113,9 @@ GST_BOILERPLATE_FULL (GstTee, gst_tee, GstElement, GST_TYPE_ELEMENT, _do_init); /* structure and quark to keep track of which pads have been pushed */ static GQuark push_data; +static GParamSpec *pspec_last_message = NULL; +static GParamSpec *pspec_alloc_pad = NULL; + typedef struct { gboolean pushed; @@ -223,19 +226,21 @@ gst_tee_class_init (GstTeeClass * klass) g_param_spec_boolean ("silent", "Silent", "Don't produce last_message events", DEFAULT_PROP_SILENT, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + pspec_last_message = g_param_spec_string ("last-message", "Last Message", + "The message describing current status", DEFAULT_PROP_LAST_MESSAGE, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (gobject_class, PROP_LAST_MESSAGE, - g_param_spec_string ("last-message", "Last Message", - "The message describing current status", DEFAULT_PROP_LAST_MESSAGE, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + pspec_last_message); g_object_class_install_property (gobject_class, PROP_PULL_MODE, g_param_spec_enum ("pull-mode", "Pull mode", "Behavior of tee in pull mode", GST_TYPE_TEE_PULL_MODE, DEFAULT_PULL_MODE, G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + pspec_alloc_pad = g_param_spec_object ("alloc-pad", "Allocation Src Pad", + "The pad used for gst_pad_alloc_buffer", GST_TYPE_PAD, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (gobject_class, PROP_ALLOC_PAD, - g_param_spec_object ("alloc-pad", "Allocation Src Pad", - "The pad used for gst_pad_alloc_buffer", GST_TYPE_PAD, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + pspec_alloc_pad); gstelement_class->request_new_pad = GST_DEBUG_FUNCPTR (gst_tee_request_new_pad); @@ -268,6 +273,16 @@ gst_tee_init (GstTee * tee, GstTeeClass * g_class) tee->last_message = NULL; } +static void +gst_tee_notify_alloc_pad (GstTee * tee) +{ +#if !GLIB_CHECK_VERSION(2,26,0) + g_object_notify ((GObject *) tee, "alloc-pad"); +#else + g_object_notify_by_pspec ((GObject *) tee, pspec_alloc_pad); +#endif +} + static GstPad * gst_tee_request_new_pad (GstElement * element, GstPadTemplate * templ, const gchar * unused) @@ -344,7 +359,7 @@ activate_failed: GST_OBJECT_UNLOCK (tee); gst_object_unref (srcpad); if (changed) { - g_object_notify (G_OBJECT (tee), "alloc-pad"); + gst_tee_notify_alloc_pad (tee); } return NULL; } @@ -380,7 +395,7 @@ gst_tee_release_pad (GstElement * element, GstPad * pad) GST_TEE_DYN_UNLOCK (tee); if (changed) { - g_object_notify (G_OBJECT (tee), "alloc-pad"); + gst_tee_notify_alloc_pad (tee); } } @@ -517,7 +532,7 @@ retry: /* we have a buffer, keep the pad for later and exit the loop. */ tee->allocpad = pad; GST_OBJECT_UNLOCK (tee); - g_object_notify ((GObject *) tee, "alloc-pad"); + gst_tee_notify_alloc_pad (tee); GST_OBJECT_LOCK (tee); break; } @@ -631,7 +646,12 @@ gst_tee_do_message (GstTee * tee, GstPad * pad, gpointer data, gboolean is_list) GST_BUFFER_SIZE (data), GST_BUFFER_TIMESTAMP (data), data); } GST_OBJECT_UNLOCK (tee); - g_object_notify (G_OBJECT (tee), "last_message"); + +#if !GLIB_CHECK_VERSION(2,26,0) + g_object_notify ((GObject *) tee, "last_message"); +#else + g_object_notify_by_pspec ((GObject *) tee, pspec_last_message); +#endif } static GstFlowReturn