diff mbox series

[FFmpeg-devel,04/12] lavf/concatdec: support stream metadata

Message ID 20210831180739.873390-4-george@nsup.org
State Accepted
Commit c753b49c38c434ab9da931a62cba5dfccf8bf6b8
Headers show
Series [FFmpeg-devel,01/12] lavf/concat: refactor parsing | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished

Commit Message

Nicolas George Aug. 31, 2021, 6:07 p.m. UTC
Signed-off-by: Nicolas George <george@nsup.org>
---
 doc/demuxers.texi       |  4 ++++
 libavformat/concatdec.c | 14 ++++++++++++--
 2 files changed, 16 insertions(+), 2 deletions(-)
diff mbox series

Patch

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.
 
+@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: