gst/: Fix refcounting in utils function.

Original commit message from CVS:
* gst/gstelement.c: (gst_element_add_pad), (gst_element_query):
* gst/gstutils.c: (gst_element_get_compatible_pad_template),
(gst_element_link_pads), (gst_element_query_position),
(gst_element_query_convert), (intersect_caps_func),
(gst_pad_query_position), (gst_pad_query_convert):
Fix refcounting in utils function.
No point in trying to activate a pad when it's added, it could
be added from the state change function and then we deadlock, the
element has to decide what to do.
This commit is contained in:
Wim Taymans 2005-05-11 09:21:24 +00:00
parent e44beb9f04
commit c9aaf4663f
3 changed files with 25 additions and 11 deletions

View file

@ -1,3 +1,15 @@
2005-05-11 Wim Taymans <wim@fluendo.com>
* gst/gstelement.c: (gst_element_add_pad), (gst_element_query):
* gst/gstutils.c: (gst_element_get_compatible_pad_template),
(gst_element_link_pads), (gst_element_query_position),
(gst_element_query_convert), (intersect_caps_func),
(gst_pad_query_position), (gst_pad_query_convert):
Fix refcounting in utils function.
No point in trying to activate a pad when it's added, it could
be added from the state change function and then we deadlock, the
element has to decide what to do.
2005-05-10 Andy Wingo <wingo@pobox.com>
* gst/elements/gstfakesink.c (gst_fakesink_render): Er, emit with

View file

@ -453,7 +453,8 @@ gst_element_get_index (GstElement * element)
* Adds a pad (link point) to @element. @pad's parent will be set to @element;
* see gst_object_set_parent() for refcounting information.
*
* Pads are automatically activated when the element is in state PLAYING.
* Pads are not automatically activated so elements should perform the needed
* steps to activate the pad.
*
* The pad and the element should be unlocked when calling this function.
*
@ -508,13 +509,6 @@ gst_element_add_pad (GstElement * element, GstPad * pad)
element->pads_cookie++;
GST_UNLOCK (element);
GST_STATE_LOCK (element);
/* activate pad when we are playing */
if (GST_STATE (element) == GST_STATE_PLAYING)
/* FIXME, figure out mode */
gst_pad_set_active (pad, GST_ACTIVATE_PUSH);
GST_STATE_UNLOCK (element);
/* emit the NEW_PAD signal */
g_signal_emit (G_OBJECT (element), gst_element_signals[NEW_PAD], 0, pad);

View file

@ -852,8 +852,15 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname,
GST_DEBUG_PAD_NAME (srcpad));
if ((GST_PAD_DIRECTION (srcpad) == GST_PAD_SRC) &&
(GST_PAD_PEER (srcpad) == NULL)) {
GstPad *temp = destpadname ? destpad :
gst_element_get_compatible_pad (dest, srcpad, NULL);
GstPad *temp;
if (destpadname) {
temp = destpad;
gst_object_ref (GST_OBJECT (temp));
} else {
temp = gst_element_get_compatible_pad (dest, srcpad, NULL);
gst_object_ref (GST_OBJECT (temp));
}
if (temp && gst_pad_link (srcpad, temp) == GST_PAD_LINK_OK) {
GST_CAT_DEBUG (GST_CAT_ELEMENT_PADS, "linked pad %s:%s to pad %s:%s",
@ -884,7 +891,8 @@ gst_element_link_pads (GstElement * src, const gchar * srcpadname,
gst_object_unref (GST_OBJECT (destpad));
return FALSE;
} else {
gst_object_unref (GST_OBJECT (srcpad));
if (srcpad)
gst_object_unref (GST_OBJECT (srcpad));
srcpad = NULL;
}
if (destpad) {