From 6ce9f94f020d6a6d56a5a4d34abc1340c942b7a6 Mon Sep 17 00:00:00 2001 From: Adrien Maglo Date: Thu, 21 Dec 2017 18:18:40 +0100 Subject: [PATCH] avcodec: do not reorder Ambisonics channels encoded in AAC Keep the codec order to achieve a correct Ambisonics rendering. Signed-off-by: Jean-Baptiste Kempf --- modules/codec/avcodec/audio.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/modules/codec/avcodec/audio.c b/modules/codec/avcodec/audio.c index 6b43627c1e..b9eb7d5856 100644 --- a/modules/codec/avcodec/audio.c +++ b/modules/codec/avcodec/audio.c @@ -624,6 +624,20 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust ) if( i_channels_dst != i_channels_src && b_trust ) msg_Warn( p_dec, "%d channels are dropped", i_channels_src - i_channels_dst ); + /* Restore the right order of Ambisonic order 1 channels encoded in AAC... */ + if (p_dec->fmt_out.audio.channel_type == AUDIO_CHANNEL_TYPE_AMBISONICS + && p_dec->fmt_in.i_codec == VLC_CODEC_MP4A + && i_channels_src == 4) + { + p_sys->pi_extraction[0] = 2; + p_sys->pi_extraction[1] = 0; + p_sys->pi_extraction[2] = 1; + p_sys->pi_extraction[3] = 3; + i_layout_dst = AOUT_CHAN_CENTER | AOUT_CHAN_LEFT + | AOUT_CHAN_RIGHT | AOUT_CHAN_REARCENTER; + p_sys->b_extract = true; + } + p_dec->fmt_out.audio.i_physical_channels = i_layout_dst; } else -- 2.11.4.GIT