From edfd17ab1863ffdc512df4427f3203aeabe4dd0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Ekstr=C3=B6m?= Date: Tue, 24 May 2022 22:52:54 +0300 Subject: ad_lavc: switch to AVChannelLayout when available --- audio/decode/ad_lavc.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/audio/decode/ad_lavc.c b/audio/decode/ad_lavc.c index 228054e8d6..34c3a183eb 100644 --- a/audio/decode/ad_lavc.c +++ b/audio/decode/ad_lavc.c @@ -26,8 +26,11 @@ #include #include +#include "config.h" + #include "mpv_talloc.h" #include "audio/aframe.h" +#include "audio/chmap_avchannel.h" #include "audio/fmt-conversion.h" #include "common/av_common.h" #include "common/codecs.h" @@ -106,8 +109,22 @@ static bool init(struct mp_filter *da, struct mp_codec_params *codec, lavc_context->pkt_timebase = ctx->codec_timebase; if (opts->downmix && mpopts->audio_output_channels.num_chmaps == 1) { + const struct mp_chmap *requested_layout = + &mpopts->audio_output_channels.chmaps[0]; +#if !HAVE_AV_CHANNEL_LAYOUT lavc_context->request_channel_layout = - mp_chmap_to_lavc(&mpopts->audio_output_channels.chmaps[0]); + mp_chmap_to_lavc(requested_layout); +#else + AVChannelLayout av_layout = { 0 }; + mp_chmap_to_av_layout(&av_layout, requested_layout); + + // Always try to set requested output layout - currently only something + // supported by AC3, MLP/TrueHD, DTS and the fdk-aac wrapper. + av_opt_set_chlayout(lavc_context, "downmix", &av_layout, + AV_OPT_SEARCH_CHILDREN); + + av_channel_layout_uninit(&av_layout); +#endif } // Always try to set - option only exists for AC3 at the moment -- cgit v1.2.3