From 8f496b7392185dd8fe1eec22b30dab7f7d481627 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 11 Jun 2018 10:22:39 +0300 Subject: [PATCH] event: Unset SNAP flags when creating a new seek event without KEY_UNIT flag 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 | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gst/gstevent.c b/gst/gstevent.c index a47d573105..fae950c32d 100644 --- a/gst/gstevent.c +++ b/gst/gstevent.c @@ -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, "