diff options
author | Thiago Santos <thiago.sousa.santos@collabora.co.uk> | 2010-08-12 20:23:45 -0300 |
---|---|---|
committer | Thiago Santos <thiago.sousa.santos@collabora.co.uk> | 2010-08-19 07:33:08 -0300 |
commit | 706f0f657b0ee85c5ca603b1300234cb980fa619 (patch) | |
tree | db422429e85f12ff35f26113b627a4808bc66ab5 /gst/gstutils.c | |
parent | 41c04c7471413736191bcad95e2278975580fc94 (diff) | |
download | gstreamer-706f0f657b0ee85c5ca603b1300234cb980fa619.tar.gz |
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
Diffstat (limited to 'gst/gstutils.c')
-rw-r--r-- | gst/gstutils.c | 10 |
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, ¤t, &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; } |