mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-20 13:06:23 +00:00
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:
parent
26e7fe27d7
commit
7af7d93b27
1 changed files with 18 additions and 7 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue