Re: [FFmpeg-devel] [PATCH] lavf/segment: sanitize segment end time in case last packet didn't have a defined duration

2014-07-22 Thread Stefano Sabatini
On date Thursday 2014-07-17 20:39:21 +0200, Stefano Sabatini encoded:
> In particular, avoids to set segments with a 0 duration (e.g. segment
> with a single reference frame for which duration is undefined).
> ---
>  libavformat/segment.c | 6 ++
>  1 file changed, 6 insertions(+)

Applied.
-- 
FFmpeg = Fiendish and Furious Mystic Picky Ephemeral God
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] lavf/segment: sanitize segment end time in case last packet didn't have a defined duration

2014-07-17 Thread Stefano Sabatini
In particular, avoids to set segments with a 0 duration (e.g. segment
with a single reference frame for which duration is undefined).
---
 libavformat/segment.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/libavformat/segment.c b/libavformat/segment.c
index db932f7..33a5558 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -48,6 +48,7 @@ typedef struct SegmentListEntry {
 int64_t offset_pts;
 char *filename;
 struct SegmentListEntry *next;
+int64_t last_duration;
 } SegmentListEntry;
 
 typedef enum {
@@ -720,6 +721,10 @@ static int seg_write_packet(AVFormatContext *s, AVPacket 
*pkt)
  (pkt->pts != AV_NOPTS_VALUE &&
   av_compare_ts(pkt->pts, st->time_base,
 end_pts-seg->time_delta, AV_TIME_BASE_Q) >= 0))) {
+/* sanitize end time in case last packet didn't have a defined 
duration */
+if (seg->cur_entry.last_duration == 0)
+seg->cur_entry.end_time = (double)pkt->pts * av_q2d(st->time_base);
+
 if ((ret = segment_end(s, seg->individual_header_trailer, 0)) < 0)
 goto fail;
 
@@ -735,6 +740,7 @@ static int seg_write_packet(AVFormatContext *s, AVPacket 
*pkt)
 } 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));
+seg->cur_entry.last_duration = pkt->duration;
 }
 
 if (seg->segment_frame_count == 0) {
-- 
1.8.3.2

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel