gst/playback/: More leak and compile fixes.

Original commit message from CVS:
* gst/playback/gstdecodebin.c: (remove_element_chain):
* gst/playback/gstplaybin.c: (add_sink):
* gst/playback/gststreaminfo.c: (gst_stream_info_dispose),
(gst_stream_info_set_mute):
* gst/playback/gststreamselector.c:
(gst_stream_selector_get_linked_pad),
(gst_stream_selector_getcaps), (gst_stream_selector_chain):
More leak and compile fixes.
This commit is contained in:
Wim Taymans 2005-07-18 11:32:34 +00:00
parent cfdcc450ca
commit 0d21b72ff7
5 changed files with 54 additions and 42 deletions

View File

@ -1,3 +1,14 @@
2005-07-18 Wim Taymans <wim@fluendo.com>
* gst/playback/gstdecodebin.c: (remove_element_chain):
* gst/playback/gstplaybin.c: (add_sink):
* gst/playback/gststreaminfo.c: (gst_stream_info_dispose),
(gst_stream_info_set_mute):
* gst/playback/gststreamselector.c:
(gst_stream_selector_get_linked_pad),
(gst_stream_selector_getcaps), (gst_stream_selector_chain):
More leak and compile fixes.
2005-07-18 Wim Taymans <wim@fluendo.com> 2005-07-18 Wim Taymans <wim@fluendo.com>
* examples/seeking/seek.c: (make_vorbis_theora_pipeline), * examples/seeking/seek.c: (make_vorbis_theora_pipeline),

View File

