summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-01-14 21:24:59 +0100
committerLennart Poettering <lennart@poettering.net>2010-01-14 21:24:59 +0100
commitb3262f7b55fc377f842bec243702fe9106168553 (patch)
treeff9c3fee8a46ac5a0f072fb3ee7f2a80faca2a6a
parentec3c68c0f52c2ea03c07372e979c3832987fbc23 (diff)
vorbis: support the recently defined 6.1 and 7.1 modes of vorbis
-rw-r--r--src/read-vorbis.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/read-vorbis.c b/src/read-vorbis.c
index 93dcbca..fb2150a 100644
--- a/src/read-vorbis.c
+++ b/src/read-vorbis.c
@@ -35,7 +35,7 @@
struct ca_vorbis {
OggVorbis_File ovf;
off_t size;
- ca_channel_position_t channel_map[6];
+ ca_channel_position_t channel_map[8];
};
static int convert_error(int or) {
@@ -136,6 +136,26 @@ const ca_channel_position_t* ca_vorbis_get_channel_map(ca_vorbis *v) {
/* See http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-800004.3.9 */
switch (ca_vorbis_get_nchannels(v)) {
+ case 8:
+ v->channel_map[0] = CA_CHANNEL_FRONT_LEFT;
+ v->channel_map[1] = CA_CHANNEL_FRONT_CENTER;
+ v->channel_map[2] = CA_CHANNEL_FRONT_RIGHT;
+ v->channel_map[3] = CA_CHANNEL_SIDE_LEFT;
+ v->channel_map[4] = CA_CHANNEL_SIDE_RIGHT;
+ v->channel_map[5] = CA_CHANNEL_REAR_LEFT;
+ v->channel_map[6] = CA_CHANNEL_REAR_RIGHT;
+ v->channel_map[7] = CA_CHANNEL_LFE;
+ return v->channel_map;
+
+ case 7:
+ v->channel_map[0] = CA_CHANNEL_FRONT_LEFT;
+ v->channel_map[1] = CA_CHANNEL_FRONT_CENTER;
+ v->channel_map[2] = CA_CHANNEL_FRONT_RIGHT;
+ v->channel_map[3] = CA_CHANNEL_SIDE_LEFT;
+ v->channel_map[4] = CA_CHANNEL_SIDE_RIGHT;
+ v->channel_map[5] = CA_CHANNEL_REAR_CENTER;
+ v->channel_map[6] = CA_CHANNEL_LFE;
+ return v->channel_map;
case 6:
v->channel_map[5] = CA_CHANNEL_LFE;