Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces
@ 2024-03-05  0:00 James Almer
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 2/9] avformat/avformat: add a function to return the name of stream groups James Almer
                   ` (8 more replies)
  0 siblings, 9 replies; 22+ messages in thread
From: James Almer @ 2024-03-05  0:00 UTC (permalink / raw)
  To: ffmpeg-devel

Components and pieces are side data specific fields and there's a variable
amount of them.
They also need to be identified in some form, so print a type too.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 fftools/ffprobe.c | 32 ++++++++++++++++++++++++++------
 1 file changed, 26 insertions(+), 6 deletions(-)

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index ac6b92f5d6..8390377159 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -244,6 +244,11 @@ static const char *get_frame_side_data_type(const void *data)
     return av_x_if_null(av_frame_side_data_name(sd->type), "unknown");
 }
 
+static const char *get_raw_string_type(const void *data)
+{
+    return data;
+}
+
 static struct section sections[] = {
     [SECTION_ID_CHAPTERS] =           { SECTION_ID_CHAPTERS, "chapters", SECTION_FLAG_IS_ARRAY, { SECTION_ID_CHAPTER, -1 } },
     [SECTION_ID_CHAPTER] =            { SECTION_ID_CHAPTER, "chapter", 0, { SECTION_ID_CHAPTER_TAGS, -1 } },
@@ -258,10 +263,10 @@ static struct section sections[] = {
     [SECTION_ID_FRAME_SIDE_DATA] =     { SECTION_ID_FRAME_SIDE_DATA, "side_data", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { SECTION_ID_FRAME_SIDE_DATA_TIMECODE_LIST, SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST, -1 }, .unique_name = "frame_side_data", .element_name = "side_datum", .get_type = get_frame_side_data_type },
     [SECTION_ID_FRAME_SIDE_DATA_TIMECODE_LIST] =  { SECTION_ID_FRAME_SIDE_DATA_TIMECODE_LIST, "timecodes", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_TIMECODE, -1 } },
     [SECTION_ID_FRAME_SIDE_DATA_TIMECODE] =       { SECTION_ID_FRAME_SIDE_DATA_TIMECODE, "timecode", 0, { -1 } },
-    [SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST] = { SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST, "components", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_COMPONENT, -1 } },
-    [SECTION_ID_FRAME_SIDE_DATA_COMPONENT] =      { SECTION_ID_FRAME_SIDE_DATA_COMPONENT, "component", 0, { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, -1 } },
-    [SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST] =   { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, "pieces", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_PIECE, -1 } },
-    [SECTION_ID_FRAME_SIDE_DATA_PIECE] =        { SECTION_ID_FRAME_SIDE_DATA_PIECE, "piece", 0, { -1 } },
+    [SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST] = { SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST, "components", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_COMPONENT, -1 }, .element_name = "component", .unique_name = "frame_side_data_components" },
+    [SECTION_ID_FRAME_SIDE_DATA_COMPONENT] =      { SECTION_ID_FRAME_SIDE_DATA_COMPONENT, "component", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, -1 }, .unique_name = "frame_side_data_component", .element_name = "component_entry", .get_type = get_raw_string_type },
+    [SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST] =   { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, "pieces", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_PIECE, -1 }, .element_name = "piece" },
+    [SECTION_ID_FRAME_SIDE_DATA_PIECE] =        { SECTION_ID_FRAME_SIDE_DATA_PIECE, "piece", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .element_name = "piece_entry", .get_type = get_raw_string_type },
     [SECTION_ID_FRAME_LOGS] =         { SECTION_ID_FRAME_LOGS, "logs", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_LOG, -1 } },
     [SECTION_ID_FRAME_LOG] =          { SECTION_ID_FRAME_LOG, "log", 0, { -1 },  },
     [SECTION_ID_LIBRARY_VERSIONS] =   { SECTION_ID_LIBRARY_VERSIONS, "library_versions", SECTION_FLAG_IS_ARRAY, { SECTION_ID_LIBRARY_VERSION, -1 } },
@@ -2063,14 +2068,29 @@ static void print_dovi_metadata(WriterContext *w, const AVDOVIMetadata *dovi)
 
         for (int c = 0; c < 3; c++) {
             const AVDOVIReshapingCurve *curve = &mapping->curves[c];
-            writer_print_section_header(w, NULL, SECTION_ID_FRAME_SIDE_DATA_COMPONENT);
+            writer_print_section_header(w, "Reshaping curve", SECTION_ID_FRAME_SIDE_DATA_COMPONENT);
 
             print_list_fmt("pivots", "%"PRIu16, curve->num_pivots, 1, curve->pivots[idx]);
 
             writer_print_section_header(w, NULL, SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST);
             for (int i = 0; i < curve->num_pivots - 1; i++) {
+                AVBPrint piece_buf;
+
+                av_bprint_init(&piece_buf, 0, AV_BPRINT_SIZE_AUTOMATIC);
+                switch (curve->mapping_idc[i]) {
+                case AV_DOVI_MAPPING_POLYNOMIAL:
+                    av_bprintf(&piece_buf, "Polynomial");
+                    break;
+                case AV_DOVI_MAPPING_MMR:
+                    av_bprintf(&piece_buf, "MMR");
+                    break;
+                default:
+                    av_bprintf(&piece_buf, "Unknown");
+                    break;
+                }
+                av_bprintf(&piece_buf, " mapping");
 
-                writer_print_section_header(w, NULL, SECTION_ID_FRAME_SIDE_DATA_PIECE);
+                writer_print_section_header(w, piece_buf.str, SECTION_ID_FRAME_SIDE_DATA_PIECE);
                 print_int("mapping_idc", curve->mapping_idc[i]);
                 switch (curve->mapping_idc[i]) {
                 case AV_DOVI_MAPPING_POLYNOMIAL:
-- 
2.44.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [FFmpeg-devel] [PATCH 2/9] avformat/avformat: add a function to return the name of stream groups
  2024-03-05  0:00 [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces James Almer
@ 2024-03-05  0:00 ` James Almer
  2024-03-05 14:50   ` Stefano Sabatini
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 3/9 v3] fftools/ffprobe: add support for Stream Groups James Almer
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 22+ messages in thread
From: James Almer @ 2024-03-05  0:00 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
Missing version bump and APIChanges entry.

 libavformat/avformat.c | 10 ++++++++++
 libavformat/avformat.h |  5 +++++
 2 files changed, 15 insertions(+)

diff --git a/libavformat/avformat.c b/libavformat/avformat.c
index eb898223d2..98dfac2f89 100644
--- a/libavformat/avformat.c
+++ b/libavformat/avformat.c
@@ -321,6 +321,16 @@ AVStream *ff_stream_clone(AVFormatContext *dst_ctx, const AVStream *src)
     return st;
 }
 
+const char *avformat_stream_group_name(enum AVStreamGroupParamsType type)
+{
+    switch(type) {
+    case AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT:        return "IAMF Audio Element";
+    case AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION:     return "IAMF Mix Presentation";
+    case AV_STREAM_GROUP_PARAMS_TILE_GRID:                 return "Tile Grid";
+    }
+    return NULL;
+}
+
 AVProgram *av_new_program(AVFormatContext *ac, int id)
 {
     AVProgram *program = NULL;
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index f4506f4cf1..c41041b1bc 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -2120,6 +2120,11 @@ const AVClass *av_stream_get_class(void);
  */
 const AVClass *av_stream_group_get_class(void);
 
+/**
+ * @return a string identifying the stream group type
+ */
+const char *avformat_stream_group_name(enum AVStreamGroupParamsType type);
+
 /**
  * Add a new empty stream group to a media file.
  *
-- 
2.44.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [FFmpeg-devel] [PATCH 3/9 v3] fftools/ffprobe: add support for Stream Groups
  2024-03-05  0:00 [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces James Almer
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 2/9] avformat/avformat: add a function to return the name of stream groups James Almer
@ 2024-03-05  0:00 ` James Almer
  2024-03-05 15:06   ` Stefano Sabatini
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 4/9 v2] fate/iamf: print stream group information James Almer
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 22+ messages in thread
From: James Almer @ 2024-03-05  0:00 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
 Changelog                                     |   1 +
 doc/ffprobe.xsd                               |   1 +
 fftools/ffprobe.c                             | 147 ++++++++++++++++--
 tests/ref/fate/cavs-demux                     |   2 +-
 tests/ref/fate/ffprobe_compact                |   2 +-
 tests/ref/fate/ffprobe_csv                    |   2 +-
 tests/ref/fate/ffprobe_default                |   1 +
 tests/ref/fate/ffprobe_flat                   |   1 +
 tests/ref/fate/ffprobe_ini                    |   1 +
 tests/ref/fate/ffprobe_json                   |   1 +
 tests/ref/fate/ffprobe_xml                    |   2 +-
 tests/ref/fate/ffprobe_xsd                    |   2 +-
 tests/ref/fate/flv-demux                      |   2 +-
 tests/ref/fate/gapless-mp3-side-data          |   2 +-
 .../ref/fate/mov-mp4-disposition-mpegts-remux |   3 +
 tests/ref/fate/mov-mp4-ttml-dfxp              |   3 +
 tests/ref/fate/mov-mp4-ttml-stpp              |   3 +
 tests/ref/fate/oggopus-demux                  |   2 +-
 tests/ref/fate/ts-demux                       |   2 +-
 tests/ref/fate/ts-opus-demux                  |   2 +-
 tests/ref/fate/ts-small-demux                 |   2 +-
 tests/ref/fate/ts-timed-id3-demux             |   2 +-
 22 files changed, 163 insertions(+), 23 deletions(-)

diff --git a/Changelog b/Changelog
index f388d41b02..0ba3a77c08 100644
--- a/Changelog
+++ b/Changelog
@@ -30,6 +30,7 @@ version <next>:
 - Change the default bitrate control method from VBR to CQP for QSV encoders.
 - removed deprecated ffmpeg CLI options -psnr and -map_channel
 - DVD-Video demuxer, powered by libdvdnav and libdvdread
+- ffprobe -show_stream_groups option
 
 
 version 6.1:
diff --git a/doc/ffprobe.xsd b/doc/ffprobe.xsd
index 9490a20ce8..dc04ce7142 100644
--- a/doc/ffprobe.xsd
+++ b/doc/ffprobe.xsd
@@ -337,6 +337,7 @@
     <xsd:attribute name="filename"         type="xsd:string" use="required"/>
     <xsd:attribute name="nb_streams"       type="xsd:int"    use="required"/>
     <xsd:attribute name="nb_programs"      type="xsd:int"    use="required"/>
+    <xsd:attribute name="nb_stream_groups" type="xsd:int"    use="required"/>
     <xsd:attribute name="format_name"      type="xsd:string" use="required"/>
     <xsd:attribute name="format_long_name" type="xsd:string"/>
     <xsd:attribute name="start_time"       type="xsd:float"/>
diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index 8390377159..ff05c4c1db 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -112,8 +112,10 @@ static int do_show_format  = 0;
 static int do_show_frames  = 0;
 static int do_show_packets = 0;
 static int do_show_programs = 0;
+static int do_show_stream_groups = 0;
 static int do_show_streams = 0;
 static int do_show_stream_disposition = 0;
+static int do_show_stream_group_disposition = 0;
 static int do_show_data    = 0;
 static int do_show_program_version  = 0;
 static int do_show_library_versions = 0;
@@ -126,6 +128,7 @@ static int do_show_chapter_tags = 0;
 static int do_show_format_tags = 0;
 static int do_show_frame_tags = 0;
 static int do_show_program_tags = 0;
+static int do_show_stream_group_tags = 0;
 static int do_show_stream_tags = 0;
 static int do_show_packet_tags = 0;
 
@@ -159,7 +162,7 @@ static int find_stream_info  = 1;
 
 /* section structure definition */
 
-#define SECTION_MAX_NB_CHILDREN 10
+#define SECTION_MAX_NB_CHILDREN 11
 
 typedef enum {
     SECTION_ID_NONE = -1,
@@ -203,6 +206,14 @@ typedef enum {
     SECTION_ID_PROGRAM_TAGS,
     SECTION_ID_PROGRAM_VERSION,
     SECTION_ID_PROGRAMS,
+    SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION,
+    SECTION_ID_STREAM_GROUP_STREAM_TAGS,
+    SECTION_ID_STREAM_GROUP,
+    SECTION_ID_STREAM_GROUP_STREAMS,
+    SECTION_ID_STREAM_GROUP_STREAM,
+    SECTION_ID_STREAM_GROUP_DISPOSITION,
+    SECTION_ID_STREAM_GROUP_TAGS,
+    SECTION_ID_STREAM_GROUPS,
     SECTION_ID_ROOT,
     SECTION_ID_STREAM,
     SECTION_ID_STREAM_DISPOSITION,
@@ -249,6 +260,12 @@ static const char *get_raw_string_type(const void *data)
     return data;
 }
 
+static const char *get_stream_group_type(const void *data)
+{
+    const AVStreamGroup *stg = (const AVStreamGroup *)data;
+    return av_x_if_null(avformat_stream_group_name(stg->type), "unknown");
+}
+
 static struct section sections[] = {
     [SECTION_ID_CHAPTERS] =           { SECTION_ID_CHAPTERS, "chapters", SECTION_FLAG_IS_ARRAY, { SECTION_ID_CHAPTER, -1 } },
     [SECTION_ID_CHAPTER] =            { SECTION_ID_CHAPTER, "chapter", 0, { SECTION_ID_CHAPTER_TAGS, -1 } },
@@ -290,8 +307,16 @@ static struct section sections[] = {
     [SECTION_ID_PROGRAM_TAGS] =               { SECTION_ID_PROGRAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "program_tags" },
     [SECTION_ID_PROGRAM_VERSION] =    { SECTION_ID_PROGRAM_VERSION, "program_version", 0, { -1 } },
     [SECTION_ID_PROGRAMS] =                   { SECTION_ID_PROGRAMS, "programs", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PROGRAM, -1 } },
+    [SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION] = { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_stream_disposition" },
+    [SECTION_ID_STREAM_GROUP_STREAM_TAGS] =        { SECTION_ID_STREAM_GROUP_STREAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_group_stream_tags" },
+    [SECTION_ID_STREAM_GROUP] =                    { SECTION_ID_STREAM_GROUP, "stream_group", SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_TAGS, SECTION_ID_STREAM_GROUP_DISPOSITION, SECTION_ID_STREAM_GROUP_STREAMS, -1 }, .get_type = get_stream_group_type },
+    [SECTION_ID_STREAM_GROUP_STREAMS] =            { SECTION_ID_STREAM_GROUP_STREAMS, "streams", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_STREAM, -1 }, .unique_name = "stream_group_streams" },
+    [SECTION_ID_STREAM_GROUP_STREAM] =             { SECTION_ID_STREAM_GROUP_STREAM, "stream", 0, { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, SECTION_ID_STREAM_GROUP_STREAM_TAGS, -1 }, .unique_name = "stream_group_stream" },
+    [SECTION_ID_STREAM_GROUP_DISPOSITION] =        { SECTION_ID_STREAM_GROUP_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_disposition" },
+    [SECTION_ID_STREAM_GROUP_TAGS] =               { SECTION_ID_STREAM_GROUP_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_group_tags" },
+    [SECTION_ID_STREAM_GROUPS] =                   { SECTION_ID_STREAM_GROUPS, "stream_groups", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP, -1 } },
     [SECTION_ID_ROOT] =               { SECTION_ID_ROOT, "root", SECTION_FLAG_IS_WRAPPER,
-                                        { SECTION_ID_CHAPTERS, SECTION_ID_FORMAT, SECTION_ID_FRAMES, SECTION_ID_PROGRAMS, SECTION_ID_STREAMS,
+                                        { SECTION_ID_CHAPTERS, SECTION_ID_FORMAT, SECTION_ID_FRAMES, SECTION_ID_PROGRAMS, SECTION_ID_STREAM_GROUPS, SECTION_ID_STREAMS,
                                           SECTION_ID_PACKETS, SECTION_ID_ERROR, SECTION_ID_PROGRAM_VERSION, SECTION_ID_LIBRARY_VERSIONS,
                                           SECTION_ID_PIXEL_FORMATS, -1} },
     [SECTION_ID_STREAMS] =            { SECTION_ID_STREAMS, "streams", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM, -1 } },
@@ -3071,7 +3096,10 @@ static void print_dispositions(WriterContext *w, uint32_t disposition, SectionID
     writer_print_section_footer(w);
 }
 
-static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_idx, InputStream *ist, int in_program)
+#define IN_PROGRAM 1
+#define IN_STREAM_GROUP 2
+
+static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_idx, InputStream *ist, int container)
 {
     AVStream *stream = ist->st;
     AVCodecParameters *par;
@@ -3081,12 +3109,29 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
     AVRational sar, dar;
     AVBPrint pbuf;
     const AVCodecDescriptor *cd;
+    const SectionID section_header[] = {
+        SECTION_ID_STREAM,
+        SECTION_ID_PROGRAM_STREAM,
+        SECTION_ID_STREAM_GROUP_STREAM,
+    };
+    const SectionID section_disposition[] = {
+        SECTION_ID_STREAM_DISPOSITION,
+        SECTION_ID_PROGRAM_STREAM_DISPOSITION,
+        SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION,
+    };
+    const SectionID section_tags[] = {
+        SECTION_ID_STREAM_TAGS,
+        SECTION_ID_PROGRAM_STREAM_TAGS,
+        SECTION_ID_STREAM_GROUP_STREAM_TAGS,
+    };
     int ret = 0;
     const char *profile = NULL;
 
+    av_assert0(container < FF_ARRAY_ELEMS(section_header));
+
     av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED);
 
-    writer_print_section_header(w, NULL, in_program ? SECTION_ID_PROGRAM_STREAM : SECTION_ID_STREAM);
+    writer_print_section_header(w, NULL, section_header[container]);
 
     print_int("index", stream->index);
 
@@ -3248,13 +3293,14 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
 
     /* Print disposition information */
     if (do_show_stream_disposition) {
-        print_dispositions(w, stream->disposition,
-                           in_program ? SECTION_ID_PROGRAM_STREAM_DISPOSITION
-                                      : SECTION_ID_STREAM_DISPOSITION);
+        av_assert0(container < FF_ARRAY_ELEMS(section_disposition));
+        print_dispositions(w, stream->disposition, section_disposition[container]);
     }
 
-    if (do_show_stream_tags)
-        ret = show_tags(w, stream->metadata, in_program ? SECTION_ID_PROGRAM_STREAM_TAGS : SECTION_ID_STREAM_TAGS);
+    if (do_show_stream_tags) {
+        av_assert0(container < FF_ARRAY_ELEMS(section_tags));
+        ret = show_tags(w, stream->metadata, section_tags[container]);
+    }
 
     if (stream->codecpar->nb_coded_side_data) {
         writer_print_section_header(w, NULL, SECTION_ID_STREAM_SIDE_DATA_LIST);
@@ -3309,7 +3355,7 @@ static int show_program(WriterContext *w, InputFile *ifile, AVProgram *program)
     writer_print_section_header(w, NULL, SECTION_ID_PROGRAM_STREAMS);
     for (i = 0; i < program->nb_stream_indexes; i++) {
         if (selected_streams[program->stream_index[i]]) {
-            ret = show_stream(w, fmt_ctx, program->stream_index[i], &ifile->streams[program->stream_index[i]], 1);
+            ret = show_stream(w, fmt_ctx, program->stream_index[i], &ifile->streams[program->stream_index[i]], IN_PROGRAM);
             if (ret < 0)
                 break;
         }
@@ -3339,6 +3385,72 @@ static int show_programs(WriterContext *w, InputFile *ifile)
     return ret;
 }
 
+static void print_stream_group_params(WriterContext *w, AVStreamGroup *stg)
+{
+    const char *unknown = "unknown";
+    if (stg->type != AV_STREAM_GROUP_PARAMS_NONE)
+        print_str("type", av_x_if_null(avformat_stream_group_name(stg->type), unknown));
+    else
+        print_str_opt("type", unknown);
+}
+
+static int show_stream_group(WriterContext *w, InputFile *ifile, AVStreamGroup *stg)
+{
+    AVFormatContext *fmt_ctx = ifile->fmt_ctx;
+    AVBPrint pbuf;
+    int i, ret = 0;
+
+    av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED);
+    writer_print_section_header(w, stg, SECTION_ID_STREAM_GROUP);
+    print_int("index", stg->index);
+    if (fmt_ctx->iformat->flags & AVFMT_SHOW_IDS) print_fmt    ("id", "0x%"PRIx64, stg->id);
+    else                                          print_str_opt("id", "N/A");
+    print_int("nb_streams", stg->nb_streams);
+    print_stream_group_params(w, stg);
+
+    /* Print disposition information */
+    if (do_show_stream_group_disposition)
+        print_dispositions(w, stg->disposition, SECTION_ID_STREAM_GROUP_DISPOSITION);
+
+    if (do_show_stream_group_tags)
+        ret = show_tags(w, stg->metadata, SECTION_ID_STREAM_GROUP_TAGS);
+    if (ret < 0)
+        goto end;
+
+    writer_print_section_header(w, NULL, SECTION_ID_STREAM_GROUP_STREAMS);
+    for (i = 0; i < stg->nb_streams; i++) {
+        if (selected_streams[stg->streams[i]->index]) {
+            ret = show_stream(w, fmt_ctx, stg->streams[i]->index, &ifile->streams[stg->streams[i]->index], IN_STREAM_GROUP);
+            if (ret < 0)
+                break;
+        }
+    }
+    writer_print_section_footer(w);
+
+end:
+    av_bprint_finalize(&pbuf, NULL);
+    writer_print_section_footer(w);
+    return ret;
+}
+
+static int show_stream_groups(WriterContext *w, InputFile *ifile)
+{
+    AVFormatContext *fmt_ctx = ifile->fmt_ctx;
+    int i, ret = 0;
+
+    writer_print_section_header(w, NULL, SECTION_ID_STREAM_GROUPS);
+    for (i = 0; i < fmt_ctx->nb_stream_groups; i++) {
+        AVStreamGroup *stg = fmt_ctx->stream_groups[i];
+        if (!stg)
+            continue;
+        ret = show_stream_group(w, ifile, stg);
+        if (ret < 0)
+            break;
+    }
+    writer_print_section_footer(w);
+    return ret;
+}
+
 static int show_chapters(WriterContext *w, InputFile *ifile)
 {
     AVFormatContext *fmt_ctx = ifile->fmt_ctx;
@@ -3375,6 +3487,7 @@ static int show_format(WriterContext *w, InputFile *ifile)
     print_str_validate("filename", fmt_ctx->url);
     print_int("nb_streams",       fmt_ctx->nb_streams);
     print_int("nb_programs",      fmt_ctx->nb_programs);
+    print_int("nb_stream_groups", fmt_ctx->nb_stream_groups);
     print_str("format_name",      fmt_ctx->iformat->name);
     if (!do_bitexact) {
         if (fmt_ctx->iformat->long_name) print_str    ("format_long_name", fmt_ctx->iformat->long_name);
@@ -3600,6 +3713,11 @@ static int probe_file(WriterContext *wctx, const char *filename,
         CHECK_END;
     }
 
+    if (do_show_stream_groups) {
+        ret = show_stream_groups(wctx, &ifile);
+        CHECK_END;
+    }
+
     if (do_show_streams) {
         ret = show_streams(wctx, &ifile);
         CHECK_END;
@@ -4098,6 +4216,7 @@ DEFINE_OPT_SHOW_SECTION(pixel_formats,    PIXEL_FORMATS)
 DEFINE_OPT_SHOW_SECTION(program_version,  PROGRAM_VERSION)
 DEFINE_OPT_SHOW_SECTION(streams,          STREAMS)
 DEFINE_OPT_SHOW_SECTION(programs,         PROGRAMS)
+DEFINE_OPT_SHOW_SECTION(stream_groups,    STREAM_GROUPS)
 
 static const OptionDef real_options[] = {
     CMDUTILS_COMMON_OPTIONS
@@ -4128,6 +4247,7 @@ static const OptionDef real_options[] = {
 #endif
     { "show_packets",          OPT_TYPE_FUNC,        0, { .func_arg = &opt_show_packets }, "show packets info" },
     { "show_programs",         OPT_TYPE_FUNC,        0, { .func_arg = &opt_show_programs }, "show programs info" },
+    { "show_stream_groups",    OPT_TYPE_FUNC,        0, { .func_arg = &opt_show_stream_groups }, "show stream groups info" },
     { "show_streams",          OPT_TYPE_FUNC,        0, { .func_arg = &opt_show_streams }, "show streams info" },
     { "show_chapters",         OPT_TYPE_FUNC,        0, { .func_arg = &opt_show_chapters }, "show chapters info" },
     { "count_frames",          OPT_TYPE_BOOL,        0, { &do_count_frames }, "count the number of frames per stream" },
@@ -4212,16 +4332,21 @@ int main(int argc, char **argv)
     SET_DO_SHOW(PIXEL_FORMAT_COMPONENTS, pixel_format_components);
     SET_DO_SHOW(PROGRAM_VERSION, program_version);
     SET_DO_SHOW(PROGRAMS, programs);
+    SET_DO_SHOW(STREAM_GROUP_DISPOSITION, stream_group_disposition);
+    SET_DO_SHOW(STREAM_GROUPS, stream_groups);
     SET_DO_SHOW(STREAMS, streams);
     SET_DO_SHOW(STREAM_DISPOSITION, stream_disposition);
     SET_DO_SHOW(PROGRAM_STREAM_DISPOSITION, stream_disposition);
+    SET_DO_SHOW(STREAM_GROUP_STREAM_DISPOSITION, stream_disposition);
 
     SET_DO_SHOW(CHAPTER_TAGS, chapter_tags);
     SET_DO_SHOW(FORMAT_TAGS, format_tags);
     SET_DO_SHOW(FRAME_TAGS, frame_tags);
     SET_DO_SHOW(PROGRAM_TAGS, program_tags);
+    SET_DO_SHOW(STREAM_GROUP_TAGS, stream_group_tags);
     SET_DO_SHOW(STREAM_TAGS, stream_tags);
     SET_DO_SHOW(PROGRAM_STREAM_TAGS, stream_tags);
+    SET_DO_SHOW(STREAM_GROUP_STREAM_TAGS, stream_tags);
     SET_DO_SHOW(PACKET_TAGS, packet_tags);
 
     if (do_bitexact && (do_show_program_version || do_show_library_versions)) {
@@ -4286,7 +4411,7 @@ int main(int argc, char **argv)
             ffprobe_show_pixel_formats(wctx);
 
         if (!input_filename &&
-            ((do_show_format || do_show_programs || do_show_streams || do_show_chapters || do_show_packets || do_show_error) ||
+            ((do_show_format || do_show_programs || do_show_stream_groups || do_show_streams || do_show_chapters || do_show_packets || do_show_error) ||
              (!do_show_program_version && !do_show_library_versions && !do_show_pixel_formats))) {
             show_usage();
             av_log(NULL, AV_LOG_ERROR, "You have to specify one input file.\n");
diff --git a/tests/ref/fate/cavs-demux b/tests/ref/fate/cavs-demux
index 000b32ab05..016e40e782 100644
--- a/tests/ref/fate/cavs-demux
+++ b/tests/ref/fate/cavs-demux
@@ -59,4 +59,4 @@ packet|codec_type=video|stream_index=0|pts=2320000|pts_time=1.933333|dts=2320000
 packet|codec_type=video|stream_index=0|pts=2360000|pts_time=1.966667|dts=2360000|dts_time=1.966667|duration=40000|duration_time=0.033333|size=83|pos=172252|flags=K__|data_hash=CRC32:a941bdf0
 packet|codec_type=video|stream_index=0|pts=2400000|pts_time=2.000000|dts=2400000|dts_time=2.000000|duration=40000|duration_time=0.033333|size=5417|pos=172335|flags=K__|data_hash=CRC32:9d0d503b
 stream|index=0|codec_name=cavs|profile=unknown|codec_type=video|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|width=1280|height=720|coded_width=1280|coded_height=720|closed_captions=0|film_grain=0|has_b_frames=0|sample_aspect_ratio=N/A|display_aspect_ratio=N/A|pix_fmt=yuv420p|level=-99|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=unspecified|field_order=unknown|refs=1|id=N/A|r_frame_rate=30/1|avg_frame_rate=25/1|time_base=1/1200000|start_pts=N/A|start_time=N/A|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=60|extradata_size=18|extradata_hash=CRC32:1255d52e|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0
-format|filename=bunny.mp4|nb_streams=1|nb_programs=0|format_name=cavsvideo|start_time=N/A|duration=N/A|size=177752|bit_rate=N/A|probe_score=51
+format|filename=bunny.mp4|nb_streams=1|nb_programs=0|nb_stream_groups=0|format_name=cavsvideo|start_time=N/A|duration=N/A|size=177752|bit_rate=N/A|probe_score=51
diff --git a/tests/ref/fate/ffprobe_compact b/tests/ref/fate/ffprobe_compact
index dfcd7d3f3c..5f807818d9 100644
--- a/tests/ref/fate/ffprobe_compact
+++ b/tests/ref/fate/ffprobe_compact
@@ -29,4 +29,4 @@ frame|media_type=video|stream_index=2|key_frame=1|pts=6144|pts_time=0.120000|pkt
 stream|index=0|codec_name=pcm_s16le|profile=unknown|codec_type=audio|codec_tag_string=PSD[16]|codec_tag=0x10445350|sample_fmt=s16|sample_rate=44100|channels=1|channel_layout=unknown|bits_per_sample=16|initial_padding=0|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/44100|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=705600|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=6|nb_read_packets=6|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|tag:E=mc²|tag:encoder=Lavc pcm_s16le
 stream|index=1|codec_name=rawvideo|profile=unknown|codec_type=video|codec_tag_string=RGB[24]|codec_tag=0x18424752|width=320|height=240|coded_width=320|coded_height=240|closed_captions=0|film_grain=0|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=4:3|pix_fmt=rgb24|level=-99|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=unspecified|field_order=unknown|refs=1|id=N/A|r_frame_rate=25/1|avg_frame_rate=25/1|time_base=1/51200|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=4|nb_read_packets=4|disposition:default=1|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|tag:title=foobar|tag:duration_ts=field-and-tags-conflict-attempt|tag:encoder=Lavc rawvideo
 stream|index=2|codec_name=rawvideo|profile=unknown|codec_type=video|codec_tag_string=RGB[24]|codec_tag=0x18424752|width=100|height=100|coded_width=100|coded_height=100|closed_captions=0|film_grain=0|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=1:1|pix_fmt=rgb24|level=-99|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=unspecified|field_order=unknown|refs=1|id=N/A|r_frame_rate=25/1|avg_frame_rate=25/1|time_base=1/51200|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=4|nb_read_packets=4|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|tag:encoder=Lavc rawvideo
-format|filename=tests/data/ffprobe-test.nut|nb_streams=3|nb_programs=0|format_name=nut|start_time=0.000000|duration=0.120000|size=1053646|bit_rate=70243066|probe_score=100|tag:title=ffprobe test file|tag:comment='A comment with CSV, XML & JSON special chars': <tag value="x">|tag:comment2=I ♥ Üñîçød€
+format|filename=tests/data/ffprobe-test.nut|nb_streams=3|nb_programs=0|nb_stream_groups=0|format_name=nut|start_time=0.000000|duration=0.120000|size=1053646|bit_rate=70243066|probe_score=100|tag:title=ffprobe test file|tag:comment='A comment with CSV, XML & JSON special chars': <tag value="x">|tag:comment2=I ♥ Üñîçød€
diff --git a/tests/ref/fate/ffprobe_csv b/tests/ref/fate/ffprobe_csv
index 677b352dfd..3a7a4240d8 100644
--- a/tests/ref/fate/ffprobe_csv
+++ b/tests/ref/fate/ffprobe_csv
@@ -29,4 +29,4 @@ frame,video,2,1,6144,0.120000,6144,0.120000,6144,0.120000,2048,0.040000,2048,0.0
 stream,0,pcm_s16le,unknown,audio,PSD[16],0x10445350,s16,44100,1,unknown,16,0,N/A,0/0,0/0,1/44100,0,0.000000,N/A,N/A,705600,N/A,N/A,N/A,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,mc²,Lavc pcm_s16le
 stream,1,rawvideo,unknown,video,RGB[24],0x18424752,320,240,320,240,0,0,0,1:1,4:3,rgb24,-99,unknown,unknown,unknown,unknown,unspecified,unknown,1,N/A,25/1,25/1,1/51200,0,0.000000,N/A,N/A,N/A,N/A,N/A,N/A,4,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,foobar,field-and-tags-conflict-attempt,Lavc rawvideo
 stream,2,rawvideo,unknown,video,RGB[24],0x18424752,100,100,100,100,0,0,0,1:1,1:1,rgb24,-99,unknown,unknown,unknown,unknown,unspecified,unknown,1,N/A,25/1,25/1,1/51200,0,0.000000,N/A,N/A,N/A,N/A,N/A,N/A,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,Lavc rawvideo
-format,tests/data/ffprobe-test.nut,3,0,nut,0.000000,0.120000,1053646,70243066,100,ffprobe test file,"'A comment with CSV, XML & JSON special chars': <tag value=""x"">",I ♥ Üñîçød€
+format,tests/data/ffprobe-test.nut,3,0,0,nut,0.000000,0.120000,1053646,70243066,100,ffprobe test file,"'A comment with CSV, XML & JSON special chars': <tag value=""x"">",I ♥ Üñîçød€
diff --git a/tests/ref/fate/ffprobe_default b/tests/ref/fate/ffprobe_default
index 954725b91b..12bb069ba3 100644
--- a/tests/ref/fate/ffprobe_default
+++ b/tests/ref/fate/ffprobe_default
@@ -766,6 +766,7 @@ TAG:encoder=Lavc rawvideo
 filename=tests/data/ffprobe-test.nut
 nb_streams=3
 nb_programs=0
+nb_stream_groups=0
 format_name=nut
 start_time=0.000000
 duration=0.120000
diff --git a/tests/ref/fate/ffprobe_flat b/tests/ref/fate/ffprobe_flat
index cea6039307..a577dc6678 100644
--- a/tests/ref/fate/ffprobe_flat
+++ b/tests/ref/fate/ffprobe_flat
@@ -703,6 +703,7 @@ streams.stream.2.tags.encoder="Lavc rawvideo"
 format.filename="tests/data/ffprobe-test.nut"
 format.nb_streams=3
 format.nb_programs=0
+format.nb_stream_groups=0
 format.format_name="nut"
 format.start_time="0.000000"
 format.duration="0.120000"
diff --git a/tests/ref/fate/ffprobe_ini b/tests/ref/fate/ffprobe_ini
index 497154ee7e..80885903c3 100644
--- a/tests/ref/fate/ffprobe_ini
+++ b/tests/ref/fate/ffprobe_ini
@@ -780,6 +780,7 @@ encoder=Lavc rawvideo
 filename=tests/data/ffprobe-test.nut
 nb_streams=3
 nb_programs=0
+nb_stream_groups=0
 format_name=nut
 start_time=0.000000
 duration=0.120000
diff --git a/tests/ref/fate/ffprobe_json b/tests/ref/fate/ffprobe_json
index fe392fb47a..974b8dc900 100644
--- a/tests/ref/fate/ffprobe_json
+++ b/tests/ref/fate/ffprobe_json
@@ -729,6 +729,7 @@
         "filename": "tests/data/ffprobe-test.nut",
         "nb_streams": 3,
         "nb_programs": 0,
+        "nb_stream_groups": 0,
         "format_name": "nut",
         "start_time": "0.000000",
         "duration": "0.120000",
diff --git a/tests/ref/fate/ffprobe_xml b/tests/ref/fate/ffprobe_xml
index 038dd36372..f4e07ba8d5 100644
--- a/tests/ref/fate/ffprobe_xml
+++ b/tests/ref/fate/ffprobe_xml
@@ -55,7 +55,7 @@
         </stream>
     </streams>
 
-    <format filename="tests/data/ffprobe-test.nut" nb_streams="3" nb_programs="0" format_name="nut" start_time="0.000000" duration="0.120000" size="1053646" bit_rate="70243066" probe_score="100">
+    <format filename="tests/data/ffprobe-test.nut" nb_streams="3" nb_programs="0" nb_stream_groups="0" format_name="nut" start_time="0.000000" duration="0.120000" size="1053646" bit_rate="70243066" probe_score="100">
         <tags>
             <tag key="title" value="ffprobe test file"/>
             <tag key="comment" value="'A comment with CSV, XML &amp; JSON special chars': &lt;tag value=&quot;x&quot;&gt;"/>
diff --git a/tests/ref/fate/ffprobe_xsd b/tests/ref/fate/ffprobe_xsd
index 7ecaaa4ec0..5dd45ff956 100644
--- a/tests/ref/fate/ffprobe_xsd
+++ b/tests/ref/fate/ffprobe_xsd
@@ -55,7 +55,7 @@
         </stream>
     </streams>
 
-    <format filename="tests/data/ffprobe-test.nut" nb_streams="3" nb_programs="0" format_name="nut" start_time="0.000000" duration="0.120000" size="1053646" bit_rate="70243066" probe_score="100">
+    <format filename="tests/data/ffprobe-test.nut" nb_streams="3" nb_programs="0" nb_stream_groups="0" format_name="nut" start_time="0.000000" duration="0.120000" size="1053646" bit_rate="70243066" probe_score="100">
         <tags>
             <tag key="title" value="ffprobe test file"/>
             <tag key="comment" value="'A comment with CSV, XML &amp; JSON special chars': &lt;tag value=&quot;x&quot;&gt;"/>
diff --git a/tests/ref/fate/flv-demux b/tests/ref/fate/flv-demux
index fd85b7a0f5..a9cbcc46e0 100644
--- a/tests/ref/fate/flv-demux
+++ b/tests/ref/fate/flv-demux
@@ -603,4 +603,4 @@ packet|codec_type=audio|stream_index=1|pts=11656|pts_time=11.656000|dts=11656|dt
 packet|codec_type=video|stream_index=0|pts=11678|pts_time=11.678000|dts=11678|dts_time=11.678000|duration=33|duration_time=0.033000|size=1190|pos=510794|flags=__C|data_hash=CRC32:a0206c90
 stream|index=0|codec_name=h264|profile=77|codec_type=video|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|width=426|height=240|coded_width=426|coded_height=240|closed_captions=0|film_grain=0|has_b_frames=1|sample_aspect_ratio=1:1|display_aspect_ratio=71:40|pix_fmt=yuv420p|level=21|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=left|field_order=progressive|refs=1|is_avc=true|nal_length_size=4|missing_streams=0|id=N/A|r_frame_rate=30000/1001|avg_frame_rate=30/1|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=393929|max_bit_rate=N/A|bits_per_raw_sample=8|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=351|extradata_size=39|extradata_hash=CRC32:07b85ca9|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0
 stream|index=1|codec_name=aac|profile=1|codec_type=audio|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|sample_fmt=fltp|sample_rate=22050|channels=2|channel_layout=stereo|bits_per_sample=0|initial_padding=0|missing_streams=0|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/1000|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=67874|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=252|extradata_size=2|extradata_hash=CRC32:d039c029|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0
-format|filename=Enigma_Principles_of_Lust-part.flv|nb_streams=2|nb_programs=0|format_name=flv|start_time=0.000000|duration=210.209999|size=512000|bit_rate=19485|probe_score=100|tag:hasKeyframes=true|tag:hasMetadata=true|tag:datasize=11970544|tag:hasVideo=true|tag:canSeekToEnd=false|tag:lasttimestamp=210|tag:lastkeyframetimestamp=210|tag:audiosize=1791332|tag:hasAudio=true|tag:audiodelay=0|tag:videosize=10176110|tag:metadatadate=2011-02-27T11:00:33.125000Z|tag:metadatacreator=inlet media FLVTool2 v1.0.6 - http://www.inlet-media.de/flvtool2|tag:hasCuePoints=false
+format|filename=Enigma_Principles_of_Lust-part.flv|nb_streams=2|nb_programs=0|nb_stream_groups=0|format_name=flv|start_time=0.000000|duration=210.209999|size=512000|bit_rate=19485|probe_score=100|tag:hasKeyframes=true|tag:hasMetadata=true|tag:datasize=11970544|tag:hasVideo=true|tag:canSeekToEnd=false|tag:lasttimestamp=210|tag:lastkeyframetimestamp=210|tag:audiosize=1791332|tag:hasAudio=true|tag:audiodelay=0|tag:videosize=10176110|tag:metadatadate=2011-02-27T11:00:33.125000Z|tag:metadatacreator=inlet media FLVTool2 v1.0.6 - http://www.inlet-media.de/flvtool2|tag:hasCuePoints=false
diff --git a/tests/ref/fate/gapless-mp3-side-data b/tests/ref/fate/gapless-mp3-side-data
index f013650ec1..87a99661f9 100644
--- a/tests/ref/fate/gapless-mp3-side-data
+++ b/tests/ref/fate/gapless-mp3-side-data
@@ -594,4 +594,4 @@ packet|codec_type=audio|stream_index=0|pts=218234880|pts_time=15.464490|dts=2182
 packet|codec_type=audio|stream_index=0|pts=218603520|pts_time=15.490612|dts=218603520|dts_time=15.490612|duration=368640|duration_time=0.026122|size=418|pos=249300|flags=K__|data_hash=CRC32:d5fb5f9c|side_datum/skip_samples:side_data_type=Skip Samples|side_datum/skip_samples:skip_samples=0|side_datum/skip_samples:discard_padding=303|side_datum/skip_samples:skip_reason=0|side_datum/skip_samples:discard_reason=0
 packet|codec_type=audio|stream_index=0|pts=218972160|pts_time=15.516735|dts=218972160|dts_time=15.516735|duration=368640|duration_time=0.026122|size=418|pos=249718|flags=K__|data_hash=CRC32:3789f3cf|side_datum/skip_samples:side_data_type=Skip Samples|side_datum/skip_samples:skip_samples=0|side_datum/skip_samples:discard_padding=1152|side_datum/skip_samples:skip_reason=0|side_datum/skip_samples:discard_reason=0
 stream|index=0|codec_name=mp3|profile=unknown|codec_type=audio|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|sample_fmt=fltp|sample_rate=44100|channels=2|channel_layout=stereo|bits_per_sample=0|initial_padding=0|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/14112000|start_pts=353600|start_time=0.025057|duration_ts=219340800|duration=15.542857|bit_rate=128000|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=595|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|tag:encoder=LAME3.93
-format|filename=gapless.mp3|nb_streams=1|nb_programs=0|format_name=mp3|start_time=0.025057|duration=15.542857|size=250264|bit_rate=128812|probe_score=51|tag:title=test
+format|filename=gapless.mp3|nb_streams=1|nb_programs=0|nb_stream_groups=0|format_name=mp3|start_time=0.025057|duration=15.542857|size=250264|bit_rate=128812|probe_score=51|tag:title=test
diff --git a/tests/ref/fate/mov-mp4-disposition-mpegts-remux b/tests/ref/fate/mov-mp4-disposition-mpegts-remux
index ea5a11d73c..3d103c98cf 100644
--- a/tests/ref/fate/mov-mp4-disposition-mpegts-remux
+++ b/tests/ref/fate/mov-mp4-disposition-mpegts-remux
@@ -19,6 +19,9 @@ adb3b95c07a5f3e0c86641dd62f01dae *tests/data/fate/mov-mp4-disposition-mpegts-rem
 {
     "programs": [
 
+    ],
+    "stream_groups": [
+
     ],
     "streams": [
         {
diff --git a/tests/ref/fate/mov-mp4-ttml-dfxp b/tests/ref/fate/mov-mp4-ttml-dfxp
index 2d60f3d964..b019b3f6cc 100644
--- a/tests/ref/fate/mov-mp4-ttml-dfxp
+++ b/tests/ref/fate/mov-mp4-ttml-dfxp
@@ -22,6 +22,9 @@
     ],
     "programs": [
 
+    ],
+    "stream_groups": [
+
     ],
     "streams": [
         {
diff --git a/tests/ref/fate/mov-mp4-ttml-stpp b/tests/ref/fate/mov-mp4-ttml-stpp
index 0a8e423449..827296253e 100644
--- a/tests/ref/fate/mov-mp4-ttml-stpp
+++ b/tests/ref/fate/mov-mp4-ttml-stpp
@@ -23,6 +23,9 @@ cbd2c7ff864a663b0d893deac5a0caec *tests/data/fate/mov-mp4-ttml-stpp.mp4
     ],
     "programs": [
 
+    ],
+    "stream_groups": [
+
     ],
     "streams": [
         {
diff --git a/tests/ref/fate/oggopus-demux b/tests/ref/fate/oggopus-demux
index baf81a7f50..05cdd94f43 100644
--- a/tests/ref/fate/oggopus-demux
+++ b/tests/ref/fate/oggopus-demux
@@ -40,4 +40,4 @@ packet|codec_type=audio|stream_index=0|pts=36124|pts_time=0.752583|dts=36124|dts
 packet|codec_type=audio|stream_index=0|pts=37084|pts_time=0.772583|dts=37084|dts_time=0.772583|duration=960|duration_time=0.020000|size=217|pos=841|flags=K__|data_hash=CRC32:06797ece
 packet|codec_type=audio|stream_index=0|pts=38044|pts_time=0.792583|dts=38044|dts_time=0.792583|duration=356|duration_time=0.007417|size=359|pos=841|flags=K__|data_hash=CRC32:01ca3f8f|side_datum/skip_samples:side_data_type=Skip Samples|side_datum/skip_samples:skip_samples=0|side_datum/skip_samples:discard_padding=604|side_datum/skip_samples:skip_reason=0|side_datum/skip_samples:discard_reason=0
 stream|index=0|codec_name=opus|profile=unknown|codec_type=audio|codec_tag_string=[0][0][0][0]|codec_tag=0x0000|sample_fmt=fltp|sample_rate=48000|channels=2|channel_layout=stereo|bits_per_sample=0|initial_padding=356|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/48000|start_pts=0|start_time=0.000000|duration_ts=38756|duration=0.807417|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=41|extradata_size=19|extradata_hash=CRC32:58ba5ff3|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|tag:ENCODER=opusenc from opus-tools 0.1.9|tag:ENCODER_OPTIONS=--discard-comments
-format|filename=intro-partial.opus|nb_streams=1|nb_programs=0|format_name=ogg|start_time=0.000000|duration=0.807417|size=10250|bit_rate=101558|probe_score=100
+format|filename=intro-partial.opus|nb_streams=1|nb_programs=0|nb_stream_groups=0|format_name=ogg|start_time=0.000000|duration=0.807417|size=10250|bit_rate=101558|probe_score=100
diff --git a/tests/ref/fate/ts-demux b/tests/ref/fate/ts-demux
index b01f525c38..ec4aeb2034 100644
--- a/tests/ref/fate/ts-demux
+++ b/tests/ref/fate/ts-demux
@@ -26,4 +26,4 @@ packet|codec_type=audio|stream_index=2|pts=3912645580|pts_time=43473.839778|dts=
 stream|index=0|codec_name=mpeg2video|profile=4|codec_type=video|codec_tag_string=[2][0][0][0]|codec_tag=0x0002|width=1280|height=720|coded_width=0|coded_height=0|closed_captions=0|film_grain=0|has_b_frames=1|sample_aspect_ratio=1:1|display_aspect_ratio=16:9|pix_fmt=yuv420p|level=4|color_range=tv|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=left|field_order=progressive|refs=1|ts_id=32776|ts_packetsize=188|id=0x31|r_frame_rate=60000/1001|avg_frame_rate=60000/1001|time_base=1/90000|start_pts=3912669846|start_time=43474.109400|duration_ts=19519|duration=0.216878|bit_rate=15000000|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=15|extradata_size=150|extradata_hash=CRC32:53134fa8|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|side_datum/cpb_properties:side_data_type=CPB properties|side_datum/cpb_properties:max_bitrate=15000000|side_datum/cpb_properties:min_bitrate=0|side_datum/cpb_properties:avg_bitrate=0|side_datum/cpb_properties:buffer_size=9781248|side_datum/cpb_properties:vbv_delay=-1
 stream|index=1|codec_name=ac3|profile=unknown|codec_type=audio|codec_tag_string=[4][0][0][0]|codec_tag=0x0004|sample_fmt=fltp|sample_rate=48000|channels=6|channel_layout=5.1(side)|bits_per_sample=0|initial_padding=0|ts_id=32776|ts_packetsize=188|id=0x34|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/90000|start_pts=3912633305|start_time=43473.703389|duration_ts=14400|duration=0.160000|bit_rate=384000|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=5|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|tag:language=eng
 stream|index=2|codec_name=ac3|profile=unknown|codec_type=audio|codec_tag_string=[4][0][0][0]|codec_tag=0x0004|sample_fmt=fltp|sample_rate=48000|channels=2|channel_layout=stereo|bits_per_sample=0|initial_padding=0|ts_id=32776|ts_packetsize=188|id=0x35|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/90000|start_pts=3912634060|start_time=43473.711778|duration_ts=14400|duration=0.160000|bit_rate=192000|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=5|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|tag:language=es
-format|filename=mp3ac325-4864-small.ts|nb_streams=3|nb_programs=1|format_name=mpegts|start_time=43473.703389|duration=0.622889|size=512000|bit_rate=6575810|probe_score=50
+format|filename=mp3ac325-4864-small.ts|nb_streams=3|nb_programs=1|nb_stream_groups=0|format_name=mpegts|start_time=43473.703389|duration=0.622889|size=512000|bit_rate=6575810|probe_score=50
diff --git a/tests/ref/fate/ts-opus-demux b/tests/ref/fate/ts-opus-demux
index 3d14082ce5..961b7f2a92 100644
--- a/tests/ref/fate/ts-opus-demux
+++ b/tests/ref/fate/ts-opus-demux
@@ -511,4 +511,4 @@ packet|codec_type=audio|stream_index=0|pts=916200|pts_time=10.180000|dts=916200|
 packet|codec_type=audio|stream_index=0|pts=918000|pts_time=10.200000|dts=918000|dts_time=10.200000|duration=1800|duration_time=0.020000|size=761|pos=510044|flags=K__|data_hash=CRC32:75113c11|side_datum/mpegts_stream_id:side_data_type=MPEGTS Stream ID|side_datum/mpegts_stream_id:id=189
 packet|codec_type=audio|stream_index=0|pts=919800|pts_time=10.220000|dts=919800|dts_time=10.220000|duration=1800|duration_time=0.020000|size=759|pos=510984|flags=K__|data_hash=CRC32:59fc266f|side_datum/mpegts_stream_id:side_data_type=MPEGTS Stream ID|side_datum/mpegts_stream_id:id=189
 stream|index=0|codec_name=opus|profile=unknown|codec_type=audio|codec_tag_string=Opus|codec_tag=0x7375704f|sample_fmt=fltp|sample_rate=48000|channels=8|channel_layout=7.1|bits_per_sample=0|initial_padding=0|ts_id=51338|ts_packetsize=188|id=0x44|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/90000|start_pts=0|start_time=0.000000|duration_ts=919800|duration=10.220000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=512|extradata_size=29|extradata_hash=CRC32:6d6089a7|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0
-format|filename=test-8-7.1.opus-small.ts|nb_streams=1|nb_programs=1|format_name=mpegts|start_time=0.000000|duration=10.220000|size=512000|bit_rate=400782|probe_score=50
+format|filename=test-8-7.1.opus-small.ts|nb_streams=1|nb_programs=1|nb_stream_groups=0|format_name=mpegts|start_time=0.000000|duration=10.220000|size=512000|bit_rate=400782|probe_score=50
diff --git a/tests/ref/fate/ts-small-demux b/tests/ref/fate/ts-small-demux
index eb37440c0f..233f73393e 100644
--- a/tests/ref/fate/ts-small-demux
+++ b/tests/ref/fate/ts-small-demux
@@ -73,4 +73,4 @@ packet|codec_type=video|stream_index=0|pts=552000|pts_time=6.133333|dts=552000|d
 packet|codec_type=video|stream_index=0|pts=558000|pts_time=6.200000|dts=558000|dts_time=6.200000|duration=6000|duration_time=0.066667|size=16|pos=15792|flags=___|data_hash=CRC32:27b943ef|side_datum/mpegts_stream_id:side_data_type=MPEGTS Stream ID|side_datum/mpegts_stream_id:id=224
 packet|codec_type=video|stream_index=0|pts=564000|pts_time=6.266667|dts=564000|dts_time=6.266667|duration=6000|duration_time=0.066667|size=16|pos=16356|flags=___|data_hash=CRC32:f7116111
 stream|index=0|codec_name=h264|profile=578|codec_type=video|codec_tag_string=[27][0][0][0]|codec_tag=0x001b|width=82|height=144|coded_width=82|coded_height=144|closed_captions=0|film_grain=0|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=41:72|pix_fmt=yuv420p|level=10|color_range=unknown|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=left|field_order=progressive|refs=1|is_avc=false|nal_length_size=0|ts_id=1|ts_packetsize=188|id=0x100|r_frame_rate=15/1|avg_frame_rate=15/1|time_base=1/90000|start_pts=126000|start_time=1.400000|duration_ts=444000|duration=4.933333|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=8|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=74|extradata_size=35|extradata_hash=CRC32:e62cae27|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0
-format|filename=h264small.ts|nb_streams=1|nb_programs=1|format_name=mpegts|start_time=1.400000|duration=4.933333|size=16544|bit_rate=26828|probe_score=50
+format|filename=h264small.ts|nb_streams=1|nb_programs=1|nb_stream_groups=0|format_name=mpegts|start_time=1.400000|duration=4.933333|size=16544|bit_rate=26828|probe_score=50
diff --git a/tests/ref/fate/ts-timed-id3-demux b/tests/ref/fate/ts-timed-id3-demux
index 3c3372da26..938b5326e4 100644
--- a/tests/ref/fate/ts-timed-id3-demux
+++ b/tests/ref/fate/ts-timed-id3-demux
@@ -1,4 +1,4 @@
 packet|codec_type=data|stream_index=0|pts=126000|pts_time=1.400000|dts=126000|dts_time=1.400000|duration=N/A|duration_time=N/A|size=26|pos=564|flags=K__|data_hash=CRC32:469f474b|side_datum/mpegts_stream_id:side_data_type=MPEGTS Stream ID|side_datum/mpegts_stream_id:id=189
 packet|codec_type=data|stream_index=0|pts=577350|pts_time=6.415000|dts=577350|dts_time=6.415000|duration=N/A|duration_time=N/A|size=26|pos=1316|flags=K__|data_hash=CRC32:469f474b|side_datum/mpegts_stream_id:side_data_type=MPEGTS Stream ID|side_datum/mpegts_stream_id:id=189
 stream|index=0|codec_name=timed_id3|profile=unknown|codec_type=data|codec_tag_string=ID3 |codec_tag=0x20334449|ts_id=1|ts_packetsize=188|id=0x100|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/90000|start_pts=126000|start_time=1.400000|duration_ts=451350|duration=5.015000|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=2|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0
-format|filename=id3.ts|nb_streams=1|nb_programs=1|format_name=mpegts|start_time=1.400000|duration=5.015000|size=1504|bit_rate=2399|probe_score=2
+format|filename=id3.ts|nb_streams=1|nb_programs=1|nb_stream_groups=0|format_name=mpegts|start_time=1.400000|duration=5.015000|size=1504|bit_rate=2399|probe_score=2
-- 
2.44.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [FFmpeg-devel] [PATCH 4/9 v2] fate/iamf: print stream group information
  2024-03-05  0:00 [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces James Almer
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 2/9] avformat/avformat: add a function to return the name of stream groups James Almer
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 3/9 v3] fftools/ffprobe: add support for Stream Groups James Almer
@ 2024-03-05  0:00 ` James Almer
  2024-03-05 15:10   ` Stefano Sabatini
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 5/9 v2] fate/mov: print stream group information for iamf tests James Almer
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 22+ messages in thread
From: James Almer @ 2024-03-05  0:00 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
 tests/fate/iamf.mak             |  8 ++--
 tests/ref/fate/iamf-5_1_4       | 60 +++++++++++++++++++++++++++++
 tests/ref/fate/iamf-7_1_4       | 68 +++++++++++++++++++++++++++++++++
 tests/ref/fate/iamf-ambisonic_1 | 44 +++++++++++++++++++++
 tests/ref/fate/iamf-stereo      | 20 ++++++++++
 5 files changed, 196 insertions(+), 4 deletions(-)

diff --git a/tests/fate/iamf.mak b/tests/fate/iamf.mak
index 8b0de7f4b2..2257580871 100644
--- a/tests/fate/iamf.mak
+++ b/tests/fate/iamf.mak
@@ -4,7 +4,7 @@ fate-iamf-stereo: SRC = $(TARGET_PATH)/tests/data/asynth-44100-2.wav
 fate-iamf-stereo: CMD = transcode wav $(SRC) iamf " \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/audio_element-stereo \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/mix_presentation-stereo \
-  -streamid 0:0 -c:a flac -t 1" "-c:a copy -map 0"
+  -streamid 0:0 -c:a flac -t 1" "-c:a copy -map 0" "-show_entries stream_group=index,id,nb_streams,type:stream_group_stream=index,id"
 
 FATE_IAMF += fate-iamf-5_1_4
 fate-iamf-5_1_4: tests/data/asynth-44100-10.wav tests/data/filtergraphs/iamf_5_1_4 tests/data/streamgroups/audio_element-5_1_4 tests/data/streamgroups/mix_presentation-5_1_4
@@ -13,7 +13,7 @@ fate-iamf-5_1_4: CMD = transcode wav $(SRC) iamf "-auto_conversion_filters \
   -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/iamf_5_1_4 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/audio_element-5_1_4 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/mix_presentation-5_1_4 \
-  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -streamid 4:4 -streamid 5:5 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [TOP_FRONT] -map [TOP_BACK] -c:a flac -t 1" "-c:a copy -map 0"
+  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -streamid 4:4 -streamid 5:5 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [TOP_FRONT] -map [TOP_BACK] -c:a flac -t 1" "-c:a copy -map 0" "-show_entries stream_group=index,id,nb_streams,type:stream_group_stream=index,id"
 
 FATE_IAMF += fate-iamf-7_1_4
 fate-iamf-7_1_4: tests/data/asynth-44100-12.wav tests/data/filtergraphs/iamf_7_1_4 tests/data/streamgroups/audio_element-7_1_4 tests/data/streamgroups/mix_presentation-7_1_4
@@ -22,7 +22,7 @@ fate-iamf-7_1_4: CMD = transcode wav $(SRC) iamf "-auto_conversion_filters \
   -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/iamf_7_1_4 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/audio_element-7_1_4 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/mix_presentation-7_1_4 \
-  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -streamid 4:4 -streamid 5:5 -streamid 6:6 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [SIDE] -map [TOP_FRONT] -map [TOP_BACK] -c:a flac -t 1" "-c:a copy -map 0"
+  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -streamid 4:4 -streamid 5:5 -streamid 6:6 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [SIDE] -map [TOP_FRONT] -map [TOP_BACK] -c:a flac -t 1" "-c:a copy -map 0" "-show_entries stream_group=index,id,nb_streams,type:stream_group_stream=index,id"
 
 FATE_IAMF += fate-iamf-ambisonic_1
 fate-iamf-ambisonic_1: tests/data/asynth-44100-4.wav tests/data/filtergraphs/iamf_ambisonic_1 tests/data/streamgroups/audio_element-ambisonic_1 tests/data/streamgroups/mix_presentation-ambisonic_1
@@ -31,7 +31,7 @@ fate-iamf-ambisonic_1: CMD = transcode wav $(SRC) iamf "-auto_conversion_filters
   -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/iamf_ambisonic_1 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/audio_element-ambisonic_1 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/mix_presentation-ambisonic_1 \
-  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -map [MONO0] -map [MONO1] -map [MONO2] -map [MONO3] -c:a flac -t 1" "-c:a copy -map 0"
+  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -map [MONO0] -map [MONO1] -map [MONO2] -map [MONO3] -c:a flac -t 1" "-c:a copy -map 0" "-show_entries stream_group=index,id,nb_streams,type:stream_group_stream=index,id"
 
 FATE_IAMF-$(call TRANSCODE, FLAC, IAMF, WAV_DEMUXER PCM_S16LE_DECODER) += $(FATE_IAMF)
 
diff --git a/tests/ref/fate/iamf-5_1_4 b/tests/ref/fate/iamf-5_1_4
index e6eb356ff0..daa9653006 100644
--- a/tests/ref/fate/iamf-5_1_4
+++ b/tests/ref/fate/iamf-5_1_4
@@ -96,3 +96,63 @@ c447cbbc8943cfb751fdf1145a094250 *tests/data/fate/iamf-5_1_4.iamf
 3,      41472,      41472,     4608,      923, 0xa7225edf
 4,      41472,      41472,     4608,      926, 0xc26a5eae
 5,      41472,      41472,     4608,      926, 0xc26a5eae
+[STREAM_GROUP]
+index=0
+id=0x1
+nb_streams=6
+type=IAMF Audio Element
+[STREAM]
+index=0
+id=0x0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+[/STREAM]
+[STREAM]
+index=4
+id=0x4
+[/STREAM]
+[STREAM]
+index=5
+id=0x5
+[/STREAM]
+[/STREAM_GROUP]
+[STREAM_GROUP]
+index=1
+id=0x2
+nb_streams=6
+type=IAMF Mix Presentation
+[STREAM]
+index=0
+id=0x0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+[/STREAM]
+[STREAM]
+index=4
+id=0x4
+[/STREAM]
+[STREAM]
+index=5
+id=0x5
+[/STREAM]
+[/STREAM_GROUP]
diff --git a/tests/ref/fate/iamf-7_1_4 b/tests/ref/fate/iamf-7_1_4
index c176f4a1cd..6b677c697a 100644
--- a/tests/ref/fate/iamf-7_1_4
+++ b/tests/ref/fate/iamf-7_1_4
@@ -112,3 +112,71 @@
 4,      41472,      41472,     4608,      926, 0xc26a5eae
 5,      41472,      41472,     4608,      926, 0xc26a5eae
 6,      41472,      41472,     4608,      926, 0xc26a5eae
+[STREAM_GROUP]
+index=0
+id=0x1
+nb_streams=7
+type=IAMF Audio Element
+[STREAM]
+index=0
+id=0x0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+[/STREAM]
+[STREAM]
+index=4
+id=0x4
+[/STREAM]
+[STREAM]
+index=5
+id=0x5
+[/STREAM]
+[STREAM]
+index=6
+id=0x6
+[/STREAM]
+[/STREAM_GROUP]
+[STREAM_GROUP]
+index=1
+id=0x2
+nb_streams=7
+type=IAMF Mix Presentation
+[STREAM]
+index=0
+id=0x0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+[/STREAM]
+[STREAM]
+index=4
+id=0x4
+[/STREAM]
+[STREAM]
+index=5
+id=0x5
+[/STREAM]
+[STREAM]
+index=6
+id=0x6
+[/STREAM]
+[/STREAM_GROUP]
diff --git a/tests/ref/fate/iamf-ambisonic_1 b/tests/ref/fate/iamf-ambisonic_1
index 928a9c6cf2..dfb3d723ca 100644
--- a/tests/ref/fate/iamf-ambisonic_1
+++ b/tests/ref/fate/iamf-ambisonic_1
@@ -64,3 +64,47 @@
 1,      41472,      41472,     4608,      923, 0xa7225edf
 2,      41472,      41472,     4608,      923, 0xa7225edf
 3,      41472,      41472,     4608,      923, 0xa7225edf
+[STREAM_GROUP]
+index=0
+id=0x1
+nb_streams=4
+type=IAMF Audio Element
+[STREAM]
+index=0
+id=0x0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+[/STREAM]
+[/STREAM_GROUP]
+[STREAM_GROUP]
+index=1
+id=0x2
+nb_streams=4
+type=IAMF Mix Presentation
+[STREAM]
+index=0
+id=0x0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+[/STREAM]
+[/STREAM_GROUP]
diff --git a/tests/ref/fate/iamf-stereo b/tests/ref/fate/iamf-stereo
index 65d6b506d4..32d1e4022f 100644
--- a/tests/ref/fate/iamf-stereo
+++ b/tests/ref/fate/iamf-stereo
@@ -16,3 +16,23 @@ ace731a4fbc302e24498d6b64daa16e7 *tests/data/fate/iamf-stereo.iamf
 0,      32256,      32256,     4608,     1768, 0x2a044b99
 0,      36864,      36864,     4608,     1534, 0xb0b35a3f
 0,      41472,      41472,     4608,      926, 0xc26a5eae
+[STREAM_GROUP]
+index=0
+id=0x1
+nb_streams=1
+type=IAMF Audio Element
+[STREAM]
+index=0
+id=0x0
+[/STREAM]
+[/STREAM_GROUP]
+[STREAM_GROUP]
+index=1
+id=0x2
+nb_streams=1
+type=IAMF Mix Presentation
+[STREAM]
+index=0
+id=0x0
+[/STREAM]
+[/STREAM_GROUP]
-- 
2.44.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [FFmpeg-devel] [PATCH 5/9 v2] fate/mov: print stream group information for iamf tests
  2024-03-05  0:00 [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces James Almer
                   ` (2 preceding siblings ...)
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 4/9 v2] fate/iamf: print stream group information James Almer
@ 2024-03-05  0:00 ` James Almer
  2024-03-05 15:14   ` Stefano Sabatini
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 6/9] fftools/ffprobe: export Tile Grid Stream Group parameters James Almer
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 22+ messages in thread
From: James Almer @ 2024-03-05  0:00 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
 tests/fate/mov.mak                      |  12 +-
 tests/ref/fate/mov-mp4-iamf-5_1_4       | 318 +++++++++++++++++++++
 tests/ref/fate/mov-mp4-iamf-7_1_4       | 362 ++++++++++++++++++++++++
 tests/ref/fate/mov-mp4-iamf-ambisonic_1 | 230 +++++++++++++++
 tests/ref/fate/mov-mp4-iamf-stereo      |  98 +++++++
 5 files changed, 1016 insertions(+), 4 deletions(-)

diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
index 535647c474..de0e654532 100644
--- a/tests/fate/mov.mak
+++ b/tests/fate/mov.mak
@@ -211,7 +211,8 @@ fate-mov-mp4-iamf-stereo: SRC = $(TARGET_PATH)/tests/data/asynth-44100-2.wav
 fate-mov-mp4-iamf-stereo: CMD = transcode wav $(SRC) mp4 " \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/audio_element-stereo \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/mix_presentation-stereo \
-  -streamid 0:0 -c:a flac -t 1" "-c:a copy -map 0"
+  -streamid 0:0 -c:a flac -t 1" "-c:a copy -map 0" \
+  "-show_entries stream_group=index,id,nb_streams,type:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition"
 
 FATE_MOV_FFMPEG-$(call TRANSCODE, FLAC, MOV, WAV_DEMUXER PCM_S16LE_DECODER) += fate-mov-mp4-iamf-5_1_4
 fate-mov-mp4-iamf-5_1_4: tests/data/asynth-44100-10.wav tests/data/filtergraphs/iamf_5_1_4 tests/data/streamgroups/audio_element-5_1_4 tests/data/streamgroups/mix_presentation-5_1_4
@@ -220,7 +221,8 @@ fate-mov-mp4-iamf-5_1_4: CMD = transcode wav $(SRC) mp4 "-auto_conversion_filter
   -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/iamf_5_1_4 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/audio_element-5_1_4 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/mix_presentation-5_1_4 \
