mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-26 02:00:33 +00:00
outputselector: reset state when going to READY
Reset the last-buffer, the pending pad and the segment when going to the READY state. Fixes #576712.
This commit is contained in:
parent
654ca28f1b
commit
9605150830
1 changed files with 33 additions and 5 deletions
|
@ -158,10 +158,8 @@ gst_output_selector_init (GstOutputSelector * sel,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_output_selector_dispose (GObject * object)
|
gst_output_selector_reset (GstOutputSelector * osel)
|
||||||
{
|
{
|
||||||
GstOutputSelector *osel = GST_OUTPUT_SELECTOR (object);
|
|
||||||
|
|
||||||
if (osel->pending_srcpad != NULL) {
|
if (osel->pending_srcpad != NULL) {
|
||||||
gst_object_unref (osel->pending_srcpad);
|
gst_object_unref (osel->pending_srcpad);
|
||||||
osel->pending_srcpad = NULL;
|
osel->pending_srcpad = NULL;
|
||||||
|
@ -170,6 +168,15 @@ gst_output_selector_dispose (GObject * object)
|
||||||
gst_buffer_unref (osel->latest_buffer);
|
gst_buffer_unref (osel->latest_buffer);
|
||||||
osel->latest_buffer = NULL;
|
osel->latest_buffer = NULL;
|
||||||
}
|
}
|
||||||
|
gst_segment_init (&osel->segment, GST_FORMAT_UNDEFINED);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_output_selector_dispose (GObject * object)
|
||||||
|
{
|
||||||
|
GstOutputSelector *osel = GST_OUTPUT_SELECTOR (object);
|
||||||
|
|
||||||
|
gst_output_selector_reset (osel);
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
@ -379,7 +386,29 @@ static GstStateChangeReturn
|
||||||
gst_output_selector_change_state (GstElement * element,
|
gst_output_selector_change_state (GstElement * element,
|
||||||
GstStateChange transition)
|
GstStateChange transition)
|
||||||
{
|
{
|
||||||
return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
|
GstOutputSelector *sel;
|
||||||
|
GstStateChangeReturn result;
|
||||||
|
|
||||||
|
sel = GST_OUTPUT_SELECTOR (element);
|
||||||
|
|
||||||
|
switch (transition) {
|
||||||
|
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
|
||||||
|
|
||||||
|
switch (transition) {
|
||||||
|
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||||
|
gst_output_selector_reset (sel);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -412,7 +441,6 @@ gst_output_selector_handle_sink_event (GstPad * pad, GstEvent * event)
|
||||||
|
|
||||||
/* Send newsegment to all src pads */
|
/* Send newsegment to all src pads */
|
||||||
gst_pad_event_default (pad, event);
|
gst_pad_event_default (pad, event);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GST_EVENT_EOS:
|
case GST_EVENT_EOS:
|
||||||
|
|
Loading…
Reference in a new issue