mpegtsmux: don't leak force key unit events

This commit is contained in:
Alessandro Decina 2012-04-13 00:14:27 +02:00 committed by Sebastian Dröge
parent 045e8bb506
commit 34cf1a1bbc
2 changed files with 14 additions and 10 deletions

View file

@ -292,6 +292,7 @@ mpegtsmux_dispose (GObject * object)
g_list_free (mux->streamheader);
mux->streamheader = NULL;
}
gst_event_replace (&mux->force_key_unit_event, NULL);
GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object));
}
@ -714,6 +715,8 @@ mpegtsmux_sink_event (GstPad * pad, GstEvent * event)
out:
if (forward)
res = ts_data->eventfunc (pad, event);
else
gst_event_unref (event);
gst_object_unref (mux);
return res;
@ -723,7 +726,7 @@ static gboolean
mpegtsmux_src_event (GstPad * pad, GstEvent * event)
{
MpegTsMux *mux = GST_MPEG_TSMUX (gst_pad_get_parent (pad));
gboolean res = TRUE;
gboolean res = TRUE, forward = TRUE;
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_CUSTOM_UPSTREAM:
@ -738,6 +741,8 @@ mpegtsmux_src_event (GstPad * pad, GstEvent * event)
if (!gst_video_event_is_force_key_unit (event))
break;
forward = FALSE;
gst_video_event_parse_upstream_force_key_unit (event,
&running_time, &all_headers, &count);
@ -783,10 +788,14 @@ mpegtsmux_src_event (GstPad * pad, GstEvent * event)
break;
}
default:
res = gst_pad_event_default (pad, event);
break;
}
if (forward)
res = gst_pad_event_default (pad, event);
else
gst_event_unref (event);
gst_object_unref (mux);
return res;
}

View file

@ -42,8 +42,6 @@ static GstStaticPadTemplate audio_src_template = GST_STATIC_PAD_TEMPLATE ("src",
typedef struct _TestData
{
GstEvent *sink_event;
GstEvent *src_event1;
GstEvent *src_event2;
gint src_events;
} TestData;
@ -60,14 +58,10 @@ src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
TestData *data = (TestData *) gst_pad_get_element_private (pad);
if (event->type == GST_EVENT_CUSTOM_UPSTREAM) {
if (event->type == GST_EVENT_CUSTOM_UPSTREAM)
data->src_events += 1;
if (data->src_event1 != NULL)
data->src_event2 = event;
else
data->src_event1 = event;
}
gst_event_unref (event);
return TRUE;
}
@ -79,6 +73,7 @@ sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
if (event->type == GST_EVENT_CUSTOM_DOWNSTREAM)
data->sink_event = event;
gst_event_unref (event);
return TRUE;
}