summaryrefslogtreecommitdiffstats
path: root/src/read-vorbis.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/read-vorbis.c')
-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;