adaptivedemux2: Handle synchronously to lost sync
authorEdward Hervey <edward@centricular.com>
Fri, 8 Jul 2022 08:40:33 +0000 (10:40 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Thu, 4 Aug 2022 13:49:27 +0000 (14:49 +0100)
We are already in the main scheduler thread, therefore we can do the "seek back
to live" directly. This also avoids other pending actions to take place.

Also handle the loss of sync when doing manifest updates.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2839>

subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemux-stream.c
subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemux.c

index c9dc24f..6f8f575 100644 (file)
@@ -1731,8 +1731,7 @@ gst_adaptive_demux2_stream_load_a_fragment (GstAdaptiveDemux2Stream * stream)
     case GST_ADAPTIVE_DEMUX_FLOW_LOST_SYNC:
       GST_DEBUG_OBJECT (stream, "Lost sync, asking reset to current position");
       stream->state = GST_ADAPTIVE_DEMUX2_STREAM_STATE_STOPPED;
-      gst_adaptive_demux_loop_call (demux->priv->scheduler_task,
-          (GSourceFunc) gst_adaptive_demux_handle_lost_sync, demux, NULL);
+      gst_adaptive_demux_handle_lost_sync (demux);
       return FALSE;
     case GST_FLOW_NOT_LINKED:
     {
index d6cc370..f17f6c4 100644 (file)
@@ -3157,6 +3157,9 @@ gst_adaptive_demux_manifest_update_cb (GstAdaptiveDemux * demux)
     }
   }
 
+  if (ret == GST_ADAPTIVE_DEMUX_FLOW_LOST_SYNC)
+    gst_adaptive_demux_handle_lost_sync (demux);
+
   if (schedule_again) {
     GstAdaptiveDemuxClass *klass = GST_ADAPTIVE_DEMUX_GET_CLASS (demux);