avfilter/af_aresample: also look for downmix matrix side data

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer
2026-06-04 14:46:07 -03:00
parent 9646228fd6
commit b662613b63

View File

@@ -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) {