summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Ekström <jeebjp@gmail.com>2022-05-24 22:52:54 +0300
committerJan Ekström <jeebjp@gmail.com>2022-06-15 21:19:10 +0300
commitedfd17ab1863ffdc512df4427f3203aeabe4dd0f (patch)
treef82a155ddfe19408e6e68af8855350510139c7cc
parente7483ced5de71359223292c07bd177e3c5cb8d20 (diff)
downloadmpv-edfd17ab1863ffdc512df4427f3203aeabe4dd0f.tar.bz2
mpv-edfd17ab1863ffdc512df4427f3203aeabe4dd0f.tar.xz
ad_lavc: switch to AVChannelLayout when available
-rw-r--r--audio/decode/ad_lavc.c19
1 files changed, 18 insertions, 1 deletions
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 <libavutil/common.h>
#include <libavutil/intreadwrite.h>
+#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