lavf/concat: compute duration if possible.
authorNicolas George <nicolas.george@normalesup.org>
Wed, 13 Feb 2013 18:25:26 +0000 (19:25 +0100)
committerNicolas George <nicolas.george@normalesup.org>
Tue, 5 Mar 2013 15:44:51 +0000 (16:44 +0100)
libavformat/concatdec.c

index 2858bef..a9fcc76 100644 (file)
@@ -157,6 +157,7 @@ static int concat_read_header(AVFormatContext *avf)
     unsigned nb_files_alloc = 0;
     ConcatFile *file = NULL;
     AVStream *st, *source_st;
+    int64_t time = 0;
 
     while (1) {
         if ((ret = ff_get_line(avf->pb, buf, sizeof(buf))) <= 0)
@@ -207,6 +208,18 @@ static int concat_read_header(AVFormatContext *avf)
     if (ret < 0)
         FAIL(ret);
 
+    for (i = 0; i < cat->nb_files; i++) {
+        if (cat->files[i].start_time == AV_NOPTS_VALUE)
+            cat->files[i].start_time = time;
+        else
+            time = cat->files[i].start_time;
+        if (cat->files[i].duration == AV_NOPTS_VALUE)
+            break;
+        time += cat->files[i].duration;
+    }
+    if (i == cat->nb_files)
+        avf->duration = time;
+
     if ((ret = open_file(avf, 0)) < 0)
         FAIL(ret);
     for (i = 0; i < cat->avf->nb_streams; i++) {