From d804784db5a2bd47e614770a7bd86403bf84bdf6 Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Fri, 29 Apr 2011 10:46:45 +0200 Subject: [PATCH] Set channel layout for True Audio files. This is not documented (and possibly not originally intended), but it's what the current reference decoder does. --- libavcodec/tta.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libavcodec/tta.c b/libavcodec/tta.c index 96a2f51c78..3367788633 100644 --- a/libavcodec/tta.c +++ b/libavcodec/tta.c @@ -205,6 +205,16 @@ static int tta_get_unary(GetBitContext *gb) return ret; } +static const int64_t tta_channel_layouts[7] = { + AV_CH_LAYOUT_STEREO, + AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY, + AV_CH_LAYOUT_QUAD, + 0, + AV_CH_LAYOUT_5POINT1_BACK, + AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER, + AV_CH_LAYOUT_7POINT1_WIDE +}; + static av_cold int tta_decode_init(AVCodecContext * avctx) { TTAContext *s = avctx->priv_data; @@ -234,6 +244,8 @@ static av_cold int tta_decode_init(AVCodecContext * avctx) } s->is_float = (s->flags == FORMAT_FLOAT); avctx->channels = s->channels = get_bits(&s->gb, 16); + if (s->channels > 1 && s->channels < 9) + avctx->channel_layout = tta_channel_layouts[s->channels-2]; avctx->bits_per_coded_sample = get_bits(&s->gb, 16); s->bps = (avctx->bits_per_coded_sample + 7) / 8; avctx->sample_rate = get_bits_long(&s->gb, 32);