This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit 6336cffdceeece9b7d222d5dc88705db08f88aac Author: James Almer <[email protected]> AuthorDate: Thu Jun 4 14:44:10 2026 -0300 Commit: James Almer <[email protected]> CommitDate: Sat Jul 11 19:32:17 2026 -0300 avfilter/af_ashowinfo: support printing downmix matrix side data Signed-off-by: James Almer <[email protected]> --- libavfilter/af_ashowinfo.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/libavfilter/af_ashowinfo.c b/libavfilter/af_ashowinfo.c index c0be37cd3d..2653d0d089 100644 --- a/libavfilter/af_ashowinfo.c +++ b/libavfilter/af_ashowinfo.c @@ -105,6 +105,42 @@ static void dump_downmix(AVFilterContext *ctx, AVFrameSideData *sd) di->lfe_mix_level); } +static const int downmix_type_map[AV_DOWNMIX_TYPE_NB] = { + [AV_DOWNMIX_TYPE_UNKNOWN] = 0, + [AV_DOWNMIX_TYPE_LORO] = 2, + [AV_DOWNMIX_TYPE_LTRT] = 2, + [AV_DOWNMIX_TYPE_DPLII] = 2, +}; + +static void dump_downmix_matrix(AVFilterContext *ctx, AVFrameSideData *sd, AVChannelLayout *ch_layout) +{ + AVDownmixMatrix *dm = (AVDownmixMatrix *)sd->data; + char buf[128]; + + av_log(ctx, AV_LOG_INFO, "downmix matrix: "); + if (dm->in_ch_count != ch_layout->nb_channels) { + av_log(ctx, AV_LOG_INFO, "invalid data"); + return; + } + + av_log(ctx, AV_LOG_INFO, "downmix type - "); + switch (dm->downmix_type) { + case AV_DOWNMIX_TYPE_LORO: av_log(ctx, AV_LOG_INFO, "Lo/Ro\n"); break; + case AV_DOWNMIX_TYPE_LTRT: av_log(ctx, AV_LOG_INFO, "Lt/Rt\n"); break; + case AV_DOWNMIX_TYPE_DPLII: av_log(ctx, AV_LOG_INFO, "Dolby Pro Logic II\n"); break; + default: av_log(ctx, AV_LOG_WARNING, "invalid data"); return; + } + + for (int i = 0; i < downmix_type_map[dm->downmix_type]; i++) { + av_log(ctx, AV_LOG_INFO, "[%s] = { ", i ? "FR" : "FL"); + for (int j = 0; j < dm->in_ch_count; j++) { + av_channel_name(buf, sizeof(buf), av_channel_layout_channel_from_index(ch_layout, j)); + av_log(ctx, AV_LOG_INFO, ".%s = %f, ", buf, *av_downmix_matrix_coeff(dm, i, j)); + } + av_log(ctx, AV_LOG_INFO, "}%s", i == downmix_type_map[dm->downmix_type] - 1 ? "" : ",\n"); + } +} + static void print_gain(AVFilterContext *ctx, const char *str, int32_t gain) { av_log(ctx, AV_LOG_INFO, "%s - ", str); @@ -302,6 +338,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf) switch (sd->type) { case AV_FRAME_DATA_MATRIXENCODING: dump_matrixenc (ctx, sd); break; case AV_FRAME_DATA_DOWNMIX_INFO: dump_downmix (ctx, sd); break; + case AV_FRAME_DATA_DOWNMIX_MATRIX: dump_downmix_matrix(ctx, sd, &buf->ch_layout); break; case AV_FRAME_DATA_REPLAYGAIN: dump_replaygain(ctx, sd); break; case AV_FRAME_DATA_AUDIO_SERVICE_TYPE: dump_audio_service_type(ctx, sd); break; case AV_FRAME_DATA_IAMF_DEMIXING_INFO_PARAM: _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
