summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
authorBenjamin Otte <otte@gnome.org>2004-05-08 13:03:59 +0000
committerBenjamin Otte <otte@gnome.org>2004-05-08 13:03:59 +0000
commit368d6780c2daf651058d6eb2c6e232be06b7c479 (patch)
tree8397183eed423d2afca62da7750e581498b18e74 /gst
parentf868ebb4bcbeee46ff5ef359fe3b655f3a3f5b0e (diff)
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 :/
Diffstat (limited to 'gst')
-rw-r--r--gst/level/gstlevel.c20
-rw-r--r--gst/level/gstlevel.h1
2 files changed, 10 insertions, 11 deletions
diff --git a/gst/level/gstlevel.c b/gst/level/gstlevel.c
index f3ba18c0..7323da92 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 7a853771..59427c7d 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 */