Commit c8adb080 authored by Erik de Castro Lopo's avatar Erik de Castro Lopo
Browse files

Add appropriate WAV channel masks for 7 and 8 channel files.

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>
parent d75cb67d
...@@ -1247,11 +1247,11 @@ ...@@ -1247,11 +1247,11 @@
<li>1 channel: mono</li> <li>1 channel: mono</li>
<li>2 channels: left, right</li> <li>2 channels: left, right</li>
<li>3 channels: left, right, center</li> <li>3 channels: left, right, center</li>
<li>4 channels: left, right, back left, back right</li> <li>4 channels: front left, front right, back left, back right</li>
<li>5 channels: left, right, center, back/surround left, back/surround right</li> <li>5 channels: front left, front right, front center, back/surround left, back/surround right</li>
<li>6 channels: left, right, center, LFE, 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: not defined</li> <li>7 channels: front left, front right, front center, LFE, back center, side left, side right</li>
<li>8 channels: not defined</li> <li>8 channels: front left, front right, front center, LFE, back left, back right, side left, side right</li>
</ul> </ul>
</li> </li>
<li> <li>
......
...@@ -354,6 +354,18 @@ FLAC__bool DecoderSession_process(DecoderSession *d) ...@@ -354,6 +354,18 @@ FLAC__bool DecoderSession_process(DecoderSession *d)
else if(d->channels == 6) { else if(d->channels == 6) {
d->channel_mask = 0x060f; 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 */ /* write the WAVE/AIFF headers if necessary */
......
...@@ -461,7 +461,9 @@ static FLAC__bool get_sample_info_wave(EncoderSession *e, encode_options_t optio ...@@ -461,7 +461,9 @@ static FLAC__bool get_sample_info_wave(EncoderSession *e, encode_options_t optio
} }
else if( else if(
channel_mask == 0x003f || /* 6 channels: front left, front right, front center, LFE, back left, back 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 */
) { ) {
/* to dolby order: front left, center, front right, surround left, surround right, LFE */ /* to dolby order: front left, center, front right, surround left, surround right, LFE */
channel_map[1] = 2; channel_map[1] = 2;
...@@ -481,7 +483,9 @@ static FLAC__bool get_sample_info_wave(EncoderSession *e, encode_options_t optio ...@@ -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 == 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 == 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 == 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 */ /* keep default channel order */
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment