diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-07-29 14:18:37 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-07-29 14:18:37 +0200 |
commit | 65dcb544934463db871b667fe2b9dd38d5bf48a4 (patch) | |
tree | a83cc2fd944341d53db83eea0e08bae285838f5c | |
parent | 2f9e97b32a7a541095654bed2e8763dd79c98366 (diff) | |
parent | 9d64f236292ba28018dd9afd2d57f8f944b33f81 (diff) | |
download | ffmpeg-65dcb544934463db871b667fe2b9dd38d5bf48a4.tar.gz |
Merge commit '9d64f236292ba28018dd9afd2d57f8f944b33f81'
* commit '9d64f236292ba28018dd9afd2d57f8f944b33f81':
hls: Respect the different stream time bases when comparing dts
Conflicts:
libavformat/hls.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/hls.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/libavformat/hls.c b/libavformat/hls.c index 84bd8448a4..900fe97607 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -705,21 +705,27 @@ start: /* Check if this stream still is on an earlier segment number, or * has the packet with the lowest dts */ if (var->pkt.data) { - if (minvariant < 0 || - var->cur_seq_no < c->variants[minvariant]->cur_seq_no) { + struct variant *minvar = c->variants[minvariant]; + if (minvariant < 0 || var->cur_seq_no < minvar->cur_seq_no) { minvariant = i; - } else if (var->cur_seq_no == c->variants[minvariant]->cur_seq_no) { - 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]; + } else if (var->cur_seq_no == minvar->cur_seq_no) { + 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) + if (dts == AV_NOPTS_VALUE) { minvariant = i; + } else if (mindts != AV_NOPTS_VALUE) { + 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; + } } } } |