From: Erik de Castro Lopo Date: Sat, 2 Mar 2013 03:09:46 +0000 (+1100) Subject: Add appropriate WAV channel masks for 7 and 8 channel files. X-Git-Tag: 1.3.0pre1~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c8adb080b06a98ee65676f8d5149cc58e3e2cb65;p=platform%2Fupstream%2Fflac.git 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 --- diff --git a/doc/html/format.html b/doc/html/format.html index a8a539e..87f6413 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 98fc430..e07b5ae 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 eeea08a..04539fc 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 */ }