inputselector: Don't send a NEWSEGMENT event if a buffer arrived before the segment was configured

This commit is contained in:
Sebastian Dröge 2011-12-07 11:01:49 +01:00
parent 7952a54299
commit 47de97df84

View file

@ -805,6 +805,10 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
} }
/* if we have a pending segment, push it out now */ /* if we have a pending segment, push it out now */
if (G_UNLIKELY (selpad->segment_pending)) { if (G_UNLIKELY (selpad->segment_pending)) {
if (G_UNLIKELY (seg->format == GST_FORMAT_UNDEFINED)) {
GST_ERROR_OBJECT (pad, "Buffers arrived before NEWSEGMENT event");
} else {
GST_DEBUG_OBJECT (pad, GST_DEBUG_OBJECT (pad,
"pushing pending NEWSEGMENT update %d, rate %lf, applied rate %lf, " "pushing pending NEWSEGMENT update %d, rate %lf, applied rate %lf, "
"format %d, " "format %d, "
@ -814,9 +818,9 @@ gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
start_event = gst_event_new_new_segment_full (FALSE, seg->rate, start_event = gst_event_new_new_segment_full (FALSE, seg->rate,
seg->applied_rate, seg->format, seg->start, seg->stop, seg->time); seg->applied_rate, seg->format, seg->start, seg->stop, seg->time);
selpad->segment_pending = FALSE; selpad->segment_pending = FALSE;
} }
}
GST_INPUT_SELECTOR_UNLOCK (sel); GST_INPUT_SELECTOR_UNLOCK (sel);
if (prev_active_sinkpad != active_sinkpad && pad == active_sinkpad) { if (prev_active_sinkpad != active_sinkpad && pad == active_sinkpad) {