Commit e88ef42af1 for ffmpeg

commit e88ef42af183b3206a1e5fa36766802f41c86ca3
Author: James Almer <jamrial@gmail.com>
Date:   Mon Oct 19 11:20:16 2026 -0300

    avformat/dump: print Alpha channel Stream Group information

    And merge all the Layered Video based group types into a single block.

    Signed-off-by: James Almer <jamrial@gmail.com>

diff --git a/libavformat/dump.c b/libavformat/dump.c
index c2f9fc6f7b..6bd6b3462c 100644
--- a/libavformat/dump.c
+++ b/libavformat/dump.c
@@ -853,16 +853,33 @@ static void dump_stream_group(const AVFormatContext *ic, uint8_t *printed,
         }
         break;
     }
+    case AV_STREAM_GROUP_PARAMS_ALPHA:
     case AV_STREAM_GROUP_PARAMS_DOLBY_VISION:
+    case AV_STREAM_GROUP_PARAMS_GAIN_MAP:
     case AV_STREAM_GROUP_PARAMS_LCEVC: {
         const AVStreamGroupLayeredVideo *layered_video = stg->params.layered_video;
         AVCodecContext *avctx = avcodec_alloc_context3(NULL);
         const char *ptr = NULL;
-        av_log(NULL, AV_LOG_INFO, " %s:", stg->type == AV_STREAM_GROUP_PARAMS_DOLBY_VISION ?
-                                          "Dolby Vision" : "LCEVC");
+        switch (stg->type) {
+        case AV_STREAM_GROUP_PARAMS_ALPHA:
+            av_log(NULL, AV_LOG_INFO, " Alpha:");
+            break;
+        case AV_STREAM_GROUP_PARAMS_DOLBY_VISION:
+            av_log(NULL, AV_LOG_INFO, " Dolby Vision:");
+            break;
+        case AV_STREAM_GROUP_PARAMS_GAIN_MAP:
+            av_log(NULL, AV_LOG_INFO, " Gain Map:");
+            break;
+        case AV_STREAM_GROUP_PARAMS_LCEVC:
+            av_log(NULL, AV_LOG_INFO, " LCEVC:");
+            break;
+        }
         if (avctx && stg->nb_entries == 2 &&
-            stg->entries[!layered_video->el_index]->type == AV_STREAM_GROUP_ENTRY_STREAM) {
-            const AVStream *st = stg->entries[!layered_video->el_index]->stream;
+            (stg->entries[ layered_video->el_index]->type == AV_STREAM_GROUP_ENTRY_STREAM ||
+             stg->entries[!layered_video->el_index]->type == AV_STREAM_GROUP_ENTRY_STREAM)) {
+            const AVStream *st = stg->entries[!layered_video->el_index]->type == AV_STREAM_GROUP_ENTRY_STREAM ?
+                                 stg->entries[!layered_video->el_index]->stream :
+                                 stg->entries[ layered_video->el_index]->stream;
             if (!avcodec_parameters_to_context(avctx, st->codecpar)) {
                 avctx->width  = layered_video->width;
                 avctx->height = layered_video->height;
@@ -874,6 +891,9 @@ static void dump_stream_group(const AVFormatContext *ic, uint8_t *printed,
                 avcodec_string(buf, sizeof(buf), avctx, is_output);
                 ptr = av_stristr(buf, " ");
             }
+        } else {
+            buf[0] = 0;
+            av_strlcatf(buf, sizeof(buf), " %dx%d", layered_video->width, layered_video->height);
         }
         avcodec_free_context(&avctx);
         if (ptr)
@@ -886,11 +906,13 @@ static void dump_stream_group(const AVFormatContext *ic, uint8_t *printed,
                       extra_indent, log_level);
         for (int i = 0; i < stg->nb_entries; i++) {
             const AVStreamGroupEntry *entry = stg->entries[i];
-            if (entry->type != AV_STREAM_GROUP_ENTRY_STREAM)
-                continue;
-            const AVStream *st = entry->stream;
-            dump_stream_format(ic, st->index, i, index, is_output, AV_LOG_VERBOSE);
-            printed[st->index] = 1;
+            if (entry->type == AV_STREAM_GROUP_ENTRY_STREAM) {
+                const AVStream *st = entry->stream;
+                dump_stream_format(ic, st->index, i, index, is_output, log_level);
+                printed[st->index] = 1;
+            } else if (entry->type == AV_STREAM_GROUP_ENTRY_STREAM_GROUP)
+                dump_stream_group(ic, printed, entry->stream_group->index, index,
+                                  is_output, AV_LOG_VERBOSE);
         }
         break;
     }
@@ -906,33 +928,6 @@ static void dump_stream_group(const AVFormatContext *ic, uint8_t *printed,
         }
         break;
     }
-    case AV_STREAM_GROUP_PARAMS_GAIN_MAP: {
-        const AVStreamGroupLayeredVideo *layered_video = stg->params.layered_video;
-        const char *ptr = NULL;
-        av_log(NULL, AV_LOG_INFO, " Gain Map:");
-        buf[0] = 0;
-        av_strlcatf(buf, sizeof(buf), " %dx%d", layered_video->width, layered_video->height);
-        ptr = av_stristr(buf, " ");
-        if (ptr)
-            av_log(NULL, log_level, "%s", ptr);
-        dump_disposition(stg->disposition, log_level);
-        av_log(NULL, log_level, "\n");
-        dump_metadata(NULL, stg->metadata, extra_indent, log_level);
-        dump_sidedata(NULL, stg->coded_side_data, stg->nb_coded_side_data,
-                      layered_video->width, layered_video->height, (AVRational) {0,1},
-                      extra_indent, log_level);
-        for (int i = 0; i < stg->nb_entries; i++) {
-            const AVStreamGroupEntry *entry = stg->entries[i];
-            if (entry->type == AV_STREAM_GROUP_ENTRY_STREAM) {
-                const AVStream *st = entry->stream;
-                dump_stream_format(ic, st->index, i, index, is_output, log_level);
-                printed[st->index] = 1;
-            } else if (entry->type == AV_STREAM_GROUP_ENTRY_STREAM_GROUP)
-                dump_stream_group(ic, printed, entry->stream_group->index, index,
-                                  is_output, AV_LOG_VERBOSE);
-        }
-        break;
-    }
     default:
         break;
     }