[FFmpeg-cvslog] lavf/segment: only use reference frames for computing the segment end time

Stefano Sabatini git at videolan.org
Thu Jul 17 16:54:07 CEST 2014


ffmpeg | branch: master | Stefano Sabatini <stefasab at gmail.com> | Thu Jul 17 14:49:20 2014 +0200| [5acad50056f653672a0e9b6b2986089c32046afb] | committer: Stefano Sabatini

lavf/segment: only use reference frames for computing the segment end time

This avoids a systematic overestimate of the segments duration when there
are several streams.

Fix trac ticket #3724.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5acad50056f653672a0e9b6b2986089c32046afb
---

 libavformat/segment.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libavformat/segment.c b/libavformat/segment.c
index 3de4623..7c3a3c5 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -728,7 +728,7 @@ 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);
-    } else if (pkt->pts != AV_NOPTS_VALUE) {
+    } 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));
     }



More information about the ffmpeg-cvslog mailing list