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