qtdemux: refactor stream freeing
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Thu, 4 Nov 2010 09:06:30 +0000 (10:06 +0100)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Fri, 3 Dec 2010 14:50:33 +0000 (15:50 +0100)
gst/qtdemux/qtdemux.c

index eee7361..46d016e 100644 (file)
@@ -1683,6 +1683,27 @@ gst_qtdemux_stbl_free (QtDemuxStream * stream)
   stream->ctts.data = NULL;
 }
 
+static void
+gst_qtdemux_stream_free (GstQTDemux * qtdemux, QtDemuxStream * stream)
+{
+  while (stream->buffers) {
+    gst_buffer_unref (GST_BUFFER_CAST (stream->buffers->data));
+    stream->buffers = g_slist_delete_link (stream->buffers, stream->buffers);
+  }
+  if (stream->pad)
+    gst_element_remove_pad (GST_ELEMENT_CAST (qtdemux), stream->pad);
+  g_free (stream->samples);
+  if (stream->caps)
+    gst_caps_unref (stream->caps);
+  g_free (stream->segments);
+  if (stream->pending_tags)
+    gst_tag_list_free (stream->pending_tags);
+  g_free (stream->redirect_uri);
+  /* free stbl sub-atoms */
+  gst_qtdemux_stbl_free (stream);
+  g_free (stream);
+}
+
 static GstStateChangeReturn
 gst_qtdemux_change_state (GstElement * element, GstStateChange transition)
 {
@@ -1725,25 +1746,8 @@ gst_qtdemux_change_state (GstElement * element, GstStateChange transition)
       qtdemux->element_index = NULL;
       gst_adapter_clear (qtdemux->adapter);
       for (n = 0; n < qtdemux->n_streams; n++) {
-        QtDemuxStream *stream = qtdemux->streams[n];
-
-        while (stream->buffers) {
-          gst_buffer_unref (GST_BUFFER_CAST (stream->buffers->data));
-          stream->buffers =
-              g_slist_delete_link (stream->buffers, stream->buffers);
-        }
-        if (stream->pad)
-          gst_element_remove_pad (element, stream->pad);
-        g_free (stream->samples);
-        if (stream->caps)
-          gst_caps_unref (stream->caps);
-        g_free (stream->segments);
-        if (stream->pending_tags)
-          gst_tag_list_free (stream->pending_tags);
-        g_free (stream->redirect_uri);
-        /* free stbl sub-atoms */
-        gst_qtdemux_stbl_free (stream);
-        g_free (stream);
+        gst_qtdemux_stream_free (qtdemux, qtdemux->streams[n]);
+        qtdemux->streams[n] = NULL;
       }
       qtdemux->major_brand = 0;
       qtdemux->n_streams = 0;