diff --git a/ChangeLog b/ChangeLog index 4ed2e13df0..371201aa08 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-11-11 Michael Smith + + * gst/base/gstbasesink.c: (gst_base_sink_do_sync): + Don't sync on buffers that fall partially outside our current + segment. Prevents an assertion failure/abort playing some files. + 2005-11-10 Andy Wingo * check/gst/gstbin.c (test_message_state_changed_children): Style diff --git a/gst/base/gstbasesink.c b/gst/base/gstbasesink.c index 3cd273523d..7c9c2da5b0 100644 --- a/gst/base/gstbasesink.c +++ b/gst/base/gstbasesink.c @@ -1047,11 +1047,17 @@ gst_base_sink_do_sync (GstBaseSink * basesink, GstBuffer * buffer) stream_start = (gint64) start - basesink->segment_start; stream_end = (gint64) end - basesink->segment_start; + + if (stream_start < 0) { + GST_DEBUG_OBJECT (basesink, "stream_start negative, invalid"); + goto done; + } } else { stream_start = (gint64) start; stream_end = (gint64) end; } + /* correct for rate */ if (basesink->segment_rate != 0.0) { stream_start /= ABS (basesink->segment_rate); diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c index 3cd273523d..7c9c2da5b0 100644 --- a/libs/gst/base/gstbasesink.c +++ b/libs/gst/base/gstbasesink.c @@ -1047,11 +1047,17 @@ gst_base_sink_do_sync (GstBaseSink * basesink, GstBuffer * buffer) stream_start = (gint64) start - basesink->segment_start; stream_end = (gint64) end - basesink->segment_start; + + if (stream_start < 0) { + GST_DEBUG_OBJECT (basesink, "stream_start negative, invalid"); + goto done; + } } else { stream_start = (gint64) start; stream_end = (gint64) end; } + /* correct for rate */ if (basesink->segment_rate != 0.0) { stream_start /= ABS (basesink->segment_rate);