From c793316e380247738c26ce611a418eebed7eb21b Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Mon, 9 Aug 2004 16:38:53 +0000 Subject: [PATCH] cleanups, debugging and memleak fixes Original commit message from CVS: cleanups, debugging and memleak fixes --- ChangeLog | 10 ++++++++++ ext/jpeg/gstjpegdec.c | 43 ++++++++++++++++++++++++------------------ gst/multipart/multipartdemux.c | 14 ++++++++++++-- 3 files changed, 47 insertions(+), 20 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7d0b482..b2cd424 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2004-08-09 Thomas Vander Stichele + + * ext/jpeg/gstjpegdec.c: (gst_jpegdec_init_source), + (gst_jpegdec_fill_input_buffer), (gst_jpegdec_skip_input_data), + (gst_jpegdec_resync_to_restart), (gst_jpegdec_term_source), + (gst_jpegdec_init), (gst_jpegdec_chain): + * gst/multipart/multipartdemux.c: (gst_multipart_demux_init), + (gst_multipart_demux_chain), (gst_multipart_demux_change_state): + cleanups, debugging fixes and memleak plugging + 2004-08-09 Wim Taymans * ext/theora/theoradec.c: (gst_theora_dec_class_init), diff --git a/ext/jpeg/gstjpegdec.c b/ext/jpeg/gstjpegdec.c index be67a81..1f15f0d 100644 --- a/ext/jpeg/gstjpegdec.c +++ b/ext/jpeg/gstjpegdec.c @@ -23,7 +23,6 @@ #endif #include -/*#define DEBUG_ENABLED*/ #include "gstjpegdec.h" #include @@ -130,39 +129,39 @@ gst_jpegdec_class_init (GstJpegDec * klass) static void gst_jpegdec_init_source (j_decompress_ptr cinfo) { - GST_DEBUG ("gst_jpegdec_chain: init_source"); + GST_DEBUG ("init_source"); } static gboolean gst_jpegdec_fill_input_buffer (j_decompress_ptr cinfo) { - GST_DEBUG ("gst_jpegdec_chain: fill_input_buffer"); + GST_DEBUG ("fill_input_buffer"); return TRUE; } static void gst_jpegdec_skip_input_data (j_decompress_ptr cinfo, glong num_bytes) { - GST_DEBUG ("gst_jpegdec_chain: skip_input_data"); + GST_DEBUG ("skip_input_data"); } static gboolean gst_jpegdec_resync_to_restart (j_decompress_ptr cinfo, gint desired) { - GST_DEBUG ("gst_jpegdec_chain: resync_to_start"); + GST_DEBUG ("resync_to_start"); return TRUE; } static void gst_jpegdec_term_source (j_decompress_ptr cinfo) { - GST_DEBUG ("gst_jpegdec_chain: term_source"); + GST_DEBUG ("term_source"); } static void gst_jpegdec_init (GstJpegDec * jpegdec) { - GST_DEBUG ("gst_jpegdec_init: initializing"); + GST_DEBUG ("initializing"); /* create the sink and src pads */ jpegdec->sinkpad = @@ -380,14 +379,13 @@ gst_jpegdec_chain (GstPad * pad, GstData * _data) data = (guchar *) GST_BUFFER_DATA (buf); size = GST_BUFFER_SIZE (buf); - GST_DEBUG ("gst_jpegdec_chain: got buffer of %ld bytes in '%s'", size, - GST_OBJECT_NAME (jpegdec)); + GST_LOG_OBJECT (jpegdec, "got buffer of %ld bytes", size); jpegdec->jsrc.next_input_byte = data; jpegdec->jsrc.bytes_in_buffer = size; - GST_DEBUG ("gst_jpegdec_chain: reading header %08lx", *(gulong *) data); + GST_LOG_OBJECT (jpegdec, "reading header %08lx", *(gulong *) data); jpeg_read_header (&jpegdec->cinfo, TRUE); r_h = jpegdec->cinfo.cur_comp_info[0]->h_samp_factor; @@ -402,17 +400,23 @@ gst_jpegdec_chain (GstPad * pad, GstData * _data) jpegdec->cinfo.out_color_space = JCS_YCbCr; jpegdec->cinfo.dct_method = JDCT_IFAST; jpegdec->cinfo.raw_data_out = TRUE; - GST_DEBUG ("gst_jpegdec_chain: starting decompress"); + GST_LOG_OBJECT (jpegdec, "starting decompress"); guarantee_huff_tables (&jpegdec->cinfo); jpeg_start_decompress (&jpegdec->cinfo); width = jpegdec->cinfo.output_width; height = jpegdec->cinfo.output_height; - GST_DEBUG ("gst_jpegdec_chain: width %d, height %d", width, height); - outbuf = gst_buffer_new (); - outsize = GST_BUFFER_SIZE (outbuf) = width * height + width * height / 2; - outdata = GST_BUFFER_DATA (outbuf) = g_malloc (outsize); + /* FIXME: someone needs to do the work to figure out how to correctly + * calculate an output size that takes into account everything libjpeg + * needs, like padding for DCT size and so on. */ + outsize = width * height + width * height / 2; + outbuf = gst_pad_alloc_buffer (jpegdec->srcpad, GST_BUFFER_OFFSET_NONE, + outsize); + outdata = GST_BUFFER_DATA (outbuf); GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buf); + GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buf); + GST_LOG_OBJECT (jpegdec, "width %d, height %d, buffer size %d", width, + height, outsize); if (jpegdec->height != height || jpegdec->line[0] == NULL) { GstCaps *caps; @@ -427,18 +431,21 @@ gst_jpegdec_chain (GstPad * pad, GstData * _data) "width", G_TYPE_INT, width, "height", G_TYPE_INT, height, "framerate", G_TYPE_DOUBLE, jpegdec->fps, NULL); + GST_DEBUG_OBJECT (jpegdec, "height changed, setting caps %" GST_PTR_FORMAT, + caps); gst_pad_set_explicit_caps (jpegdec->srcpad, caps); gst_caps_free (caps); } /* mind the swap, jpeglib outputs blue chroma first */ + /* FIXME: this needs stride love */ base[0] = outdata; base[1] = base[0] + width * height; base[2] = base[1] + width * height / 4; width2 = width >> 1; - GST_DEBUG ("gst_jpegdec_chain: decompressing %u", + GST_LOG_OBJECT (jpegdec, "decompressing %u", jpegdec->cinfo.rec_outbuf_height); for (i = 0; i < height; i += r_v * DCTSIZE) { for (j = 0, k = 0; j < (r_v * DCTSIZE); j += r_v, k++) { @@ -459,10 +466,10 @@ gst_jpegdec_chain (GstPad * pad, GstData * _data) jpeg_read_raw_data (&jpegdec->cinfo, jpegdec->line, r_v * DCTSIZE); } - GST_DEBUG ("gst_jpegdec_chain: decompressing finished"); + GST_LOG_OBJECT (jpegdec, "decompressing finished"); jpeg_finish_decompress (&jpegdec->cinfo); - GST_DEBUG ("gst_jpegdec_chain: sending buffer"); + GST_LOG_OBJECT (jpegdec, "sending buffer"); gst_pad_push (jpegdec->srcpad, GST_DATA (outbuf)); gst_buffer_unref (buf); diff --git a/gst/multipart/multipartdemux.c b/gst/multipart/multipartdemux.c index 1aa3b3b..55fe85e 100644 --- a/gst/multipart/multipartdemux.c +++ b/gst/multipart/multipartdemux.c @@ -165,7 +165,6 @@ gst_multipart_demux_init (GstMultipartDemux * multipart) GST_FLAG_SET (multipart, GST_ELEMENT_EVENT_AWARE); multipart->maxlen = 4096; - multipart->buffer = g_malloc (multipart->maxlen); multipart->parsing_mime = NULL; multipart->numpads = 0; multipart->scanpos = 0; @@ -321,9 +320,10 @@ gst_multipart_demux_chain (GstPad * pad, GstData * buffer) } // move rest downward multipart->bufsize -= multipart->scanpos; - memcpy (multipart->buffer, multipart->buffer + multipart->scanpos, + memmove (multipart->buffer, multipart->buffer + multipart->scanpos, multipart->bufsize); + g_free (multipart->parsing_mime); multipart->parsing_mime = mime_type; multipart->scanpos = 0; } @@ -344,10 +344,20 @@ gst_multipart_demux_change_state (GstElement * element) switch (GST_STATE_TRANSITION (element)) { case GST_STATE_NULL_TO_READY: + break; case GST_STATE_READY_TO_PAUSED: + multipart->buffer = g_malloc (multipart->maxlen); + break; case GST_STATE_PAUSED_TO_PLAYING: + break; case GST_STATE_PLAYING_TO_PAUSED: + break; case GST_STATE_PAUSED_TO_READY: + g_free (multipart->parsing_mime); + multipart->parsing_mime = NULL; + g_free (multipart->buffer); + multipart->buffer = NULL; + break; case GST_STATE_READY_TO_NULL: break; default: -- 2.7.4