1 /*
2  * Copyright (C) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 /**
17  * @brief The channel layout indicates the appearance and order of the speakers
18  * for recording or playback.
19  *
20  * @library NA
21  * @syscap SystemCapability.Multimedia.Media.Core
22  * @since 11
23  */
24 #ifndef NATIVE_AUDIO_CHANNEL_LAYOUT_H
25 #define NATIVE_AUDIO_CHANNEL_LAYOUT_H
26 #include <stdint.h>
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 /**
32  * @brief Audio Channel Set
33  *
34  * A 64-bit integer with bits set for each channel.
35  * @syscap SystemCapability.Multimedia.Media.Core
36  * @since 11
37  */
38 typedef enum OH_AudioChannelSet {
39     /** Channel set For FRONT-LEFT position */
40     CH_SET_FRONT_LEFT = 1ULL << 0U,
41 
42     /** Channel set For FRONT_RIGHT position */
43     CH_SET_FRONT_RIGHT = 1ULL << 1U,
44 
45     /** Channel set For FRONT_CENTER position */
46     CH_SET_FRONT_CENTER = 1ULL << 2U,
47 
48     /** Channel set For LOW_FREQUENCY position */
49     CH_SET_LOW_FREQUENCY = 1ULL << 3U,
50 
51     /** Channel set For BACK_LEFT position */
52     CH_SET_BACK_LEFT = 1ULL << 4U,
53 
54     /** Channel set For BACK_RIGHT position */
55     CH_SET_BACK_RIGHT = 1ULL << 5U,
56 
57     /** Channel set For FRONT_LEFT_OF_CENTER position */
58     CH_SET_FRONT_LEFT_OF_CENTER = 1ULL << 6U,
59 
60     /** Channel set For FRONT_RIGHT_OF_CENTER position */
61     CH_SET_FRONT_RIGHT_OF_CENTER = 1ULL << 7U,
62 
63     /** Channel set For BACK_CENTER position */
64     CH_SET_BACK_CENTER = 1ULL << 8U,
65 
66     /** Channel set For SIDE_LEFT position */
67     CH_SET_SIDE_LEFT = 1ULL << 9U,
68 
69     /** Channel set For SIDE_RIGHT position */
70     CH_SET_SIDE_RIGHT = 1ULL << 10U,
71 
72     /** Channel set For TOP_CENTER position */
73     CH_SET_TOP_CENTER = 1ULL << 11U,
74 
75     /** Channel set For TOP_FRONT_LEFT position */
76     CH_SET_TOP_FRONT_LEFT = 1ULL << 12U,
77 
78     /** Channel set For TOP_FRONT_CENTER position */
79     CH_SET_TOP_FRONT_CENTER = 1ULL << 13U,
80 
81     /** Channel set For TOP_FRONT_RIGHT position */
82     CH_SET_TOP_FRONT_RIGHT = 1ULL << 14U,
83 
84     /** Channel set For TOP_BACK_LEFT position */
85     CH_SET_TOP_BACK_LEFT = 1ULL << 15U,
86 
87     /** Channel set For TOP_BACK_CENTER position */
88     CH_SET_TOP_BACK_CENTER = 1ULL << 16U,
89 
90     /** Channel set For TOP_BACK_RIGHT position */
91     CH_SET_TOP_BACK_RIGHT = 1ULL << 17U,
92 
93     /** Channel set For STEREO_LEFT position */
94     CH_SET_STEREO_LEFT = 1ULL << 29U,
95 
96     /** Channel set For STEREO_RIGHT position */
97     CH_SET_STEREO_RIGHT = 1ULL << 30U,
98 
99     /** Channel set For WIDE_LEFT position */
100     CH_SET_WIDE_LEFT = 1ULL << 31U,
101 
102     /** Channel set For WIDE_RIGHT position */
103     CH_SET_WIDE_RIGHT = 1ULL << 32U,
104 
105     /** Channel set For SURROUND_DIRECT_LEFT position */
106     CH_SET_SURROUND_DIRECT_LEFT = 1ULL << 33U,
107 
108     /** Channel set For SURROUND_DIRECT_RIGHT position */
109     CH_SET_SURROUND_DIRECT_RIGHT = 1ULL << 34U,
110 
111     /** Channel set For LOW_FREQUENCY_2 position */
112     CH_SET_LOW_FREQUENCY_2 = 1ULL << 35U,
113 
114     /** Channel set For TOP_SIDE_LEFT position */
115     CH_SET_TOP_SIDE_LEFT = 1ULL << 36U,
116 
117     /** Channel set For TOP_SIDE_RIGHT position */
118     CH_SET_TOP_SIDE_RIGHT = 1ULL << 37U,
119 
120     /** Channel set For BOTTOM_FRONT_CENTER position */
121     CH_SET_BOTTOM_FRONT_CENTER = 1ULL << 38U,
122 
123     /** Channel set For BOTTOM_FRONT_LEFT position */
124     CH_SET_BOTTOM_FRONT_LEFT = 1ULL << 39U,
125 
126     /** Channel set For BOTTOM_FRONT_RIGHT position */
127     CH_SET_BOTTOM_FRONT_RIGHT = 1ULL << 40U
128 } OH_AudioChannelSet;
129 
130 /**
131  * @brief Ambisonic attribute set.
132  *
133  * A set of 64-bit integers indicate the ambisonic attributes.
134  * @syscap SystemCapability.Multimedia.Media.Core
135  * @since 11
136  */
137 typedef enum OH_AmbAttributeSet {
138     /** Ambisonic attribute: order 1 */
139     AMB_ORD_1 = 1ULL << 0U,
140 
141     /** Ambisonic attribute: order 2 */
142     AMB_ORD_2 = 2ULL << 0U,
143 
144     /** Ambisonic attribute: order 3 */
145     AMB_ORD_3 = 3ULL << 0U,
146 
147     /** Ambisonic attribute: ACN Component Ordering */
148     AMB_COM_ACN = 0ULL << 8U,
149 
150     /** Ambisonic attribute: FUMA Component Ordering */
151     AMB_COM_FUMA = 1ULL << 8U,
152 
153     /** Ambisonic attribute: N3D Normalization */
154     AMB_NOR_N3D = 0ULL << 12U,
155 
156     /** Ambisonic attribute: SN3D Normalization */
157     AMB_NOR_SN3D = 1ULL << 12U,
158 
159     /** Channel layout: Ambisonic mode */
160     AMB_MODE = 1ULL << 44U
161 } OH_AmbAttributeSet;
162 
163 /**
164  * @brief Audio Channel Layout
165  *
166  * A 64-bit integer indicates that the appearance and order of the speakers for
167  * recording or playback.
168  * @syscap SystemCapability.Multimedia.Media.Core
169  * @since 11
170  */
171 typedef enum OH_AudioChannelLayout {
172     /** Unknown Channel Layout */
173     CH_LAYOUT_UNKNOWN = 0ULL,
174 
175     /** Channel Layout For Mono, 1 channel in total */
176     CH_LAYOUT_MONO = CH_SET_FRONT_CENTER,
177 
178     /** Channel Layout For Stereo, 2 channels in total */
179     CH_LAYOUT_STEREO = CH_SET_FRONT_LEFT | CH_SET_FRONT_RIGHT,
180 
181     /** Channel Layout For Stereo-Downmix, 2 channels in total */
182     CH_LAYOUT_STEREO_DOWNMIX = CH_SET_STEREO_LEFT | CH_SET_STEREO_RIGHT,
183 
184     /** Channel Layout For 2.1, 3 channels in total */
185     CH_LAYOUT_2POINT1 = CH_LAYOUT_STEREO | CH_SET_LOW_FREQUENCY,
186 
187     /** Channel Layout For 3.0, 3 channels in total */
188     CH_LAYOUT_3POINT0 = CH_LAYOUT_STEREO | CH_SET_BACK_CENTER,
189 
190     /** Channel Layout For Surround, 3 channels in total */
191     CH_LAYOUT_SURROUND = CH_LAYOUT_STEREO | CH_SET_FRONT_CENTER,
192 
193     /** Channel Layout For 3.1, 4 channels in total */
194     CH_LAYOUT_3POINT1 = CH_LAYOUT_SURROUND | CH_SET_LOW_FREQUENCY,
195 
196     /** Channel Layout For 4.0, 4 channels in total */
197     CH_LAYOUT_4POINT0 = CH_LAYOUT_SURROUND | CH_SET_BACK_CENTER,
198 
199     /** Channel Layout For Quad-Side, 4 channels in total */
200     CH_LAYOUT_QUAD_SIDE = CH_LAYOUT_STEREO | CH_SET_SIDE_LEFT | CH_SET_SIDE_RIGHT,
201 
202     /** Channel Layout For Quad, 4 channels in total */
203     CH_LAYOUT_QUAD = CH_LAYOUT_STEREO | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT,
204 
205     /** Channel Layout For 2.0.2, 4 channels in total */
206     CH_LAYOUT_2POINT0POINT2 = CH_LAYOUT_STEREO | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT,
207 
208     /** Channel Layout For ORDER1-ACN-N3D First Order Ambisonic(FOA), 4 channels
209        in total */
210     CH_LAYOUT_AMB_ORDER1_ACN_N3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_N3D,
211 
212     /** Channel Layout For ORDER1-ACN-SN3D FOA, 4 channels in total */
213     CH_LAYOUT_AMB_ORDER1_ACN_SN3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_SN3D,
214 
215     /** Channel Layout For ORDER1-FUMA FOA, 4 channels in total */
216     CH_LAYOUT_AMB_ORDER1_FUMA = AMB_MODE | AMB_ORD_1 | AMB_COM_FUMA,
217 
218     /** Channel Layout For 4.1, 5 channels in total */
219     CH_LAYOUT_4POINT1 = CH_LAYOUT_4POINT0 | CH_SET_LOW_FREQUENCY,
220 
221     /** Channel Layout For 5.0, 5 channels in total */
222     CH_LAYOUT_5POINT0 = CH_LAYOUT_SURROUND | CH_SET_SIDE_LEFT | CH_SET_SIDE_RIGHT,
223 
224     /** Channel Layout For 5.0-Back, 5 channels in total */
225     CH_LAYOUT_5POINT0_BACK = CH_LAYOUT_SURROUND | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT,
226 
227     /** Channel Layout For 2.1.2, 5 channels in total */
228     CH_LAYOUT_2POINT1POINT2 = CH_LAYOUT_2POINT0POINT2 | CH_SET_LOW_FREQUENCY,
229 
230     /** Channel Layout For 3.0.2, 5 channels in total */
231     CH_LAYOUT_3POINT0POINT2 = CH_LAYOUT_2POINT0POINT2 | CH_SET_FRONT_CENTER,
232 
233     /** Channel Layout For 5.1, 6 channels in total */
234     CH_LAYOUT_5POINT1 = CH_LAYOUT_5POINT0 | CH_SET_LOW_FREQUENCY,
235 
236     /** Channel Layout For 5.1-Back, 6 channels in total */
237     CH_LAYOUT_5POINT1_BACK = CH_LAYOUT_5POINT0_BACK | CH_SET_LOW_FREQUENCY,
238 
239     /** Channel Layout For 6.0, 6 channels in total */
240     CH_LAYOUT_6POINT0 = CH_LAYOUT_5POINT0 | CH_SET_BACK_CENTER,
241 
242     /** Channel Layout For 3.1.2, 6 channels in total */
243     CH_LAYOUT_3POINT1POINT2 = CH_LAYOUT_3POINT1 | CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT,
244 
245     /** Channel Layout For 6.0-Front, 6 channels in total */
246     CH_LAYOUT_6POINT0_FRONT = CH_LAYOUT_QUAD_SIDE | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER,
247 
248     /** Channel Layout For Hexagonal, 6 channels in total */
249     CH_LAYOUT_HEXAGONAL = CH_LAYOUT_5POINT0_BACK | CH_SET_BACK_CENTER,
250 
251     /** Channel Layout For 6.1, 7 channels in total */
252     CH_LAYOUT_6POINT1 = CH_LAYOUT_5POINT1 | CH_SET_BACK_CENTER,
253 
254     /** Channel Layout For 6.1-Back, 7 channels in total */
255     CH_LAYOUT_6POINT1_BACK = CH_LAYOUT_5POINT1_BACK | CH_SET_BACK_CENTER,
256 
257     /** Channel Layout For 6.1-Front, 7 channels in total */
258     CH_LAYOUT_6POINT1_FRONT = CH_LAYOUT_6POINT0_FRONT | CH_SET_LOW_FREQUENCY,
259 
260     /** Channel Layout For 7.0, 7 channels in total */
261     CH_LAYOUT_7POINT0 = CH_LAYOUT_5POINT0 | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT,
262 
263     /** Channel Layout For 7.0-Front, 7 channels in total */
264     CH_LAYOUT_7POINT0_FRONT = CH_LAYOUT_5POINT0 | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER,
265 
266     /** Channel Layout For 7.1, 8 channels in total */
267     CH_LAYOUT_7POINT1 = CH_LAYOUT_5POINT1 | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT,
268 
269     /** Channel Layout For Octagonal, 8 channels in total */
270     CH_LAYOUT_OCTAGONAL = CH_LAYOUT_5POINT0 | CH_SET_BACK_LEFT | CH_SET_BACK_CENTER | CH_SET_BACK_RIGHT,
271 
272     /** Channel Layout For 5.1.2, 8 channels in total */
273     CH_LAYOUT_5POINT1POINT2 = CH_LAYOUT_5POINT1 | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT,
274 
275     /** Channel Layout For 7.1-Wide, 8 channels in total */
276     CH_LAYOUT_7POINT1_WIDE = CH_LAYOUT_5POINT1 | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER,
277 
278     /** Channel Layout For 7.1-Wide-Back, 8 channels in total */
279     CH_LAYOUT_7POINT1_WIDE_BACK = CH_LAYOUT_5POINT1_BACK | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER,
280 
281     /** Channel Layout For ORDER2-ACN-N3D Higher Order Ambisonics(HOA), 9 channels
282        in total */
283     CH_LAYOUT_AMB_ORDER2_ACN_N3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_N3D,
284 
285     /** Channel Layout For ORDER2-ACN-SN3D HOA, 9 channels in total */
286     CH_LAYOUT_AMB_ORDER2_ACN_SN3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_SN3D,
287 
288     /** Channel Layout For ORDER2-FUMA HOA, 9 channels in total */
289     CH_LAYOUT_AMB_ORDER2_FUMA = AMB_MODE | AMB_ORD_2 | AMB_COM_FUMA,
290 
291     /** Channel Layout For 5.1.4, 10 channels in total */
292     CH_LAYOUT_5POINT1POINT4 = CH_LAYOUT_5POINT1 | CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT |
293                               CH_SET_TOP_BACK_LEFT | CH_SET_TOP_BACK_RIGHT,
294 
295     /** Channel Layout For 7.1.2, 10 channels in total */
296     CH_LAYOUT_7POINT1POINT2 = CH_LAYOUT_7POINT1 | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT,
297 
298     /** Channel Layout For 7.1.4, 12 channels in total */
299     CH_LAYOUT_7POINT1POINT4 = CH_LAYOUT_7POINT1 | CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT |
300                               CH_SET_TOP_BACK_LEFT | CH_SET_TOP_BACK_RIGHT,
301 
302     /** Channel Layout For 10.2, 12 channels in total */
303     CH_LAYOUT_10POINT2 = CH_SET_FRONT_LEFT | CH_SET_FRONT_RIGHT | CH_SET_FRONT_CENTER | CH_SET_TOP_FRONT_LEFT |
304                          CH_SET_TOP_FRONT_RIGHT | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT | CH_SET_BACK_CENTER |
305                          CH_SET_SIDE_LEFT | CH_SET_SIDE_RIGHT | CH_SET_WIDE_LEFT | CH_SET_WIDE_RIGHT,
306 
307     /** Channel Layout For 9.1.4, 14 channels in total */
308     CH_LAYOUT_9POINT1POINT4 = CH_LAYOUT_7POINT1POINT4 | CH_SET_WIDE_LEFT | CH_SET_WIDE_RIGHT,
309 
310     /** Channel Layout For 9.1.6, 16 channels in total */
311     CH_LAYOUT_9POINT1POINT6 = CH_LAYOUT_9POINT1POINT4 | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT,
312 
313     /** Channel Layout For Hexadecagonal, 16 channels in total */
314     CH_LAYOUT_HEXADECAGONAL = CH_LAYOUT_OCTAGONAL | CH_SET_WIDE_LEFT | CH_SET_WIDE_RIGHT | CH_SET_TOP_BACK_LEFT |
315                               CH_SET_TOP_BACK_RIGHT | CH_SET_TOP_BACK_CENTER | CH_SET_TOP_FRONT_CENTER |
316                               CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT,
317 
318     /** Channel Layout For ORDER3-ACN-N3D HOA, 16 channels in total */
319     CH_LAYOUT_AMB_ORDER3_ACN_N3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_N3D,
320 
321     /** Channel Layout For ORDER3-ACN-SN3D HOA, 16 channels in total */
322     CH_LAYOUT_AMB_ORDER3_ACN_SN3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_SN3D,
323 
324     /** Channel Layout For ORDER3-FUMA HOA, 16 channels in total */
325     CH_LAYOUT_AMB_ORDER3_FUMA = AMB_MODE | AMB_ORD_3 | AMB_COM_FUMA,
326 
327     /** Channel Layout For 22.2, 24 channels in total */
328     CH_LAYOUT_22POINT2 = CH_LAYOUT_7POINT1POINT4 | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER |
329                          CH_SET_BACK_CENTER | CH_SET_TOP_CENTER | CH_SET_TOP_FRONT_CENTER | CH_SET_TOP_BACK_CENTER |
330                          CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT | CH_SET_BOTTOM_FRONT_LEFT |
331                          CH_SET_BOTTOM_FRONT_RIGHT | CH_SET_BOTTOM_FRONT_CENTER | CH_SET_LOW_FREQUENCY_2
332 } OH_AudioChannelLayout;
333 
334 #ifdef __cplusplus
335 }
336 #endif
337 #endif