lavf/segment: set segment end time when the first packet arrives
authorStefano Sabatini <stefasab@gmail.com>
Thu, 17 Jul 2014 14:36:27 +0000 (16:36 +0200)
committerStefano Sabatini <stefasab@gmail.com>
Thu, 17 Jul 2014 14:51:51 +0000 (16:51 +0200)
Avoid negative durations in case there is a single packet in the current
segment, since in that case the end time is still set to the previous
segment end time.

libavformat/segment.c

index c25a2951c4ce96708742df32bd3ed6bd8fd183a2..72bf5e0880b893380292a612c9b76e0c15ca7846 100644 (file)
@@ -729,6 +729,8 @@ static int seg_write_packet(AVFormatContext *s, AVPacket *pkt)
         seg->cur_entry.index = seg->segment_idx + seg->segment_idx_wrap*seg->segment_idx_wrap_nb;
         seg->cur_entry.start_time = (double)pkt->pts * av_q2d(st->time_base);
         seg->cur_entry.start_pts = av_rescale_q(pkt->pts, st->time_base, AV_TIME_BASE_Q);
+        seg->cur_entry.end_time = seg->cur_entry.start_time +
+            pkt->pts != AV_NOPTS_VALUE ? (double)(pkt->pts + pkt->duration) * av_q2d(st->time_base) : 0;
     } else if (pkt->pts != AV_NOPTS_VALUE && pkt->stream_index == seg->reference_stream_index) {
         seg->cur_entry.end_time =
             FFMAX(seg->cur_entry.end_time, (double)(pkt->pts + pkt->duration) * av_q2d(st->time_base));