Add appropriate WAV channel masks for 7 and 8 channel files.
authorErik de Castro Lopo <erikd@mega-nerd.com>
Sat, 2 Mar 2013 03:09:46 +0000 (14:09 +1100)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Sat, 2 Mar 2013 03:09:46 +0000 (14:09 +1100)
This commit accepts the new default channel masks for 6.1 and 7.1
surround input WAV files, and writes the corresponding masks when
decoding to WAV without a channel mask from the metadata block.

The local copy of the format spec is also updated with the new text
from the flac-website repository.

Patch from Ralph Giles <giles@mozilla.com>

doc/html/format.html
src/flac/decode.c
src/flac/encode.c

index a8a539e..87f6413 100644 (file)
                                                <li>1 channel: mono</li>
                                                <li>2 channels: left, right</li>
                                                <li>3 channels: left, right, center</li>
-                                               <li>4 channels: left, right, back left, back right</li>
-                                               <li>5 channels: left, right, center, back/surround left, back/surround right</li>
-                                               <li>6 channels: left, right, center, LFE, back/surround left, back/surround right</li>
-                                               <li>7 channels: not defined</li>
-                                               <li>8 channels: not defined</li>
+                                               <li>4 channels: front left, front right, back left, back right</li>
+                                               <li>5 channels: front left, front right, front center, back/surround left, back/surround right</li>
+                                               <li>6 channels: front left, front right, front center, LFE, back/surround left, back/surround right</li>
+                                               <li>7 channels: front left, front right, front center, LFE, back center, side left, side right</li>
+                                               <li>8 channels: front left, front right, front center, LFE, back left, back right, side left, side right</li>
                                        </ul>
                                </li>
                                <li>
index 98fc430..e07b5ae 100644 (file)
@@ -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 */
index eeea08a..04539fc 100644 (file)
@@ -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 */
                                }