gst/qtdemux/qtdemux.c: More memory leak fixes (#149162).
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>
Tue, 18 Jan 2005 12:30:05 +0000 (12:30 +0000)
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>
Tue, 18 Jan 2005 12:30:05 +0000 (12:30 +0000)
Original commit message from CVS:
* gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
(gst_qtdemux_loop_header), (gst_qtdemux_handle_esds):
More memory leak fixes (#149162).

ChangeLog
gst/qtdemux/qtdemux.c

index f4abfc35d423a3f71825d7a1938f6e56a245f966..3eb097e66bd50f9d5313b7e3a55ed52d0a988d5f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-01-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
+
+       * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
+       (gst_qtdemux_loop_header), (gst_qtdemux_handle_esds):
+         More memory leak fixes (#149162).
+
 2005-01-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
 
        * gst/qtdemux/qtdemux.c: (gst_qtdemux_change_state),
index 73893ad0318fa00bfb025cf939ce848010bb61eb..4e02a4ee127a5397a8a62ab4eab8facc4404c11f 100644 (file)
@@ -524,7 +524,9 @@ gst_qtdemux_change_state (GstElement * element)
       break;
     case GST_STATE_PLAYING_TO_PAUSED:
       break;
-    case GST_STATE_PAUSED_TO_READY:
+    case GST_STATE_PAUSED_TO_READY:{
+      gint n;
+
       qtdemux->last_ts = GST_CLOCK_TIME_NONE;
       qtdemux->need_discont = FALSE;
       qtdemux->need_flush = FALSE;
@@ -533,7 +535,15 @@ gst_qtdemux_change_state (GstElement * element)
         gst_tag_list_free (qtdemux->tag_list);
         qtdemux->tag_list = NULL;
       }
+      for (n = 0; n < qtdemux->n_streams; n++) {
+        gst_element_remove_pad (element, qtdemux->streams[n]->pad);
+        g_free (qtdemux->streams[n]->samples);
+        gst_caps_free (qtdemux->streams[n]->caps);
+        g_free (qtdemux->streams[n]);
+      }
+      qtdemux->n_streams = 0;
       break;
+    }
     case GST_STATE_READY_TO_NULL:
       break;
     default:
@@ -628,6 +638,9 @@ gst_qtdemux_loop_header (GstElement * element)
             qtdemux_node_dump (qtdemux, qtdemux->moov_node);
           }
           qtdemux_parse_tree (qtdemux);
+          g_node_destroy (qtdemux->moov_node);
+          gst_buffer_unref (moov);
+          qtdemux->moov_node = NULL;
           qtdemux->state = QTDEMUX_STATE_MOVIE;
           break;
         }
@@ -2547,6 +2560,7 @@ gst_qtdemux_handle_esds (GstQTDemux * qtdemux, QtDemuxStream * stream,
 
     gst_caps_set_simple (stream->caps, "codec_data", GST_TYPE_BUFFER,
         buffer, NULL);
+    gst_buffer_unref (buffer);
   }
 }