• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2021 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 MEDIA_FOUNDATION_AUDIO_TYPES_H
17 #define MEDIA_FOUNDATION_AUDIO_TYPES_H
18 
19 #include <cstdint>  // NOLINT: used it
20 
21 namespace OHOS {
22 namespace Media {
23 namespace Plugins {
24 /**
25  * @enum Audio AAC Profile
26  *
27  * AAC mode type.  Note that the term profile is used with the MPEG-2
28  * standard and the term object type and profile is used with MPEG-4
29  *
30  * @since 1.0
31  * @version 1.0
32  */
33 enum struct AudioAacProfile : uint8_t {
34     NONE = 0,           ///< Null, not used
35     MAIN = 1,           ///< AAC Main object
36     LC,                 ///< AAC Low Complexity object (AAC profile)
37     SSR,                ///< AAC Scalable Sample Rate object
38     LTP,                ///< AAC Long Term Prediction object
39     HE,                 ///< AAC High Efficiency (object type SBR, HE-AAC profile)
40     SCALABLE,           ///< AAC Scalable object
41     ERLC = 17,          ///< ER AAC Low Complexity object (Error Resilient AAC-LC)
42     ER_SCALABLE = 20,   ///< ER AAC scalable object
43     LD = 23,            ///< AAC Low Delay object (Error Resilient)
44     HE_PS = 29,         ///< AAC High Efficiency with Parametric Stereo coding (HE-AAC v2, object type PS)
45     ELD = 39,           ///< AAC Enhanced Low Delay. NOTE: Pending Khronos standardization
46     XHE = 42,           ///< extended High Efficiency AAC. NOTE: Pending Khronos standardization
47 };
48 
49 /**
50  * @enum Audio AAC Stream Format
51  *
52  * @since 1.0
53  * @version 1.0
54  */
55 enum struct AudioAacStreamFormat : uint8_t {
56     MP2ADTS = 0,        ///< AAC Audio Data Transport Stream 2 format
57     MP4ADTS,            ///< AAC Audio Data Transport Stream 4 format
58     MP4LOAS,            ///< AAC Low Overhead Audio Stream format
59     MP4LATM,            ///< AAC Low overhead Audio Transport Multiplex
60     ADIF,               ///< AAC Audio Data Interchange Format
61     MP4FF,              ///< AAC inside MPEG-4/ISO File Format
62     RAW,                ///< AAC Raw Format
63 };
64 
65 /*
66  * @brief Audio RenderInfo, default ContentType::CONTENT_TYPE_UNKNOWN(0) and StreamUsage::STREAM_USAGE_UNKNOWN(0)
67  * combined into AudioStreamType::STREAM_MUSIC.
68  */
69 struct AudioRenderInfo {
70     int32_t contentType {0};
71     int32_t streamUsage {0};
72     int32_t rendererFlags {0};
73     int32_t volumeMode {0};
74 };
75 
76 enum class AudioInterruptMode {
77     SHARE_MODE,
78     INDEPENDENT_MODE
79 };
80 
81 enum AudioSampleFormat : int32_t {
82     SAMPLE_U8 = 0,
83     SAMPLE_S16LE = 1,
84     SAMPLE_S24LE = 2,
85     SAMPLE_S32LE = 3,
86     SAMPLE_F32LE = 4,
87     SAMPLE_U8P = 5,
88     SAMPLE_S16P = 6,
89     SAMPLE_S24P = 7,
90     SAMPLE_S32P = 8,
91     SAMPLE_F32P = 9,
92     SAMPLE_S8 = 10,
93     SAMPLE_S8P = 11,
94     SAMPLE_U16 = 12,
95     SAMPLE_U16P = 13,
96     SAMPLE_U24 = 14,
97     SAMPLE_U24P = 15,
98     SAMPLE_U32 = 16,
99     SAMPLE_U32P = 17,
100     SAMPLE_S64 = 18,
101     SAMPLE_U64 = 19,
102     SAMPLE_S64P = 20,
103     SAMPLE_U64P = 21,
104     SAMPLE_F64 = 22,
105     SAMPLE_F64P = 23,
106     SAMPLE_S16BE = 24,
107     SAMPLE_S24BE = 25,
108     SAMPLE_S32BE = 26,
109     SAMPLE_F32BE = 27,
110     SAMPLE_F64BE = 28,
111     INVALID_WIDTH = -1
112 };
113 
114 enum AudioChannelSet : uint64_t {
115     FRONT_LEFT = 1ULL << 0U,
116     FRONT_RIGHT = 1ULL << 1U,
117     FRONT_CENTER = 1ULL << 2U,
118     LOW_FREQUENCY = 1ULL << 3U,
119     BACK_LEFT = 1ULL << 4U,
120     BACK_RIGHT = 1ULL << 5U,
121     FRONT_LEFT_OF_CENTER = 1ULL << 6U,
122     FRONT_RIGHT_OF_CENTER = 1ULL << 7U,
123     BACK_CENTER = 1ULL << 8U,
124     SIDE_LEFT = 1ULL << 9U,
125     SIDE_RIGHT = 1ULL << 10U,
126     TOP_CENTER = 1ULL << 11U,
127     TOP_FRONT_LEFT = 1ULL << 12U,
128     TOP_FRONT_CENTER = 1ULL << 13U,
129     TOP_FRONT_RIGHT = 1ULL << 14U,
130     TOP_BACK_LEFT = 1ULL << 15U,
131     TOP_BACK_CENTER = 1ULL << 16U,
132     TOP_BACK_RIGHT = 1ULL << 17U,
133     STEREO_LEFT = 1ULL << 29U,
134     STEREO_RIGHT = 1ULL << 30U,
135     WIDE_LEFT = 1ULL << 31U,
136     WIDE_RIGHT = 1ULL << 32U,
137     SURROUND_DIRECT_LEFT = 1ULL << 33U,
138     SURROUND_DIRECT_RIGHT = 1ULL << 34U,
139     LOW_FREQUENCY_2 = 1ULL << 35U,
140     TOP_SIDE_LEFT = 1ULL << 36U,
141     TOP_SIDE_RIGHT = 1ULL << 37U,
142     BOTTOM_FRONT_CENTER = 1ULL << 38U,
143     BOTTOM_FRONT_LEFT = 1ULL << 39U,
144     BOTTOM_FRONT_RIGHT = 1ULL << 40U,
145 
146     // Ambisonics ACN formats
147     // 0th and first order ambisonics ACN
148     AMBISONICS_ACN0 = 1ULL << 41U,  /** 0th ambisonics channel number 0. */
149     AMBISONICS_ACN1 = 1ULL << 42U,  /** first-order ambisonics channel number 1. */
150     AMBISONICS_ACN2 = 1ULL << 43U,  /** first-order ambisonics channel number 2. */
151     AMBISONICS_ACN3 = 1ULL << 44U,  /** first-order ambisonics channel number 3. */
152     AMBISONICS_W = AMBISONICS_ACN0, /** same as 0th ambisonics channel number 0. */
153     AMBISONICS_Y = AMBISONICS_ACN1, /** same as first-order ambisonics channel number 1. */
154     AMBISONICS_Z = AMBISONICS_ACN2, /** same as first-order ambisonics channel number 2. */
155     AMBISONICS_X = AMBISONICS_ACN3, /** same as first-order ambisonics channel number 3. */
156 
157     // second order ambisonics ACN
158     AMBISONICS_ACN4 = 1ULL << 45U, /** second-order ambisonics channel number 4. */
159     AMBISONICS_ACN5 = 1ULL << 46U, /** second-order ambisonics channel number 5. */
160     AMBISONICS_ACN6 = 1ULL << 47U, /** second-order ambisonics channel number 6. */
161     AMBISONICS_ACN7 = 1ULL << 48U, /** second-order ambisonics channel number 7. */
162     AMBISONICS_ACN8 = 1ULL << 49U, /** second-order ambisonics channel number 8. */
163 
164     // third order ambisonics ACN
165     AMBISONICS_ACN9 = 1ULL << 50U,  /** third-order ambisonics channel number 9. */
166     AMBISONICS_ACN10 = 1ULL << 51U, /** third-order ambisonics channel number 10. */
167     AMBISONICS_ACN11 = 1ULL << 52U, /** third-order ambisonics channel number 11. */
168     AMBISONICS_ACN12 = 1ULL << 53U, /** third-order ambisonics channel number 12. */
169     AMBISONICS_ACN13 = 1ULL << 54U, /** third-order ambisonics channel number 13. */
170     AMBISONICS_ACN14 = 1ULL << 55U, /** third-order ambisonics channel number 14. */
171     AMBISONICS_ACN15 = 1ULL << 56U, /** third-order ambisonics channel number 15. */
172 };
173 
174 /**
175  * @brief Ambisonic attribute set.
176  *
177  * A set of 64-bit integers indicate the ambisonic attributes.
178  */
179 enum AmbAttributeSet : int64_t {
180     /** Ambisonic attribute: order 1 */
181     AMB_ORD_1 = 1ULL << 0U,
182 
183     /** Ambisonic attribute: order 2 */
184     AMB_ORD_2 = 2ULL << 0U,
185 
186     /** Ambisonic attribute: order 3 */
187     AMB_ORD_3 = 3ULL << 0U,
188 
189     /** Ambisonic attribute: ACN Component Ordering */
190     AMB_COM_ACN = 0ULL << 8U,
191 
192     /** Ambisonic attribute: FUMA Component Ordering */
193     AMB_COM_FUMA = 1ULL << 8U,
194 
195     /** Ambisonic attribute: N3D Normalization */
196     AMB_NOR_N3D = 0ULL << 12U,
197 
198     /** Ambisonic attribute: SN3D Normalization */
199     AMB_NOR_SN3D = 1ULL << 12U,
200 
201     /** Channel layout: Ambisonic mode */
202     AMB_MODE = 1ULL << 44U
203 };
204 
205 enum AudioChannelLayout : int64_t {
206     UNKNOWN = 0,
207 
208     MONO = (AudioChannelSet::FRONT_CENTER),
209 
210     STEREO = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT),
211     STEREO_DOWNMIX = (AudioChannelSet::STEREO_LEFT | AudioChannelSet::STEREO_RIGHT),
212 
213     CH_2POINT1 = (STEREO | AudioChannelSet::LOW_FREQUENCY),
214 
215     /**CH_LAYOUT_3POINT0 in native_audio_channel_layout*/
216     CH_2_1 = (STEREO | AudioChannelSet::BACK_CENTER),
217     SURROUND = (STEREO | AudioChannelSet::FRONT_CENTER),
218     CH_3POINT1 = (SURROUND | AudioChannelSet::LOW_FREQUENCY),
219     CH_4POINT0 = (SURROUND | AudioChannelSet::BACK_CENTER),
220 
221     /**CH_LAYOUT_QUAD_SIDE in native_audio_channel_layout*/
222     CH_2_2 = (STEREO | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT),
223     QUAD = (STEREO | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
224     CH_2POINT0POINT2 = (STEREO | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT),
225     HOA_ORDER1_ACN_N3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_N3D,
226     HOA_ORDER1_ACN_SN3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_SN3D,
227     HOA_ORDER1_FUMA = AMB_MODE | AMB_ORD_1 | AMB_COM_FUMA,
228 
229     CH_4POINT1 = (CH_4POINT0 | AudioChannelSet::LOW_FREQUENCY),
230     CH_5POINT0 = (SURROUND | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT),
231     CH_5POINT0_BACK = (SURROUND | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
232     CH_2POINT1POINT2 = (CH_2POINT0POINT2 | AudioChannelSet::LOW_FREQUENCY),
233     CH_3POINT0POINT2 = (CH_2POINT0POINT2 | AudioChannelSet::FRONT_CENTER),
234 
235     CH_5POINT1 = (CH_5POINT0 | AudioChannelSet::LOW_FREQUENCY),
236     CH_5POINT1_BACK = (CH_5POINT0_BACK | AudioChannelSet::LOW_FREQUENCY),
237     CH_6POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_CENTER),
238     CH_3POINT1POINT2 = (CH_3POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT),
239     CH_6POINT0_FRONT = (CH_2_2 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
240     HEXAGONAL = (CH_5POINT0_BACK | AudioChannelSet::BACK_CENTER),
241 
242     CH_6POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_CENTER),
243     CH_6POINT1_BACK = (CH_5POINT1_BACK | AudioChannelSet::BACK_CENTER),
244     CH_6POINT1_FRONT = (CH_6POINT0_FRONT | AudioChannelSet::LOW_FREQUENCY),
245     CH_7POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
246     CH_7POINT0_FRONT = (CH_5POINT0 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
247 
248     CH_7POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
249     OCTAGONAL = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_CENTER | AudioChannelSet::BACK_RIGHT),
250     CH_5POINT1POINT2 = (CH_5POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT),
251     CH_7POINT1_WIDE = (CH_5POINT1 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
252     CH_7POINT1_WIDE_BACK =
253         (CH_5POINT1_BACK | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
254 
255     HOA_ORDER2_ACN_N3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_N3D,
256     HOA_ORDER2_ACN_SN3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_SN3D,
257     HOA_ORDER2_FUMA = AMB_MODE | AMB_ORD_2 | AMB_COM_FUMA,
258     CH_5POINT1POINT4 = (CH_5POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT |
259                         AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT),
260     CH_7POINT1POINT2 = (CH_7POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT),
261 
262     CH_7POINT1POINT4 = (CH_7POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT |
263                         AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT),
264     CH_10POINT2 = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT | AudioChannelSet::FRONT_CENTER |
265                    AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | AudioChannelSet::BACK_LEFT |
266                    AudioChannelSet::BACK_RIGHT | AudioChannelSet::BACK_CENTER | AudioChannelSet::SIDE_LEFT |
267                    AudioChannelSet::SIDE_RIGHT | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT),
268 
269     CH_9POINT1POINT4 = (CH_7POINT1POINT4 | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT),
270 
271     CH_9POINT1POINT6 = (CH_9POINT1POINT4 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT),
272     HEXADECAGONAL =
273         (OCTAGONAL | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT | AudioChannelSet::TOP_BACK_LEFT |
274          AudioChannelSet::TOP_BACK_RIGHT | AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_FRONT_CENTER |
275          AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT),
276 
277     HOA_ORDER3_ACN_N3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_N3D,
278     HOA_ORDER3_ACN_SN3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_SN3D,
279     HOA_ORDER3_FUMA = AMB_MODE | AMB_ORD_3 | AMB_COM_FUMA,
280 
281     CH_22POINT2 = (CH_7POINT1POINT4 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER |
282                    AudioChannelSet::BACK_CENTER | AudioChannelSet::TOP_CENTER | AudioChannelSet::TOP_FRONT_CENTER |
283                    AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT |
284                    AudioChannelSet::BOTTOM_FRONT_LEFT | AudioChannelSet::BOTTOM_FRONT_RIGHT |
285                    AudioChannelSet::BOTTOM_FRONT_CENTER | AudioChannelSet::LOW_FREQUENCY_2),
286 };
287 
288 enum AACProfile : int32_t {
289     AAC_PROFILE_LC = 0,
290     AAC_PROFILE_ELD = 1,
291     AAC_PROFILE_ERLC = 2,
292     AAC_PROFILE_HE = 3,
293     AAC_PROFILE_HE_V2 = 4,
294     AAC_PROFILE_LD = 5,
295     AAC_PROFILE_MAIN = 6,
296 };
297 
298 enum AudioEncodePtsMode : int32_t {
299     DEFAULT_ENCODE_PTS_MODE = 0,               // not use input pts, calculate by encoder, pts start in 0
300     GENERATE_ENCODE_PTS_BY_INPUT_MODE,         // use input pts, calculate start from input pts
301 };
302 
303 enum AudioEncodeBitrateMode : int32_t {
304     AUDIO_CBR = 0, // constant bit rate mode.
305     AUDIO_VBR = 1, // variable bit rate mode.
306     AUDIO_MBR = 2, // single frame multiple bit rate mode
307 };
308 
309 } // namespace Plugins
310 } // namespace Media
311 } // namespace OHOS
312 #endif // MEDIA_FOUNDATION_AUDIO_TYPES_H
313