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.
This commit is contained in:
Tim-Philipp Müller 2009-11-09 15:20:00 +00:00
parent 26e7fe27d7
commit 7af7d93b27

View 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;