-  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -streamid 4:4 -streamid 5:5 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [TOP_FRONT] -map [TOP_BACK] -c:a flac -t 1" "-c:a copy -map 0"
+  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -streamid 4:4 -streamid 5:5 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [TOP_FRONT] -map [TOP_BACK] -c:a flac -t 1" "-c:a copy -map 0" \
+  "-show_entries stream_group=index,id,nb_streams,type:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition"
 
 FATE_MOV_FFMPEG-$(call TRANSCODE, FLAC, MOV, WAV_DEMUXER PCM_S16LE_DECODER) += fate-mov-mp4-iamf-7_1_4
 fate-mov-mp4-iamf-7_1_4: tests/data/asynth-44100-12.wav tests/data/filtergraphs/iamf_7_1_4 tests/data/streamgroups/audio_element-7_1_4 tests/data/streamgroups/mix_presentation-7_1_4
@@ -229,7 +231,8 @@ fate-mov-mp4-iamf-7_1_4: CMD = transcode wav $(SRC) mp4 "-auto_conversion_filter
   -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/iamf_7_1_4 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/audio_element-7_1_4 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/mix_presentation-7_1_4 \
-  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -streamid 4:4 -streamid 5:5 -streamid 6:6 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [SIDE] -map [TOP_FRONT] -map [TOP_BACK] -c:a flac -t 1" "-c:a copy -map 0"
+  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -streamid 4:4 -streamid 5:5 -streamid 6:6 -map [FRONT] -map [BACK] -map [CENTER] -map [LFE] -map [SIDE] -map [TOP_FRONT] -map [TOP_BACK] -c:a flac -t 1" "-c:a copy -map 0" \
+  "-show_entries stream_group=index,id,nb_streams,type:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition"
 
 FATE_MOV_FFMPEG-$(call TRANSCODE, FLAC, MOV, WAV_DEMUXER PCM_S16LE_DECODER) += fate-mov-mp4-iamf-ambisonic_1
 fate-mov-mp4-iamf-ambisonic_1: tests/data/asynth-44100-4.wav tests/data/filtergraphs/iamf_ambisonic_1 tests/data/streamgroups/audio_element-ambisonic_1 tests/data/streamgroups/mix_presentation-ambisonic_1
