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;
}