hlsdemux2: Always check DSN if required
authorEdward Hervey <edward@centricular.com>
Tue, 12 Jul 2022 08:44:51 +0000 (10:44 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Thu, 4 Aug 2022 13:49:27 +0000 (14:49 +0100)
We don't want to consider the candidate as being before the playlist if the DSN
don't match

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

subprojects/gst-plugins-good/ext/adaptivedemux2/hls/m3u8.c

index 72eabcc..da9fd6e 100644 (file)
@@ -1045,6 +1045,11 @@ find_segment_in_playlist (GstHLSMediaPlaylist * playlist,
   for (idx = 0; idx < playlist->segments->len; idx++) {
     GstM3U8MediaSegment *cand = g_ptr_array_index (playlist->segments, idx);
 
+    /* Ignore non-matching DSN if needed */
+    if ((segment->discont_sequence != cand->discont_sequence)
+        && playlist->has_ext_x_dsn)
+      continue;
+
     if (idx == 0 && cand->sequence == segment->sequence + 1) {
       /* Special case for segments just before the 1st one. We add another
        * reference because it now also belongs to the current playlist */
@@ -1055,9 +1060,7 @@ find_segment_in_playlist (GstHLSMediaPlaylist * playlist,
       return segment;
     }
 
-    if ((segment->discont_sequence == cand->discont_sequence
-            || !playlist->has_ext_x_dsn)
-        && (cand->sequence == segment->sequence)) {
+    if (cand->sequence == segment->sequence) {
       return cand;
     }
   }