[FFmpeg-cvslog] lavf/concatdec: support stream metadata
Nicolas George
git at videolan.org
Thu Sep 16 11:26:13 EEST 2021
ffmpeg | branch: master | Nicolas George <george at nsup.org> | Tue Aug 31 14:09:57 2021 +0200| [c753b49c38c434ab9da931a62cba5dfccf8bf6b8] | committer: Nicolas George
lavf/concatdec: support stream metadata
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c753b49c38c434ab9da931a62cba5dfccf8bf6b8
---
doc/demuxers.texi | 4 ++++
libavformat/concatdec.c | 14 ++++++++++++--
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/doc/demuxers.texi b/doc/demuxers.texi
index fd06be3195..87e4d0319a 100644
--- a/doc/demuxers.texi
+++ b/doc/demuxers.texi
@@ -177,6 +177,10 @@ subfiles will be used.
This is especially useful for MPEG-PS (VOB) files, where the order of the
streams is not reliable.
+ at item @code{stream_meta @var{key} @var{value}}
+Metadata for the stream.
+Can be present multiple times.
+
@end table
@subsection Options
diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c
index 0e581e9a14..6e91fd1826 100644
--- a/libavformat/concatdec.c
+++ b/libavformat/concatdec.c
@@ -430,6 +430,7 @@ typedef enum ParseDirective {
DIR_OPTION,
DIR_STREAM,
DIR_EXSID,
+ DIR_STMETA,
} ParseDirective;
static const ParseSyntax syntax[] = {
@@ -443,6 +444,7 @@ static const ParseSyntax syntax[] = {
[DIR_OPTION ] = { "option", "ks", NEEDS_FILE | NEEDS_UNSAFE },
[DIR_STREAM ] = { "stream", "", 0 },
[DIR_EXSID ] = { "exact_stream_id", "i", NEEDS_STREAM },
+ [DIR_STMETA ] = { "stream_meta", "ks", NEEDS_STREAM },
};
static int concat_parse_script(AVFormatContext *avf)
@@ -452,6 +454,7 @@ static int concat_parse_script(AVFormatContext *avf)
AVBPrint bp;
uint8_t *cursor, *keyword;
ConcatFile *file = NULL;
+ AVStream *stream = NULL;
unsigned line = 0, arg;
const ParseSyntax *dir;
char *arg_kw[MAX_ARGS];
@@ -578,12 +581,19 @@ static int concat_parse_script(AVFormatContext *avf)
break;
case DIR_STREAM:
- if (!avformat_new_stream(avf, NULL))
+ stream = avformat_new_stream(avf, NULL);
+ if (!stream)
FAIL(AVERROR(ENOMEM));
break;
case DIR_EXSID:
- avf->streams[avf->nb_streams - 1]->id = arg_int[0];
+ stream->id = arg_int[0];
+ break;
+ case DIR_STMETA:
+ ret = av_dict_set(&stream->metadata, arg_kw[0], arg_str[1], AV_DICT_DONT_STRDUP_VAL);
+ arg_str[1] = NULL;
+ if (ret < 0)
+ FAIL(ret);
break;
default:
More information about the ffmpeg-cvslog
mailing list