diff options
author | dalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-22 18:28:03 +0000 |
---|---|---|
committer | dalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-22 18:28:03 +0000 |
commit | 5702d51627213f145aca4bce1a91883a3cc94401 (patch) | |
tree | 2c3465426ff2ff4ba8fccea4bd8387fd7828222b /media | |
parent | fcfb4092a714add207e330c5695e8710312a2bd0 (diff) | |
download | chromium_src-5702d51627213f145aca4bce1a91883a3cc94401.zip chromium_src-5702d51627213f145aca4bce1a91883a3cc94401.tar.gz chromium_src-5702d51627213f145aca4bce1a91883a3cc94401.tar.bz2 |
Fix 5.1 -> 7.1 upmixing.
From a general search and looking at the channel layouts shown on
Dolby's site this appears to be correct.
http://www.dolby.com/us/en/consumer/setup/connection-guide/home-theater-speaker-guide/index.html
BUG=none
TEST=none
Review URL: https://codereview.chromium.org/12846009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@189857 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/base/channel_layout.cc | 32 | ||||
-rw-r--r-- | media/base/channel_mixer.cc | 10 |
2 files changed, 26 insertions, 16 deletions
diff --git a/media/base/channel_layout.cc b/media/base/channel_layout.cc index 927cd77..e895ddc 100644 --- a/media/base/channel_layout.cc +++ b/media/base/channel_layout.cc @@ -16,16 +16,16 @@ static const int kLayoutToChannels[] = { 2, // CHANNEL_LAYOUT_STEREO 3, // CHANNEL_LAYOUT_2_1 3, // CHANNEL_LAYOUT_SURROUND - 4, // CHANNEL_LAYOUT_4POINT0 + 4, // CHANNEL_LAYOUT_4_0 4, // CHANNEL_LAYOUT_2_2 4, // CHANNEL_LAYOUT_QUAD - 5, // CHANNEL_LAYOUT_5POINT0 - 6, // CHANNEL_LAYOUT_5POINT1 - 5, // CHANNEL_LAYOUT_5POINT0_BACK - 6, // CHANNEL_LAYOUT_5POINT1_BACK - 7, // CHANNEL_LAYOUT_7POINT0 - 8, // CHANNEL_LAYOUT_7POINT1 - 8, // CHANNEL_LAYOUT_7POINT1_WIDE + 5, // CHANNEL_LAYOUT_5_0 + 6, // CHANNEL_LAYOUT_5_1 + 5, // CHANNEL_LAYOUT_5_0_BACK + 6, // CHANNEL_LAYOUT_5_1_BACK + 7, // CHANNEL_LAYOUT_7_0 + 8, // CHANNEL_LAYOUT_7_1 + 8, // CHANNEL_LAYOUT_7_1_WIDE 2, // CHANNEL_LAYOUT_STEREO_DOWNMIX 3, // CHANNEL_LAYOUT_2POINT1 4, // CHANNEL_LAYOUT_3_1 @@ -69,7 +69,7 @@ static const int kChannelOrderings[CHANNEL_LAYOUT_MAX][CHANNELS_MAX] = { // CHANNEL_LAYOUT_SURROUND { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 }, - // CHANNEL_LAYOUT_4POINT0 + // CHANNEL_LAYOUT_4_0 { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , 3 , -1 , -1 }, // CHANNEL_LAYOUT_2_2 @@ -78,27 +78,27 @@ static const int kChannelOrderings[CHANNEL_LAYOUT_MAX][CHANNELS_MAX] = { // CHANNEL_LAYOUT_QUAD { 0 , 1 , -1 , -1 , 2 , 3 , -1 , -1 , -1 , -1 , -1 }, - // CHANNEL_LAYOUT_5POINT0 + // CHANNEL_LAYOUT_5_0 { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , -1 , 3 , 4 }, - // CHANNEL_LAYOUT_5POINT1 + // CHANNEL_LAYOUT_5_1 { 0 , 1 , 2 , 3 , -1 , -1 , -1 , -1 , -1 , 4 , 5 }, // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR - // CHANNEL_LAYOUT_5POINT0_BACK + // CHANNEL_LAYOUT_5_0_BACK { 0 , 1 , 2 , -1 , 3 , 4 , -1 , -1 , -1 , -1 , -1 }, - // CHANNEL_LAYOUT_5POINT1_BACK + // CHANNEL_LAYOUT_5_1_BACK { 0 , 1 , 2 , 3 , 4 , 5 , -1 , -1 , -1 , -1 , -1 }, - // CHANNEL_LAYOUT_7POINT0 + // CHANNEL_LAYOUT_7_0 { 0 , 1 , 2 , -1 , 5 , 6 , -1 , -1 , -1 , 3 , 4 }, - // CHANNEL_LAYOUT_7POINT1 + // CHANNEL_LAYOUT_7_1 { 0 , 1 , 2 , 3 , 6 , 7 , -1 , -1 , -1 , 4 , 5 }, - // CHANNEL_LAYOUT_7POINT1_WIDE + // CHANNEL_LAYOUT_7_1_WIDE { 0 , 1 , 2 , 3 , -1 , -1 , 6 , 7 , -1 , 4 , 5 }, // CHANNEL_LAYOUT_STEREO_DOWNMIX diff --git a/media/base/channel_mixer.cc b/media/base/channel_mixer.cc index 420ecda..9f8f57a 100644 --- a/media/base/channel_mixer.cc +++ b/media/base/channel_mixer.cc @@ -104,6 +104,16 @@ void ChannelMixer::Initialize( return; } + // Special case for 5.0, 5.1 with back channels when upmixed to 7.0, 7.1, + // which should map the back LR to side LR. + if (input_layout_ == CHANNEL_LAYOUT_5_0_BACK && + output_layout_ == CHANNEL_LAYOUT_7_0) { + input_layout_ = CHANNEL_LAYOUT_5_0; + } else if (input_layout_ == CHANNEL_LAYOUT_5_1_BACK && + output_layout_ == CHANNEL_LAYOUT_7_1) { + input_layout_ = CHANNEL_LAYOUT_5_1; + } + // Route matching channels and figure out which ones aren't accounted for. for (Channels ch = LEFT; ch < CHANNELS_MAX; ch = static_cast<Channels>(ch + 1)) { |