segment: make sure we don't have unmapped seek flags littering out segment flags

Make GstSeekFlag to GstSegmentFlag conversion explicit, and
set only those seek flags in the segment flags which are
mapped. This makes sure we don't have extraneous flags
littering our segment flag field, which also fixes the
debug printing/serialisation of segment events in the
debug log.
This commit is contained in:
Tim-Philipp Müller 2012-07-04 16:16:04 +01:00
parent 5c70276894
commit 49ea16e041
3 changed files with 8 additions and 2 deletions

View file

@ -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

View file

@ -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;

View file

@ -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,