diff --git a/doc/html/format.html b/doc/html/format.html
index a8a539e0..87f6413d 100644
--- a/doc/html/format.html
+++ b/doc/html/format.html
@@ -1247,11 +1247,11 @@
1 channel: mono
2 channels: left, right
3 channels: left, right, center
- 4 channels: left, right, back left, back right
- 5 channels: left, right, center, back/surround left, back/surround right
- 6 channels: left, right, center, LFE, back/surround left, back/surround right
- 7 channels: not defined
- 8 channels: not defined
+ 4 channels: front left, front right, back left, back right
+ 5 channels: front left, front right, front center, back/surround left, back/surround right
+ 6 channels: front left, front right, front center, LFE, back/surround left, back/surround right
+ 7 channels: front left, front right, front center, LFE, back center, side left, side right
+ 8 channels: front left, front right, front center, LFE, back left, back right, side left, side right
diff --git a/src/flac/decode.c b/src/flac/decode.c
index 98fc430f..e07b5aef 100644
--- a/src/flac/decode.c
+++ b/src/flac/decode.c
@@ -354,6 +354,18 @@ FLAC__bool DecoderSession_process(DecoderSession *d)
else if(d->channels == 6) {
d->channel_mask = 0x060f;
}
+ else if(d->channels == 7) {
+ d->channel_mask = 0x070f;
+ }
+ else if(d->channels == 8) {
+ d->channel_mask = 0x063f;
+ }
+ else if(d->channels == 7) {
+ d->channel_mask = 0x070f;
+ }
+ else if(d->channels == 8) {
+ d->channel_mask = 0x063f;
+ }
}
/* write the WAVE/AIFF headers if necessary */
diff --git a/src/flac/encode.c b/src/flac/encode.c
index eeea08aa..04539fc7 100644
--- a/src/flac/encode.c
+++ b/src/flac/encode.c
@@ -461,7 +461,9 @@ static FLAC__bool get_sample_info_wave(EncoderSession *e, encode_options_t optio
}
else if(
channel_mask == 0x003f || /* 6 channels: front left, front right, front center, LFE, back left, back right */
- channel_mask == 0x060f /* 6 channels: front left, front right, front center, LFE, side left, side right */
+ channel_mask == 0x060f || /* 6 channels: front left, front right, front center, LFE, side left, side right */
+ channel_mask == 0x070f || /* 7 channels: front left, front right, front center, LFE, back center, side left, side right */
+ channel_mask == 0x063f /* 8 channels: front left, front right, front center, LFE, back left, back right, side left, side right */
) {
/* to dolby order: front left, center, front right, surround left, surround right, LFE */
channel_map[1] = 2;
@@ -481,7 +483,9 @@ static FLAC__bool get_sample_info_wave(EncoderSession *e, encode_options_t optio
channel_mask == 0x0037 || /* 5 channels: front left, front right, front center, back left, back right */
channel_mask == 0x0607 || /* 5 channels: front left, front right, front center, side left, side right */
channel_mask == 0x003f || /* 6 channels: front left, front right, front center, LFE, back left, back right */
- channel_mask == 0x060f /* 6 channels: front left, front right, front center, LFE, side left, side right */
+ channel_mask == 0x060f || /* 6 channels: front left, front right, front center, LFE, side left, side right */
+ channel_mask == 0x070f || /* 7 channels: front left, front right, front center, LFE, back center, side left, side right */
+ channel_mask == 0x063f /* 8 channels: front left, front right, front center, LFE, back left, back right, side left, side right */
) {
/* keep default channel order */
}