@@ -238,7 +241,8 @@ fate-mov-mp4-iamf-ambisonic_1: CMD = transcode wav $(SRC) mp4 "-auto_conversion_
   -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/iamf_ambisonic_1 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/audio_element-ambisonic_1 \
   -/stream_group $(TARGET_PATH)/tests/data/streamgroups/mix_presentation-ambisonic_1 \
-  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -map [MONO0] -map [MONO1] -map [MONO2] -map [MONO3] -c:a flac -t 1" "-c:a copy -map 0"
+  -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 -map [MONO0] -map [MONO1] -map [MONO2] -map [MONO3] -c:a flac -t 1" "-c:a copy -map 0" \
+  "-show_entries stream_group=index,id,nb_streams,type:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition"
 
 FATE_FFMPEG += $(FATE_MOV_FFMPEG-yes)
 
diff --git a/tests/ref/fate/mov-mp4-iamf-5_1_4 b/tests/ref/fate/mov-mp4-iamf-5_1_4
index 2f29a83cf4..fde95296eb 100644
--- a/tests/ref/fate/mov-mp4-iamf-5_1_4
+++ b/tests/ref/fate/mov-mp4-iamf-5_1_4
@@ -96,3 +96,321 @@
 3,      41472,      41472,     2628,      923, 0xa7225edf
 4,      41472,      41472,     2628,      926, 0xc26a5eae
 5,      41472,      41472,     2628,      926, 0xc26a5eae
+[STREAM_GROUP]
+index=0
+id=0x1
+nb_streams=6
+type=IAMF Audio Element
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:language=und
+TAG:handler_name=SoundHandler
+TAG:vendor_id=[0][0][0][0]
+[STREAM]
+index=0
+id=0x0
+DISPOSITION:default=1
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=4
+id=0x4
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=5
+id=0x5
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[/STREAM_GROUP]
+[STREAM_GROUP]
+index=1
+id=0x2
+nb_streams=6
+type=IAMF Mix Presentation
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:language=und
+TAG:handler_name=SoundHandler
+TAG:vendor_id=[0][0][0][0]
+[STREAM]
+index=0
+id=0x0
+DISPOSITION:default=1
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=4
+id=0x4
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=5
+id=0x5
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[/STREAM_GROUP]
diff --git a/tests/ref/fate/mov-mp4-iamf-7_1_4 b/tests/ref/fate/mov-mp4-iamf-7_1_4
index 891803470a..a660aaa143 100644
--- a/tests/ref/fate/mov-mp4-iamf-7_1_4
+++ b/tests/ref/fate/mov-mp4-iamf-7_1_4
@@ -112,3 +112,365 @@
 4,      41472,      41472,     2628,      926, 0xc26a5eae
 5,      41472,      41472,     2628,      926, 0xc26a5eae
 6,      41472,      41472,     2628,      926, 0xc26a5eae
+[STREAM_GROUP]
+index=0
+id=0x1
+nb_streams=7
+type=IAMF Audio Element
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:language=und
+TAG:handler_name=SoundHandler
+TAG:vendor_id=[0][0][0][0]
+[STREAM]
+index=0
+id=0x0
+DISPOSITION:default=1
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=4
+id=0x4
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=5
+id=0x5
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=6
+id=0x6
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[/STREAM_GROUP]
+[STREAM_GROUP]
+index=1
+id=0x2
+nb_streams=7
+type=IAMF Mix Presentation
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:language=und
+TAG:handler_name=SoundHandler
+TAG:vendor_id=[0][0][0][0]
+[STREAM]
+index=0
+id=0x0
+DISPOSITION:default=1
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=4
+id=0x4
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=5
+id=0x5
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=6
+id=0x6
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[/STREAM_GROUP]
diff --git a/tests/ref/fate/mov-mp4-iamf-ambisonic_1 b/tests/ref/fate/mov-mp4-iamf-ambisonic_1
index c4af88ce10..20f7ef97a4 100644
--- a/tests/ref/fate/mov-mp4-iamf-ambisonic_1
+++ b/tests/ref/fate/mov-mp4-iamf-ambisonic_1
@@ -64,3 +64,233 @@ fa740a4e2b84453c4e84908190094e28 *tests/data/fate/mov-mp4-iamf-ambisonic_1.mp4
 1,      41472,      41472,     2628,      923, 0xa7225edf
 2,      41472,      41472,     2628,      923, 0xa7225edf
 3,      41472,      41472,     2628,      923, 0xa7225edf
+[STREAM_GROUP]
+index=0
+id=0x1
+nb_streams=4
+type=IAMF Audio Element
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:language=und
+TAG:handler_name=SoundHandler
+TAG:vendor_id=[0][0][0][0]
+[STREAM]
+index=0
+id=0x0
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[/STREAM_GROUP]
+[STREAM_GROUP]
+index=1
+id=0x2
+nb_streams=4
+type=IAMF Mix Presentation
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:language=und
+TAG:handler_name=SoundHandler
+TAG:vendor_id=[0][0][0][0]
+[STREAM]
+index=0
+id=0x0
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=1
+id=0x1
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=2
+id=0x2
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=3
+id=0x3
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[/STREAM_GROUP]
diff --git a/tests/ref/fate/mov-mp4-iamf-stereo b/tests/ref/fate/mov-mp4-iamf-stereo
index 5c66c3e188..06af474018 100644
--- a/tests/ref/fate/mov-mp4-iamf-stereo
+++ b/tests/ref/fate/mov-mp4-iamf-stereo
@@ -16,3 +16,101 @@
 0,      32256,      32256,     4608,     1768, 0x2a044b99
 0,      36864,      36864,     4608,     1534, 0xb0b35a3f
 0,      41472,      41472,     2628,      926, 0xc26a5eae
