Merge commit 'eb33ba04e03d9f36e23fffd442510c824be709c3'
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 29 Jul 2013 11:58:21 +0000 (13:58 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 29 Jul 2013 11:59:27 +0000 (13:59 +0200)
* commit 'eb33ba04e03d9f36e23fffd442510c824be709c3':
  hls: Return all packets from a previous variant before moving on to the next one

Conflicts:
libavformat/hls.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/hls.c

@@@ -702,23 -638,14 +702,25 @@@ start
                  }
              }
          }
-         /* Check if this stream has the packet with the lowest dts */
+         /* 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) {
+             if (minvariant < 0 ||
 -                var->cur_seq_no <  c->variants[minvariant]->cur_seq_no ||
 -               (var->cur_seq_no == c->variants[minvariant]->cur_seq_no &&
 -                var->pkt.dts    <  c->variants[minvariant]->pkt.dts))
++                var->cur_seq_no < c->variants[minvariant]->cur_seq_no) {
                  minvariant = i;
-             } else {
++            } 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];
 +
 +                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) {