Index: media/base/channel_layout.cc |
diff --git a/media/base/channel_layout.cc b/media/base/channel_layout.cc |
index 8bf02ea18ad6c694978ad303c97ca5d3b773f176..7c2d2e5b9b7038c90955558516e8446f93ff1c8b 100644 |
--- a/media/base/channel_layout.cc |
+++ b/media/base/channel_layout.cc |
@@ -4,6 +4,11 @@ |
#include "media/base/channel_layout.h" |
+#include "base/basictypes.h" |
+#include "base/logging.h" |
+ |
+namespace media { |
+ |
static const int kLayoutToChannels[] = { |
0, // CHANNEL_LAYOUT_NONE |
0, // CHANNEL_LAYOUT_UNSUPPORTED |
@@ -23,7 +28,13 @@ static const int kLayoutToChannels[] = { |
8, // CHANNEL_LAYOUT_7POINT1_WIDE |
2}; // CHANNEL_LAYOUT_STEREO_DOWNMIX |
-const int kChannelOrderings[CHANNEL_LAYOUT_MAX][CHANNELS_MAX] = { |
+// The channel orderings for each layout as specified by FFmpeg. Each value |
+// represents the index of each channel in each layout. Values of -1 mean the |
+// channel at that index is not used for that layout.For example, the left side |
+// surround sound channel in FFmpeg's 5.1 layout is in the 5th position (because |
+// the order is L, R, C, LFE, LS, RS), so |
+// kChannelOrderings[CHANNEL_LAYOUT_5POINT1][SIDE_LEFT] = 4; |
+static const int kChannelOrderings[CHANNEL_LAYOUT_MAX][CHANNELS_MAX] = { |
// FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR | StL | StR |
// CHANNEL_LAYOUT_NONE |
@@ -81,5 +92,14 @@ const int kChannelOrderings[CHANNEL_LAYOUT_MAX][CHANNELS_MAX] = { |
}; |
int ChannelLayoutToChannelCount(ChannelLayout layout) { |
+ DCHECK_LT(static_cast<size_t>(layout), arraysize(kLayoutToChannels)); |
return kLayoutToChannels[layout]; |
} |
+ |
+int ChannelOrder(ChannelLayout layout, Channels channel) { |
+ DCHECK_LT(static_cast<size_t>(layout), arraysize(kChannelOrderings)); |
+ DCHECK_LT(static_cast<size_t>(channel), arraysize(kChannelOrderings[0])); |
+ return kChannelOrderings[layout][channel]; |
+} |
+ |
+} // namespace media |