From b662613b63e902e3978bc3977e4ad3ccb738110f Mon Sep 17 00:00:00 2001 From: James Almer Date: Thu, 4 Jun 2026 14:46:07 -0300 Subject: [PATCH] avfilter/af_aresample: also look for downmix matrix side data Signed-off-by: James Almer --- libavfilter/af_aresample.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/libavfilter/af_aresample.c b/libavfilter/af_aresample.c index 15b14b27f7..8e7f5bfc56 100644 --- a/libavfilter/af_aresample.c +++ b/libavfilter/af_aresample.c @@ -145,6 +145,30 @@ static int config_output(AVFilterLink *outlink) if (ret < 0) return ret; + sd = av_frame_side_data_get(inlink->side_data, inlink->nb_side_data, + AV_FRAME_DATA_DOWNMIX_MATRIX); + if (sd) { + const AVDownmixMatrix *dm = (AVDownmixMatrix *)sd->data; + + if (inlink->ch_layout.nb_channels == dm->in_ch_count && + !av_channel_layout_compare(&outlink->ch_layout, &(AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO)) { + swr_set_matrix(aresample->swr, + (double *)((uint8_t *)dm + dm->coeffs_offset), + dm->in_ch_count); + + switch (dm->downmix_type) { + case AV_DOWNMIX_TYPE_LTRT: + matrix_encoding = AV_MATRIX_ENCODING_DOLBY; + break; + case AV_DOWNMIX_TYPE_DPLII: + matrix_encoding = AV_MATRIX_ENCODING_DPLII; + break; + default: + break; + } + } + } + sd = av_frame_side_data_get(inlink->side_data, inlink->nb_side_data, AV_FRAME_DATA_DOWNMIX_INFO); if (sd) {