summaryrefslogtreecommitdiffstats
path: root/media/base/channel_layout.cc
diff options
context:
space:
mode:
authorannacc@chromium.org <annacc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-26 17:52:17 +0000
committerannacc@chromium.org <annacc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-26 17:52:17 +0000
commitca393c92c74b62915504e717a57e4169d27fdcd5 (patch)
tree72f208a069f5c3054754e7a48800b6851a3ff024 /media/base/channel_layout.cc
parent6f060c4d9a8049d5665eb7fda1a3c52dd11c6a6d (diff)
downloadchromium_src-ca393c92c74b62915504e717a57e4169d27fdcd5.zip
chromium_src-ca393c92c74b62915504e717a57e4169d27fdcd5.tar.gz
chromium_src-ca393c92c74b62915504e717a57e4169d27fdcd5.tar.bz2
Surround sound swizzling for Mac based on device channel layout preferences.
This patch gets the surround sound channel layout from the user's device using CoreAudio. It then swizzles the channel layout from the source to match the user's prefered channel layout (if needed). BUG=none. TEST=none. Review URL: http://codereview.chromium.org/7047020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86851 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base/channel_layout.cc')
-rw-r--r--media/base/channel_layout.cc57
1 files changed, 57 insertions, 0 deletions
diff --git a/media/base/channel_layout.cc b/media/base/channel_layout.cc
index 8e3da4f..81651bc 100644
--- a/media/base/channel_layout.cc
+++ b/media/base/channel_layout.cc
@@ -23,6 +23,63 @@ static const int kLayoutToChannels[] = {
8, // CHANNEL_LAYOUT_7POINT1_WIDE
2}; // CHANNEL_LAYOUT_STEREO_DOWNMIX
+const int kChannelOrderings[CHANNEL_LAYOUT_MAX][CHANNELS_MAX] = {
+ // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR | StL | StR
+
+ // CHANNEL_LAYOUT_NONE
+ { -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_UNSUPPORTED
+ { -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_MONO
+ { -1 , -1 , 0 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_STEREO
+ { 0 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_2_1
+ { 0 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , 2 , -1 , -1 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_SURROUND
+ { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_4POINT0
+ { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , 3 , -1 , -1 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_2_2
+ { 0 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 2 , 3 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_QUAD
+ { 0 , 1 , -1 , -1 , 2 , 3 , -1 , -1 , -1 , -1 , -1 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_5POINT0
+ { 0 , 1 , 2 , -1 , -1 , -1 , -1 , -1 , -1 , 3 , 4 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_5POINT1
+ { 0 , 1 , 2 , 3 , -1 , -1 , -1 , -1 , -1 , 4 , 5 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_5POINT0_BACK
+ { 0 , 1 , 2 , -1 , 3 , 4 , -1 , -1 , -1 , -1 , -1 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_5POINT1_BACK
+ { 0 , 1 , 2 , 3 , 4 , 5 , -1 , -1 , -1 , -1 , -1 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_7POINT0
+ { 0 , 1 , 2 , -1 , 5 , 6 , -1 , -1 , -1 , 3 , 4 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_7POINT1
+ { 0 , 1 , 2 , 3 , 6 , 7 , -1 , -1 , -1 , 4 , 5 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_7POINT1_WIDE
+ { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , -1 , -1 , -1 , -1 , -1 },
+
+ // CHANNEL_LAYOUT_STEREO_DOWNMIX
+ { -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , -1 , 0 , 1 },
+
+ // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR | StL | StR
+ };
+
int ChannelLayoutToChannelCount(ChannelLayout layout) {
return kLayoutToChannels[layout];
}