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