aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2013-02-13 17:25:56 +0100
committerNicolas George <nicolas.george@normalesup.org>2013-02-24 13:12:46 +0100
commitea2de3d09614fcfe53b9406cce57a1bf8cf6d5cd (patch)
tree61efbd6e05faac03bbc8794d02f0d45bdbaa44d5
parentb92c7a8f4b55f15dd05130f24b9300c42a806655 (diff)
downloadffmpeg-ea2de3d09614fcfe53b9406cce57a1bf8cf6d5cd.tar.gz
lavf/concatdec: add the "duration" directive.
-rw-r--r--doc/demuxers.texi7
-rw-r--r--libavformat/concatdec.c15
2 files changed, 22 insertions, 0 deletions
diff --git a/doc/demuxers.texi b/doc/demuxers.texi
index e4c358c698..c8eec219e8 100644
--- a/doc/demuxers.texi
+++ b/doc/demuxers.texi
@@ -56,6 +56,8 @@ following directive is recognized:
Path to a file to read; special characters and spaces must be escaped with
backslash or single quotes.
+All subsequent directives apply to that file.
+
@item @code{ffconcat version 1.0}
Identify the script type and version. It also sets the @option{safe} option
to 1 if it was to its default -1.
@@ -64,6 +66,11 @@ To make FFmpeg recognize the format automatically, this directive must
appears exactly as is (no extra space or byte-order-mark) on the very first
line of the script.
+@item @code{duration @var{dur}}
+Duration of the file. This information can be specified from the file;
+specifying it here may be more efficient or help if the information from the
+file is not available or accurate.
+
@end table
@subsection Options
diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c
index f1fb169259..2858befa3d 100644
--- a/libavformat/concatdec.c
+++ b/libavformat/concatdec.c
@@ -20,6 +20,7 @@
#include "libavutil/avstring.h"
#include "libavutil/opt.h"
+#include "libavutil/parseutils.h"
#include "avformat.h"
#include "internal.h"
@@ -174,6 +175,20 @@ static int concat_read_header(AVFormatContext *avf)
}
if ((ret = add_file(avf, filename, &file, &nb_files_alloc)) < 0)
FAIL(ret);
+ } else if (!strcmp(keyword, "duration")) {
+ char *dur_str = get_keyword(&cursor);
+ int64_t dur;
+ if (!file) {
+ av_log(avf, AV_LOG_ERROR, "Line %d: duration without file\n",
+ line);
+ FAIL(AVERROR_INVALIDDATA);
+ }
+ if ((ret = av_parse_time(&dur, dur_str, 1)) < 0) {
+ av_log(avf, AV_LOG_ERROR, "Line %d: invalid duration '%s'\n",
+ line, dur_str);
+ FAIL(ret);
+ }
+ file->duration = dur;
} else if (!strcmp(keyword, "ffconcat")) {
char *ver_kw = get_keyword(&cursor);
char *ver_val = get_keyword(&cursor);