flacdec: do not overwrite a channel layout set by the caller
authorAnton Khirnov <anton@khirnov.net>
Sun, 25 May 2014 09:12:33 +0000 (11:12 +0200)
committerAnton Khirnov <anton@khirnov.net>
Wed, 28 May 2014 05:46:04 +0000 (07:46 +0200)
The channel layout mask for non-standard layouts is typically stored at
the container level (as a vorbiscomment tag) for FLAC.

libavcodec/flac.c

index b3e38472ae899c15b1e2ded859782984c822d00e..e6a8ab837038876f20f56058e50d1615e6fdcd8c 100644 (file)
@@ -225,7 +225,10 @@ void avpriv_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *
     avctx->channels = s->channels;
     avctx->sample_rate = s->samplerate;
     avctx->bits_per_raw_sample = s->bps;
-    ff_flac_set_channel_layout(avctx);
+
+    if (!avctx->channel_layout ||
+        av_get_channel_layout_nb_channels(avctx->channel_layout) != avctx->channels)
+        ff_flac_set_channel_layout(avctx);
 
     s->samples  = get_bits_long(&gb, 32) << 4;
     s->samples |= get_bits(&gb, 4);