+[STREAM_GROUP]
+index=0
+id=0x1
+nb_streams=1
+type=IAMF Audio Element
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:language=und
+TAG:handler_name=SoundHandler
+TAG:vendor_id=[0][0][0][0]
+[STREAM]
+index=0
+id=0x0
+DISPOSITION:default=1
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+[/STREAM]
+[/STREAM_GROUP]
+[STREAM_GROUP]
+index=1
+id=0x2
+nb_streams=1
+type=IAMF Mix Presentation
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:language=und
+TAG:handler_name=SoundHandler
+TAG:vendor_id=[0][0][0][0]
+[STREAM]
+index=0
+id=0x0
+DISPOSITION:default=1
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+[/STREAM]
+[/STREAM_GROUP]
-- 
2.44.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [FFmpeg-devel] [PATCH 6/9] fftools/ffprobe: export Tile Grid Stream Group parameters
  2024-03-05  0:00 [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces James Almer
                   ` (3 preceding siblings ...)
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 5/9 v2] fate/mov: print stream group information for iamf tests James Almer
@ 2024-03-05  0:00 ` James Almer
  2024-03-05 15:14   ` James Almer
  2024-03-05 15:21   ` Stefano Sabatini
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 7/9 v3] fate/mov: print stream group information for avif/heic tests James Almer
                   ` (3 subsequent siblings)
  8 siblings, 2 replies; 22+ messages in thread
From: James Almer @ 2024-03-05  0:00 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
 fftools/ffprobe.c | 41 ++++++++++++++++++++++++++++++++++++-----
 1 file changed, 36 insertions(+), 5 deletions(-)

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index ff05c4c1db..e736023bcd 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -209,6 +209,10 @@ typedef enum {
     SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION,
     SECTION_ID_STREAM_GROUP_STREAM_TAGS,
     SECTION_ID_STREAM_GROUP,
+    SECTION_ID_STREAM_GROUP_COMPONENTS,
+    SECTION_ID_STREAM_GROUP_COMPONENT,
+    SECTION_ID_STREAM_GROUP_PIECES,
+    SECTION_ID_STREAM_GROUP_PIECE,
     SECTION_ID_STREAM_GROUP_STREAMS,
     SECTION_ID_STREAM_GROUP_STREAM,
     SECTION_ID_STREAM_GROUP_DISPOSITION,
@@ -282,8 +286,8 @@ static struct section sections[] = {
     [SECTION_ID_FRAME_SIDE_DATA_TIMECODE] =       { SECTION_ID_FRAME_SIDE_DATA_TIMECODE, "timecode", 0, { -1 } },
     [SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST] = { SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST, "components", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_COMPONENT, -1 }, .element_name = "component", .unique_name = "frame_side_data_components" },
     [SECTION_ID_FRAME_SIDE_DATA_COMPONENT] =      { SECTION_ID_FRAME_SIDE_DATA_COMPONENT, "component", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, -1 }, .unique_name = "frame_side_data_component", .element_name = "component_entry", .get_type = get_raw_string_type },
-    [SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST] =   { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, "pieces", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_PIECE, -1 }, .element_name = "piece" },
-    [SECTION_ID_FRAME_SIDE_DATA_PIECE] =        { SECTION_ID_FRAME_SIDE_DATA_PIECE, "piece", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .element_name = "piece_entry", .get_type = get_raw_string_type },
+    [SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST] =   { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, "pieces", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_PIECE, -1 }, .element_name = "piece", .unique_name = "frame_side_data_pieces" },
+    [SECTION_ID_FRAME_SIDE_DATA_PIECE] =        { SECTION_ID_FRAME_SIDE_DATA_PIECE, "piece", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .element_name = "piece_entry", .unique_name = "frame_side_data_piece", .get_type = get_raw_string_type },
     [SECTION_ID_FRAME_LOGS] =         { SECTION_ID_FRAME_LOGS, "logs", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_LOG, -1 } },
     [SECTION_ID_FRAME_LOG] =          { SECTION_ID_FRAME_LOG, "log", 0, { -1 },  },
     [SECTION_ID_LIBRARY_VERSIONS] =   { SECTION_ID_LIBRARY_VERSIONS, "library_versions", SECTION_FLAG_IS_ARRAY, { SECTION_ID_LIBRARY_VERSION, -1 } },
@@ -309,7 +313,11 @@ static struct section sections[] = {
     [SECTION_ID_PROGRAMS] =                   { SECTION_ID_PROGRAMS, "programs", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PROGRAM, -1 } },
     [SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION] = { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_stream_disposition" },
     [SECTION_ID_STREAM_GROUP_STREAM_TAGS] =        { SECTION_ID_STREAM_GROUP_STREAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_group_stream_tags" },
-    [SECTION_ID_STREAM_GROUP] =                    { SECTION_ID_STREAM_GROUP, "stream_group", SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_TAGS, SECTION_ID_STREAM_GROUP_DISPOSITION, SECTION_ID_STREAM_GROUP_STREAMS, -1 }, .get_type = get_stream_group_type },
+    [SECTION_ID_STREAM_GROUP] =                    { SECTION_ID_STREAM_GROUP, "stream_group", SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_TAGS, SECTION_ID_STREAM_GROUP_DISPOSITION, SECTION_ID_STREAM_GROUP_COMPONENTS, SECTION_ID_STREAM_GROUP_STREAMS, -1 }, .get_type = get_stream_group_type },
+    [SECTION_ID_STREAM_GROUP_COMPONENTS] =         { SECTION_ID_STREAM_GROUP_COMPONENTS, "components", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_COMPONENT, -1 }, .element_name = "component", .unique_name = "stream_group_components" },
+    [SECTION_ID_STREAM_GROUP_COMPONENT] =          { SECTION_ID_STREAM_GROUP_COMPONENT, "component", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_PIECES, -1 }, .unique_name = "stream_group_component", .element_name = "component_entry", .get_type = get_raw_string_type },
+    [SECTION_ID_STREAM_GROUP_PIECES] =             { SECTION_ID_STREAM_GROUP_PIECES, "pieces", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_PIECE, -1 }, .element_name = "piece", .unique_name = "stream_group_pieces" },
+    [SECTION_ID_STREAM_GROUP_PIECE] =              { SECTION_ID_STREAM_GROUP_PIECE, "piece", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .element_name = "piece_entry", .unique_name = "stream_group_piece", .get_type = get_raw_string_type },
     [SECTION_ID_STREAM_GROUP_STREAMS] =            { SECTION_ID_STREAM_GROUP_STREAMS, "streams", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_STREAM, -1 }, .unique_name = "stream_group_streams" },
     [SECTION_ID_STREAM_GROUP_STREAM] =             { SECTION_ID_STREAM_GROUP_STREAM, "stream", 0, { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, SECTION_ID_STREAM_GROUP_STREAM_TAGS, -1 }, .unique_name = "stream_group_stream" },
     [SECTION_ID_STREAM_GROUP_DISPOSITION] =        { SECTION_ID_STREAM_GROUP_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_disposition" },
@@ -3388,9 +3396,32 @@ static int show_programs(WriterContext *w, InputFile *ifile)
 static void print_stream_group_params(WriterContext *w, AVStreamGroup *stg)
 {
     const char *unknown = "unknown";
-    if (stg->type != AV_STREAM_GROUP_PARAMS_NONE)
+    if (stg->type != AV_STREAM_GROUP_PARAMS_NONE) {
         print_str("type", av_x_if_null(avformat_stream_group_name(stg->type), unknown));
-    else
+        if (stg->type == AV_STREAM_GROUP_PARAMS_TILE_GRID) {
+            AVStreamGroupTileGrid *tile_grid = stg->params.tile_grid;
+            writer_print_section_header(w, NULL, SECTION_ID_STREAM_GROUP_COMPONENTS);
+            writer_print_section_header(w, "parameters", SECTION_ID_STREAM_GROUP_COMPONENT);
+            print_int("nb_tiles",          tile_grid->nb_tiles);
+            print_int("coded_width",       tile_grid->coded_width);
+            print_int("coded_height",      tile_grid->coded_height);
+            print_int("horizontal_offset", tile_grid->horizontal_offset);
+            print_int("vertical_offset",   tile_grid->vertical_offset);
+            print_int("width",             tile_grid->width);
+            print_int("height",            tile_grid->height);
+            writer_print_section_header(w, NULL, SECTION_ID_STREAM_GROUP_PIECES);
+            for (int i = 0; i < tile_grid->nb_tiles; i++) {
+                writer_print_section_header(w, "tile_offset", SECTION_ID_STREAM_GROUP_PIECE);
+                print_int("stream_index",           tile_grid->offsets[i].idx);
+                print_int("tile_horizontal_offset", tile_grid->offsets[i].horizontal);
+                print_int("tile_vertical_offset",   tile_grid->offsets[i].vertical);
+                writer_print_section_footer(w);
+            }
+            writer_print_section_footer(w);
+            writer_print_section_footer(w);
+            writer_print_section_footer(w);
+        }
+    } else
         print_str_opt("type", unknown);
 }
 
-- 
2.44.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [FFmpeg-devel] [PATCH 7/9 v3] fate/mov: print stream group information for avif/heic tests
  2024-03-05  0:00 [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces James Almer
                   ` (4 preceding siblings ...)
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 6/9] fftools/ffprobe: export Tile Grid Stream Group parameters James Almer
@ 2024-03-05  0:00 ` James Almer
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 8/9 v2] fate/mov: use framecrc for the remaining " James Almer
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 22+ messages in thread
From: James Almer @ 2024-03-05  0:00 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
 tests/fate-run.sh                             |  13 ++
 tests/fate/mov.mak                            |  12 +-
 .../ref/fate/mov-heic-demux-still-image-grid  | 162 ++++++++++++++++--
 .../ref/fate/mov-heic-demux-still-image-iovl  | 100 ++++++++++-
 4 files changed, 263 insertions(+), 24 deletions(-)

diff --git a/tests/fate-run.sh b/tests/fate-run.sh
index 7a7344e645..2de560354f 100755
--- a/tests/fate-run.sh
+++ b/tests/fate-run.sh
@@ -272,6 +272,19 @@ transcode(){
         run ffprobe${PROGSUF}${EXECSUF} -bitexact $ffprobe_opts $tencfile || return
 }
 
+stream_demux(){
+    src_fmt=$1
+    srcfile=$2
+    src_opts=$3
+    enc_opts=$4
+    ffprobe_opts=$5
+    tsrcfile=$(target_path $srcfile)
+    ffmpeg $DEC_OPTS -f $src_fmt $src_opts -i $tsrcfile $ENC_OPTS $FLAGS $enc_opts \
+        -f framecrc - || return
+    test -z "$ffprobe_opts" || \
+        run ffprobe${PROGSUF}${EXECSUF} -bitexact $ffprobe_opts $tsrcfile || return
+}
+
 stream_remux(){
     src_fmt=$1
     srcfile=$2
diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
index de0e654532..91b71d68b1 100644
--- a/tests/fate/mov.mak
+++ b/tests/fate/mov.mak
@@ -161,13 +161,17 @@ FATE_MOV_FFMPEG_SAMPLES-$(call FRAMEMD5, MOV, HEVC, HEVC_PARSER) \
                            += fate-mov-heic-demux-still-image-multiple-items
 fate-mov-heic-demux-still-image-multiple-items: CMD = framemd5 -i $(TARGET_SAMPLES)/heif-conformance/C003.heic -c:v copy -map 0
 
-FATE_MOV_FFMPEG_SAMPLES-$(call FRAMEMD5, MOV, HEVC, HEVC_PARSER) \
+# heic demuxing - still image with multiple items in a grid.
+FATE_MOV_FFMPEG_FFPROBE_SAMPLES-$(call DEMMUX, MOV, FRAMECRC, HEVC_DECODER HEVC_PARSER) \
                            += fate-mov-heic-demux-still-image-grid
-fate-mov-heic-demux-still-image-grid: CMD = framemd5 -i $(TARGET_SAMPLES)/heif-conformance/C007.heic -c:v copy -map 0:g:0
+fate-mov-heic-demux-still-image-grid: CMD = stream_demux mov $(TARGET_SAMPLES)/heif-conformance/C007.heic "" "-c:v copy -map 0:g:0" \
+  "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition"
 
-FATE_MOV_FFMPEG_SAMPLES-$(call FRAMEMD5, MOV, HEVC, HEVC_PARSER) \
+# heic demuxing - still image with multiple items in an overlay canvas.
+FATE_MOV_FFMPEG_FFPROBE_SAMPLES-$(call DEMMUX, MOV, FRAMECRC, HEVC_DECODER HEVC_PARSER) \
                            += fate-mov-heic-demux-still-image-iovl
-fate-mov-heic-demux-still-image-iovl: CMD = framemd5 -i $(TARGET_SAMPLES)/heif-conformance/C015.heic -c:v copy -map 0:g:0
+fate-mov-heic-demux-still-image-iovl: CMD = stream_demux mov $(TARGET_SAMPLES)/heif-conformance/C015.heic "" "-c:v copy -map 0:g:0" \
+  "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition"
 
 # Resulting remux should have:
 # 1. first audio stream with AV_DISPOSITION_HEARING_IMPAIRED
diff --git a/tests/ref/fate/mov-heic-demux-still-image-grid b/tests/ref/fate/mov-heic-demux-still-image-grid
index 6fde8fff28..5c4092bb09 100644
--- a/tests/ref/fate/mov-heic-demux-still-image-grid
+++ b/tests/ref/fate/mov-heic-demux-still-image-grid
@@ -1,10 +1,7 @@
-#format: frame checksums
-#version: 2
-#hash: MD5
-#extradata 0,                             100, 5444bf01e03182c73ae957179d560f4d
-#extradata 1,                             100, 5444bf01e03182c73ae957179d560f4d
-#extradata 2,                             100, 5444bf01e03182c73ae957179d560f4d
-#extradata 3,                             100, 5444bf01e03182c73ae957179d560f4d
+#extradata 0:      100, 0xee3e15e9
+#extradata 1:      100, 0xee3e15e9
+#extradata 2:      100, 0xee3e15e9
+#extradata 3:      100, 0xee3e15e9
 #tb 0: 1/1
 #media_type 0: video
 #codec_id 0: hevc
@@ -25,8 +22,149 @@
 #codec_id 3: hevc
 #dimensions 3: 1280x720
 #sar 3: 0/1
-#stream#, dts,        pts, duration,     size, hash
-0,          0,          0,        1,   111554, 03ceabfab39afd2e2e796b9362111f32
-1,          0,          0,        1,   111481, e5db978adbe4de7ee50fe73abc39fcfa
-2,          0,          0,        1,   111451, 08700213113cadbb6628ecb8253c1c2a
-3,          0,          0,        1,   111353, 5de942e14c848e5e22fad5d88fb13776
+0,          0,          0,        1,   111554, 0xa0679859
+1,          0,          0,        1,   111481, 0xc5386eaf
+2,          0,          0,        1,   111451, 0xdbde88de
+3,          0,          0,        1,   111353, 0x26435c8c
+[STREAM_GROUP]
+index=0
+id=0x3f1
+nb_streams=4
+type=Tile Grid
+[COMPONENT]
+nb_tiles=4
+coded_width=2560
+coded_height=1440
+horizontal_offset=0
+vertical_offset=0
+width=2560
+height=1440
+[PIECE]
+stream_index=0
+tile_horizontal_offset=0
+tile_vertical_offset=0
+[/PIECE]
+[PIECE]
+stream_index=1
+tile_horizontal_offset=1280
+tile_vertical_offset=0
+[/PIECE]
+[PIECE]
+stream_index=2
+tile_horizontal_offset=0
+tile_vertical_offset=720
+[/PIECE]
+[PIECE]
+stream_index=3
+tile_horizontal_offset=1280
+tile_vertical_offset=720
+[/PIECE]
+[/COMPONENT]
+DISPOSITION:default=1
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:title=Derived image
+[STREAM]
+index=0
+id=0x3ea
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=1
+id=0x3ec
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=2
+id=0x3ee
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=3
+id=0x3f0
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[/STREAM_GROUP]
diff --git a/tests/ref/fate/mov-heic-demux-still-image-iovl b/tests/ref/fate/mov-heic-demux-still-image-iovl
index 753cef267a..67394c2893 100644
--- a/tests/ref/fate/mov-heic-demux-still-image-iovl
+++ b/tests/ref/fate/mov-heic-demux-still-image-iovl
@@ -1,8 +1,5 @@
-#format: frame checksums
-#version: 2
-#hash: MD5
-#extradata 0,                             100, 5444bf01e03182c73ae957179d560f4d
-#extradata 1,                             100, 5444bf01e03182c73ae957179d560f4d
+#extradata 0:      100, 0xee3e15e9
+#extradata 1:      100, 0xee3e15e9
 #tb 0: 1/1
 #media_type 0: video
 #codec_id 0: hevc
@@ -13,6 +10,93 @@
 #codec_id 1: hevc
 #dimensions 1: 1280x720
 #sar 1: 0/1
-#stream#, dts,        pts, duration,     size, hash
-0,          0,          0,        1,   111554, 03ceabfab39afd2e2e796b9362111f32
-1,          0,          0,        1,   112393, daa001d351c088a5bc328459e2501c95
+0,          0,          0,        1,   111554, 0xa0679859
+1,          0,          0,        1,   112393, 0xdf2b9da0
+[STREAM_GROUP]
+index=0
+id=0x3ee
+nb_streams=2
+type=Tile Grid
+[COMPONENT]
+nb_tiles=2
+coded_width=1440
+coded_height=960
+horizontal_offset=0
+vertical_offset=0
+width=1440
+height=960
+[PIECE]
+stream_index=0
+tile_horizontal_offset=0
+tile_vertical_offset=0
+[/PIECE]
+[PIECE]
+stream_index=1
+tile_horizontal_offset=160
+tile_vertical_offset=240
+[/PIECE]
+[/COMPONENT]
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:title=Derived image
+[STREAM]
+index=0
+id=0x3ea
+DISPOSITION:default=1
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+[/STREAM]
+[STREAM]
+index=1
+id=0x3ed
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=1
+DISPOSITION:still_image=0
+[/STREAM]
+[/STREAM_GROUP]
-- 
2.44.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [FFmpeg-devel] [PATCH 8/9 v2] fate/mov: use framecrc for the remaining avif/heic tests
  2024-03-05  0:00 [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces James Almer
                   ` (5 preceding siblings ...)
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 7/9 v3] fate/mov: print stream group information for avif/heic tests James Almer
@ 2024-03-05  0:00 ` James Almer
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 9/9] fate/mov: add a heic test with a derived image using a single item twice James Almer
  2024-03-05 14:46 ` [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces Stefano Sabatini
  8 siblings, 0 replies; 22+ messages in thread
From: James Almer @ 2024-03-05  0:00 UTC (permalink / raw)
  To: ffmpeg-devel

Put them in sync with the other tests.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 tests/fate/mov.mak                            | 21 ++++++++++---------
 .../fate/mov-avif-demux-still-image-1-item    |  8 ++-----
 .../mov-avif-demux-still-image-multiple-items |  8 ++-----
 .../fate/mov-heic-demux-still-image-1-item    |  8 ++-----
 .../mov-heic-demux-still-image-multiple-items | 12 ++++-------
 5 files changed, 21 insertions(+), 36 deletions(-)

diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
index 91b71d68b1..f9cc9e14b1 100644
--- a/tests/fate/mov.mak
+++ b/tests/fate/mov.mak
@@ -143,23 +143,24 @@ fate-mov-mp4-ttml-stpp: CMD = transcode srt $(TARGET_SAMPLES)/sub/SubRip_capabil
 fate-mov-mp4-ttml-dfxp: CMD = transcode srt $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt mp4 "-map 0:s -c:s ttml -time_base:s 1:1000 -tag:s dfxp -strict unofficial" "-map 0 -c copy" "-of json -show_entries packet:stream=index,codec_type,codec_tag_string,codec_tag,codec_name,time_base,start_time,duration_ts,duration,nb_frames,nb_read_packets:stream_tags"
 
 # avif demuxing - still image with 1 item.
-FATE_MOV_FFMPEG_SAMPLES-$(call FRAMEMD5, MOV, AV1, AV1_PARSER) \
+FATE_MOV_FFMPEG_SAMPLES-$(call FRAMECRC, MOV, AV1, AV1_PARSER) \
                            += fate-mov-avif-demux-still-image-1-item
-fate-mov-avif-demux-still-image-1-item: CMD = framemd5 -c:v av1 -i $(TARGET_SAMPLES)/avif/still_image.avif -c:v copy
+fate-mov-avif-demux-still-image-1-item: CMD = framecrc -c:v av1 -i $(TARGET_SAMPLES)/avif/still_image.avif -c:v copy
 
-# avif demuxing - still image with multiple items. only the primary item will be
-# parsed.
-FATE_MOV_FFMPEG_SAMPLES-$(call FRAMEMD5, MOV, AV1, AV1_PARSER) \
+# avif demuxing - still image with multiple items.
+FATE_MOV_FFMPEG_SAMPLES-$(call FRAMECRC, MOV, AV1, AV1_PARSER) \
                            += fate-mov-avif-demux-still-image-multiple-items
-fate-mov-avif-demux-still-image-multiple-items: CMD = framemd5 -c:v av1 -i $(TARGET_SAMPLES)/avif/still_image_exif.avif -c:v copy
+fate-mov-avif-demux-still-image-multiple-items: CMD = framecrc -c:v av1 -i $(TARGET_SAMPLES)/avif/still_image_exif.avif -c:v copy
 
-FATE_MOV_FFMPEG_SAMPLES-$(call FRAMEMD5, MOV, HEVC, HEVC_PARSER) \
+# heic demuxing - still image with 1 item.
+FATE_MOV_FFMPEG_SAMPLES-$(call FRAMECRC, MOV, HEVC, HEVC_PARSER) \
                            += fate-mov-heic-demux-still-image-1-item
-fate-mov-heic-demux-still-image-1-item: CMD = framemd5 -i $(TARGET_SAMPLES)/heif-conformance/C002.heic -c:v copy
+fate-mov-heic-demux-still-image-1-item: CMD = framecrc -i $(TARGET_SAMPLES)/heif-conformance/C002.heic -c:v copy
 
-FATE_MOV_FFMPEG_SAMPLES-$(call FRAMEMD5, MOV, HEVC, HEVC_PARSER) \
+# heic demuxing - still image with multiple items.
+FATE_MOV_FFMPEG_SAMPLES-$(call FRAMECRC, MOV, HEVC, HEVC_PARSER) \
                            += fate-mov-heic-demux-still-image-multiple-items
-fate-mov-heic-demux-still-image-multiple-items: CMD = framemd5 -i $(TARGET_SAMPLES)/heif-conformance/C003.heic -c:v copy -map 0
+fate-mov-heic-demux-still-image-multiple-items: CMD = framecrc -i $(TARGET_SAMPLES)/heif-conformance/C003.heic -c:v copy -map 0
 
 # heic demuxing - still image with multiple items in a grid.
 FATE_MOV_FFMPEG_FFPROBE_SAMPLES-$(call DEMMUX, MOV, FRAMECRC, HEVC_DECODER HEVC_PARSER) \
diff --git a/tests/ref/fate/mov-avif-demux-still-image-1-item b/tests/ref/fate/mov-avif-demux-still-image-1-item
index 1ead593caa..0108877d10 100644
--- a/tests/ref/fate/mov-avif-demux-still-image-1-item
+++ b/tests/ref/fate/mov-avif-demux-still-image-1-item
@@ -1,11 +1,7 @@
-#format: frame checksums
-#version: 2
-#hash: MD5
-#extradata 0,                               4, b24b71499a8480fa4469bcbcba2140aa
+#extradata 0:        4, 0x021c008d
 #tb 0: 1/1
 #media_type 0: video
 #codec_id 0: av1
 #dimensions 0: 352x288
 #sar 0: 0/1
-#stream#, dts,        pts, duration,     size, hash
-0,          0,          0,        1,    36265, 235b0c6e389c4084845981e08d60db04
+0,          0,          0,        1,    36265, 0x6c8c9941
diff --git a/tests/ref/fate/mov-avif-demux-still-image-multiple-items b/tests/ref/fate/mov-avif-demux-still-image-multiple-items
index 1ead593caa..0108877d10 100644
--- a/tests/ref/fate/mov-avif-demux-still-image-multiple-items
+++ b/tests/ref/fate/mov-avif-demux-still-image-multiple-items
@@ -1,11 +1,7 @@
-#format: frame checksums
-#version: 2
-#hash: MD5
-#extradata 0,                               4, b24b71499a8480fa4469bcbcba2140aa
+#extradata 0:        4, 0x021c008d
 #tb 0: 1/1
 #media_type 0: video
 #codec_id 0: av1
 #dimensions 0: 352x288
 #sar 0: 0/1
-#stream#, dts,        pts, duration,     size, hash
-0,          0,          0,        1,    36265, 235b0c6e389c4084845981e08d60db04
+0,          0,          0,        1,    36265, 0x6c8c9941
diff --git a/tests/ref/fate/mov-heic-demux-still-image-1-item b/tests/ref/fate/mov-heic-demux-still-image-1-item
index c850c1ff9c..63ee5e492e 100644
--- a/tests/ref/fate/mov-heic-demux-still-image-1-item
+++ b/tests/ref/fate/mov-heic-demux-still-image-1-item
@@ -1,11 +1,7 @@
-#format: frame checksums
-#version: 2
-#hash: MD5
-#extradata 0,                             100, 5444bf01e03182c73ae957179d560f4d
+#extradata 0:      100, 0xee3e15e9
 #tb 0: 1/1
 #media_type 0: video
 #codec_id 0: hevc
 #dimensions 0: 1280x720
 #sar 0: 0/1
-#stream#, dts,        pts, duration,     size, hash
-0,          0,          0,        1,   111554, 03ceabfab39afd2e2e796b9362111f32
+0,          0,          0,        1,   111554, 0xa0679859
diff --git a/tests/ref/fate/mov-heic-demux-still-image-multiple-items b/tests/ref/fate/mov-heic-demux-still-image-multiple-items
index 753cef267a..3469e7ad75 100644
--- a/tests/ref/fate/mov-heic-demux-still-image-multiple-items
+++ b/tests/ref/fate/mov-heic-demux-still-image-multiple-items
@@ -1,8 +1,5 @@
-#format: frame checksums
-#version: 2
-#hash: MD5
-#extradata 0,                             100, 5444bf01e03182c73ae957179d560f4d
-#extradata 1,                             100, 5444bf01e03182c73ae957179d560f4d
+#extradata 0:      100, 0xee3e15e9
+#extradata 1:      100, 0xee3e15e9
 #tb 0: 1/1
 #media_type 0: video
 #codec_id 0: hevc
@@ -13,6 +10,5 @@
 #codec_id 1: hevc
 #dimensions 1: 1280x720
 #sar 1: 0/1
-#stream#, dts,        pts, duration,     size, hash
-0,          0,          0,        1,   111554, 03ceabfab39afd2e2e796b9362111f32
-1,          0,          0,        1,   112393, daa001d351c088a5bc328459e2501c95
+0,          0,          0,        1,   111554, 0xa0679859
+1,          0,          0,        1,   112393, 0xdf2b9da0
-- 
2.44.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* [FFmpeg-devel] [PATCH 9/9] fate/mov: add a heic test with a derived image using a single item twice
  2024-03-05  0:00 [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces James Almer
                   ` (6 preceding siblings ...)
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 8/9 v2] fate/mov: use framecrc for the remaining " James Almer
@ 2024-03-05  0:00 ` James Almer
  2024-03-05 14:46 ` [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces Stefano Sabatini
  8 siblings, 0 replies; 22+ messages in thread
From: James Almer @ 2024-03-05  0:00 UTC (permalink / raw)
  To: ffmpeg-devel

Signed-off-by: James Almer <jamrial@gmail.com>
---
 tests/fate/mov.mak                            |  6 ++
 .../fate/mov-heic-demux-still-image-iovl-2    | 73 +++++++++++++++++++
 2 files changed, 79 insertions(+)
 create mode 100644 tests/ref/fate/mov-heic-demux-still-image-iovl-2

diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
index f9cc9e14b1..f56301426f 100644
--- a/tests/fate/mov.mak
+++ b/tests/fate/mov.mak
@@ -174,6 +174,12 @@ FATE_MOV_FFMPEG_FFPROBE_SAMPLES-$(call DEMMUX, MOV, FRAMECRC, HEVC_DECODER HEVC_
 fate-mov-heic-demux-still-image-iovl: CMD = stream_demux mov $(TARGET_SAMPLES)/heif-conformance/C015.heic "" "-c:v copy -map 0:g:0" \
   "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition"
 
+# heic demuxing - still image where one image item is laid twice on an overlay canvas.
+FATE_MOV_FFMPEG_FFPROBE_SAMPLES-$(call DEMMUX, MOV, FRAMECRC, HEVC_DECODER HEVC_PARSER) \
+                           += fate-mov-heic-demux-still-image-iovl-2
+fate-mov-heic-demux-still-image-iovl-2: CMD = stream_demux mov $(TARGET_SAMPLES)/heif-conformance/C021.heic "" "-c:v copy -map 0:g:0" \
+  "-show_entries stream_group=index,id,nb_streams,type:stream_group_components:stream_group_disposition:stream_group_tags:stream_group_stream=index,id:stream_group_stream_disposition"
+
 # Resulting remux should have:
 # 1. first audio stream with AV_DISPOSITION_HEARING_IMPAIRED
 # 2. second audio stream with AV_DISPOSITION_VISUAL_IMPAIRED | DESCRIPTIONS
diff --git a/tests/ref/fate/mov-heic-demux-still-image-iovl-2 b/tests/ref/fate/mov-heic-demux-still-image-iovl-2
new file mode 100644
index 0000000000..d7aff60bf1
--- /dev/null
+++ b/tests/ref/fate/mov-heic-demux-still-image-iovl-2
@@ -0,0 +1,73 @@
+#extradata 0:      100, 0xee3e15e9
+#tb 0: 1/1
+#media_type 0: video
+#codec_id 0: hevc
+#dimensions 0: 1280x720
+#sar 0: 0/1
+0,          0,          0,        1,   111554, 0xa0679859
+[STREAM_GROUP]
+index=0
+id=0x3eb
+nb_streams=1
+type=Tile Grid
+[COMPONENT]
+nb_tiles=2
+coded_width=640
+coded_height=360
+horizontal_offset=0
+vertical_offset=0
+width=640
+height=360
+[PIECE]
+stream_index=0
+tile_horizontal_offset=0
+tile_vertical_offset=0
+[/PIECE]
+[PIECE]
+stream_index=0
+tile_horizontal_offset=64896
+tile_vertical_offset=65176
+[/PIECE]
+[/COMPONENT]
+DISPOSITION:default=0
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+TAG:title=Derived image
+[STREAM]
+index=0
+id=0x3ea
+DISPOSITION:default=1
+DISPOSITION:dub=0
+DISPOSITION:original=0
+DISPOSITION:comment=0
+DISPOSITION:lyrics=0
+DISPOSITION:karaoke=0
+DISPOSITION:forced=0
+DISPOSITION:hearing_impaired=0
+DISPOSITION:visual_impaired=0
+DISPOSITION:clean_effects=0
+DISPOSITION:attached_pic=0
+DISPOSITION:timed_thumbnails=0
+DISPOSITION:non_diegetic=0
+DISPOSITION:captions=0
+DISPOSITION:descriptions=0
+DISPOSITION:metadata=0
+DISPOSITION:dependent=0
+DISPOSITION:still_image=0
+[/STREAM]
+[/STREAM_GROUP]
-- 
2.44.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces
  2024-03-05  0:00 [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces James Almer
                   ` (7 preceding siblings ...)
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 9/9] fate/mov: add a heic test with a derived image using a single item twice James Almer
@ 2024-03-05 14:46 ` Stefano Sabatini
  8 siblings, 0 replies; 22+ messages in thread
From: Stefano Sabatini @ 2024-03-05 14:46 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On date Monday 2024-03-04 21:00:21 -0300, James Almer wrote:
> Components and pieces are side data specific fields and there's a variable
> amount of them.
> They also need to be identified in some form, so print a type too.
> 
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  fftools/ffprobe.c | 32 ++++++++++++++++++++++++++------
>  1 file changed, 26 insertions(+), 6 deletions(-)

Still looks good to me (and the automatic buffer size should be fine).
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/9] avformat/avformat: add a function to return the name of stream groups
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 2/9] avformat/avformat: add a function to return the name of stream groups James Almer
@ 2024-03-05 14:50   ` Stefano Sabatini
  2024-03-05 14:52     ` Stefano Sabatini
  0 siblings, 1 reply; 22+ messages in thread
From: Stefano Sabatini @ 2024-03-05 14:50 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On date Monday 2024-03-04 21:00:22 -0300, James Almer wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
> Missing version bump and APIChanges entry.
> 
>  libavformat/avformat.c | 10 ++++++++++
>  libavformat/avformat.h |  5 +++++
>  2 files changed, 15 insertions(+)
> 
> diff --git a/libavformat/avformat.c b/libavformat/avformat.c
> index eb898223d2..98dfac2f89 100644
> --- a/libavformat/avformat.c
> +++ b/libavformat/avformat.c
> @@ -321,6 +321,16 @@ AVStream *ff_stream_clone(AVFormatContext *dst_ctx, const AVStream *src)
>      return st;
>  }
>  
> +const char *avformat_stream_group_name(enum AVStreamGroupParamsType type)
> +{
> +    switch(type) {
> +    case AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT:        return "IAMF Audio Element";
> +    case AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION:     return "IAMF Mix Presentation";
> +    case AV_STREAM_GROUP_PARAMS_TILE_GRID:                 return "Tile Grid";
> +    }
> +    return NULL;
> +}
> +
>  AVProgram *av_new_program(AVFormatContext *ac, int id)
>  {
>      AVProgram *program = NULL;
> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
> index f4506f4cf1..c41041b1bc 100644
> --- a/libavformat/avformat.h
> +++ b/libavformat/avformat.h
> @@ -2120,6 +2120,11 @@ const AVClass *av_stream_get_class(void);
>   */
>  const AVClass *av_stream_group_get_class(void);
>  
> +/**
> + * @return a string identifying the stream group type
> + */
> +const char *avformat_stream_group_name(enum AVStreamGroupParamsType type);
> +

LGTM (remember to bump minor and add entry to doc/APIchanges before
pushing).
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/9] avformat/avformat: add a function to return the name of stream groups
  2024-03-05 14:50   ` Stefano Sabatini
@ 2024-03-05 14:52     ` Stefano Sabatini
  2024-03-05 14:56       ` James Almer
  0 siblings, 1 reply; 22+ messages in thread
From: Stefano Sabatini @ 2024-03-05 14:52 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On date Tuesday 2024-03-05 15:50:23 +0100, Stefano Sabatini wrote:
> On date Monday 2024-03-04 21:00:22 -0300, James Almer wrote:
> > Signed-off-by: James Almer <jamrial@gmail.com>
> > ---
> > Missing version bump and APIChanges entry.
> > 
> >  libavformat/avformat.c | 10 ++++++++++
> >  libavformat/avformat.h |  5 +++++
> >  2 files changed, 15 insertions(+)
> > 
> > diff --git a/libavformat/avformat.c b/libavformat/avformat.c
> > index eb898223d2..98dfac2f89 100644
> > --- a/libavformat/avformat.c
> > +++ b/libavformat/avformat.c
> > @@ -321,6 +321,16 @@ AVStream *ff_stream_clone(AVFormatContext *dst_ctx, const AVStream *src)
> >      return st;
> >  }
> >  
> > +const char *avformat_stream_group_name(enum AVStreamGroupParamsType type)
> > +{
> > +    switch(type) {
> > +    case AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT:        return "IAMF Audio Element";
> > +    case AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION:     return "IAMF Mix Presentation";
> > +    case AV_STREAM_GROUP_PARAMS_TILE_GRID:                 return "Tile Grid";
> > +    }
> > +    return NULL;
> > +}
> > +
> >  AVProgram *av_new_program(AVFormatContext *ac, int id)
> >  {
> >      AVProgram *program = NULL;
> > diff --git a/libavformat/avformat.h b/libavformat/avformat.h
> > index f4506f4cf1..c41041b1bc 100644
> > --- a/libavformat/avformat.h
> > +++ b/libavformat/avformat.h
> > @@ -2120,6 +2120,11 @@ const AVClass *av_stream_get_class(void);
> >   */
> >  const AVClass *av_stream_group_get_class(void);
> >  

> > +/**
> > + * @return a string identifying the stream group type
> > + */

Also add a note that this will return NULL in case of unknown stream
group type.

> > +const char *avformat_stream_group_name(enum AVStreamGroupParamsType type);
> > +
> 
> LGTM (remember to bump minor and add entry to doc/APIchanges before
> pushing).
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 2/9] avformat/avformat: add a function to return the name of stream groups
  2024-03-05 14:52     ` Stefano Sabatini
@ 2024-03-05 14:56       ` James Almer
  0 siblings, 0 replies; 22+ messages in thread
