event: Unset SNAP flags when creating a new seek event without KEY_UNIT flag
authorSebastian Dröge <sebastian@centricular.com>
Mon, 11 Jun 2018 07:22:39 +0000 (10:22 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Mon, 18 Jun 2018 07:31:16 +0000 (10:31 +0300)
The SNAP flags only make sense in combination with the KEY_UNIT flag,
and without they expose all kinds of unexpected behaviour in various
elements that don't expect this from happening.

Also warn if this ever happens.

https://bugzilla.gnome.org/show_bug.cgi?id=796558

gst/gstevent.c

index a47d573..fae950c 100644 (file)
@@ -1268,6 +1268,18 @@ gst_event_new_seek (gdouble rate, GstFormat format, GstSeekFlags flags,
 
   g_return_val_if_fail (rate != 0.0, NULL);
 
+  /* SNAP flags only make sense in combination with the KEYUNIT flag. Warn
+   * and unset the SNAP flags if they're set without the KEYUNIT flag */
+  if (!(flags & GST_SEEK_FLAG_KEY_UNIT) &&
+      (flags & (GST_SEEK_FLAG_SNAP_BEFORE | GST_SEEK_FLAG_SNAP_AFTER |
+              GST_SEEK_FLAG_SNAP_NEAREST))) {
+    g_warning ("SNAP seeks only work in combination with the KEY_UNIT "
+        "flag, ignoring SNAP flags");
+    flags &=
+        ~(GST_SEEK_FLAG_SNAP_BEFORE | GST_SEEK_FLAG_SNAP_AFTER |
+        GST_SEEK_FLAG_SNAP_NEAREST);
+  }
+
   if (format == GST_FORMAT_TIME) {
     GST_CAT_INFO (GST_CAT_EVENT,
         "creating seek rate %lf, format TIME, flags %d, "