xref: /aosp_15_r20/external/webrtc/api/audio/channel_layout.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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