From: James Almer @ 2024-03-05 14:56 UTC (permalink / raw)
  To: ffmpeg-devel

On 3/5/2024 11:52 AM, Stefano Sabatini wrote:
> On date Tuesday 2024-03-05 15:50:23 +0100, Stefano Sabatini wrote:
>> On date Monday 2024-03-04 21:00:22 -0300, James Almer wrote:
>>> Signed-off-by: James Almer <jamrial@gmail.com>
>>> ---
>>> Missing version bump and APIChanges entry.
>>>
>>>   libavformat/avformat.c | 10 ++++++++++
>>>   libavformat/avformat.h |  5 +++++
>>>   2 files changed, 15 insertions(+)
>>>
>>> diff --git a/libavformat/avformat.c b/libavformat/avformat.c
>>> index eb898223d2..98dfac2f89 100644
>>> --- a/libavformat/avformat.c
>>> +++ b/libavformat/avformat.c
>>> @@ -321,6 +321,16 @@ AVStream *ff_stream_clone(AVFormatContext *dst_ctx, const AVStream *src)
>>>       return st;
>>>   }
>>>   
>>> +const char *avformat_stream_group_name(enum AVStreamGroupParamsType type)
>>> +{
>>> +    switch(type) {
>>> +    case AV_STREAM_GROUP_PARAMS_IAMF_AUDIO_ELEMENT:        return "IAMF Audio Element";
>>> +    case AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION:     return "IAMF Mix Presentation";
>>> +    case AV_STREAM_GROUP_PARAMS_TILE_GRID:                 return "Tile Grid";
>>> +    }
>>> +    return NULL;
>>> +}
>>> +
>>>   AVProgram *av_new_program(AVFormatContext *ac, int id)
>>>   {
>>>       AVProgram *program = NULL;
>>> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
>>> index f4506f4cf1..c41041b1bc 100644
>>> --- a/libavformat/avformat.h
>>> +++ b/libavformat/avformat.h
>>> @@ -2120,6 +2120,11 @@ const AVClass *av_stream_get_class(void);
>>>    */
>>>   const AVClass *av_stream_group_get_class(void);
>>>   
> 
>>> +/**
>>> + * @return a string identifying the stream group type
>>> + */
> 
> Also add a note that this will return NULL in case of unknown stream
> group type.
> 
>>> +const char *avformat_stream_group_name(enum AVStreamGroupParamsType type);
>>> +
>>
>> LGTM (remember to bump minor and add entry to doc/APIchanges before
>> pushing).

Applied with the suggestion.

Thanks.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 3/9 v3] fftools/ffprobe: add support for Stream Groups
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 3/9 v3] fftools/ffprobe: add support for Stream Groups James Almer
@ 2024-03-05 15:06   ` Stefano Sabatini
  2024-03-05 15:09     ` James Almer
  0 siblings, 1 reply; 22+ messages in thread
From: Stefano Sabatini @ 2024-03-05 15:06 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On date Monday 2024-03-04 21:00:23 -0300, James Almer wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  Changelog                                     |   1 +
>  doc/ffprobe.xsd                               |   1 +
>  fftools/ffprobe.c                             | 147 ++++++++++++++++--
>  tests/ref/fate/cavs-demux                     |   2 +-
>  tests/ref/fate/ffprobe_compact                |   2 +-
>  tests/ref/fate/ffprobe_csv                    |   2 +-
>  tests/ref/fate/ffprobe_default                |   1 +
>  tests/ref/fate/ffprobe_flat                   |   1 +
>  tests/ref/fate/ffprobe_ini                    |   1 +
>  tests/ref/fate/ffprobe_json                   |   1 +
>  tests/ref/fate/ffprobe_xml                    |   2 +-
>  tests/ref/fate/ffprobe_xsd                    |   2 +-
>  tests/ref/fate/flv-demux                      |   2 +-
>  tests/ref/fate/gapless-mp3-side-data          |   2 +-
>  .../ref/fate/mov-mp4-disposition-mpegts-remux |   3 +
>  tests/ref/fate/mov-mp4-ttml-dfxp              |   3 +
>  tests/ref/fate/mov-mp4-ttml-stpp              |   3 +
>  tests/ref/fate/oggopus-demux                  |   2 +-
>  tests/ref/fate/ts-demux                       |   2 +-
>  tests/ref/fate/ts-opus-demux                  |   2 +-
>  tests/ref/fate/ts-small-demux                 |   2 +-
>  tests/ref/fate/ts-timed-id3-demux             |   2 +-

still missing doc/ffprobe.texi updates

