summaryrefslogtreecommitdiff
path: root/gst/playback/gstdecodebin2.c
diff options
context:
space:
mode:
authorHarri Mähönen <harri.mahonen@gmail.com>2010-11-17 10:14:59 +0200
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2010-11-18 00:11:41 +0000
commit7c5e39664e68700d8895c1873c2a070d1bde3ff8 (patch)
tree1c24bc7670d6a1504e6bae5235d9b2699d88696d /gst/playback/gstdecodebin2.c
parent8f039997f097ac5baa6a59350b2d41942a13232e (diff)
*decodebin*: don't leak pad templates set on ghostpads
https://bugzilla.gnome.org/show_bug.cgi?id=635067
Diffstat (limited to 'gst/playback/gstdecodebin2.c')
-rw-r--r--gst/playback/gstdecodebin2.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c
index 3efeb3116..0255fd294 100644
--- a/gst/playback/gstdecodebin2.c
+++ b/gst/playback/gstdecodebin2.c
@@ -919,6 +919,7 @@ gst_decode_bin_init (GstDecodeBin * decode_bin)
} else {
GstPad *pad;
GstPad *gpad;
+ GstPadTemplate *pad_tmpl;
/* add the typefind element */
if (!gst_bin_add (GST_BIN (decode_bin), decode_bin->typefind)) {
@@ -930,12 +931,15 @@ gst_decode_bin_init (GstDecodeBin * decode_bin)
/* get the sinkpad */
pad = gst_element_get_static_pad (decode_bin->typefind, "sink");
+ /* get the pad template */
+ pad_tmpl = gst_static_pad_template_get (&decoder_bin_sink_template);
+
/* ghost the sink pad to ourself */
- gpad = gst_ghost_pad_new_from_template ("sink", pad,
- gst_static_pad_template_get (&decoder_bin_sink_template));
+ gpad = gst_ghost_pad_new_from_template ("sink", pad, pad_tmpl);
gst_pad_set_active (gpad, TRUE);
gst_element_add_pad (GST_ELEMENT (decode_bin), gpad);
+ gst_object_unref (pad_tmpl);
gst_object_unref (pad);
/* connect a signal to find out when the typefind element found
@@ -3406,16 +3410,19 @@ static GstDecodePad *
gst_decode_pad_new (GstDecodeBin * dbin, GstPad * pad, GstDecodeChain * chain)
{
GstDecodePad *dpad;
+ GstPadTemplate *pad_tmpl;
GST_DEBUG_OBJECT (dbin, "making new decodepad");
+ pad_tmpl = gst_static_pad_template_get (&decoder_bin_src_template);
dpad =
g_object_new (GST_TYPE_DECODE_PAD, "direction", GST_PAD_DIRECTION (pad),
- "template", gst_static_pad_template_get (&decoder_bin_src_template),
+ "template", pad_tmpl,
NULL);
gst_ghost_pad_construct (GST_GHOST_PAD_CAST (dpad));
gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (dpad), pad);
dpad->chain = chain;
dpad->dbin = dbin;
+ gst_object_unref (pad_tmpl);
return dpad;
}