diff options
author | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2009-11-09 15:20:00 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2009-11-09 15:20:00 +0000 |
commit | 7af7d93b273ae633121818ccefdee38c21696b2d (patch) | |
tree | 93c7ad2f95b7e28d44b6f2ba2770fcdc88499009 | |
parent | 26e7fe27d7b4fb8faa1c88e13aca8cc799ff1dc1 (diff) |
jpegdec: free temporary buffer when changing state to NULL
Free temporary allocations in the state change function and not
only when the object is finalised.
-rw-r--r-- | ext/jpeg/gstjpegdec.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/ext/jpeg/gstjpegdec.c b/ext/jpeg/gstjpegdec.c index ef94a5abc..61a051ce4 100644 --- a/ext/jpeg/gstjpegdec.c +++ b/ext/jpeg/gstjpegdec.c @@ -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; |