diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-08-21 01:48:04 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-08-21 01:52:55 +0200 |
commit | 3ac754b93b9da480641c67d4193edb5838bfd2fa (patch) | |
tree | 335260e39f930fe845e2be13df526127f20ae90f /libavformat/hls.c | |
parent | bf606334ad5ba9180d9a13682504bb1d7cb6ba3a (diff) | |
download | ffmpeg-3ac754b93b9da480641c67d4193edb5838bfd2fa.tar.gz |
hls: fix min DTS code, try #2
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/hls.c')
-rw-r--r-- | libavformat/hls.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/libavformat/hls.c b/libavformat/hls.c index 54e971a765..00c3cf01fb 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) { |