summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gst/selector/gstinputselector.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/gst/selector/gstinputselector.c b/gst/selector/gstinputselector.c
index 165d1f60..7fc43686 100644
--- a/gst/selector/gstinputselector.c
+++ b/gst/selector/gstinputselector.c
@@ -342,17 +342,23 @@ gst_selector_pad_event (GstPad * pad, GstEvent * event)
gboolean forward = TRUE;
GstInputSelector *sel;
GstSelectorPad *selpad;
+ GstPad *active_sinkpad;
+ gboolean notify;
sel = GST_INPUT_SELECTOR (gst_pad_get_parent (pad));
selpad = GST_SELECTOR_PAD_CAST (pad);
- /* only forward if we are dealing with the active sinkpad */
- forward = gst_input_selector_is_active_sinkpad (sel, pad);
+ GST_INPUT_SELECTOR_LOCK (sel);
+ active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad, &notify);
- /* forward all events in select_all mode by default */
- if (sel->select_all) {
- forward = TRUE;
- }
+ /* only forward if we are dealing with the active sinkpad or if select_all
+ * is enabled */
+ if (pad != active_sinkpad && !sel->select_all)
+ forward = FALSE;
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+
+ if (notify)
+ g_object_notify (G_OBJECT (sel), "active-pad");
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_FLUSH_START:
@@ -1037,8 +1043,7 @@ gst_input_selector_event (GstPad * pad, GstEvent * event)
res = gst_pad_push_event (otherpad, event);
gst_object_unref (otherpad);
- }
- else
+ } else
gst_event_unref (event);
return res;
}