rtspsrc: De-dup seek event seqnums to avoid multiple seeks
authorNirbheek Chauhan <nirbheek@centricular.com>
Fri, 9 Apr 2021 21:39:44 +0000 (03:09 +0530)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Mon, 12 Apr 2021 03:32:08 +0000 (03:32 +0000)
Seek events are sent upstream on each sink, so if we receive multiple
seeks with the same seqnum, we must only perform one seek, not N seeks
where N = the number of sinks in the pipeline connected to rtspsrc.

This is the same thing done by demuxers like qtdemux or matrsokademux.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/938>

gst/rtsp/gstrtspsrc.c

index e59e05e..51a70b7 100644 (file)
@@ -2978,7 +2978,15 @@ gst_rtspsrc_handle_src_event (GstPad * pad, GstObject * parent,
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_SEEK:
-      res = gst_rtspsrc_perform_seek (src, event);
+    {
+      guint32 seqnum = gst_event_get_seqnum (event);
+      if (seqnum == src->seek_seqnum) {
+        GST_LOG_OBJECT (pad, "Drop duplicated SEEK event seqnum %"
+            G_GUINT32_FORMAT, seqnum);
+      } else {
+        res = gst_rtspsrc_perform_seek (src, event);
+      }
+    }
       forward = FALSE;
       break;
     case GST_EVENT_QOS: