diff --git a/docs/design/part-segments.txt b/docs/design/part-segments.txt index 56a2e1a231..ab6606ce04 100644 --- a/docs/design/part-segments.txt +++ b/docs/design/part-segments.txt @@ -64,7 +64,7 @@ Use case: FLUSHING seek When it reaches timestamp 5, it does not decode and push frames anymore. The video sink receives a frame of timestamp 1. It takes the start value of - the previous segment and aplies the folowing (simplified) formula: + the previous segment and aplies the following (simplified) formula: render_time = BUFFER_TIMESTAMP - segment_start + element->base_time diff --git a/gst/gstsegment.c b/gst/gstsegment.c index 0e5cc173bc..fb73068e90 100644 --- a/gst/gstsegment.c +++ b/gst/gstsegment.c @@ -317,7 +317,12 @@ gst_segment_do_seek (GstSegment * segment, gdouble rate, segment->rate = rate; segment->applied_rate = 1.0; segment->base = base; - segment->flags = (GstSegmentFlags) flags; + /* be explicit about our GstSeekFlag -> GstSegmentFlag conversion */ + segment->flags = GST_SEGMENT_FLAG_NONE; + if ((flags & GST_SEEK_FLAG_FLUSH) != 0) + segment->flags |= GST_SEGMENT_FLAG_RESET; + if ((flags & GST_SEEK_FLAG_SKIP) != 0) + segment->flags |= GST_SEGMENT_FLAG_SKIP; segment->start = start; segment->stop = stop; segment->time = start; diff --git a/gst/gstsegment.h b/gst/gstsegment.h index 9d3a8d1875..ac8c07ec4e 100644 --- a/gst/gstsegment.h +++ b/gst/gstsegment.h @@ -130,6 +130,7 @@ typedef enum { * Flags for the GstSegment structure. Currently mapped to the corresponding * values of the seek flags. */ +/* Note: update gst_segment_do_seek() when adding new flags here */ typedef enum { GST_SEGMENT_FLAG_NONE = GST_SEEK_FLAG_NONE, GST_SEGMENT_FLAG_RESET = GST_SEEK_FLAG_FLUSH,