GstElementState state;
GstScheduler *sched;
+ /* the element must not already have a parent */
+ g_return_if_fail (GST_ELEMENT_PARENT (element) == NULL);
+
+ /* must be not be in PLAYING state in order to modify bin */
+ g_return_if_fail (GST_STATE (bin) != GST_STATE_PLAYING);
+
/* then check to see if the element's name is already taken in the bin */
if (gst_object_check_uniqueness (bin->children,
GST_ELEMENT_NAME (element)) == FALSE)
GST_DEBUG (GST_CAT_PARENTAGE, "adding element \"%s\" to bin \"%s\"",
GST_ELEMENT_NAME (element), GST_ELEMENT_NAME (bin));
- /* the element must not already have a parent */
- g_return_if_fail (GST_ELEMENT_PARENT (element) == NULL);
-
- /* must be not be in PLAYING state in order to modify bin */
- g_return_if_fail (GST_STATE (bin) != GST_STATE_PLAYING);
-
bclass = GST_BIN_GET_CLASS (bin);
if (bclass->add_element) {
child = GST_ELEMENT (children->data);
children = g_list_next (children);
+ if (GST_FLAG_IS_SET (child, GST_ELEMENT_LOCKED_STATE))
+ continue;
+
old_child_state = GST_STATE (child);
switch (gst_element_set_state (child, pending)) {
GST_ELEMENT_SCHEDULER_PRIVATE1,
GST_ELEMENT_SCHEDULER_PRIVATE2,
+ /* ignore state changes from parent */
+ GST_ELEMENT_LOCKED_STATE,
+
/* use some padding for future expansion */
GST_ELEMENT_FLAG_LAST = GST_OBJECT_FLAG_LAST + 16
} GstElementFlags;
GstPadTemplate* gst_element_get_compatible_pad_template (GstElement *element, GstPadTemplate *compattempl);
gboolean gst_element_link (GstElement *src, GstElement *dest);
-gboolean gst_element_link_many (GstElement *element_1, GstElement *element_2, ...);
+gboolean gst_element_link_many (GstElement *element_1,
+ GstElement *element_2, ...);
gboolean gst_element_link_filtered (GstElement *src, GstElement *dest,
GstCaps *filtercaps);
void gst_element_unlink (GstElement *src, GstElement *dest);
-void gst_element_unlink_many (GstElement *element_1, GstElement *element_2, ...);
+void gst_element_unlink_many (GstElement *element_1,
+ GstElement *element_2, ...);
-gboolean gst_element_link_pads (GstElement *src, const gchar *srcpadname,
+gboolean gst_element_link_pads (GstElement *src, const gchar *srcpadname,
GstElement *dest, const gchar *destpadname);
-gboolean gst_element_link_pads_filtered (GstElement *src, const gchar *srcpadname,
+gboolean gst_element_link_pads_filtered (GstElement *src, const gchar *srcpadname,
GstElement *dest, const gchar *destpadname,
GstCaps *filtercaps);
-void gst_element_unlink_pads (GstElement *src, const gchar *srcpadname,
+void gst_element_unlink_pads (GstElement *src, const gchar *srcpadname,
GstElement *dest, const gchar *destpadname);
const GstEventMask* gst_element_get_event_masks (GstElement *element);