summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Santos <thiago.sousa.santos@collabora.co.uk>2010-08-12 20:23:45 -0300
committerThiago Santos <thiago.sousa.santos@collabora.co.uk>2010-08-19 07:33:08 -0300
commit706f0f657b0ee85c5ca603b1300234cb980fa619 (patch)
treedb422429e85f12ff35f26113b627a4808bc66ab5
parent41c04c7471413736191bcad95e2278975580fc94 (diff)
element: link_many should activate pads if needed
gst_element_link_many does some magic and creates ghostpads if needed, but it didn't set the newly created ghostpad to active if needed. This patch fixes it. https://bugzilla.gnome.org/show_bug.cgi?id=626784
-rw-r--r--gst/gstutils.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gst/gstutils.c b/gst/gstutils.c
index 60eb5b31b2..f1b52af891 100644
--- a/gst/gstutils.c
+++ b/gst/gstutils.c
@@ -1450,18 +1450,28 @@ ghost_up (GstElement * e, GstPad * pad)
static gint ghost_pad_index = 0;
GstPad *gpad;
gchar *name;
+ GstState current;
+ GstState next;
GstObject *parent = GST_OBJECT_PARENT (e);
name = g_strdup_printf ("ghost%d", ghost_pad_index++);
gpad = gst_ghost_pad_new (name, pad);
g_free (name);
+ GST_STATE_LOCK (e);
+ gst_element_get_state (e, &current, &next, 0);
+
+ if (current > GST_STATE_READY || next == GST_STATE_PAUSED)
+ gst_pad_set_active (gpad, TRUE);
+
if (!gst_element_add_pad ((GstElement *) parent, gpad)) {
g_warning ("Pad named %s already exists in element %s\n",
GST_OBJECT_NAME (gpad), GST_OBJECT_NAME (parent));
gst_object_unref ((GstObject *) gpad);
+ GST_STATE_UNLOCK (e);
return NULL;
}
+ GST_STATE_UNLOCK (e);
return gpad;
}