mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
gst/gstsegment.c: _set_last_stop() must be with a value != -1
Original commit message from CVS: * gst/gstsegment.c: (gst_segment_set_last_stop), (gst_segment_set_seek), (gst_segment_set_newsegment_full): _set_last_stop() must be with a value != -1 A _TYPE_SET to -1 means seek to 0. Calc last_stop correctly for negative rates. Make sure we work with positive durations when updating a segment.
This commit is contained in:
parent
c0a833edca
commit
fd6d33c360
2 changed files with 24 additions and 5 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2006-10-18 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
|
* gst/gstsegment.c: (gst_segment_set_last_stop),
|
||||||
|
(gst_segment_set_seek), (gst_segment_set_newsegment_full):
|
||||||
|
_set_last_stop() must be with a value != -1
|
||||||
|
A _TYPE_SET to -1 means seek to 0.
|
||||||
|
Calc last_stop correctly for negative rates.
|
||||||
|
Make sure we work with positive durations when updating a segment.
|
||||||
|
|
||||||
2006-10-18 Wim Taymans <wim@fluendo.com>
|
2006-10-18 Wim Taymans <wim@fluendo.com>
|
||||||
|
|
||||||
* docs/design/part-live-source.txt:
|
* docs/design/part-live-source.txt:
|
||||||
|
|
|
@ -211,6 +211,7 @@ gst_segment_set_last_stop (GstSegment * segment, GstFormat format,
|
||||||
gint64 position)
|
gint64 position)
|
||||||
{
|
{
|
||||||
g_return_if_fail (segment != NULL);
|
g_return_if_fail (segment != NULL);
|
||||||
|
g_return_if_fail (position != -1);
|
||||||
|
|
||||||
if (G_UNLIKELY (segment->format == GST_FORMAT_UNDEFINED))
|
if (G_UNLIKELY (segment->format == GST_FORMAT_UNDEFINED))
|
||||||
segment->format = format;
|
segment->format = format;
|
||||||
|
@ -282,7 +283,9 @@ gst_segment_set_seek (GstSegment * segment, gdouble rate,
|
||||||
update_start = FALSE;
|
update_start = FALSE;
|
||||||
break;
|
break;
|
||||||
case GST_SEEK_TYPE_SET:
|
case GST_SEEK_TYPE_SET:
|
||||||
/* start holds desired position */
|
/* start holds desired position, map -1 to the start */
|
||||||
|
if (start == -1)
|
||||||
|
start = 0;
|
||||||
break;
|
break;
|
||||||
case GST_SEEK_TYPE_CUR:
|
case GST_SEEK_TYPE_CUR:
|
||||||
/* add start to currently configure segment */
|
/* add start to currently configure segment */
|
||||||
|
@ -351,10 +354,14 @@ gst_segment_set_seek (GstSegment * segment, gdouble rate,
|
||||||
segment->last_stop = start;
|
segment->last_stop = start;
|
||||||
}
|
}
|
||||||
if (update_stop && rate < 0.0) {
|
if (update_stop && rate < 0.0) {
|
||||||
if (stop == -1)
|
if (stop != -1)
|
||||||
segment->last_stop = segment->duration;
|
|
||||||
else
|
|
||||||
segment->last_stop = stop;
|
segment->last_stop = stop;
|
||||||
|
else {
|
||||||
|
if (segment->duration != -1)
|
||||||
|
segment->last_stop = segment->duration;
|
||||||
|
else
|
||||||
|
segment->last_stop = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
segment->time = start;
|
segment->time = start;
|
||||||
segment->stop = stop;
|
segment->stop = stop;
|
||||||
|
@ -428,7 +435,10 @@ gst_segment_set_newsegment_full (GstSegment * segment, gboolean update,
|
||||||
if (update) {
|
if (update) {
|
||||||
/* an update to the current segment is done, elapsed time is
|
/* an update to the current segment is done, elapsed time is
|
||||||
* difference between the old start and new start. */
|
* difference between the old start and new start. */
|
||||||
duration = start - segment->start;
|
if (start > segment->start)
|
||||||
|
duration = start - segment->start;
|
||||||
|
else
|
||||||
|
duration = 0;
|
||||||
} else {
|
} else {
|
||||||
/* the new segment has to be aligned with the old segment.
|
/* the new segment has to be aligned with the old segment.
|
||||||
* We first update the accumulated time of the previous
|
* We first update the accumulated time of the previous
|
||||||
|
|
Loading…
Reference in a new issue