>  22 files changed, 163 insertions(+), 23 deletions(-)
> 
> diff --git a/Changelog b/Changelog
> index f388d41b02..0ba3a77c08 100644
> --- a/Changelog
> +++ b/Changelog
> @@ -30,6 +30,7 @@ version <next>:
>  - Change the default bitrate control method from VBR to CQP for QSV encoders.
>  - removed deprecated ffmpeg CLI options -psnr and -map_channel
>  - DVD-Video demuxer, powered by libdvdnav and libdvdread
> +- ffprobe -show_stream_groups option
>  
>  
>  version 6.1:
> diff --git a/doc/ffprobe.xsd b/doc/ffprobe.xsd
> index 9490a20ce8..dc04ce7142 100644
> --- a/doc/ffprobe.xsd
> +++ b/doc/ffprobe.xsd
> @@ -337,6 +337,7 @@
>      <xsd:attribute name="filename"         type="xsd:string" use="required"/>
>      <xsd:attribute name="nb_streams"       type="xsd:int"    use="required"/>
>      <xsd:attribute name="nb_programs"      type="xsd:int"    use="required"/>
> +    <xsd:attribute name="nb_stream_groups" type="xsd:int"    use="required"/>
>      <xsd:attribute name="format_name"      type="xsd:string" use="required"/>
>      <xsd:attribute name="format_long_name" type="xsd:string"/>
>      <xsd:attribute name="start_time"       type="xsd:float"/>
> diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
> index 8390377159..ff05c4c1db 100644
> --- a/fftools/ffprobe.c
> +++ b/fftools/ffprobe.c
> @@ -112,8 +112,10 @@ static int do_show_format  = 0;
>  static int do_show_frames  = 0;
>  static int do_show_packets = 0;
>  static int do_show_programs = 0;
> +static int do_show_stream_groups = 0;
>  static int do_show_streams = 0;
>  static int do_show_stream_disposition = 0;
> +static int do_show_stream_group_disposition = 0;
>  static int do_show_data    = 0;
>  static int do_show_program_version  = 0;
>  static int do_show_library_versions = 0;
> @@ -126,6 +128,7 @@ static int do_show_chapter_tags = 0;
>  static int do_show_format_tags = 0;
>  static int do_show_frame_tags = 0;
>  static int do_show_program_tags = 0;
> +static int do_show_stream_group_tags = 0;
>  static int do_show_stream_tags = 0;
>  static int do_show_packet_tags = 0;
>  
> @@ -159,7 +162,7 @@ static int find_stream_info  = 1;
>  
>  /* section structure definition */
>  
> -#define SECTION_MAX_NB_CHILDREN 10
> +#define SECTION_MAX_NB_CHILDREN 11
>  
>  typedef enum {
>      SECTION_ID_NONE = -1,
> @@ -203,6 +206,14 @@ typedef enum {
>      SECTION_ID_PROGRAM_TAGS,
>      SECTION_ID_PROGRAM_VERSION,
>      SECTION_ID_PROGRAMS,
> +    SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION,
> +    SECTION_ID_STREAM_GROUP_STREAM_TAGS,
> +    SECTION_ID_STREAM_GROUP,
> +    SECTION_ID_STREAM_GROUP_STREAMS,
> +    SECTION_ID_STREAM_GROUP_STREAM,
> +    SECTION_ID_STREAM_GROUP_DISPOSITION,
> +    SECTION_ID_STREAM_GROUP_TAGS,
> +    SECTION_ID_STREAM_GROUPS,
>      SECTION_ID_ROOT,
>      SECTION_ID_STREAM,
>      SECTION_ID_STREAM_DISPOSITION,
> @@ -249,6 +260,12 @@ static const char *get_raw_string_type(const void *data)
>      return data;
>  }
>  
> +static const char *get_stream_group_type(const void *data)
> +{
> +    const AVStreamGroup *stg = (const AVStreamGroup *)data;
> +    return av_x_if_null(avformat_stream_group_name(stg->type), "unknown");
> +}
> +
>  static struct section sections[] = {
>      [SECTION_ID_CHAPTERS] =           { SECTION_ID_CHAPTERS, "chapters", SECTION_FLAG_IS_ARRAY, { SECTION_ID_CHAPTER, -1 } },
>      [SECTION_ID_CHAPTER] =            { SECTION_ID_CHAPTER, "chapter", 0, { SECTION_ID_CHAPTER_TAGS, -1 } },
> @@ -290,8 +307,16 @@ static struct section sections[] = {
>      [SECTION_ID_PROGRAM_TAGS] =               { SECTION_ID_PROGRAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "program_tags" },
>      [SECTION_ID_PROGRAM_VERSION] =    { SECTION_ID_PROGRAM_VERSION, "program_version", 0, { -1 } },
>      [SECTION_ID_PROGRAMS] =                   { SECTION_ID_PROGRAMS, "programs", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PROGRAM, -1 } },
> +    [SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION] = { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_stream_disposition" },
> +    [SECTION_ID_STREAM_GROUP_STREAM_TAGS] =        { SECTION_ID_STREAM_GROUP_STREAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_group_stream_tags" },
> +    [SECTION_ID_STREAM_GROUP] =                    { SECTION_ID_STREAM_GROUP, "stream_group", SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_TAGS, SECTION_ID_STREAM_GROUP_DISPOSITION, SECTION_ID_STREAM_GROUP_STREAMS, -1 }, .get_type = get_stream_group_type },
> +    [SECTION_ID_STREAM_GROUP_STREAMS] =            { SECTION_ID_STREAM_GROUP_STREAMS, "streams", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_STREAM, -1 }, .unique_name = "stream_group_streams" },
> +    [SECTION_ID_STREAM_GROUP_STREAM] =             { SECTION_ID_STREAM_GROUP_STREAM, "stream", 0, { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, SECTION_ID_STREAM_GROUP_STREAM_TAGS, -1 }, .unique_name = "stream_group_stream" },
> +    [SECTION_ID_STREAM_GROUP_DISPOSITION] =        { SECTION_ID_STREAM_GROUP_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_disposition" },
> +    [SECTION_ID_STREAM_GROUP_TAGS] =               { SECTION_ID_STREAM_GROUP_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_group_tags" },
> +    [SECTION_ID_STREAM_GROUPS] =                   { SECTION_ID_STREAM_GROUPS, "stream_groups", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP, -1 } },
>      [SECTION_ID_ROOT] =               { SECTION_ID_ROOT, "root", SECTION_FLAG_IS_WRAPPER,
> -                                        { SECTION_ID_CHAPTERS, SECTION_ID_FORMAT, SECTION_ID_FRAMES, SECTION_ID_PROGRAMS, SECTION_ID_STREAMS,
> +                                        { SECTION_ID_CHAPTERS, SECTION_ID_FORMAT, SECTION_ID_FRAMES, SECTION_ID_PROGRAMS, SECTION_ID_STREAM_GROUPS, SECTION_ID_STREAMS,
>                                            SECTION_ID_PACKETS, SECTION_ID_ERROR, SECTION_ID_PROGRAM_VERSION, SECTION_ID_LIBRARY_VERSIONS,
>                                            SECTION_ID_PIXEL_FORMATS, -1} },
>      [SECTION_ID_STREAMS] =            { SECTION_ID_STREAMS, "streams", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM, -1 } },
> @@ -3071,7 +3096,10 @@ static void print_dispositions(WriterContext *w, uint32_t disposition, SectionID
>      writer_print_section_footer(w);
>  }
>  
> -static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_idx, InputStream *ist, int in_program)
> +#define IN_PROGRAM 1
> +#define IN_STREAM_GROUP 2
> +
> +static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_idx, InputStream *ist, int container)
>  {
>      AVStream *stream = ist->st;
>      AVCodecParameters *par;
> @@ -3081,12 +3109,29 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
>      AVRational sar, dar;
>      AVBPrint pbuf;
>      const AVCodecDescriptor *cd;
> +    const SectionID section_header[] = {
> +        SECTION_ID_STREAM,
> +        SECTION_ID_PROGRAM_STREAM,
> +        SECTION_ID_STREAM_GROUP_STREAM,
> +    };
> +    const SectionID section_disposition[] = {
> +        SECTION_ID_STREAM_DISPOSITION,
> +        SECTION_ID_PROGRAM_STREAM_DISPOSITION,
> +        SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION,
> +    };
> +    const SectionID section_tags[] = {
> +        SECTION_ID_STREAM_TAGS,
> +        SECTION_ID_PROGRAM_STREAM_TAGS,
> +        SECTION_ID_STREAM_GROUP_STREAM_TAGS,
> +    };
>      int ret = 0;
>      const char *profile = NULL;
>  
> +    av_assert0(container < FF_ARRAY_ELEMS(section_header));
> +
>      av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED);
>  
> -    writer_print_section_header(w, NULL, in_program ? SECTION_ID_PROGRAM_STREAM : SECTION_ID_STREAM);
> +    writer_print_section_header(w, NULL, section_header[container]);
>  
>      print_int("index", stream->index);
>  
> @@ -3248,13 +3293,14 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
>  
>      /* Print disposition information */
>      if (do_show_stream_disposition) {
> -        print_dispositions(w, stream->disposition,
> -                           in_program ? SECTION_ID_PROGRAM_STREAM_DISPOSITION
> -                                      : SECTION_ID_STREAM_DISPOSITION);
> +        av_assert0(container < FF_ARRAY_ELEMS(section_disposition));
> +        print_dispositions(w, stream->disposition, section_disposition[container]);
>      }
>  
> -    if (do_show_stream_tags)
> -        ret = show_tags(w, stream->metadata, in_program ? SECTION_ID_PROGRAM_STREAM_TAGS : SECTION_ID_STREAM_TAGS);
> +    if (do_show_stream_tags) {
> +        av_assert0(container < FF_ARRAY_ELEMS(section_tags));
> +        ret = show_tags(w, stream->metadata, section_tags[container]);
> +    }
>  
>      if (stream->codecpar->nb_coded_side_data) {
>          writer_print_section_header(w, NULL, SECTION_ID_STREAM_SIDE_DATA_LIST);
> @@ -3309,7 +3355,7 @@ static int show_program(WriterContext *w, InputFile *ifile, AVProgram *program)
>      writer_print_section_header(w, NULL, SECTION_ID_PROGRAM_STREAMS);
>      for (i = 0; i < program->nb_stream_indexes; i++) {
>          if (selected_streams[program->stream_index[i]]) {
> -            ret = show_stream(w, fmt_ctx, program->stream_index[i], &ifile->streams[program->stream_index[i]], 1);
> +            ret = show_stream(w, fmt_ctx, program->stream_index[i], &ifile->streams[program->stream_index[i]], IN_PROGRAM);
>              if (ret < 0)
>                  break;
>          }
> @@ -3339,6 +3385,72 @@ static int show_programs(WriterContext *w, InputFile *ifile)
>      return ret;
>  }
>  
> +static void print_stream_group_params(WriterContext *w, AVStreamGroup *stg)
> +{
> +    const char *unknown = "unknown";
> +    if (stg->type != AV_STREAM_GROUP_PARAMS_NONE)
> +        print_str("type", av_x_if_null(avformat_stream_group_name(stg->type), unknown));
> +    else
> +        print_str_opt("type", unknown);
> +}
> +
> +static int show_stream_group(WriterContext *w, InputFile *ifile, AVStreamGroup *stg)
> +{
> +    AVFormatContext *fmt_ctx = ifile->fmt_ctx;
> +    AVBPrint pbuf;
> +    int i, ret = 0;
> +
> +    av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED);
> +    writer_print_section_header(w, stg, SECTION_ID_STREAM_GROUP);
> +    print_int("index", stg->index);
> +    if (fmt_ctx->iformat->flags & AVFMT_SHOW_IDS) print_fmt    ("id", "0x%"PRIx64, stg->id);
> +    else                                          print_str_opt("id", "N/A");
> +    print_int("nb_streams", stg->nb_streams);
> +    print_stream_group_params(w, stg);
> +
> +    /* Print disposition information */
> +    if (do_show_stream_group_disposition)
> +        print_dispositions(w, stg->disposition, SECTION_ID_STREAM_GROUP_DISPOSITION);
> +
> +    if (do_show_stream_group_tags)
> +        ret = show_tags(w, stg->metadata, SECTION_ID_STREAM_GROUP_TAGS);
> +    if (ret < 0)
> +        goto end;
> +
> +    writer_print_section_header(w, NULL, SECTION_ID_STREAM_GROUP_STREAMS);
> +    for (i = 0; i < stg->nb_streams; i++) {
> +        if (selected_streams[stg->streams[i]->index]) {
> +            ret = show_stream(w, fmt_ctx, stg->streams[i]->index, &ifile->streams[stg->streams[i]->index], IN_STREAM_GROUP);
> +            if (ret < 0)
> +                break;
> +        }
> +    }
> +    writer_print_section_footer(w);
> +
> +end:
> +    av_bprint_finalize(&pbuf, NULL);
> +    writer_print_section_footer(w);
> +    return ret;
> +}
> +
> +static int show_stream_groups(WriterContext *w, InputFile *ifile)
> +{
> +    AVFormatContext *fmt_ctx = ifile->fmt_ctx;
> +    int i, ret = 0;
> +
> +    writer_print_section_header(w, NULL, SECTION_ID_STREAM_GROUPS);

> +    for (i = 0; i < fmt_ctx->nb_stream_groups; i++) {
> +        AVStreamGroup *stg = fmt_ctx->stream_groups[i];

> +        if (!stg)
> +            continue;

why can this be NULL? (this sounds a bit unexpected to me)

[...]

LGTM otherwise, thanks.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 3/9 v3] fftools/ffprobe: add support for Stream Groups
  2024-03-05 15:06   ` Stefano Sabatini
@ 2024-03-05 15:09     ` James Almer
  0 siblings, 0 replies; 22+ messages in thread
From: James Almer @ 2024-03-05 15:09 UTC (permalink / raw)
  To: ffmpeg-devel

On 3/5/2024 12:06 PM, Stefano Sabatini wrote:
> On date Monday 2024-03-04 21:00:23 -0300, James Almer wrote:
>> Signed-off-by: James Almer <jamrial@gmail.com>
>> ---
>>   Changelog                                     |   1 +
>>   doc/ffprobe.xsd                               |   1 +
>>   fftools/ffprobe.c                             | 147 ++++++++++++++++--
>>   tests/ref/fate/cavs-demux                     |   2 +-
>>   tests/ref/fate/ffprobe_compact                |   2 +-
>>   tests/ref/fate/ffprobe_csv                    |   2 +-
>>   tests/ref/fate/ffprobe_default                |   1 +
>>   tests/ref/fate/ffprobe_flat                   |   1 +
>>   tests/ref/fate/ffprobe_ini                    |   1 +
>>   tests/ref/fate/ffprobe_json                   |   1 +
>>   tests/ref/fate/ffprobe_xml                    |   2 +-
>>   tests/ref/fate/ffprobe_xsd                    |   2 +-
>>   tests/ref/fate/flv-demux                      |   2 +-
>>   tests/ref/fate/gapless-mp3-side-data          |   2 +-
>>   .../ref/fate/mov-mp4-disposition-mpegts-remux |   3 +
>>   tests/ref/fate/mov-mp4-ttml-dfxp              |   3 +
>>   tests/ref/fate/mov-mp4-ttml-stpp              |   3 +
>>   tests/ref/fate/oggopus-demux                  |   2 +-
>>   tests/ref/fate/ts-demux                       |   2 +-
>>   tests/ref/fate/ts-opus-demux                  |   2 +-
>>   tests/ref/fate/ts-small-demux                 |   2 +-
>>   tests/ref/fate/ts-timed-id3-demux             |   2 +-
> 
> still missing doc/ffprobe.texi updates

Ok.

> 
>>   22 files changed, 163 insertions(+), 23 deletions(-)
>>
>> diff --git a/Changelog b/Changelog
>> index f388d41b02..0ba3a77c08 100644
>> --- a/Changelog
>> +++ b/Changelog
>> @@ -30,6 +30,7 @@ version <next>:
>>   - Change the default bitrate control method from VBR to CQP for QSV encoders.
>>   - removed deprecated ffmpeg CLI options -psnr and -map_channel
>>   - DVD-Video demuxer, powered by libdvdnav and libdvdread
>> +- ffprobe -show_stream_groups option
>>   
>>   
>>   version 6.1:
>> diff --git a/doc/ffprobe.xsd b/doc/ffprobe.xsd
>> index 9490a20ce8..dc04ce7142 100644
>> --- a/doc/ffprobe.xsd
>> +++ b/doc/ffprobe.xsd
>> @@ -337,6 +337,7 @@
>>       <xsd:attribute name="filename"         type="xsd:string" use="required"/>
>>       <xsd:attribute name="nb_streams"       type="xsd:int"    use="required"/>
>>       <xsd:attribute name="nb_programs"      type="xsd:int"    use="required"/>
>> +    <xsd:attribute name="nb_stream_groups" type="xsd:int"    use="required"/>
>>       <xsd:attribute name="format_name"      type="xsd:string" use="required"/>
>>       <xsd:attribute name="format_long_name" type="xsd:string"/>
>>       <xsd:attribute name="start_time"       type="xsd:float"/>
>> diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
>> index 8390377159..ff05c4c1db 100644
>> --- a/fftools/ffprobe.c
>> +++ b/fftools/ffprobe.c
>> @@ -112,8 +112,10 @@ static int do_show_format  = 0;
>>   static int do_show_frames  = 0;
>>   static int do_show_packets = 0;
>>   static int do_show_programs = 0;
>> +static int do_show_stream_groups = 0;
>>   static int do_show_streams = 0;
>>   static int do_show_stream_disposition = 0;
>> +static int do_show_stream_group_disposition = 0;
>>   static int do_show_data    = 0;
>>   static int do_show_program_version  = 0;
>>   static int do_show_library_versions = 0;
>> @@ -126,6 +128,7 @@ static int do_show_chapter_tags = 0;
>>   static int do_show_format_tags = 0;
>>   static int do_show_frame_tags = 0;
>>   static int do_show_program_tags = 0;
>> +static int do_show_stream_group_tags = 0;
>>   static int do_show_stream_tags = 0;
>>   static int do_show_packet_tags = 0;
>>   
>> @@ -159,7 +162,7 @@ static int find_stream_info  = 1;
>>   
>>   /* section structure definition */
>>   
>> -#define SECTION_MAX_NB_CHILDREN 10
>> +#define SECTION_MAX_NB_CHILDREN 11
>>   
>>   typedef enum {
>>       SECTION_ID_NONE = -1,
>> @@ -203,6 +206,14 @@ typedef enum {
>>       SECTION_ID_PROGRAM_TAGS,
>>       SECTION_ID_PROGRAM_VERSION,
>>       SECTION_ID_PROGRAMS,
>> +    SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION,
>> +    SECTION_ID_STREAM_GROUP_STREAM_TAGS,
>> +    SECTION_ID_STREAM_GROUP,
>> +    SECTION_ID_STREAM_GROUP_STREAMS,
>> +    SECTION_ID_STREAM_GROUP_STREAM,
>> +    SECTION_ID_STREAM_GROUP_DISPOSITION,
>> +    SECTION_ID_STREAM_GROUP_TAGS,
>> +    SECTION_ID_STREAM_GROUPS,
>>       SECTION_ID_ROOT,
>>       SECTION_ID_STREAM,
>>       SECTION_ID_STREAM_DISPOSITION,
>> @@ -249,6 +260,12 @@ static const char *get_raw_string_type(const void *data)
>>       return data;
>>   }
>>   
>> +static const char *get_stream_group_type(const void *data)
>> +{
>> +    const AVStreamGroup *stg = (const AVStreamGroup *)data;
>> +    return av_x_if_null(avformat_stream_group_name(stg->type), "unknown");
>> +}
>> +
>>   static struct section sections[] = {
>>       [SECTION_ID_CHAPTERS] =           { SECTION_ID_CHAPTERS, "chapters", SECTION_FLAG_IS_ARRAY, { SECTION_ID_CHAPTER, -1 } },
>>       [SECTION_ID_CHAPTER] =            { SECTION_ID_CHAPTER, "chapter", 0, { SECTION_ID_CHAPTER_TAGS, -1 } },
>> @@ -290,8 +307,16 @@ static struct section sections[] = {
>>       [SECTION_ID_PROGRAM_TAGS] =               { SECTION_ID_PROGRAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "program_tags" },
>>       [SECTION_ID_PROGRAM_VERSION] =    { SECTION_ID_PROGRAM_VERSION, "program_version", 0, { -1 } },
>>       [SECTION_ID_PROGRAMS] =                   { SECTION_ID_PROGRAMS, "programs", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PROGRAM, -1 } },
>> +    [SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION] = { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_stream_disposition" },
>> +    [SECTION_ID_STREAM_GROUP_STREAM_TAGS] =        { SECTION_ID_STREAM_GROUP_STREAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_group_stream_tags" },
>> +    [SECTION_ID_STREAM_GROUP] =                    { SECTION_ID_STREAM_GROUP, "stream_group", SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_TAGS, SECTION_ID_STREAM_GROUP_DISPOSITION, SECTION_ID_STREAM_GROUP_STREAMS, -1 }, .get_type = get_stream_group_type },
>> +    [SECTION_ID_STREAM_GROUP_STREAMS] =            { SECTION_ID_STREAM_GROUP_STREAMS, "streams", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_STREAM, -1 }, .unique_name = "stream_group_streams" },
>> +    [SECTION_ID_STREAM_GROUP_STREAM] =             { SECTION_ID_STREAM_GROUP_STREAM, "stream", 0, { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, SECTION_ID_STREAM_GROUP_STREAM_TAGS, -1 }, .unique_name = "stream_group_stream" },
>> +    [SECTION_ID_STREAM_GROUP_DISPOSITION] =        { SECTION_ID_STREAM_GROUP_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_disposition" },
>> +    [SECTION_ID_STREAM_GROUP_TAGS] =               { SECTION_ID_STREAM_GROUP_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_group_tags" },
>> +    [SECTION_ID_STREAM_GROUPS] =                   { SECTION_ID_STREAM_GROUPS, "stream_groups", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP, -1 } },
>>       [SECTION_ID_ROOT] =               { SECTION_ID_ROOT, "root", SECTION_FLAG_IS_WRAPPER,
>> -                                        { SECTION_ID_CHAPTERS, SECTION_ID_FORMAT, SECTION_ID_FRAMES, SECTION_ID_PROGRAMS, SECTION_ID_STREAMS,
>> +                                        { SECTION_ID_CHAPTERS, SECTION_ID_FORMAT, SECTION_ID_FRAMES, SECTION_ID_PROGRAMS, SECTION_ID_STREAM_GROUPS, SECTION_ID_STREAMS,
>>                                             SECTION_ID_PACKETS, SECTION_ID_ERROR, SECTION_ID_PROGRAM_VERSION, SECTION_ID_LIBRARY_VERSIONS,
>>                                             SECTION_ID_PIXEL_FORMATS, -1} },
>>       [SECTION_ID_STREAMS] =            { SECTION_ID_STREAMS, "streams", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM, -1 } },
>> @@ -3071,7 +3096,10 @@ static void print_dispositions(WriterContext *w, uint32_t disposition, SectionID
>>       writer_print_section_footer(w);
>>   }
>>   
>> -static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_idx, InputStream *ist, int in_program)
>> +#define IN_PROGRAM 1
>> +#define IN_STREAM_GROUP 2
>> +
>> +static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_idx, InputStream *ist, int container)
>>   {
>>       AVStream *stream = ist->st;
>>       AVCodecParameters *par;
>> @@ -3081,12 +3109,29 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
>>       AVRational sar, dar;
>>       AVBPrint pbuf;
>>       const AVCodecDescriptor *cd;
>> +    const SectionID section_header[] = {
>> +        SECTION_ID_STREAM,
>> +        SECTION_ID_PROGRAM_STREAM,
>> +        SECTION_ID_STREAM_GROUP_STREAM,
>> +    };
>> +    const SectionID section_disposition[] = {
>> +        SECTION_ID_STREAM_DISPOSITION,
>> +        SECTION_ID_PROGRAM_STREAM_DISPOSITION,
>> +        SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION,
>> +    };
>> +    const SectionID section_tags[] = {
>> +        SECTION_ID_STREAM_TAGS,
>> +        SECTION_ID_PROGRAM_STREAM_TAGS,
>> +        SECTION_ID_STREAM_GROUP_STREAM_TAGS,
>> +    };
>>       int ret = 0;
>>       const char *profile = NULL;
>>   
>> +    av_assert0(container < FF_ARRAY_ELEMS(section_header));
>> +
>>       av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED);
>>   
>> -    writer_print_section_header(w, NULL, in_program ? SECTION_ID_PROGRAM_STREAM : SECTION_ID_STREAM);
>> +    writer_print_section_header(w, NULL, section_header[container]);
>>   
>>       print_int("index", stream->index);
>>   
>> @@ -3248,13 +3293,14 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
>>   
>>       /* Print disposition information */
>>       if (do_show_stream_disposition) {
>> -        print_dispositions(w, stream->disposition,
>> -                           in_program ? SECTION_ID_PROGRAM_STREAM_DISPOSITION
>> -                                      : SECTION_ID_STREAM_DISPOSITION);
>> +        av_assert0(container < FF_ARRAY_ELEMS(section_disposition));
>> +        print_dispositions(w, stream->disposition, section_disposition[container]);
>>       }
>>   
>> -    if (do_show_stream_tags)
>> -        ret = show_tags(w, stream->metadata, in_program ? SECTION_ID_PROGRAM_STREAM_TAGS : SECTION_ID_STREAM_TAGS);
>> +    if (do_show_stream_tags) {
>> +        av_assert0(container < FF_ARRAY_ELEMS(section_tags));
>> +        ret = show_tags(w, stream->metadata, section_tags[container]);
>> +    }
>>   
>>       if (stream->codecpar->nb_coded_side_data) {
>>           writer_print_section_header(w, NULL, SECTION_ID_STREAM_SIDE_DATA_LIST);
>> @@ -3309,7 +3355,7 @@ static int show_program(WriterContext *w, InputFile *ifile, AVProgram *program)
>>       writer_print_section_header(w, NULL, SECTION_ID_PROGRAM_STREAMS);
>>       for (i = 0; i < program->nb_stream_indexes; i++) {
>>           if (selected_streams[program->stream_index[i]]) {
>> -            ret = show_stream(w, fmt_ctx, program->stream_index[i], &ifile->streams[program->stream_index[i]], 1);
>> +            ret = show_stream(w, fmt_ctx, program->stream_index[i], &ifile->streams[program->stream_index[i]], IN_PROGRAM);
>>               if (ret < 0)
>>                   break;
>>           }
>> @@ -3339,6 +3385,72 @@ static int show_programs(WriterContext *w, InputFile *ifile)
>>       return ret;
>>   }
>>   
>> +static void print_stream_group_params(WriterContext *w, AVStreamGroup *stg)
>> +{
>> +    const char *unknown = "unknown";
>> +    if (stg->type != AV_STREAM_GROUP_PARAMS_NONE)
>> +        print_str("type", av_x_if_null(avformat_stream_group_name(stg->type), unknown));
>> +    else
>> +        print_str_opt("type", unknown);
>> +}
>> +
>> +static int show_stream_group(WriterContext *w, InputFile *ifile, AVStreamGroup *stg)
>> +{
>> +    AVFormatContext *fmt_ctx = ifile->fmt_ctx;
>> +    AVBPrint pbuf;
>> +    int i, ret = 0;
>> +
>> +    av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED);
>> +    writer_print_section_header(w, stg, SECTION_ID_STREAM_GROUP);
>> +    print_int("index", stg->index);
>> +    if (fmt_ctx->iformat->flags & AVFMT_SHOW_IDS) print_fmt    ("id", "0x%"PRIx64, stg->id);
>> +    else                                          print_str_opt("id", "N/A");
>> +    print_int("nb_streams", stg->nb_streams);
>> +    print_stream_group_params(w, stg);
>> +
>> +    /* Print disposition information */
>> +    if (do_show_stream_group_disposition)
>> +        print_dispositions(w, stg->disposition, SECTION_ID_STREAM_GROUP_DISPOSITION);
>> +
>> +    if (do_show_stream_group_tags)
>> +        ret = show_tags(w, stg->metadata, SECTION_ID_STREAM_GROUP_TAGS);
>> +    if (ret < 0)
>> +        goto end;
>> +
>> +    writer_print_section_header(w, NULL, SECTION_ID_STREAM_GROUP_STREAMS);
>> +    for (i = 0; i < stg->nb_streams; i++) {
>> +        if (selected_streams[stg->streams[i]->index]) {
>> +            ret = show_stream(w, fmt_ctx, stg->streams[i]->index, &ifile->streams[stg->streams[i]->index], IN_STREAM_GROUP);
>> +            if (ret < 0)
>> +                break;
>> +        }
>> +    }
>> +    writer_print_section_footer(w);
>> +
>> +end:
>> +    av_bprint_finalize(&pbuf, NULL);
>> +    writer_print_section_footer(w);
>> +    return ret;
>> +}
>> +
>> +static int show_stream_groups(WriterContext *w, InputFile *ifile)
>> +{
>> +    AVFormatContext *fmt_ctx = ifile->fmt_ctx;
>> +    int i, ret = 0;
>> +
>> +    writer_print_section_header(w, NULL, SECTION_ID_STREAM_GROUPS);
> 
>> +    for (i = 0; i < fmt_ctx->nb_stream_groups; i++) {
>> +        AVStreamGroup *stg = fmt_ctx->stream_groups[i];
> 
>> +        if (!stg)
>> +            continue;
> 
> why can this be NULL? (this sounds a bit unexpected to me)

Not really, i just copied the check from show_programs(). Can remove it.

> 
> [...]
> 
> LGTM otherwise, thanks.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 4/9 v2] fate/iamf: print stream group information
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 4/9 v2] fate/iamf: print stream group information James Almer
@ 2024-03-05 15:10   ` Stefano Sabatini
  0 siblings, 0 replies; 22+ messages in thread
From: Stefano Sabatini @ 2024-03-05 15:10 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On date Monday 2024-03-04 21:00:24 -0300, James Almer wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  tests/fate/iamf.mak             |  8 ++--
>  tests/ref/fate/iamf-5_1_4       | 60 +++++++++++++++++++++++++++++
>  tests/ref/fate/iamf-7_1_4       | 68 +++++++++++++++++++++++++++++++++
>  tests/ref/fate/iamf-ambisonic_1 | 44 +++++++++++++++++++++
>  tests/ref/fate/iamf-stereo      | 20 ++++++++++
>  5 files changed, 196 insertions(+), 4 deletions(-)

LGTM (but someone with more familiarity with IAMF might double check
this).
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 5/9 v2] fate/mov: print stream group information for iamf tests
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 5/9 v2] fate/mov: print stream group information for iamf tests James Almer
@ 2024-03-05 15:14   ` Stefano Sabatini
  0 siblings, 0 replies; 22+ messages in thread
From: Stefano Sabatini @ 2024-03-05 15:14 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On date Monday 2024-03-04 21:00:25 -0300, James Almer wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  tests/fate/mov.mak                      |  12 +-
>  tests/ref/fate/mov-mp4-iamf-5_1_4       | 318 +++++++++++++++++++++
>  tests/ref/fate/mov-mp4-iamf-7_1_4       | 362 ++++++++++++++++++++++++
>  tests/ref/fate/mov-mp4-iamf-ambisonic_1 | 230 +++++++++++++++
>  tests/ref/fate/mov-mp4-iamf-stereo      |  98 +++++++
>  5 files changed, 1016 insertions(+), 4 deletions(-)

LGTM.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 6/9] fftools/ffprobe: export Tile Grid Stream Group parameters
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 6/9] fftools/ffprobe: export Tile Grid Stream Group parameters James Almer
@ 2024-03-05 15:14   ` James Almer
  2024-03-05 15:24     ` Stefano Sabatini
  2024-03-05 15:21   ` Stefano Sabatini
  1 sibling, 1 reply; 22+ messages in thread
From: James Almer @ 2024-03-05 15:14 UTC (permalink / raw)
  To: ffmpeg-devel

On 3/4/2024 9:00 PM, James Almer wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>   fftools/ffprobe.c | 41 ++++++++++++++++++++++++++++++++++++-----
>   1 file changed, 36 insertions(+), 5 deletions(-)
> 
> diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
> index ff05c4c1db..e736023bcd 100644
> --- a/fftools/ffprobe.c
> +++ b/fftools/ffprobe.c
> @@ -209,6 +209,10 @@ typedef enum {
>       SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION,
>       SECTION_ID_STREAM_GROUP_STREAM_TAGS,
>       SECTION_ID_STREAM_GROUP,
> +    SECTION_ID_STREAM_GROUP_COMPONENTS,
> +    SECTION_ID_STREAM_GROUP_COMPONENT,
> +    SECTION_ID_STREAM_GROUP_PIECES,
> +    SECTION_ID_STREAM_GROUP_PIECE,
>       SECTION_ID_STREAM_GROUP_STREAMS,
>       SECTION_ID_STREAM_GROUP_STREAM,
>       SECTION_ID_STREAM_GROUP_DISPOSITION,
> @@ -282,8 +286,8 @@ static struct section sections[] = {
>       [SECTION_ID_FRAME_SIDE_DATA_TIMECODE] =       { SECTION_ID_FRAME_SIDE_DATA_TIMECODE, "timecode", 0, { -1 } },
>       [SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST] = { SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST, "components", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_COMPONENT, -1 }, .element_name = "component", .unique_name = "frame_side_data_components" },
>       [SECTION_ID_FRAME_SIDE_DATA_COMPONENT] =      { SECTION_ID_FRAME_SIDE_DATA_COMPONENT, "component", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, -1 }, .unique_name = "frame_side_data_component", .element_name = "component_entry", .get_type = get_raw_string_type },
> -    [SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST] =   { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, "pieces", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_PIECE, -1 }, .element_name = "piece" },
> -    [SECTION_ID_FRAME_SIDE_DATA_PIECE] =        { SECTION_ID_FRAME_SIDE_DATA_PIECE, "piece", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .element_name = "piece_entry", .get_type = get_raw_string_type },
> +    [SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST] =   { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, "pieces", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_PIECE, -1 }, .element_name = "piece", .unique_name = "frame_side_data_pieces" },
> +    [SECTION_ID_FRAME_SIDE_DATA_PIECE] =        { SECTION_ID_FRAME_SIDE_DATA_PIECE, "piece", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .element_name = "piece_entry", .unique_name = "frame_side_data_piece", .get_type = get_raw_string_type },
>       [SECTION_ID_FRAME_LOGS] =         { SECTION_ID_FRAME_LOGS, "logs", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_LOG, -1 } },
>       [SECTION_ID_FRAME_LOG] =          { SECTION_ID_FRAME_LOG, "log", 0, { -1 },  },
>       [SECTION_ID_LIBRARY_VERSIONS] =   { SECTION_ID_LIBRARY_VERSIONS, "library_versions", SECTION_FLAG_IS_ARRAY, { SECTION_ID_LIBRARY_VERSION, -1 } },
> @@ -309,7 +313,11 @@ static struct section sections[] = {
>       [SECTION_ID_PROGRAMS] =                   { SECTION_ID_PROGRAMS, "programs", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PROGRAM, -1 } },
>       [SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION] = { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_stream_disposition" },
>       [SECTION_ID_STREAM_GROUP_STREAM_TAGS] =        { SECTION_ID_STREAM_GROUP_STREAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_group_stream_tags" },
> -    [SECTION_ID_STREAM_GROUP] =                    { SECTION_ID_STREAM_GROUP, "stream_group", SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_TAGS, SECTION_ID_STREAM_GROUP_DISPOSITION, SECTION_ID_STREAM_GROUP_STREAMS, -1 }, .get_type = get_stream_group_type },
> +    [SECTION_ID_STREAM_GROUP] =                    { SECTION_ID_STREAM_GROUP, "stream_group", SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_TAGS, SECTION_ID_STREAM_GROUP_DISPOSITION, SECTION_ID_STREAM_GROUP_COMPONENTS, SECTION_ID_STREAM_GROUP_STREAMS, -1 }, .get_type = get_stream_group_type },
> +    [SECTION_ID_STREAM_GROUP_COMPONENTS] =         { SECTION_ID_STREAM_GROUP_COMPONENTS, "components", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_COMPONENT, -1 }, .element_name = "component", .unique_name = "stream_group_components" },
> +    [SECTION_ID_STREAM_GROUP_COMPONENT] =          { SECTION_ID_STREAM_GROUP_COMPONENT, "component", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_PIECES, -1 }, .unique_name = "stream_group_component", .element_name = "component_entry", .get_type = get_raw_string_type },
> +    [SECTION_ID_STREAM_GROUP_PIECES] =             { SECTION_ID_STREAM_GROUP_PIECES, "pieces", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_PIECE, -1 }, .element_name = "piece", .unique_name = "stream_group_pieces" },
> +    [SECTION_ID_STREAM_GROUP_PIECE] =              { SECTION_ID_STREAM_GROUP_PIECE, "piece", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .element_name = "piece_entry", .unique_name = "stream_group_piece", .get_type = get_raw_string_type },

I think I'll withdraw this patch for now. Some stream group types have 
several layers of data, so components and pieces would not be enough. 
This is the case for IAMF Audio Elements and Mix Presentation, for example.
A generic way to add N amount of layers would be needed.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 6/9] fftools/ffprobe: export Tile Grid Stream Group parameters
  2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 6/9] fftools/ffprobe: export Tile Grid Stream Group parameters James Almer
  2024-03-05 15:14   ` James Almer
@ 2024-03-05 15:21   ` Stefano Sabatini
  1 sibling, 0 replies; 22+ messages in thread
From: Stefano Sabatini @ 2024-03-05 15:21 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On date Monday 2024-03-04 21:00:26 -0300, James Almer wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  fftools/ffprobe.c | 41 ++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 36 insertions(+), 5 deletions(-)
> 
> diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
> index ff05c4c1db..e736023bcd 100644
> --- a/fftools/ffprobe.c
> +++ b/fftools/ffprobe.c
> @@ -209,6 +209,10 @@ typedef enum {
>      SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION,
>      SECTION_ID_STREAM_GROUP_STREAM_TAGS,
>      SECTION_ID_STREAM_GROUP,
> +    SECTION_ID_STREAM_GROUP_COMPONENTS,
> +    SECTION_ID_STREAM_GROUP_COMPONENT,
> +    SECTION_ID_STREAM_GROUP_PIECES,
> +    SECTION_ID_STREAM_GROUP_PIECE,
>      SECTION_ID_STREAM_GROUP_STREAMS,
>      SECTION_ID_STREAM_GROUP_STREAM,
>      SECTION_ID_STREAM_GROUP_DISPOSITION,
> @@ -282,8 +286,8 @@ static struct section sections[] = {
>      [SECTION_ID_FRAME_SIDE_DATA_TIMECODE] =       { SECTION_ID_FRAME_SIDE_DATA_TIMECODE, "timecode", 0, { -1 } },
>      [SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST] = { SECTION_ID_FRAME_SIDE_DATA_COMPONENT_LIST, "components", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_COMPONENT, -1 }, .element_name = "component", .unique_name = "frame_side_data_components" },
>      [SECTION_ID_FRAME_SIDE_DATA_COMPONENT] =      { SECTION_ID_FRAME_SIDE_DATA_COMPONENT, "component", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, -1 }, .unique_name = "frame_side_data_component", .element_name = "component_entry", .get_type = get_raw_string_type },
> -    [SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST] =   { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, "pieces", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_PIECE, -1 }, .element_name = "piece" },
> -    [SECTION_ID_FRAME_SIDE_DATA_PIECE] =        { SECTION_ID_FRAME_SIDE_DATA_PIECE, "piece", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .element_name = "piece_entry", .get_type = get_raw_string_type },
> +    [SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST] =   { SECTION_ID_FRAME_SIDE_DATA_PIECE_LIST, "pieces", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_SIDE_DATA_PIECE, -1 }, .element_name = "piece", .unique_name = "frame_side_data_pieces" },
> +    [SECTION_ID_FRAME_SIDE_DATA_PIECE] =        { SECTION_ID_FRAME_SIDE_DATA_PIECE, "piece", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .element_name = "piece_entry", .unique_name = "frame_side_data_piece", .get_type = get_raw_string_type },
>      [SECTION_ID_FRAME_LOGS] =         { SECTION_ID_FRAME_LOGS, "logs", SECTION_FLAG_IS_ARRAY, { SECTION_ID_FRAME_LOG, -1 } },
>      [SECTION_ID_FRAME_LOG] =          { SECTION_ID_FRAME_LOG, "log", 0, { -1 },  },
>      [SECTION_ID_LIBRARY_VERSIONS] =   { SECTION_ID_LIBRARY_VERSIONS, "library_versions", SECTION_FLAG_IS_ARRAY, { SECTION_ID_LIBRARY_VERSION, -1 } },
> @@ -309,7 +313,11 @@ static struct section sections[] = {
>      [SECTION_ID_PROGRAMS] =                   { SECTION_ID_PROGRAMS, "programs", SECTION_FLAG_IS_ARRAY, { SECTION_ID_PROGRAM, -1 } },
>      [SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION] = { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_stream_disposition" },
>      [SECTION_ID_STREAM_GROUP_STREAM_TAGS] =        { SECTION_ID_STREAM_GROUP_STREAM_TAGS, "tags", SECTION_FLAG_HAS_VARIABLE_FIELDS, { -1 }, .element_name = "tag", .unique_name = "stream_group_stream_tags" },
> -    [SECTION_ID_STREAM_GROUP] =                    { SECTION_ID_STREAM_GROUP, "stream_group", SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_TAGS, SECTION_ID_STREAM_GROUP_DISPOSITION, SECTION_ID_STREAM_GROUP_STREAMS, -1 }, .get_type = get_stream_group_type },
> +    [SECTION_ID_STREAM_GROUP] =                    { SECTION_ID_STREAM_GROUP, "stream_group", SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_TAGS, SECTION_ID_STREAM_GROUP_DISPOSITION, SECTION_ID_STREAM_GROUP_COMPONENTS, SECTION_ID_STREAM_GROUP_STREAMS, -1 }, .get_type = get_stream_group_type },
> +    [SECTION_ID_STREAM_GROUP_COMPONENTS] =         { SECTION_ID_STREAM_GROUP_COMPONENTS, "components", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_COMPONENT, -1 }, .element_name = "component", .unique_name = "stream_group_components" },
> +    [SECTION_ID_STREAM_GROUP_COMPONENT] =          { SECTION_ID_STREAM_GROUP_COMPONENT, "component", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { SECTION_ID_STREAM_GROUP_PIECES, -1 }, .unique_name = "stream_group_component", .element_name = "component_entry", .get_type = get_raw_string_type },
> +    [SECTION_ID_STREAM_GROUP_PIECES] =             { SECTION_ID_STREAM_GROUP_PIECES, "pieces", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_PIECE, -1 }, .element_name = "piece", .unique_name = "stream_group_pieces" },
> +    [SECTION_ID_STREAM_GROUP_PIECE] =              { SECTION_ID_STREAM_GROUP_PIECE, "piece", SECTION_FLAG_HAS_VARIABLE_FIELDS|SECTION_FLAG_HAS_TYPE, { -1 }, .element_name = "piece_entry", .unique_name = "stream_group_piece", .get_type = get_raw_string_type },
>      [SECTION_ID_STREAM_GROUP_STREAMS] =            { SECTION_ID_STREAM_GROUP_STREAMS, "streams", SECTION_FLAG_IS_ARRAY, { SECTION_ID_STREAM_GROUP_STREAM, -1 }, .unique_name = "stream_group_streams" },
>      [SECTION_ID_STREAM_GROUP_STREAM] =             { SECTION_ID_STREAM_GROUP_STREAM, "stream", 0, { SECTION_ID_STREAM_GROUP_STREAM_DISPOSITION, SECTION_ID_STREAM_GROUP_STREAM_TAGS, -1 }, .unique_name = "stream_group_stream" },
>      [SECTION_ID_STREAM_GROUP_DISPOSITION] =        { SECTION_ID_STREAM_GROUP_DISPOSITION, "disposition", 0, { -1 }, .unique_name = "stream_group_disposition" },
> @@ -3388,9 +3396,32 @@ static int show_programs(WriterContext *w, InputFile *ifile)
>  static void print_stream_group_params(WriterContext *w, AVStreamGroup *stg)
>  {
>      const char *unknown = "unknown";
> -    if (stg->type != AV_STREAM_GROUP_PARAMS_NONE)

> +    if (stg->type != AV_STREAM_GROUP_PARAMS_NONE) {
>          print_str("type", av_x_if_null(avformat_stream_group_name(stg->type), unknown));

nit: you can avoid the indent if you check the NONE case and return
immediately in that case

> -    else
> +        if (stg->type == AV_STREAM_GROUP_PARAMS_TILE_GRID) {
> +            AVStreamGroupTileGrid *tile_grid = stg->params.tile_grid;
> +            writer_print_section_header(w, NULL, SECTION_ID_STREAM_GROUP_COMPONENTS);
> +            writer_print_section_header(w, "parameters", SECTION_ID_STREAM_GROUP_COMPONENT);
> +            print_int("nb_tiles",          tile_grid->nb_tiles);
> +            print_int("coded_width",       tile_grid->coded_width);
> +            print_int("coded_height",      tile_grid->coded_height);
> +            print_int("horizontal_offset", tile_grid->horizontal_offset);
> +            print_int("vertical_offset",   tile_grid->vertical_offset);
> +            print_int("width",             tile_grid->width);
> +            print_int("height",            tile_grid->height);
> +            writer_print_section_header(w, NULL, SECTION_ID_STREAM_GROUP_PIECES);
> +            for (int i = 0; i < tile_grid->nb_tiles; i++) {
> +                writer_print_section_header(w, "tile_offset", SECTION_ID_STREAM_GROUP_PIECE);
> +                print_int("stream_index",           tile_grid->offsets[i].idx);
> +                print_int("tile_horizontal_offset", tile_grid->offsets[i].horizontal);
> +                print_int("tile_vertical_offset",   tile_grid->offsets[i].vertical);
> +                writer_print_section_footer(w);
> +            }
> +            writer_print_section_footer(w);
> +            writer_print_section_footer(w);
> +            writer_print_section_footer(w);
> +        }
> +    } else
>          print_str_opt("type", unknown);
>  }

LGTM, thanks.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 6/9] fftools/ffprobe: export Tile Grid Stream Group parameters
  2024-03-05 15:14   ` James Almer
@ 2024-03-05 15:24     ` Stefano Sabatini
  2024-03-05 15:50       ` James Almer
  0 siblings, 1 reply; 22+ messages in thread
From: Stefano Sabatini @ 2024-03-05 15:24 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On date Tuesday 2024-03-05 12:14:53 -0300, James Almer wrote:
> On 3/4/2024 9:00 PM, James Almer wrote:
> > Signed-off-by: James Almer <jamrial@gmail.com>
> > ---
> >   fftools/ffprobe.c | 41 ++++++++++++++++++++++++++++++++++++-----
> >   1 file changed, 36 insertions(+), 5 deletions(-)
[...] 

> I think I'll withdraw this patch for now. Some stream group types have
> several layers of data, so components and pieces would not be enough. This
> is the case for IAMF Audio Elements and Mix Presentation, for example.
> A generic way to add N amount of layers would be needed.

I see.

Does it mean that the nesting level is greater than 3 (side_data,
components, pieces)?

Probably the best we can do is some kind of flattening (ffprobe is not
designed for generic level of nesting, as we need to define the
structure of the layout, at least for some formats (e.g. XML)).
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 6/9] fftools/ffprobe: export Tile Grid Stream Group parameters
  2024-03-05 15:24     ` Stefano Sabatini
@ 2024-03-05 15:50       ` James Almer
  2024-03-06 13:39         ` Stefano Sabatini
  0 siblings, 1 reply; 22+ messages in thread
From: James Almer @ 2024-03-05 15:50 UTC (permalink / raw)
  To: ffmpeg-devel

On 3/5/2024 12:24 PM, Stefano Sabatini wrote:
> On date Tuesday 2024-03-05 12:14:53 -0300, James Almer wrote:
>> On 3/4/2024 9:00 PM, James Almer wrote:
>>> Signed-off-by: James Almer <jamrial@gmail.com>
>>> ---
>>>    fftools/ffprobe.c | 41 ++++++++++++++++++++++++++++++++++++-----
>>>    1 file changed, 36 insertions(+), 5 deletions(-)
> [...]
> 
>> I think I'll withdraw this patch for now. Some stream group types have
>> several layers of data, so components and pieces would not be enough. This
>> is the case for IAMF Audio Elements and Mix Presentation, for example.
>> A generic way to add N amount of layers would be needed.
> 
> I see.
> 
> Does it mean that the nesting level is greater than 3 (side_data,
> components, pieces)?

Yes. Look at AVIAMFMixPresentation, which has an array of AVIAMFSubmix, 
which in turn have an array of AVIAMFSubmixLayout plus an array of 
AVIAMFSubmixElement per submix, the latter which has a 
AVIAMFParamDefinition per element.
If the AVIAMFMixPresentation is the component, the AVIAMFSubmix would be 
the piece, and then we ran out of levels.

> 
> Probably the best we can do is some kind of flattening (ffprobe is not
> designed for generic level of nesting, as we need to define the
> structure of the layout, at least for some formats (e.g. XML)).
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

* Re: [FFmpeg-devel] [PATCH 6/9] fftools/ffprobe: export Tile Grid Stream Group parameters
  2024-03-05 15:50       ` James Almer
