• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef MEDIA_BASE_CHANNEL_LAYOUT_H_
6 #define MEDIA_BASE_CHANNEL_LAYOUT_H_
7 
8 #include "media/base/media_export.h"
9 
10 namespace media {
11 
12 // Enumerates the various representations of the ordering of audio channels.
13 // Logged to UMA, so never reuse a value, always add new/greater ones!
14 enum ChannelLayout {
15   CHANNEL_LAYOUT_NONE = 0,
16   CHANNEL_LAYOUT_UNSUPPORTED = 1,
17 
18   // Front C
19   CHANNEL_LAYOUT_MONO = 2,
20 
21   // Front L, Front R
22   CHANNEL_LAYOUT_STEREO = 3,
23 
24   // Front L, Front R, Back C
25   CHANNEL_LAYOUT_2_1 = 4,
26 
27   // Front L, Front R, Front C
28   CHANNEL_LAYOUT_SURROUND = 5,
29 
30   // Front L, Front R, Front C, Back C
31   CHANNEL_LAYOUT_4_0 = 6,
32 
33   // Front L, Front R, Side L, Side R
34   CHANNEL_LAYOUT_2_2 = 7,
35 
36   // Front L, Front R, Back L, Back R
37   CHANNEL_LAYOUT_QUAD = 8,
38 
39   // Front L, Front R, Front C, Side L, Side R
40   CHANNEL_LAYOUT_5_0 = 9,
41 
42   // Front L, Front R, Front C, Side L, Side R, LFE
43   CHANNEL_LAYOUT_5_1 = 10,
44 
45   // Front L, Front R, Front C, Back L, Back R
46   CHANNEL_LAYOUT_5_0_BACK = 11,
47 
48   // Front L, Front R, Front C, Back L, Back R, LFE
49   CHANNEL_LAYOUT_5_1_BACK = 12,
50 
51   // Front L, Front R, Front C, Side L, Side R, Back L, Back R
52   CHANNEL_LAYOUT_7_0 = 13,
53 
54   // Front L, Front R, Front C, Side L, Side R, LFE, Back L, Back R
55   CHANNEL_LAYOUT_7_1 = 14,
56 
57   // Front L, Front R, Front C, Side L, Side R, LFE, Front LofC, Front RofC
58   CHANNEL_LAYOUT_7_1_WIDE = 15,
59 
60   // Stereo L, Stereo R
61   CHANNEL_LAYOUT_STEREO_DOWNMIX = 16,
62 
63   // Stereo L, Stereo R, LFE
64   CHANNEL_LAYOUT_2POINT1 = 17,
65 
66   // Stereo L, Stereo R, Front C, LFE
67   CHANNEL_LAYOUT_3_1 = 18,
68 
69   // Stereo L, Stereo R, Front C, Rear C, LFE
70   CHANNEL_LAYOUT_4_1 = 19,
71 
72   // Stereo L, Stereo R, Front C, Side L, Side R, Back C
73   CHANNEL_LAYOUT_6_0 = 20,
74 
75   // Stereo L, Stereo R, Side L, Side R, Front LofC, Front RofC
76   CHANNEL_LAYOUT_6_0_FRONT = 21,
77 
78   // Stereo L, Stereo R, Side L, Side R, Front C, Rear C.
79   CHANNEL_LAYOUT_HEXAGONAL = 22,
80 
81   // Stereo L, Stereo R, Side L, Side R, Front C, Rear Center, LFE
82   CHANNEL_LAYOUT_6_1 = 23,
83 
84   // Stereo L, Stereo R, Back L, Back R, Front C, Rear Center, LFE
85   CHANNEL_LAYOUT_6_1_BACK = 24,
86 
87   // Stereo L, Stereo R, Side L, Side R, Front LofC, Front RofC, LFE
88   CHANNEL_LAYOUT_6_1_FRONT = 25,
89 
90   // Front L, Front R, Front C, Side L, Side R, Front LofC, Front RofC
91   CHANNEL_LAYOUT_7_0_FRONT = 26,
92 
93   // Front L, Front R, Front C, Back L, Back R, LFE, Front LofC, Front RofC
94   CHANNEL_LAYOUT_7_1_WIDE_BACK = 27,
95 
96   // Front L, Front R, Front C, Side L, Side R, Rear C, Back L, Back R.
97   CHANNEL_LAYOUT_OCTAGONAL = 28,
98 
99   // Channels are not explicitly mapped to speakers.
100   CHANNEL_LAYOUT_DISCRETE = 29,
101 
102   // Front L, Front R, Front C. Front C contains the keyboard mic audio. This
103   // layout is only intended for input for WebRTC. The Front C channel
104   // is stripped away in the WebRTC audio input pipeline and never seen outside
105   // of that.
106   CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC = 30,
107 
108   // Max value, must always equal the largest entry ever logged.
109   CHANNEL_LAYOUT_MAX = CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC
110 };
111 
112 enum Channels {
113   LEFT = 0,
114   RIGHT,
115   CENTER,
116   LFE,
117   BACK_LEFT,
118   BACK_RIGHT,
119   LEFT_OF_CENTER,
120   RIGHT_OF_CENTER,
121   BACK_CENTER,
122   SIDE_LEFT,
123   SIDE_RIGHT,
124   CHANNELS_MAX = SIDE_RIGHT, // Must always equal the largest value ever logged.
125 };
126 
127 // Returns the expected channel position in an interleaved stream.  Values of -1
128 // mean the channel at that index is not used for that layout.  Values range
129 // from 0 to CHANNELS_MAX - 1.
130 MEDIA_EXPORT int ChannelOrder(ChannelLayout layout, Channels channel);
131 
132 // Returns the number of channels in a given ChannelLayout.
133 MEDIA_EXPORT int ChannelLayoutToChannelCount(ChannelLayout layout);
134 
135 // Given the number of channels, return the best layout,
136 // or return CHANNEL_LAYOUT_UNSUPPORTED if there is no good match.
137 MEDIA_EXPORT ChannelLayout GuessChannelLayout(int channels);
138 
139 // Returns a string representation of the channel layout.
140 MEDIA_EXPORT const char* ChannelLayoutToString(ChannelLayout layout);
141 
142 }  // namespace media
143 
144 #endif  // MEDIA_BASE_CHANNEL_LAYOUT_H_
145