Thu, 15 Jan 2015 15:55:04 +0100
Back out 97036ab72558 which inappropriately compared turds to third parties.
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.
5 #ifndef MEDIA_BASE_CHANNEL_LAYOUT_H_
6 #define MEDIA_BASE_CHANNEL_LAYOUT_H_
9 namespace mp4_demuxer {
11 // Enumerates the various representations of the ordering of audio channels.
12 // Logged to UMA, so never reuse a value, always add new/greater ones!
13 enum ChannelLayout {
14 CHANNEL_LAYOUT_NONE = 0,
15 CHANNEL_LAYOUT_UNSUPPORTED = 1,
17 // Front C
18 CHANNEL_LAYOUT_MONO = 2,
20 // Front L, Front R
21 CHANNEL_LAYOUT_STEREO = 3,
23 // Front L, Front R, Back C
24 CHANNEL_LAYOUT_2_1 = 4,
26 // Front L, Front R, Front C
27 CHANNEL_LAYOUT_SURROUND = 5,
29 // Front L, Front R, Front C, Back C
30 CHANNEL_LAYOUT_4_0 = 6,
32 // Front L, Front R, Side L, Side R
33 CHANNEL_LAYOUT_2_2 = 7,
35 // Front L, Front R, Back L, Back R
36 CHANNEL_LAYOUT_QUAD = 8,
38 // Front L, Front R, Front C, Side L, Side R
39 CHANNEL_LAYOUT_5_0 = 9,
41 // Front L, Front R, Front C, Side L, Side R, LFE
42 CHANNEL_LAYOUT_5_1 = 10,
44 // Front L, Front R, Front C, Back L, Back R
45 CHANNEL_LAYOUT_5_0_BACK = 11,
47 // Front L, Front R, Front C, Back L, Back R, LFE
48 CHANNEL_LAYOUT_5_1_BACK = 12,
50 // Front L, Front R, Front C, Side L, Side R, Back L, Back R
51 CHANNEL_LAYOUT_7_0 = 13,
53 // Front L, Front R, Front C, Side L, Side R, LFE, Back L, Back R
54 CHANNEL_LAYOUT_7_1 = 14,
56 // Front L, Front R, Front C, Side L, Side R, LFE, Front LofC, Front RofC
57 CHANNEL_LAYOUT_7_1_WIDE = 15,
59 // Stereo L, Stereo R
60 CHANNEL_LAYOUT_STEREO_DOWNMIX = 16,
62 // Stereo L, Stereo R, LFE
63 CHANNEL_LAYOUT_2POINT1 = 17,
65 // Stereo L, Stereo R, Front C, LFE
66 CHANNEL_LAYOUT_3_1 = 18,
68 // Stereo L, Stereo R, Front C, Rear C, LFE
69 CHANNEL_LAYOUT_4_1 = 19,
71 // Stereo L, Stereo R, Front C, Side L, Side R, Back C
72 CHANNEL_LAYOUT_6_0 = 20,
74 // Stereo L, Stereo R, Side L, Side R, Front LofC, Front RofC
75 CHANNEL_LAYOUT_6_0_FRONT = 21,
77 // Stereo L, Stereo R, Side L, Side R, Front C, Rear C.
78 CHANNEL_LAYOUT_HEXAGONAL = 22,
80 // Stereo L, Stereo R, Side L, Side R, Front C, Rear Center, LFE
81 CHANNEL_LAYOUT_6_1 = 23,
83 // Stereo L, Stereo R, Back L, Back R, Front C, Rear Center, LFE
84 CHANNEL_LAYOUT_6_1_BACK = 24,
86 // Stereo L, Stereo R, Side L, Side R, Front LofC, Front RofC, LFE
87 CHANNEL_LAYOUT_6_1_FRONT = 25,
89 // Front L, Front R, Front C, Side L, Side R, Front LofC, Front RofC
90 CHANNEL_LAYOUT_7_0_FRONT = 26,
92 // Front L, Front R, Front C, Back L, Back R, LFE, Front LofC, Front RofC
93 CHANNEL_LAYOUT_7_1_WIDE_BACK = 27,
95 // Front L, Front R, Front C, Side L, Side R, Rear C, Back L, Back R.
96 CHANNEL_LAYOUT_OCTAGONAL = 28,
98 // Channels are not explicitly mapped to speakers.
99 CHANNEL_LAYOUT_DISCRETE = 29,
101 // Total number of layouts.
102 CHANNEL_LAYOUT_MAX // Must always be last!
103 };
105 enum Channels {
106 LEFT = 0,
107 RIGHT,
108 CENTER,
109 LFE,
110 BACK_LEFT,
111 BACK_RIGHT,
112 LEFT_OF_CENTER,
113 RIGHT_OF_CENTER,
114 BACK_CENTER,
115 SIDE_LEFT,
116 SIDE_RIGHT,
117 CHANNELS_MAX
118 };
120 // Returns the expected channel position in an interleaved stream. Values of -1
121 // mean the channel at that index is not used for that layout. Values range
122 // from 0 to CHANNELS_MAX - 1.
123 int ChannelOrder(ChannelLayout layout, Channels channel);
125 // Returns the number of channels in a given ChannelLayout.
126 int ChannelLayoutToChannelCount(ChannelLayout layout);
128 // Given the number of channels, return the best layout,
129 // or return CHANNEL_LAYOUT_UNSUPPORTED if there is no good match.
130 ChannelLayout GuessChannelLayout(int channels);
132 } // namespace mp4_demuxer
134 #endif // MEDIA_BASE_CHANNEL_LAYOUT_H_