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