From 3ac754b93b9da480641c67d4193edb5838bfd2fa Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Tue, 21 Aug 2012 01:48:04 +0200
Subject: [PATCH] hls: fix min DTS code, try #2

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
---
 libavformat/hls.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/libavformat/hls.c b/libavformat/hls.c
index 54e971a7653..00c3cf01fbf 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -646,11 +646,21 @@ start:
         }
         /* Check if this stream has the packet with the lowest dts */
         if (var->pkt.data) {
-            struct variant *minvar = c->variants[minvariant];
-            if (minvariant < 0 ||
-                av_compare_ts(var->pkt.dts, var->ctx->streams[var->pkt.stream_index]->time_base,
-                              minvar->pkt.dts, minvar->ctx->streams[minvar->pkt.stream_index]->time_base) > 0)
+            if(minvariant < 0) {
                 minvariant = i;
+            } else {
+                struct variant *minvar = c->variants[minvariant];
+                int64_t dts    =    var->pkt.dts;
+                int64_t mindts = minvar->pkt.dts;
+                AVStream *st   =    var->ctx->streams[   var->pkt.stream_index];
+                AVStream *minst= minvar->ctx->streams[minvar->pkt.stream_index];
+
+                if(   st->start_time != AV_NOPTS_VALUE)    dts -=    st->start_time;
+                if(minst->start_time != AV_NOPTS_VALUE) mindts -= minst->start_time;
+
+                if (av_compare_ts(dts, st->time_base, mindts, minst->time_base) < 0)
+                    minvariant = i;
+            }
         }
     }
     if (c->end_of_segment) {
-- 
GitLab