@ -741,18 +741,16 @@ remove_element_chain (GstDecodeBin * decode_bin, GstPad * pad)
GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (peer)); GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (peer));
{ {
GstObject *parent = gst_pad_get_parent (peer); GstElement *parent = gst_pad_get_parent_element (peer);
if (parent) { if (parent) {
if (GST_IS_ELEMENT (parent)) { if (parent != GST_ELEMENT (decode_bin)) {
if (parent != GST_OBJECT (decode_bin)) { GST_DEBUG_OBJECT (decode_bin, "dead end pad %s:%s",
GST_DEBUG_OBJECT (decode_bin, "dead end pad %s:%s", GST_DEBUG_PAD_NAME (peer));
GST_DEBUG_PAD_NAME (peer)); } else {
} else { GST_DEBUG_OBJECT (decode_bin, "recursing element %s on pad %s:%s",
GST_DEBUG_OBJECT (decode_bin, "recursing element %s on pad %s:%s", GST_ELEMENT_NAME (elem), GST_DEBUG_PAD_NAME (pad));
GST_ELEMENT_NAME (elem), GST_DEBUG_PAD_NAME (pad)); remove_element_chain (decode_bin, peer);
remove_element_chain (decode_bin, peer);
}
} }
gst_object_unref (parent); gst_object_unref (parent);
} }

View File

@ -717,7 +717,7 @@ add_sink (GstPlayBin * play_bin, GstElement * sink, GstPad * srcpad)
{ {
GstPad *sinkpad; GstPad *sinkpad;
GstPadLinkReturn res; GstPadLinkReturn res;
GstObject *parent; GstElement *parent;
gst_bin_add (GST_BIN (play_bin), sink); gst_bin_add (GST_BIN (play_bin), sink);
@ -727,12 +727,10 @@ add_sink (GstPlayBin * play_bin, GstElement * sink, GstPad * srcpad)
gst_object_unref (sinkpad); gst_object_unref (sinkpad);
/* this is only for debugging */ /* this is only for debugging */
parent = gst_pad_get_parent (srcpad); parent = gst_pad_get_parent_element (srcpad);
if (parent) { if (parent) {
if (GST_IS_ELEMENT (parent)) { GST_DEBUG ("Adding sink with state %d (parent: %d, peer: %d)\n",
GST_DEBUG ("Adding sink with state %d (parent: %d, peer: %d)\n", GST_STATE (sink), GST_STATE (play_bin), GST_STATE (parent));
GST_STATE (sink), GST_STATE (play_bin), GST_STATE (parent));
}
gst_object_unref (parent); gst_object_unref (parent);
} }

View File

@ -234,15 +234,13 @@ gst_stream_info_dispose (GObject * object)
stream_info = GST_STREAM_INFO (object); stream_info = GST_STREAM_INFO (object);
if (stream_info->object) { if (stream_info->object) {
GstObject *parent; GstElement *parent;
parent = gst_pad_get_parent ((GstPad *) parent = gst_pad_get_parent_element ((GstPad *)
GST_PAD_CAST (stream_info->object)); GST_PAD_CAST (stream_info->object));
if (parent != NULL) { if (parent != NULL) {
if (GST_IS_ELEMENT (parent)) { g_signal_handlers_disconnect_by_func (parent,
g_signal_handlers_disconnect_by_func (parent, G_CALLBACK (stream_info_change_state), stream_info);
G_CALLBACK (stream_info_change_state), stream_info);
}
gst_object_unref (parent); gst_object_unref (parent);
} }
@ -293,24 +291,22 @@ gst_stream_info_set_mute (GstStreamInfo * stream_info, gboolean mute)
} }
if (mute != stream_info->mute) { if (mute != stream_info->mute) {
GstObject *element; GstElement *element;
stream_info->mute = mute; stream_info->mute = mute;
//gst_pad_set_active_recursive ((GstPad *) //gst_pad_set_active_recursive ((GstPad *)
//GST_PAD_CAST (stream_info->object), !mute); //GST_PAD_CAST (stream_info->object), !mute);
g_warning ("FIXME"); g_warning ("FIXME");
element = gst_pad_get_parent ((GstPad *) element = gst_pad_get_parent_element ((GstPad *)
GST_PAD_CAST (stream_info->object)); GST_PAD_CAST (stream_info->object));
if (element) { if (element) {
if (GST_IS_ELEMENT (element)) { if (mute) {
if (mute) { g_signal_connect (element, "state-change",
g_signal_connect (element, "state-change", G_CALLBACK (stream_info_change_state), stream_info);
G_CALLBACK (stream_info_change_state), stream_info); } else {
} else { g_signal_handlers_disconnect_by_func (element,
g_signal_handlers_disconnect_by_func (element, G_CALLBACK (stream_info_change_state), stream_info);
G_CALLBACK (stream_info_change_state), stream_info);
}
} }
gst_object_unref (element); gst_object_unref (element);
} }

View File

@ -164,6 +164,8 @@ gst_stream_selector_get_linked_pad (GstPad * pad, gboolean strict)
else if (pad == sel->last_active_sinkpad || !strict) else if (pad == sel->last_active_sinkpad || !strict)
otherpad = sel->srcpad; otherpad = sel->srcpad;
gst_object_unref (sel);
return otherpad; return otherpad;
} }
@ -171,17 +173,22 @@ static GstCaps *
gst_stream_selector_getcaps (GstPad * pad) gst_stream_selector_getcaps (GstPad * pad)
{ {
GstPad *otherpad = gst_stream_selector_get_linked_pad (pad, FALSE); GstPad *otherpad = gst_stream_selector_get_linked_pad (pad, FALSE);
GstObject *parent;
parent = gst_object_get_parent (GST_OBJECT (pad));
if (!otherpad) { if (!otherpad) {
GST_DEBUG_OBJECT (gst_pad_get_parent (pad), GST_DEBUG_OBJECT (parent,
"Pad %s not linked, returning ANY", gst_pad_get_name (pad)); "Pad %s:%s not linked, returning ANY", GST_DEBUG_PAD_NAME (pad));
gst_object_unref (parent);
return gst_caps_new_any (); return gst_caps_new_any ();
} }
GST_DEBUG_OBJECT (gst_pad_get_parent (pad), GST_DEBUG_OBJECT (parent,
"Pad %s is linked (to %s), returning allowed-caps", "Pad %s:%s is linked (to %s:%s), returning allowed-caps",
gst_pad_get_name (pad), gst_pad_get_name (otherpad)); GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (otherpad));
gst_object_unref (parent);
return gst_pad_peer_get_caps (otherpad); return gst_pad_peer_get_caps (otherpad);
} }
@ -241,17 +248,19 @@ gst_stream_selector_chain (GstPad * pad, GstBuffer * buf)
/* first, check if the active pad changed. If so, redo /* first, check if the active pad changed. If so, redo
* negotiation and fail if that fails. */ * negotiation and fail if that fails. */
if (pad != sel->last_active_sinkpad) { if (pad != sel->last_active_sinkpad) {
GST_LOG_OBJECT (sel, "stream change detected, switching from %s to %s", GST_LOG_OBJECT (sel, "stream change detected, switching from %s to %s:%s",
sel->last_active_sinkpad ? sel->last_active_sinkpad ?
gst_pad_get_name (sel->last_active_sinkpad) : "none", GST_OBJECT_NAME (sel->last_active_sinkpad) : "none",
gst_pad_get_name (pad)); GST_DEBUG_PAD_NAME (pad));
sel->last_active_sinkpad = pad; sel->last_active_sinkpad = pad;
} }
/* forward */ /* forward */
GST_DEBUG_OBJECT (sel, "Forwarding buffer %p from pad %s", GST_DEBUG_OBJECT (sel, "Forwarding buffer %p from pad %s:%s",
"buf", gst_pad_get_name (pad)); buf, GST_DEBUG_PAD_NAME (pad));
res = gst_pad_push (sel->srcpad, buf); res = gst_pad_push (sel->srcpad, buf);
gst_object_unref (sel);
return res; return res;
} }