summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorCarl Eugen Hoyos <cehoyos@ag.or.at>2011-04-29 10:46:45 +0200
committerCarl Eugen Hoyos <cehoyos@ag.or.at>2011-04-29 10:46:45 +0200
commitd804784db5a2bd47e614770a7bd86403bf84bdf6 (patch)
tree859a0e2825a4a17f1b9d177312ad8714a53c71f6 /libavcodec
parentd2ee3c913d6fec3cb8c0c1b67347007c7cd604e1 (diff)
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.
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/tta.c12
1 files changed, 12 insertions, 0 deletions
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);