diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2008-09-08 20:27:23 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2008-09-08 20:27:23 +0000 |
commit | 5d1c162f060a864db9db4102ea1fddccc83cf553 (patch) | |
tree | 652002050fe60942b76cf6d4404297af59258467 | |
parent | a35d1dde421be0655eb36fed9f415a25f5fa00e0 (diff) | |
download | gst-plugins-bad-5d1c162f060a864db9db4102ea1fddccc83cf553.tar.gz gst-plugins-bad-5d1c162f060a864db9db4102ea1fddccc83cf553.tar.bz2 gst-plugins-bad-5d1c162f060a864db9db4102ea1fddccc83cf553.zip |
gst/selector/gstinputselector.c: Reset the selector state when going to READY.
Original commit message from CVS:
* gst/selector/gstinputselector.c: (gst_selector_pad_reset),
(gst_input_selector_reset), (gst_input_selector_change_state):
Reset the selector state when going to READY.
-rw-r--r-- | ChangeLog | 6 | ||||
m--------- | common | 0 | ||||
-rw-r--r-- | gst/selector/gstinputselector.c | 37 |
3 files changed, 43 insertions, 0 deletions
@@ -1,3 +1,9 @@ +2008-09-08 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/selector/gstinputselector.c: (gst_selector_pad_reset), + (gst_input_selector_reset), (gst_input_selector_change_state): + Reset the selector state when going to READY. + 2008-09-05 Wim Taymans <wim.taymans@collabora.co.uk> * gst/rtpmanager/gstrtpbin.c: (on_sender_timeout), diff --git a/common b/common -Subproject a1e554f656b1f8829dbca280c0f1bdee9dec5e4 +Subproject 1ff63d8f92c36bf207434436f4ce75f2a4ea11a diff --git a/gst/selector/gstinputselector.c b/gst/selector/gstinputselector.c index f66bf191..45f2af9d 100644 --- a/gst/selector/gstinputselector.c +++ b/gst/selector/gstinputselector.c @@ -313,6 +313,7 @@ gst_selector_pad_reset (GstSelectorPad * pad) pad->active = FALSE; pad->eos = FALSE; pad->segment_pending = FALSE; + pad->discont = FALSE; gst_segment_init (&pad->segment, GST_FORMAT_UNDEFINED); GST_OBJECT_UNLOCK (pad); } @@ -1244,6 +1245,34 @@ gst_input_selector_release_pad (GstElement * element, GstPad * pad) GST_INPUT_SELECTOR_UNLOCK (sel); } +static void +gst_input_selector_reset (GstInputSelector * sel) +{ + GList *walk; + + GST_INPUT_SELECTOR_LOCK (sel); + /* clear active pad */ + if (sel->active_sinkpad) { + gst_object_unref (sel->active_sinkpad); + sel->active_sinkpad = NULL; + } + /* reset segment */ + gst_segment_init (&sel->segment, GST_FORMAT_UNDEFINED); + sel->pending_close = FALSE; + /* reset each of our sinkpads state */ + for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) { + GstSelectorPad *selpad = GST_SELECTOR_PAD_CAST (walk->data); + + gst_selector_pad_reset (selpad); + + if (selpad->tags) { + gst_tag_list_free (selpad->tags); + selpad->tags = NULL; + } + } + GST_INPUT_SELECTOR_UNLOCK (sel); +} + static GstStateChangeReturn gst_input_selector_change_state (GstElement * element, GstStateChange transition) @@ -1273,6 +1302,14 @@ gst_input_selector_change_state (GstElement * element, result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + switch (transition) { + case GST_STATE_CHANGE_PAUSED_TO_READY: + gst_input_selector_reset (self); + break; + default: + break; + } + return result; } |