plug qtdemux refcount leaks

* gst/qtdemux/qtdemux.c (gst_qtdemux_src_convert): Unref the qtdemux; we
  weren't doing so before.
  (gst_qtdemux_handle_src_event, gst_qtdemux_chain): Fix some error
  cases which would leak a ref to the qtdemux.
This commit is contained in:
Andy Wingo 2011-02-15 16:30:20 +01:00
parent b2fb4edcb7
commit cfeb84b821

View file

@ -580,8 +580,10 @@ gst_qtdemux_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
GstQTDemux *qtdemux = GST_QTDEMUX (gst_pad_get_parent (pad)); GstQTDemux *qtdemux = GST_QTDEMUX (gst_pad_get_parent (pad));
gint32 index; gint32 index;
if (stream->subtype != FOURCC_vide) if (stream->subtype != FOURCC_vide) {
return FALSE; res = FALSE;
goto done;
}
switch (src_format) { switch (src_format) {
case GST_FORMAT_TIME: case GST_FORMAT_TIME:
@ -630,6 +632,9 @@ gst_qtdemux_src_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
res = FALSE; res = FALSE;
} }
done:
gst_object_unref (qtdemux);
return res; return res;
} }
#endif #endif
@ -1492,6 +1497,7 @@ gst_qtdemux_handle_src_event (GstPad * pad, GstEvent * event)
gst_object_unref (qtdemux); gst_object_unref (qtdemux);
done:
return res; return res;
/* ERRORS */ /* ERRORS */
@ -1499,7 +1505,8 @@ index_failed:
{ {
GST_ERROR_OBJECT (qtdemux, "Index failed"); GST_ERROR_OBJECT (qtdemux, "Index failed");
gst_event_unref (event); gst_event_unref (event);
return FALSE; res = FALSE;
goto done;
} }
} }
@ -4102,8 +4109,10 @@ gst_qtdemux_chain (GstPad * sinkpad, GstBuffer * inbuf)
if (demux->got_moov && demux->fragmented) { if (demux->got_moov && demux->fragmented) {
GST_DEBUG_OBJECT (demux, "Parsing [moof]"); GST_DEBUG_OBJECT (demux, "Parsing [moof]");
if (!qtdemux_parse_moof (demux, data, demux->neededbytes, if (!qtdemux_parse_moof (demux, data, demux->neededbytes,
demux->offset, NULL)) demux->offset, NULL)) {
return GST_FLOW_ERROR; ret = GST_FLOW_ERROR;
goto done;
}
} else { } else {
GST_DEBUG_OBJECT (demux, "Discarding [moof]"); GST_DEBUG_OBJECT (demux, "Discarding [moof]");
} }