From 368d6780c2daf651058d6eb2c6e232be06b7c479 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 8 May 2004 13:03:59 +0000 Subject: [PATCH] gst/level/gstlevel.*: figure out if we're initialized directly instead of keeping a variable that's wrong in 90% of c... Original commit message from CVS: * gst/level/gstlevel.c: (gst_level_link), (gst_level_chain), (gst_level_change_state), (gst_level_init): * gst/level/gstlevel.h: figure out if we're initialized directly instead of keeping a variable that's wrong in 90% of cases don't initialize pads and then leak them and use a new unitialized pad. (fixes #142084) these were bugs so n00bish I didn't find them for an hour :/ --- ChangeLog | 11 +++++++++++ gst/level/gstlevel.c | 20 ++++++++++---------- gst/level/gstlevel.h | 1 - 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 20809c5ce5..5838780368 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2004-05-08 Benjamin Otte + + * gst/level/gstlevel.c: (gst_level_link), (gst_level_chain), + (gst_level_change_state), (gst_level_init): + * gst/level/gstlevel.h: + figure out if we're initialized directly instead of keeping a + variable that's wrong in 90% of cases + don't initialize pads and then leak them and use a new unitialized + pad. (fixes #142084) + these were bugs so n00bish I didn't find them for an hour :/ + 2004-05-08 Iain * gst/wavparse/gstwavparse.[ch]: Rewrote to use RiffRead instead. diff --git a/gst/level/gstlevel.c b/gst/level/gstlevel.c index f3ba18c06f..7323da929e 100644 --- a/gst/level/gstlevel.c +++ b/gst/level/gstlevel.c @@ -165,8 +165,6 @@ gst_level_link (GstPad * pad, const GstCaps * caps) filter->MS[i] = filter->RMS_dB[i] = 0.0; } - filter->inited = TRUE; - return GST_PAD_LINK_OK; } @@ -196,6 +194,13 @@ gst_level_fast_16bit_chain (gint16 * in, guint num, gint channels, g_return_if_fail (filter != NULL); g_return_if_fail (GST_IS_LEVEL (filter)); + if (!gst_pad_is_negotiated (pad)) { + GST_ELEMENT_ERROR (filter, CORE, NEGOTIATION, (NULL), + ("sinkpad not negotiated")); + gst_data_unref (_data); + return; + } + for (i = 0; i < filter->channels; ++i) filter->CS[i] = filter->peak[i] = filter->MS[i] = filter->RMS_dB[i] = 0.0; @@ -288,12 +293,8 @@ gst_level_fast_16bit_chain (gint16 * in, guint num, gint channels, static GstElementStateReturn gst_level_change_state (GstElement * element) { - GstLevel *filter = GST_LEVEL (element); - switch (GST_STATE_TRANSITION (element)) { case GST_STATE_PAUSED_TO_PLAYING: - if (!filter->inited) - return GST_STATE_FAILURE; break; default: break; @@ -418,15 +419,14 @@ gst_level_init (GstLevel * filter) (&sink_template_factory), "sink"); gst_pad_set_link_function (filter->sinkpad, gst_level_link); gst_pad_set_getcaps_function (filter->sinkpad, gst_pad_proxy_getcaps); + gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad); + gst_pad_set_chain_function (filter->sinkpad, gst_level_chain); + filter->srcpad = gst_pad_new_from_template (gst_static_pad_template_get (&src_template_factory), "src"); gst_pad_set_link_function (filter->srcpad, gst_level_link); gst_pad_set_getcaps_function (filter->srcpad, gst_pad_proxy_getcaps); - - gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad); - gst_pad_set_chain_function (filter->sinkpad, gst_level_chain); - filter->srcpad = gst_pad_new ("src", GST_PAD_SRC); gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad); filter->CS = NULL; diff --git a/gst/level/gstlevel.h b/gst/level/gstlevel.h index 7a853771a1..59427c7dd3 100644 --- a/gst/level/gstlevel.h +++ b/gst/level/gstlevel.h @@ -54,7 +54,6 @@ struct _GstLevel { GstPad *sinkpad, *srcpad; gboolean signal; /* whether or not to emit signals */ - gboolean inited; /* whether or not the element is initialized */ gdouble interval; /* how many seconds between emits */ gint rate; /* caps variables */