summaryrefslogtreecommitdiff
path: root/libavformat/hls.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-07-29 14:18:37 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-07-29 14:18:37 +0200
commit65dcb544934463db871b667fe2b9dd38d5bf48a4 (patch)
treea83cc2fd944341d53db83eea0e08bae285838f5c /libavformat/hls.c
parent2f9e97b32a7a541095654bed2e8763dd79c98366 (diff)
parent9d64f236292ba28018dd9afd2d57f8f944b33f81 (diff)
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>
Diffstat (limited to 'libavformat/hls.c')
-rw-r--r--libavformat/hls.c30
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;
+ }
}
}
}