summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2008-09-08 20:27:23 +0000
committerWim Taymans <wim.taymans@gmail.com>2008-09-08 20:27:23 +0000
commit5d1c162f060a864db9db4102ea1fddccc83cf553 (patch)
tree652002050fe60942b76cf6d4404297af59258467
parenta35d1dde421be0655eb36fed9f415a25f5fa00e0 (diff)
downloadgst-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--ChangeLog6
m---------common0
-rw-r--r--gst/selector/gstinputselector.c37
3 files changed, 43 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 297946df..46744437 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
}