summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gst/selector/gstinputselector.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gst/selector/gstinputselector.c b/gst/selector/gstinputselector.c
index 7a458b0f..08d3d497 100644
--- a/gst/selector/gstinputselector.c
+++ b/gst/selector/gstinputselector.c
@@ -392,12 +392,17 @@ gst_selector_pad_event (GstPad * pad, GstEvent * event)
gst_segment_set_newsegment_full (&selpad->segment, update,
rate, arate, format, start, stop, time);
GST_OBJECT_UNLOCK (selpad);
- /* we are not going to forward the segment, mark the segment as
- * pending */
- forward = FALSE;
- selpad->segment_pending = TRUE;
- GST_INPUT_SELECTOR_UNLOCK (sel);
+ /* If we aren't forwarding the event (because the pad is not the
+ * active_sinkpad, and select_all is not set, then set the flag on the
+ * that says a segment needs sending if/when that pad is activated.
+ * For all other cases, we send the event immediately, which makes
+ * sparse streams and other segment updates work correctly downstream.
+ */
+ if (!forward)
+ selpad->segment_pending = TRUE;
+
+ GST_INPUT_SELECTOR_UNLOCK (sel);
break;
}
case GST_EVENT_TAG: