1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker *
4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker */
10*d9f75844SAndroid Build Coastguard Worker
11*d9f75844SAndroid Build Coastguard Worker #include "api/audio/channel_layout.h"
12*d9f75844SAndroid Build Coastguard Worker
13*d9f75844SAndroid Build Coastguard Worker #include <stddef.h>
14*d9f75844SAndroid Build Coastguard Worker
15*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/arraysize.h"
16*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/checks.h"
17*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/logging.h"
18*d9f75844SAndroid Build Coastguard Worker
19*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
20*d9f75844SAndroid Build Coastguard Worker
21*d9f75844SAndroid Build Coastguard Worker static const int kLayoutToChannels[] = {
22*d9f75844SAndroid Build Coastguard Worker 0, // CHANNEL_LAYOUT_NONE
23*d9f75844SAndroid Build Coastguard Worker 0, // CHANNEL_LAYOUT_UNSUPPORTED
24*d9f75844SAndroid Build Coastguard Worker 1, // CHANNEL_LAYOUT_MONO
25*d9f75844SAndroid Build Coastguard Worker 2, // CHANNEL_LAYOUT_STEREO
26*d9f75844SAndroid Build Coastguard Worker 3, // CHANNEL_LAYOUT_2_1
27*d9f75844SAndroid Build Coastguard Worker 3, // CHANNEL_LAYOUT_SURROUND
28*d9f75844SAndroid Build Coastguard Worker 4, // CHANNEL_LAYOUT_4_0
29*d9f75844SAndroid Build Coastguard Worker 4, // CHANNEL_LAYOUT_2_2
30*d9f75844SAndroid Build Coastguard Worker 4, // CHANNEL_LAYOUT_QUAD
31*d9f75844SAndroid Build Coastguard Worker 5, // CHANNEL_LAYOUT_5_0
32*d9f75844SAndroid Build Coastguard Worker 6, // CHANNEL_LAYOUT_5_1
33*d9f75844SAndroid Build Coastguard Worker 5, // CHANNEL_LAYOUT_5_0_BACK
34*d9f75844SAndroid Build Coastguard Worker 6, // CHANNEL_LAYOUT_5_1_BACK
35*d9f75844SAndroid Build Coastguard Worker 7, // CHANNEL_LAYOUT_7_0
36*d9f75844SAndroid Build Coastguard Worker 8, // CHANNEL_LAYOUT_7_1
37*d9f75844SAndroid Build Coastguard Worker 8, // CHANNEL_LAYOUT_7_1_WIDE
38*d9f75844SAndroid Build Coastguard Worker 2, // CHANNEL_LAYOUT_STEREO_DOWNMIX
39*d9f75844SAndroid Build Coastguard Worker 3, // CHANNEL_LAYOUT_2POINT1
40*d9f75844SAndroid Build Coastguard Worker 4, // CHANNEL_LAYOUT_3_1
41*d9f75844SAndroid Build Coastguard Worker 5, // CHANNEL_LAYOUT_4_1
42*d9f75844SAndroid Build Coastguard Worker 6, // CHANNEL_LAYOUT_6_0
43*d9f75844SAndroid Build Coastguard Worker 6, // CHANNEL_LAYOUT_6_0_FRONT
44*d9f75844SAndroid Build Coastguard Worker 6, // CHANNEL_LAYOUT_HEXAGONAL
45*d9f75844SAndroid Build Coastguard Worker 7, // CHANNEL_LAYOUT_6_1
46*d9f75844SAndroid Build Coastguard Worker 7, // CHANNEL_LAYOUT_6_1_BACK
47*d9f75844SAndroid Build Coastguard Worker 7, // CHANNEL_LAYOUT_6_1_FRONT
48*d9f75844SAndroid Build Coastguard Worker 7, // CHANNEL_LAYOUT_7_0_FRONT
49*d9f75844SAndroid Build Coastguard Worker 8, // CHANNEL_LAYOUT_7_1_WIDE_BACK
50*d9f75844SAndroid Build Coastguard Worker 8, // CHANNEL_LAYOUT_OCTAGONAL
51*d9f75844SAndroid Build Coastguard Worker 0, // CHANNEL_LAYOUT_DISCRETE
52*d9f75844SAndroid Build Coastguard Worker 3, // CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC
53*d9f75844SAndroid Build Coastguard Worker 5, // CHANNEL_LAYOUT_4_1_QUAD_SIDE
54*d9f75844SAndroid Build Coastguard Worker 0, // CHANNEL_LAYOUT_BITSTREAM
55*d9f75844SAndroid Build Coastguard Worker };
56*d9f75844SAndroid Build Coastguard Worker
57*d9f75844SAndroid Build Coastguard Worker // The channel orderings for each layout as specified by FFmpeg. Each value
58*d9f75844SAndroid Build Coastguard Worker // represents the index of each channel in each layout. Values of -1 mean the
59*d9f75844SAndroid Build Coastguard Worker // channel at that index is not used for that layout. For example, the left side
60*d9f75844SAndroid Build Coastguard Worker // surround sound channel in FFmpeg's 5.1 layout is in the 5th position (because
61*d9f75844SAndroid Build Coastguard Worker // the order is L, R, C, LFE, LS, RS), so
62*d9f75844SAndroid Build Coastguard Worker // kChannelOrderings[CHANNEL_LAYOUT_5_1][SIDE_LEFT] = 4;
63*d9f75844SAndroid Build Coastguard Worker static const int kChannelOrderings[CHANNEL_LAYOUT_MAX + 1][CHANNELS_MAX + 1] = {
64*d9f75844SAndroid Build Coastguard Worker // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR
65*d9f75844SAndroid Build Coastguard Worker
66*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_NONE
67*d9f75844SAndroid Build Coastguard Worker {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
68*d9f75844SAndroid Build Coastguard Worker
69*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_UNSUPPORTED
70*d9f75844SAndroid Build Coastguard Worker {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
71*d9f75844SAndroid Build Coastguard Worker
72*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_MONO
73*d9f75844SAndroid Build Coastguard Worker {-1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1},
74*d9f75844SAndroid Build Coastguard Worker
75*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_STEREO
76*d9f75844SAndroid Build Coastguard Worker {0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
77*d9f75844SAndroid Build Coastguard Worker
78*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_2_1
79*d9f75844SAndroid Build Coastguard Worker {0, 1, -1, -1, -1, -1, -1, -1, 2, -1, -1},
80*d9f75844SAndroid Build Coastguard Worker
81*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_SURROUND
82*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, -1, -1, -1, -1, -1, -1, -1, -1},
83*d9f75844SAndroid Build Coastguard Worker
84*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_4_0
85*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, -1, -1, -1, -1, -1, 3, -1, -1},
86*d9f75844SAndroid Build Coastguard Worker
87*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_2_2
88*d9f75844SAndroid Build Coastguard Worker {0, 1, -1, -1, -1, -1, -1, -1, -1, 2, 3},
89*d9f75844SAndroid Build Coastguard Worker
90*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_QUAD
91*d9f75844SAndroid Build Coastguard Worker {0, 1, -1, -1, 2, 3, -1, -1, -1, -1, -1},
92*d9f75844SAndroid Build Coastguard Worker
93*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_5_0
94*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, -1, -1, -1, -1, -1, -1, 3, 4},
95*d9f75844SAndroid Build Coastguard Worker
96*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_5_1
97*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, 3, -1, -1, -1, -1, -1, 4, 5},
98*d9f75844SAndroid Build Coastguard Worker
99*d9f75844SAndroid Build Coastguard Worker // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR
100*d9f75844SAndroid Build Coastguard Worker
101*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_5_0_BACK
102*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, -1, 3, 4, -1, -1, -1, -1, -1},
103*d9f75844SAndroid Build Coastguard Worker
104*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_5_1_BACK
105*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, 3, 4, 5, -1, -1, -1, -1, -1},
106*d9f75844SAndroid Build Coastguard Worker
107*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_7_0
108*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, -1, 5, 6, -1, -1, -1, 3, 4},
109*d9f75844SAndroid Build Coastguard Worker
110*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_7_1
111*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, 3, 6, 7, -1, -1, -1, 4, 5},
112*d9f75844SAndroid Build Coastguard Worker
113*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_7_1_WIDE
114*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, 3, -1, -1, 6, 7, -1, 4, 5},
115*d9f75844SAndroid Build Coastguard Worker
116*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_STEREO_DOWNMIX
117*d9f75844SAndroid Build Coastguard Worker {0, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
118*d9f75844SAndroid Build Coastguard Worker
119*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_2POINT1
120*d9f75844SAndroid Build Coastguard Worker {0, 1, -1, 2, -1, -1, -1, -1, -1, -1, -1},
121*d9f75844SAndroid Build Coastguard Worker
122*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_3_1
123*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, 3, -1, -1, -1, -1, -1, -1, -1},
124*d9f75844SAndroid Build Coastguard Worker
125*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_4_1
126*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, 4, -1, -1, -1, -1, 3, -1, -1},
127*d9f75844SAndroid Build Coastguard Worker
128*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_6_0
129*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, -1, -1, -1, -1, -1, 5, 3, 4},
130*d9f75844SAndroid Build Coastguard Worker
131*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_6_0_FRONT
132*d9f75844SAndroid Build Coastguard Worker {0, 1, -1, -1, -1, -1, 4, 5, -1, 2, 3},
133*d9f75844SAndroid Build Coastguard Worker
134*d9f75844SAndroid Build Coastguard Worker // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR
135*d9f75844SAndroid Build Coastguard Worker
136*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_HEXAGONAL
137*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, -1, 3, 4, -1, -1, 5, -1, -1},
138*d9f75844SAndroid Build Coastguard Worker
139*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_6_1
140*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, 3, -1, -1, -1, -1, 6, 4, 5},
141*d9f75844SAndroid Build Coastguard Worker
142*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_6_1_BACK
143*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, 3, 4, 5, -1, -1, 6, -1, -1},
144*d9f75844SAndroid Build Coastguard Worker
145*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_6_1_FRONT
146*d9f75844SAndroid Build Coastguard Worker {0, 1, -1, 6, -1, -1, 4, 5, -1, 2, 3},
147*d9f75844SAndroid Build Coastguard Worker
148*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_7_0_FRONT
149*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, -1, -1, -1, 5, 6, -1, 3, 4},
150*d9f75844SAndroid Build Coastguard Worker
151*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_7_1_WIDE_BACK
152*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, 3, 4, 5, 6, 7, -1, -1, -1},
153*d9f75844SAndroid Build Coastguard Worker
154*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_OCTAGONAL
155*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, -1, 5, 6, -1, -1, 7, 3, 4},
156*d9f75844SAndroid Build Coastguard Worker
157*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_DISCRETE
158*d9f75844SAndroid Build Coastguard Worker {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
159*d9f75844SAndroid Build Coastguard Worker
160*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC
161*d9f75844SAndroid Build Coastguard Worker {0, 1, 2, -1, -1, -1, -1, -1, -1, -1, -1},
162*d9f75844SAndroid Build Coastguard Worker
163*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_4_1_QUAD_SIDE
164*d9f75844SAndroid Build Coastguard Worker {0, 1, -1, 4, -1, -1, -1, -1, -1, 2, 3},
165*d9f75844SAndroid Build Coastguard Worker
166*d9f75844SAndroid Build Coastguard Worker // CHANNEL_LAYOUT_BITSTREAM
167*d9f75844SAndroid Build Coastguard Worker {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
168*d9f75844SAndroid Build Coastguard Worker
169*d9f75844SAndroid Build Coastguard Worker // FL | FR | FC | LFE | BL | BR | FLofC | FRofC | BC | SL | SR
170*d9f75844SAndroid Build Coastguard Worker };
171*d9f75844SAndroid Build Coastguard Worker
ChannelLayoutToChannelCount(ChannelLayout layout)172*d9f75844SAndroid Build Coastguard Worker int ChannelLayoutToChannelCount(ChannelLayout layout) {
173*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_LT(static_cast<size_t>(layout), arraysize(kLayoutToChannels));
174*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_LE(kLayoutToChannels[layout], kMaxConcurrentChannels);
175*d9f75844SAndroid Build Coastguard Worker return kLayoutToChannels[layout];
176*d9f75844SAndroid Build Coastguard Worker }
177*d9f75844SAndroid Build Coastguard Worker
178*d9f75844SAndroid Build Coastguard Worker // Converts a channel count into a channel layout.
GuessChannelLayout(int channels)179*d9f75844SAndroid Build Coastguard Worker ChannelLayout GuessChannelLayout(int channels) {
180*d9f75844SAndroid Build Coastguard Worker switch (channels) {
181*d9f75844SAndroid Build Coastguard Worker case 1:
182*d9f75844SAndroid Build Coastguard Worker return CHANNEL_LAYOUT_MONO;
183*d9f75844SAndroid Build Coastguard Worker case 2:
184*d9f75844SAndroid Build Coastguard Worker return CHANNEL_LAYOUT_STEREO;
185*d9f75844SAndroid Build Coastguard Worker case 3:
186*d9f75844SAndroid Build Coastguard Worker return CHANNEL_LAYOUT_SURROUND;
187*d9f75844SAndroid Build Coastguard Worker case 4:
188*d9f75844SAndroid Build Coastguard Worker return CHANNEL_LAYOUT_QUAD;
189*d9f75844SAndroid Build Coastguard Worker case 5:
190*d9f75844SAndroid Build Coastguard Worker return CHANNEL_LAYOUT_5_0;
191*d9f75844SAndroid Build Coastguard Worker case 6:
192*d9f75844SAndroid Build Coastguard Worker return CHANNEL_LAYOUT_5_1;
193*d9f75844SAndroid Build Coastguard Worker case 7:
194*d9f75844SAndroid Build Coastguard Worker return CHANNEL_LAYOUT_6_1;
195*d9f75844SAndroid Build Coastguard Worker case 8:
196*d9f75844SAndroid Build Coastguard Worker return CHANNEL_LAYOUT_7_1;
197*d9f75844SAndroid Build Coastguard Worker default:
198*d9f75844SAndroid Build Coastguard Worker RTC_DLOG(LS_WARNING) << "Unsupported channel count: " << channels;
199*d9f75844SAndroid Build Coastguard Worker }
200*d9f75844SAndroid Build Coastguard Worker return CHANNEL_LAYOUT_UNSUPPORTED;
201*d9f75844SAndroid Build Coastguard Worker }
202*d9f75844SAndroid Build Coastguard Worker
ChannelOrder(ChannelLayout layout,Channels channel)203*d9f75844SAndroid Build Coastguard Worker int ChannelOrder(ChannelLayout layout, Channels channel) {
204*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_LT(static_cast<size_t>(layout), arraysize(kChannelOrderings));
205*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_LT(static_cast<size_t>(channel), arraysize(kChannelOrderings[0]));
206*d9f75844SAndroid Build Coastguard Worker return kChannelOrderings[layout][channel];
207*d9f75844SAndroid Build Coastguard Worker }
208*d9f75844SAndroid Build Coastguard Worker
ChannelLayoutToString(ChannelLayout layout)209*d9f75844SAndroid Build Coastguard Worker const char* ChannelLayoutToString(ChannelLayout layout) {
210*d9f75844SAndroid Build Coastguard Worker switch (layout) {
211*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_NONE:
212*d9f75844SAndroid Build Coastguard Worker return "NONE";
213*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_UNSUPPORTED:
214*d9f75844SAndroid Build Coastguard Worker return "UNSUPPORTED";
215*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_MONO:
216*d9f75844SAndroid Build Coastguard Worker return "MONO";
217*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_STEREO:
218*d9f75844SAndroid Build Coastguard Worker return "STEREO";
219*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_2_1:
220*d9f75844SAndroid Build Coastguard Worker return "2.1";
221*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_SURROUND:
222*d9f75844SAndroid Build Coastguard Worker return "SURROUND";
223*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_4_0:
224*d9f75844SAndroid Build Coastguard Worker return "4.0";
225*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_2_2:
226*d9f75844SAndroid Build Coastguard Worker return "QUAD_SIDE";
227*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_QUAD:
228*d9f75844SAndroid Build Coastguard Worker return "QUAD";
229*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_5_0:
230*d9f75844SAndroid Build Coastguard Worker return "5.0";
231*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_5_1:
232*d9f75844SAndroid Build Coastguard Worker return "5.1";
233*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_5_0_BACK:
234*d9f75844SAndroid Build Coastguard Worker return "5.0_BACK";
235*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_5_1_BACK:
236*d9f75844SAndroid Build Coastguard Worker return "5.1_BACK";
237*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_7_0:
238*d9f75844SAndroid Build Coastguard Worker return "7.0";
239*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_7_1:
240*d9f75844SAndroid Build Coastguard Worker return "7.1";
241*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_7_1_WIDE:
242*d9f75844SAndroid Build Coastguard Worker return "7.1_WIDE";
243*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_STEREO_DOWNMIX:
244*d9f75844SAndroid Build Coastguard Worker return "STEREO_DOWNMIX";
245*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_2POINT1:
246*d9f75844SAndroid Build Coastguard Worker return "2POINT1";
247*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_3_1:
248*d9f75844SAndroid Build Coastguard Worker return "3.1";
249*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_4_1:
250*d9f75844SAndroid Build Coastguard Worker return "4.1";
251*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_6_0:
252*d9f75844SAndroid Build Coastguard Worker return "6.0";
253*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_6_0_FRONT:
254*d9f75844SAndroid Build Coastguard Worker return "6.0_FRONT";
255*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_HEXAGONAL:
256*d9f75844SAndroid Build Coastguard Worker return "HEXAGONAL";
257*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_6_1:
258*d9f75844SAndroid Build Coastguard Worker return "6.1";
259*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_6_1_BACK:
260*d9f75844SAndroid Build Coastguard Worker return "6.1_BACK";
261*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_6_1_FRONT:
262*d9f75844SAndroid Build Coastguard Worker return "6.1_FRONT";
263*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_7_0_FRONT:
264*d9f75844SAndroid Build Coastguard Worker return "7.0_FRONT";
265*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_7_1_WIDE_BACK:
266*d9f75844SAndroid Build Coastguard Worker return "7.1_WIDE_BACK";
267*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_OCTAGONAL:
268*d9f75844SAndroid Build Coastguard Worker return "OCTAGONAL";
269*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_DISCRETE:
270*d9f75844SAndroid Build Coastguard Worker return "DISCRETE";
271*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_STEREO_AND_KEYBOARD_MIC:
272*d9f75844SAndroid Build Coastguard Worker return "STEREO_AND_KEYBOARD_MIC";
273*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_4_1_QUAD_SIDE:
274*d9f75844SAndroid Build Coastguard Worker return "4.1_QUAD_SIDE";
275*d9f75844SAndroid Build Coastguard Worker case CHANNEL_LAYOUT_BITSTREAM:
276*d9f75844SAndroid Build Coastguard Worker return "BITSTREAM";
277*d9f75844SAndroid Build Coastguard Worker }
278*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_NOTREACHED() << "Invalid channel layout provided: " << layout;
279*d9f75844SAndroid Build Coastguard Worker return "";
280*d9f75844SAndroid Build Coastguard Worker }
281*d9f75844SAndroid Build Coastguard Worker
282*d9f75844SAndroid Build Coastguard Worker } // namespace webrtc
283