Commit ea2de3d0 authored by Nicolas George's avatar Nicolas George

lavf/concatdec: add the "duration" directive.

parent b92c7a8f
...@@ -56,6 +56,8 @@ following directive is recognized: ...@@ -56,6 +56,8 @@ following directive is recognized:
Path to a file to read; special characters and spaces must be escaped with Path to a file to read; special characters and spaces must be escaped with
backslash or single quotes. backslash or single quotes.
All subsequent directives apply to that file.
@item @code{ffconcat version 1.0} @item @code{ffconcat version 1.0}
Identify the script type and version. It also sets the @option{safe} option Identify the script type and version. It also sets the @option{safe} option
to 1 if it was to its default -1. to 1 if it was to its default -1.
...@@ -64,6 +66,11 @@ To make FFmpeg recognize the format automatically, this directive must ...@@ -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 appears exactly as is (no extra space or byte-order-mark) on the very first
line of the script. 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 @end table
@subsection Options @subsection Options
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "libavutil/avstring.h" #include "libavutil/avstring.h"
#include "libavutil/opt.h" #include "libavutil/opt.h"
#include "libavutil/parseutils.h"
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
...@@ -174,6 +175,20 @@ static int concat_read_header(AVFormatContext *avf) ...@@ -174,6 +175,20 @@ static int concat_read_header(AVFormatContext *avf)
} }
if ((ret = add_file(avf, filename, &file, &nb_files_alloc)) < 0) if ((ret = add_file(avf, filename, &file, &nb_files_alloc)) < 0)
FAIL(ret); 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")) { } else if (!strcmp(keyword, "ffconcat")) {
char *ver_kw = get_keyword(&cursor); char *ver_kw = get_keyword(&cursor);
char *ver_val = get_keyword(&cursor); char *ver_val = get_keyword(&cursor);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment