summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authordalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-22 18:28:03 +0000
committerdalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-22 18:28:03 +0000
commit5702d51627213f145aca4bce1a91883a3cc94401 (patch)
tree2c3465426ff2ff4ba8fccea4bd8387fd7828222b /media
parentfcfb4092a714add207e330c5695e8710312a2bd0 (diff)
downloadchromium_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.cc32
-rw-r--r--media/base/channel_mixer.cc10
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)) {