From 0c606747f10c4e60cb9004651e3e1d941b7405e6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Tue, 22 Feb 2005 12:04:16 +0000 Subject: [PATCH] ext/gdk_pixbuf/pixbufscale.c: Don't leak caps string (fixes #168134) Original commit message from CVS: * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_link): Don't leak caps string (fixes #168134) * ext/jpeg/gstjpegenc.c: (gst_jpegenc_class_init), (gst_jpegenc_init), (gst_jpegenc_finalize), (gst_jpegenc_change_state): Don't leak line buffers and context struct (fixes #168133). --- ChangeLog | 12 ++++++++++ ext/gdk_pixbuf/pixbufscale.c | 6 ++++- ext/jpeg/gstjpegenc.c | 56 ++++++++++++++++++++++++++++++++++++++------ 3 files changed, 66 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9b4023c..c620dcc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2005-02-22 Luca Ognibene + + Reviewed by: Tim-Philipp Müller + + * ext/gdk_pixbuf/pixbufscale.c: (gst_pixbufscale_link): + Don't leak caps string (fixes #168134) + + * ext/jpeg/gstjpegenc.c: (gst_jpegenc_class_init), + (gst_jpegenc_init), (gst_jpegenc_finalize), + (gst_jpegenc_change_state): + Don't leak line buffers and context struct (fixes #168133). + 2005-02-21 Tim-Philipp Müller * configure.ac: diff --git a/ext/gdk_pixbuf/pixbufscale.c b/ext/gdk_pixbuf/pixbufscale.c index 3cfa17e..1cecdab 100644 --- a/ext/gdk_pixbuf/pixbufscale.c +++ b/ext/gdk_pixbuf/pixbufscale.c @@ -206,8 +206,12 @@ gst_pixbufscale_link (GstPad * pad, const GstCaps * caps) GstPad *otherpad; GstStructure *structure; int height, width; + gchar *caps_string; + + caps_string = gst_caps_to_string (caps); + GST_DEBUG ("gst_pixbufscale_link %s\n", caps_string); + g_free (caps_string); - GST_DEBUG ("gst_pixbufscale_link %s\n", gst_caps_to_string (caps)); pixbufscale = GST_PIXBUFSCALE (gst_pad_get_parent (pad)); otherpad = (pad == pixbufscale->srcpad) ? pixbufscale->sinkpad : diff --git a/ext/jpeg/gstjpegenc.c b/ext/jpeg/gstjpegenc.c index ca0e07f..e924ceb 100644 --- a/ext/jpeg/gstjpegenc.c +++ b/ext/jpeg/gstjpegenc.c @@ -75,6 +75,7 @@ enum static void gst_jpegenc_base_init (gpointer g_class); static void gst_jpegenc_class_init (GstJpegEnc * klass); static void gst_jpegenc_init (GstJpegEnc * jpegenc); +static void gst_jpegenc_finalize (GObject * object); static void gst_jpegenc_chain (GstPad * pad, GstData * _data); static GstPadLinkReturn gst_jpegenc_link (GstPad * pad, const GstCaps * caps); @@ -85,6 +86,8 @@ static void gst_jpegenc_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_jpegenc_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); +static GstElementStateReturn gst_jpegenc_change_state (GstElement * element); + static GstElementClass *parent_class = NULL; static guint gst_jpegenc_signals[LAST_SIGNAL] = { 0 }; @@ -170,6 +173,9 @@ gst_jpegenc_class_init (GstJpegEnc * klass) gobject_class->set_property = gst_jpegenc_set_property; gobject_class->get_property = gst_jpegenc_get_property; + gstelement_class->change_state = gst_jpegenc_change_state; + + gobject_class->finalize = gst_jpegenc_finalize; GST_DEBUG_CATEGORY_INIT (jpegenc_debug, "jpegenc", 0, "JPEG encoding element"); @@ -223,13 +229,6 @@ gst_jpegenc_init (GstJpegEnc * jpegenc) jpegenc->cinfo.err = jpeg_std_error (&jpegenc->jerr); jpeg_create_compress (&jpegenc->cinfo); - GST_DEBUG ("gst_jpegenc_init: setting line buffers"); - jpegenc->line[0] = NULL; - jpegenc->line[1] = NULL; - jpegenc->line[2] = NULL; - - gst_jpegenc_resync (jpegenc); - jpegenc->jdest.init_destination = gst_jpegenc_init_destination; jpegenc->jdest.empty_output_buffer = gst_jpegenc_flush_destination; jpegenc->jdest.term_destination = gst_jpegenc_term_destination; @@ -239,6 +238,17 @@ gst_jpegenc_init (GstJpegEnc * jpegenc) jpegenc->smoothing = 0; } +static void +gst_jpegenc_finalize (GObject * object) +{ + + GstJpegEnc *filter = GST_JPEGENC (object); + + jpeg_destroy_compress (&filter->cinfo); + + G_OBJECT_CLASS (parent_class)->finalize (object); +} + static GstCaps * gst_jpegenc_getcaps (GstPad * pad) { @@ -492,3 +502,35 @@ gst_jpegenc_get_property (GObject * object, guint prop_id, GValue * value, break; } } + +static GstElementStateReturn +gst_jpegenc_change_state (GstElement * element) +{ + + GstJpegEnc *filter = GST_JPEGENC (element); + + switch (GST_STATE_TRANSITION (element)) { + case GST_STATE_NULL_TO_READY: + GST_DEBUG ("gst_jpegenc_change_state: setting line buffers"); + filter->line[0] = NULL; + filter->line[1] = NULL; + filter->line[2] = NULL; + gst_jpegenc_resync (filter); + break; + case GST_STATE_READY_TO_NULL: + g_free (filter->line[0]); + g_free (filter->line[1]); + g_free (filter->line[2]); + filter->line[0] = NULL; + filter->line[1] = NULL; + filter->line[2] = NULL; + break; + default: + break; + } + + if (GST_ELEMENT_CLASS (parent_class)->change_state) + return GST_ELEMENT_CLASS (parent_class)->change_state (element); + + return GST_STATE_SUCCESS; +} -- 2.7.4