jpegdec: free temporary buffer when changing state to NULL
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Mon, 9 Nov 2009 15:20:00 +0000 (15:20 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Mon, 9 Nov 2009 15:20:00 +0000 (15:20 +0000)
Free temporary allocations in the state change function and not
only when the object is finalised.

ext/jpeg/gstjpegdec.c

index ef94a5a..61a051c 100644 (file)
@@ -148,19 +148,12 @@ static void
 gst_jpeg_dec_finalize (GObject * object)
 {
   GstJpegDec *dec = GST_JPEG_DEC (object);
-  gint i;
 
   jpeg_destroy_decompress (&dec->cinfo);
 
   if (dec->tempbuf)
     gst_buffer_unref (dec->tempbuf);
 
-  for (i = 0; i < 16; i++) {
-    g_free (dec->idr_y[i]);
-    g_free (dec->idr_u[i]);
-    g_free (dec->idr_v[i]);
-  }
-
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -682,6 +675,23 @@ hresamplecpy1 (guint8 * dest, const guint8 * src, guint len)
   }
 }
 
+static void
+gst_jpeg_dec_free_buffers (GstJpegDec * dec)
+{
+  gint i;
+
+  for (i = 0; i < 16; i++) {
+    g_free (dec->idr_y[i]);
+    g_free (dec->idr_u[i]);
+    g_free (dec->idr_v[i]);
+    dec->idr_y[i] = NULL;
+    dec->idr_u[i] = NULL;
+    dec->idr_v[i] = NULL;
+  }
+
+  dec->idr_width_allocated = 0;
+}
+
 static inline gboolean
 gst_jpeg_dec_ensure_buffers (GstJpegDec * dec, guint maxrowbytes)
 {
@@ -1430,6 +1440,7 @@ gst_jpeg_dec_change_state (GstElement * element, GstStateChange transition)
         gst_buffer_unref (dec->tempbuf);
         dec->tempbuf = NULL;
       }
+      gst_jpeg_dec_free_buffers (dec);
       break;
     default:
       break;