[gst-cvs] gst-plugins-good: qtdemux: Refactor stbl sub-atom freeing. Free when index has been
Robert Swain
robswain at kemper.freedesktop.org
Mon Jan 11 00:51:07 PST 2010
Module: gst-plugins-good
Branch: master
Commit: a3403591276d82985fbd0b13892ddb4c51c77862
URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=a3403591276d82985fbd0b13892ddb4c51c77862
Author: Robert Swain <robert.swain at collabora.co.uk>
Date: Fri Jan 8 13:55:05 2010 +0100
qtdemux: Refactor stbl sub-atom freeing. Free when index has been
completely parsed.
---
gst/qtdemux/qtdemux.c | 73 +++++++++++++++++-------------------------------
1 files changed, 26 insertions(+), 47 deletions(-)
diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c
index 7a05324..fa3fae3 100644
--- a/gst/qtdemux/qtdemux.c
+++ b/gst/qtdemux/qtdemux.c
@@ -1578,6 +1578,25 @@ gst_qtdemux_get_index (GstElement * element)
return result;
}
+static void
+gst_qtdemux_stbl_free (QtDemuxStream * stream)
+{
+ if (stream->stco.data)
+ g_free ((gpointer) stream->stco.data);
+ if (stream->stsz.data)
+ g_free ((gpointer) stream->stsz.data);
+ if (stream->stsc.data)
+ g_free ((gpointer) stream->stsc.data);
+ if (stream->stts.data)
+ g_free ((gpointer) stream->stts.data);
+ if (stream->stss.data)
+ g_free ((gpointer) stream->stss.data);
+ if (stream->stps.data)
+ g_free ((gpointer) stream->stps.data);
+ if (stream->ctts.data)
+ g_free ((gpointer) stream->ctts.data);
+}
+
static GstStateChangeReturn
gst_qtdemux_change_state (GstElement * element, GstStateChange transition)
{
@@ -1635,20 +1654,8 @@ gst_qtdemux_change_state (GstElement * element, GstStateChange transition)
g_free (stream->segments);
if (stream->pending_tags)
gst_tag_list_free (stream->pending_tags);
- if (stream->stco.data)
- g_free ((gpointer) stream->stco.data);
- if (stream->stsz.data)
- g_free ((gpointer) stream->stsz.data);
- if (stream->stsc.data)
- g_free ((gpointer) stream->stsc.data);
- if (stream->stts.data)
- g_free ((gpointer) stream->stts.data);
- if (stream->stss.data)
- g_free ((gpointer) stream->stss.data);
- if (stream->stps.data)
- g_free ((gpointer) stream->stps.data);
- if (stream->ctts.data)
- g_free ((gpointer) stream->ctts.data);
+ /* free stbl sub-atoms */
+ gst_qtdemux_stbl_free (stream);
g_free (stream);
}
qtdemux->major_brand = 0;
@@ -4567,6 +4574,9 @@ ctts:
}
done:
stream->stbl_index = n;
+ /* if index has been completely parsed, free data that is no-longer needed */
+ if (n == stream->n_samples)
+ gst_qtdemux_stbl_free (stream);
GST_OBJECT_UNLOCK (qtdemux);
return TRUE;
@@ -5745,42 +5755,11 @@ error_encrypted:
return FALSE;
}
samples_failed:
- {
- /* we posted an error already */
- if (stream->stco.data)
- g_free ((gpointer) stream->stco.data);
- if (stream->stsz.data)
- g_free ((gpointer) stream->stsz.data);
- if (stream->stsc.data)
- g_free ((gpointer) stream->stsc.data);
- if (stream->stts.data)
- g_free ((gpointer) stream->stts.data);
- if (stream->stss.data)
- g_free ((gpointer) stream->stss.data);
- if (stream->stps.data)
- g_free ((gpointer) stream->stps.data);
- if (stream->ctts.data)
- g_free ((gpointer) stream->ctts.data);
- g_free (stream);
- return FALSE;
- }
segments_failed:
{
/* we posted an error already */
- if (stream->stco.data)
- g_free ((gpointer) stream->stco.data);
- if (stream->stsz.data)
- g_free ((gpointer) stream->stsz.data);
- if (stream->stsc.data)
- g_free ((gpointer) stream->stsc.data);
- if (stream->stts.data)
- g_free ((gpointer) stream->stts.data);
- if (stream->stss.data)
- g_free ((gpointer) stream->stss.data);
- if (stream->stps.data)
- g_free ((gpointer) stream->stps.data);
- if (stream->ctts.data)
- g_free ((gpointer) stream->ctts.data);
+ /* free stbl sub-atoms */
+ gst_qtdemux_stbl_free (stream);
g_free (stream);
return FALSE;
}
More information about the Gstreamer-commits
mailing list