summaryrefslogtreecommitdiff
path: root/libavcodec/tta.c
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/tta.c
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/tta.c')
-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);