@ 2024-03-06 13:39         ` Stefano Sabatini
  0 siblings, 0 replies; 22+ messages in thread
From: Stefano Sabatini @ 2024-03-06 13:39 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On date Tuesday 2024-03-05 12:50:09 -0300, James Almer wrote:
> On 3/5/2024 12:24 PM, Stefano Sabatini wrote:
> > On date Tuesday 2024-03-05 12:14:53 -0300, James Almer wrote:
> > > On 3/4/2024 9:00 PM, James Almer wrote:
> > > > Signed-off-by: James Almer <jamrial@gmail.com>
> > > > ---
> > > >    fftools/ffprobe.c | 41 ++++++++++++++++++++++++++++++++++++-----
> > > >    1 file changed, 36 insertions(+), 5 deletions(-)
> > [...]
> > 
> > > I think I'll withdraw this patch for now. Some stream group types have
> > > several layers of data, so components and pieces would not be enough. This
> > > is the case for IAMF Audio Elements and Mix Presentation, for example.
> > > A generic way to add N amount of layers would be needed.
> > 
> > I see.
> > 
> > Does it mean that the nesting level is greater than 3 (side_data,
> > components, pieces)?
> 

> Yes. Look at AVIAMFMixPresentation, which has an array of AVIAMFSubmix,
> which in turn have an array of AVIAMFSubmixLayout plus an array of
> AVIAMFSubmixElement per submix, the latter which has a AVIAMFParamDefinition
> per element.
> If the AVIAMFMixPresentation is the component, the AVIAMFSubmix would be the
> piece, and then we ran out of levels.

Well, the simplemst approach is to add more levels to the layout
(side_data, components, pieces, subpieces?, ...).
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2024-03-06 13:39 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-05  0:00 [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces James Almer
2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 2/9] avformat/avformat: add a function to return the name of stream groups James Almer
2024-03-05 14:50   ` Stefano Sabatini
2024-03-05 14:52     ` Stefano Sabatini
2024-03-05 14:56       ` James Almer
2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 3/9 v3] fftools/ffprobe: add support for Stream Groups James Almer
2024-03-05 15:06   ` Stefano Sabatini
2024-03-05 15:09     ` James Almer
2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 4/9 v2] fate/iamf: print stream group information James Almer
2024-03-05 15:10   ` Stefano Sabatini
2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 5/9 v2] fate/mov: print stream group information for iamf tests James Almer
2024-03-05 15:14   ` Stefano Sabatini
2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 6/9] fftools/ffprobe: export Tile Grid Stream Group parameters James Almer
2024-03-05 15:14   ` James Almer
2024-03-05 15:24     ` Stefano Sabatini
2024-03-05 15:50       ` James Almer
2024-03-06 13:39         ` Stefano Sabatini
2024-03-05 15:21   ` Stefano Sabatini
2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 7/9 v3] fate/mov: print stream group information for avif/heic tests James Almer
2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 8/9 v2] fate/mov: use framecrc for the remaining " James Almer
2024-03-05  0:00 ` [FFmpeg-devel] [PATCH 9/9] fate/mov: add a heic test with a derived image using a single item twice James Almer
2024-03-05 14:46 ` [FFmpeg-devel] [PATCH 1/9 v2] fftools/ffprobe: fix printing side data components and pieces Stefano Sabatini

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git