From 62d5f9e5cab45df0505862e5ede2bae55d1881aa Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Thu, 9 Feb 2012 22:44:10 -0500 Subject: flacdec: set channel_layout based on channel count Channel layouts are specified in the FLAC format description at http://flac.sourceforge.net/format.html fixes Bug 209 --- libavcodec/flacdec.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libavcodec/flacdec.c b/libavcodec/flacdec.c index 7454d8b7f7..ad3827b6cc 100644 --- a/libavcodec/flacdec.c +++ b/libavcodec/flacdec.c @@ -33,6 +33,7 @@ #include +#include "libavutil/audioconvert.h" #include "libavutil/crc.h" #include "avcodec.h" #include "internal.h" @@ -62,6 +63,15 @@ typedef struct FLACContext { int32_t *decoded[FLAC_MAX_CHANNELS]; ///< decoded samples } FLACContext; +static const int64_t flac_channel_layouts[6] = { + AV_CH_LAYOUT_MONO, + AV_CH_LAYOUT_STEREO, + AV_CH_LAYOUT_SURROUND, + AV_CH_LAYOUT_QUAD, + AV_CH_LAYOUT_5POINT0, + AV_CH_LAYOUT_5POINT1 +}; + static void allocate_buffers(FLACContext *s); int avpriv_flac_is_extradata_valid(AVCodecContext *avctx, @@ -120,6 +130,9 @@ static av_cold int flac_decode_init(AVCodecContext *avctx) avcodec_get_frame_defaults(&s->frame); avctx->coded_frame = &s->frame; + if (avctx->channels <= FF_ARRAY_ELEMS(flac_channel_layouts)) + avctx->channel_layout = flac_channel_layouts[avctx->channels - 1]; + return 0; } -- cgit v1.2.1