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#ifndef AVCODEC_AUDIO_CHANNEL_LAYOUT_H
17#define AVCODEC_AUDIO_CHANNEL_LAYOUT_H
18#include <cstdint>
19
20/**
21 * @file avcodec_audio_channel_layout.h
22 *
23 * @brief Audio AudioChannel Layout
24 *
25 * @kit AVCodecKit
26 * @library libnative_media_codecbase.so
27 * @syscap SystemCapability.Multimedia.Media.CodecBase
28 * @deprecated since 11
29 * @since 10
30 */
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
36/**
37 * @brief Audio Channel Set
38 * A 64-bit integer with bits set for each channel.
39 * @syscap SystemCapability.Multimedia.Media.CodecBase
40 * @deprecated since 11
41 * @useinstead OH_AudioChannelSet
42 * @since 10
43 */
44enum AudioChannelSet : uint64_t {
45    FRONT_LEFT = 1ULL << 0U,
46    FRONT_RIGHT = 1ULL << 1U,
47    FRONT_CENTER = 1ULL << 2U,
48    LOW_FREQUENCY = 1ULL << 3U,
49    BACK_LEFT = 1ULL << 4U,
50    BACK_RIGHT = 1ULL << 5U,
51    FRONT_LEFT_OF_CENTER = 1ULL << 6U,
52    FRONT_RIGHT_OF_CENTER = 1ULL << 7U,
53    BACK_CENTER = 1ULL << 8U,
54    SIDE_LEFT = 1ULL << 9U,
55    SIDE_RIGHT = 1ULL << 10U,
56    TOP_CENTER = 1ULL << 11U,
57    TOP_FRONT_LEFT = 1ULL << 12U,
58    TOP_FRONT_CENTER = 1ULL << 13U,
59    TOP_FRONT_RIGHT = 1ULL << 14U,
60    TOP_BACK_LEFT = 1ULL << 15U,
61    TOP_BACK_CENTER = 1ULL << 16U,
62    TOP_BACK_RIGHT = 1ULL << 17U,
63    STEREO_LEFT = 1ULL << 29U,
64    STEREO_RIGHT = 1ULL << 30U,
65    WIDE_LEFT = 1ULL << 31U,
66    WIDE_RIGHT = 1ULL << 32U,
67    SURROUND_DIRECT_LEFT = 1ULL << 33U,
68    SURROUND_DIRECT_RIGHT = 1ULL << 34U,
69    LOW_FREQUENCY_2 = 1ULL << 35U,
70    TOP_SIDE_LEFT = 1ULL << 36U,
71    TOP_SIDE_RIGHT = 1ULL << 37U,
72    BOTTOM_FRONT_CENTER = 1ULL << 38U,
73    BOTTOM_FRONT_LEFT = 1ULL << 39U,
74    BOTTOM_FRONT_RIGHT = 1ULL << 40U,
75
76    // Ambisonics ACN formats
77    // 0th and first order ambisonics ACN
78    AMBISONICS_ACN0 = 1ULL << 41U,  /** 0th ambisonics channel number 0. */
79    AMBISONICS_ACN1 = 1ULL << 42U,  /** first-order ambisonics channel number 1. */
80    AMBISONICS_ACN2 = 1ULL << 43U,  /** first-order ambisonics channel number 2. */
81    AMBISONICS_ACN3 = 1ULL << 44U,  /** first-order ambisonics channel number 3. */
82    AMBISONICS_W = AMBISONICS_ACN0, /** same as 0th ambisonics channel number 0. */
83    AMBISONICS_Y = AMBISONICS_ACN1, /** same as first-order ambisonics channel number 1. */
84    AMBISONICS_Z = AMBISONICS_ACN2, /** same as first-order ambisonics channel number 2. */
85    AMBISONICS_X = AMBISONICS_ACN3, /** same as first-order ambisonics channel number 3. */
86
87    // second order ambisonics ACN
88    AMBISONICS_ACN4 = 1ULL << 45U, /** second-order ambisonics channel number 4. */
89    AMBISONICS_ACN5 = 1ULL << 46U, /** second-order ambisonics channel number 5. */
90    AMBISONICS_ACN6 = 1ULL << 47U, /** second-order ambisonics channel number 6. */
91    AMBISONICS_ACN7 = 1ULL << 48U, /** second-order ambisonics channel number 7. */
92    AMBISONICS_ACN8 = 1ULL << 49U, /** second-order ambisonics channel number 8. */
93
94    // third order ambisonics ACN
95    AMBISONICS_ACN9 = 1ULL << 50U,  /** third-order ambisonics channel number 9. */
96    AMBISONICS_ACN10 = 1ULL << 51U, /** third-order ambisonics channel number 10. */
97    AMBISONICS_ACN11 = 1ULL << 52U, /** third-order ambisonics channel number 11. */
98    AMBISONICS_ACN12 = 1ULL << 53U, /** third-order ambisonics channel number 12. */
99    AMBISONICS_ACN13 = 1ULL << 54U, /** third-order ambisonics channel number 13. */
100    AMBISONICS_ACN14 = 1ULL << 55U, /** third-order ambisonics channel number 14. */
101    AMBISONICS_ACN15 = 1ULL << 56U, /** third-order ambisonics channel number 15. */
102};
103
104/**
105 * @brief Audio AudioChannel Layout
106 * Indicates that the channel order in which the user requests decoder output
107 * is the native codec channel order.
108 * @syscap SystemCapability.Multimedia.Media.CodecBase
109 * @deprecated since 11
110 * @useinstead OH_AudioChannelLayout
111 * @since 10
112 */
113enum AudioChannelLayout : uint64_t {
114    UNKNOWN_CHANNEL_LAYOUT = 0,
115    MONO = (AudioChannelSet::FRONT_CENTER),
116    STEREO = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT),
117    CH_2POINT1 = (STEREO | AudioChannelSet::LOW_FREQUENCY),
118    CH_2_1 = (STEREO | AudioChannelSet::BACK_CENTER),
119    SURROUND = (STEREO | AudioChannelSet::FRONT_CENTER),
120    CH_3POINT1 = (SURROUND | AudioChannelSet::LOW_FREQUENCY),
121    CH_4POINT0 = (SURROUND | AudioChannelSet::BACK_CENTER),
122    CH_4POINT1 = (CH_4POINT0 | AudioChannelSet::LOW_FREQUENCY),
123    CH_2_2 = (STEREO | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT),
124    QUAD = (STEREO | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
125    CH_5POINT0 = (SURROUND | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT),
126    CH_5POINT1 = (CH_5POINT0 | AudioChannelSet::LOW_FREQUENCY),
127    CH_5POINT0_BACK = (SURROUND | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
128    CH_5POINT1_BACK = (CH_5POINT0_BACK | AudioChannelSet::LOW_FREQUENCY),
129    CH_6POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_CENTER),
130    CH_6POINT0_FRONT = (CH_2_2 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
131    HEXAGONAL = (CH_5POINT0_BACK | AudioChannelSet::BACK_CENTER),
132    CH_6POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_CENTER),
133    CH_6POINT1_BACK = (CH_5POINT1_BACK | AudioChannelSet::BACK_CENTER),
134    CH_6POINT1_FRONT = (CH_6POINT0_FRONT | AudioChannelSet::LOW_FREQUENCY),
135    CH_7POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
136    CH_7POINT0_FRONT = (CH_5POINT0 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
137    CH_7POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
138    CH_7POINT1_WIDE = (CH_5POINT1 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
139    CH_7POINT1_WIDE_BACK =
140        (CH_5POINT1_BACK | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
141    CH_3POINT1POINT2 = (CH_3POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT),
142    CH_5POINT1POINT2 = (CH_5POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT),
143    CH_5POINT1POINT4 = (CH_5POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT |
144                        AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT),
145    CH_7POINT1POINT2 = (CH_7POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT),
146    CH_7POINT1POINT4 = (CH_7POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT |
147                        AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT),
148    CH_9POINT1POINT4 = (CH_7POINT1POINT4 | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT),
149    CH_9POINT1POINT6 = (CH_9POINT1POINT4 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT),
150    CH_10POINT2 = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT | AudioChannelSet::FRONT_CENTER |
151                   AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | AudioChannelSet::BACK_LEFT |
152                   AudioChannelSet::BACK_RIGHT | AudioChannelSet::BACK_CENTER | AudioChannelSet::SIDE_LEFT |
153                   AudioChannelSet::SIDE_RIGHT | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT),
154    CH_22POINT2 = (CH_7POINT1POINT4 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER |
155                   AudioChannelSet::BACK_CENTER | AudioChannelSet::TOP_CENTER | AudioChannelSet::TOP_FRONT_CENTER |
156                   AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT |
157                   AudioChannelSet::BOTTOM_FRONT_LEFT | AudioChannelSet::BOTTOM_FRONT_RIGHT |
158                   AudioChannelSet::BOTTOM_FRONT_CENTER | AudioChannelSet::LOW_FREQUENCY_2),
159    OCTAGONAL = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_CENTER | AudioChannelSet::BACK_RIGHT),
160    HEXADECAGONAL =
161        (OCTAGONAL | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT | AudioChannelSet::TOP_BACK_LEFT |
162         AudioChannelSet::TOP_BACK_RIGHT | AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_FRONT_CENTER |
163         AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT),
164    STEREO_DOWNMIX = (AudioChannelSet::STEREO_LEFT | AudioChannelSet::STEREO_RIGHT),
165
166    HOA_FIRST = AudioChannelSet::AMBISONICS_ACN0 | AudioChannelSet::AMBISONICS_ACN1 | AudioChannelSet::AMBISONICS_ACN2 |
167                AudioChannelSet::AMBISONICS_ACN3,
168    HOA_SECOND = HOA_FIRST | AudioChannelSet::AMBISONICS_ACN4 | AudioChannelSet::AMBISONICS_ACN5 |
169                 AudioChannelSet::AMBISONICS_ACN6 | AudioChannelSet::AMBISONICS_ACN7 | AudioChannelSet::AMBISONICS_ACN8,
170    HOA_THIRD = HOA_SECOND | AudioChannelSet::AMBISONICS_ACN9 | AudioChannelSet::AMBISONICS_ACN10 |
171                AudioChannelSet::AMBISONICS_ACN11 | AudioChannelSet::AMBISONICS_ACN12 |
172                AudioChannelSet::AMBISONICS_ACN13 | AudioChannelSet::AMBISONICS_ACN14 |
173                AudioChannelSet::AMBISONICS_ACN15,
174};
175#ifdef __cplusplus
176}
177#endif
178#endif