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

View file

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