[FFmpeg-cvslog] lavf/segment: compute max list segment duration

Stefano Sabatini git at videolan.org
Sat Aug 18 11:30:12 CEST 2012


ffmpeg | branch: master | Stefano Sabatini <stefasab at gmail.com> | Wed Aug 15 23:14:34 2012 +0200| [4a12d1e8e794059b58718f402c46aed9e2bed458] | committer: Stefano Sabatini

lavf/segment: compute max list segment duration

This is useful for the M3U8 format incoming patch.

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

 libavformat/segment.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/libavformat/segment.c b/libavformat/segment.c
index ba5718d..78b304a 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -49,6 +49,7 @@ typedef struct {
     char *format;          ///< format to use for output segment files
     char *list;            ///< filename for the segment list file
     int   list_size;       ///< number of entries for the segment list file
+    double list_max_segment_time; ///< max segment time in the current list
     ListType list_type;    ///< set the list type
     AVIOContext *list_pb;  ///< list file put-byte context
     char *time_str;        ///< segment duration specification string
@@ -112,8 +113,14 @@ fail:
 static int segment_list_open(AVFormatContext *s)
 {
     SegmentContext *seg = s->priv_data;
-    return avio_open2(&seg->list_pb, seg->list, AVIO_FLAG_WRITE,
-                      &s->interrupt_callback, NULL);
+    int ret;
+
+    ret = avio_open2(&seg->list_pb, seg->list, AVIO_FLAG_WRITE,
+                     &s->interrupt_callback, NULL);
+    if (ret < 0)
+        return ret;
+    seg->list_max_segment_time = 0;
+    return ret;
 }
 
 static void segment_list_close(AVFormatContext *s)
@@ -147,6 +154,7 @@ static int segment_end(AVFormatContext *s)
         } else if (seg->list_type == LIST_TYPE_EXT) {
             avio_printf(seg->list_pb, "%s,%f,%f\n", oc->filename, seg->start_time, seg->end_time);
         }
+        seg->list_max_segment_time = FFMAX(seg->end_time - seg->start_time, seg->list_max_segment_time);
         avio_flush(seg->list_pb);
     }
 



More information about the ffmpeg-cvslog mailing list