mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-02 16:52:42 +00:00
mpegtsmux: don't leak force key unit events
This commit is contained in:
parent
045e8bb506
commit
34cf1a1bbc
2 changed files with 14 additions and 10 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue