• 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 #ifndef AUDIO_STREAM_INFO_H
16 #define AUDIO_STREAM_INFO_H
17 
18 namespace OHOS {
19 namespace AudioStandard {
20 
21 const uint32_t CH_MODE_OFFSET = 44;
22 const uint32_t CH_HOA_ORDNUM_OFFSET = 0;
23 const uint32_t CH_HOA_COMORD_OFFSET = 8;
24 const uint32_t CH_HOA_NOR_OFFSET = 12;
25 const uint64_t CH_MODE_MASK = ((1ULL << 4) - 1ULL) << CH_MODE_OFFSET;
26 const uint64_t CH_HOA_ORDNUM_MASK = ((1ULL << 8) - 1ULL) << CH_HOA_ORDNUM_OFFSET;
27 const uint64_t CH_HOA_COMORD_MASK = ((1ULL << 4) - 1ULL) << CH_HOA_COMORD_OFFSET;
28 const uint64_t CH_HOA_NOR_MASK = ((1ULL << 4) - 1ULL) << CH_HOA_NOR_OFFSET;
29 
30 enum AudioStreamType {
31     /**
32      * Indicates audio streams default.
33      */
34     STREAM_DEFAULT = -1,
35     /**
36      * Indicates audio streams of voices in calls.
37      */
38     STREAM_VOICE_CALL = 0,
39     /**
40      * Indicates audio streams for music.
41      */
42     STREAM_MUSIC = 1,
43     /**
44      * Indicates audio streams for ringtones.
45      */
46     STREAM_RING = 2,
47     /**
48      * Indicates audio streams for media.
49      * Deprecated
50      */
51     STREAM_MEDIA = 3,
52     /**
53      * Indicates audio streams used for voice assistant and text-to-speech (TTS).
54      */
55     STREAM_VOICE_ASSISTANT = 4,
56     /**
57      * Indicates audio streams for system sounds.
58      */
59     STREAM_SYSTEM = 5,
60     /**
61      * Indicates audio streams for alarms.
62      */
63     STREAM_ALARM = 6,
64     /**
65      * Indicates audio streams for notifications.
66      */
67     STREAM_NOTIFICATION = 7,
68     /**
69      * Indicates audio streams for voice calls routed through a connected Bluetooth device.
70      * Deprecated
71      */
72     STREAM_BLUETOOTH_SCO = 8,
73     /**
74      * Indicates audio streams for enforced audible.
75      */
76     STREAM_ENFORCED_AUDIBLE = 9,
77     /**
78      * Indicates audio streams for dual-tone multi-frequency (DTMF) tones.
79      */
80     STREAM_DTMF = 10,
81     /**
82      * Indicates audio streams exclusively transmitted through the speaker (text-to-speech) of a device.
83      * Deprecated
84      */
85     STREAM_TTS =  11,
86     /**
87      * Indicates audio streams used for prompts in terms of accessibility.
88      */
89     STREAM_ACCESSIBILITY = 12,
90     /**
91      * Indicates special scene used for recording.
92      * Deprecated
93      */
94     STREAM_RECORDING = 13,
95     /**
96      * Indicates audio streams for movie.
97      * New
98      */
99     STREAM_MOVIE = 14,
100     /**
101      * Indicates audio streams for game.
102      * New
103      */
104     STREAM_GAME = 15,
105     /**
106      * Indicates audio streams for speech.
107      * New
108      */
109     STREAM_SPEECH = 16,
110     /**
111      * Indicates audio streams for enforced audible.
112      * New
113      */
114     STREAM_SYSTEM_ENFORCED = 17,
115     /**
116      * Indicates audio streams used for ultrasonic ranging.
117      */
118     STREAM_ULTRASONIC = 18,
119     /**
120      * Indicates audio streams for wakeup.
121      */
122     STREAM_WAKEUP = 19,
123     /**
124      * Indicates audio streams for voice message.
125      */
126     STREAM_VOICE_MESSAGE = 20,
127     /**
128      * Indicates audio streams for navigation.
129      */
130     STREAM_NAVIGATION = 21,
131     /**
132      * Indicates audio streams for ForceStop.
133      */
134     STREAM_INTERNAL_FORCE_STOP = 22,
135     /**
136      * Indicates audio streams for voice call.
137      */
138     STREAM_SOURCE_VOICE_CALL = 23,
139     /**
140      * Indicates the max value of audio stream type (except STREAM_ALL).
141      */
142     STREAM_TYPE_MAX = STREAM_SOURCE_VOICE_CALL,
143 
144     /**
145      * Indicates audio streams used for only one volume bar of a device.
146      */
147     STREAM_ALL = 100
148 };
149 
150 /**
151 * Enumerates the stream usage.
152 */
153 enum StreamUsage {
154     STREAM_USAGE_INVALID = -1,
155     STREAM_USAGE_UNKNOWN = 0,
156     STREAM_USAGE_MEDIA = 1,
157     STREAM_USAGE_MUSIC = 1,
158     STREAM_USAGE_VOICE_COMMUNICATION = 2,
159     STREAM_USAGE_VOICE_ASSISTANT = 3,
160     STREAM_USAGE_ALARM = 4,
161     STREAM_USAGE_VOICE_MESSAGE = 5,
162     STREAM_USAGE_NOTIFICATION_RINGTONE = 6,
163     STREAM_USAGE_RINGTONE = 6,
164     STREAM_USAGE_NOTIFICATION = 7,
165     STREAM_USAGE_ACCESSIBILITY = 8,
166     STREAM_USAGE_SYSTEM = 9,
167     STREAM_USAGE_MOVIE = 10,
168     STREAM_USAGE_GAME = 11,
169     STREAM_USAGE_AUDIOBOOK = 12,
170     STREAM_USAGE_NAVIGATION = 13,
171     STREAM_USAGE_DTMF = 14,
172     STREAM_USAGE_ENFORCED_TONE = 15,
173     STREAM_USAGE_ULTRASONIC = 16,
174     //other StreamUsage
175     STREAM_USAGE_RANGING,
176     STREAM_USAGE_VOICE_MODEM_COMMUNICATION
177 };
178 
179 /**
180 * Enumerates the audio content type.
181 */
182 enum ContentType {
183     CONTENT_TYPE_UNKNOWN = 0,
184     CONTENT_TYPE_SPEECH = 1,
185     CONTENT_TYPE_MUSIC = 2,
186     CONTENT_TYPE_MOVIE = 3,
187     CONTENT_TYPE_SONIFICATION = 4,
188     CONTENT_TYPE_RINGTONE = 5,
189     // other ContentType
190     CONTENT_TYPE_PROMPT = 6,
191     CONTENT_TYPE_GAME = 7,
192     CONTENT_TYPE_DTMF = 8,
193     CONTENT_TYPE_ULTRASONIC = 9
194 };
195 
196 struct AudioStreamParams {
197     uint32_t samplingRate;
198     uint8_t encoding;
199     uint8_t format;
200     uint8_t channels;
201     uint64_t channelLayout = 0ULL;
202 };
203 
204 // sampling rate
205 enum AudioSamplingRate {
206     SAMPLE_RATE_8000 = 8000,
207     SAMPLE_RATE_11025 = 11025,
208     SAMPLE_RATE_12000 = 12000,
209     SAMPLE_RATE_16000 = 16000,
210     SAMPLE_RATE_22050 = 22050,
211     SAMPLE_RATE_24000 = 24000,
212     SAMPLE_RATE_32000 = 32000,
213     SAMPLE_RATE_44100 = 44100,
214     SAMPLE_RATE_48000 = 48000,
215     SAMPLE_RATE_64000 = 64000,
216     SAMPLE_RATE_96000 = 96000
217 };
218 
219 enum AudioEncodingType {
220     ENCODING_INVALID = -1,
221     ENCODING_PCM = 0,
222     ENCODING_AUDIOVIVID = 1
223 };
224 
225 
226 // format
227 enum AudioSampleFormat : uint8_t {
228     SAMPLE_U8 = 0,
229     SAMPLE_S16LE = 1,
230     SAMPLE_S24LE = 2,
231     SAMPLE_S32LE = 3,
232     SAMPLE_F32LE = 4,
233     INVALID_WIDTH = -1
234 };
235 
236 // channel
237 enum AudioChannel : uint8_t {
238     MONO = 1,
239     STEREO = 2,
240     CHANNEL_3 = 3,
241     CHANNEL_4 = 4,
242     CHANNEL_5 = 5,
243     CHANNEL_6 = 6,
244     CHANNEL_7 = 7,
245     CHANNEL_8 = 8,
246     CHANNEL_9 = 9,
247     CHANNEL_10 = 10,
248     CHANNEL_11 = 11,
249     CHANNEL_12 = 12,
250     CHANNEL_13 = 13,
251     CHANNEL_14 = 14,
252     CHANNEL_15 = 15,
253     CHANNEL_16 = 16
254 };
255 
256 enum AudioChannelSet: uint64_t {
257     FRONT_LEFT = 1ULL << 0U, FRONT_RIGHT = 1ULL << 1U, FRONT_CENTER = 1ULL << 2U,
258     LOW_FREQUENCY = 1ULL << 3U,
259     BACK_LEFT = 1ULL << 4U, BACK_RIGHT = 1ULL << 5U,
260     FRONT_LEFT_OF_CENTER = 1ULL << 6U, FRONT_RIGHT_OF_CENTER = 1ULL << 7U,
261     BACK_CENTER = 1ULL << 8U,
262     SIDE_LEFT = 1ULL << 9U, SIDE_RIGHT = 1ULL << 10U,
263     TOP_CENTER = 1ULL << 11U,
264     TOP_FRONT_LEFT = 1ULL << 12U, TOP_FRONT_CENTER = 1ULL << 13U, TOP_FRONT_RIGHT = 1ULL << 14U,
265     TOP_BACK_LEFT = 1ULL << 15U, TOP_BACK_CENTER = 1ULL << 16U, TOP_BACK_RIGHT = 1ULL << 17U,
266     STEREO_LEFT = 1ULL << 29U, STEREO_RIGHT = 1ULL << 30U,
267     WIDE_LEFT = 1ULL << 31U, WIDE_RIGHT = 1ULL << 32U,
268     SURROUND_DIRECT_LEFT = 1ULL << 33U, SURROUND_DIRECT_RIGHT = 1ULL << 34U,
269     LOW_FREQUENCY_2 = 1ULL << 35U,
270     TOP_SIDE_LEFT = 1ULL << 36U, TOP_SIDE_RIGHT = 1ULL << 37U,
271     BOTTOM_FRONT_CENTER = 1ULL << 38U, BOTTOM_FRONT_LEFT = 1ULL << 39U, BOTTOM_FRONT_RIGHT = 1ULL << 40U
272 };
273 
274 enum ChannelMode: uint64_t {
275     CHANNEL_MDOE_NORMAL = 0ULL,
276     CHANNEL_MDOE_AMBISONIC = 1ULL,
277     CHANNEL_MDOE_BINAURAL = 2ULL
278 };
279 
280 enum HOAOrderNumber: uint64_t {
281     HOA_ORDNUM_1 = 1ULL,
282     HOA_ORDNUM_2 = 2ULL,
283     HOA_ORDNUM_3 = 3ULL
284 };
285 
286 enum HOAComponentOrdering: uint64_t {
287     HOA_COMORD_ACN = 0ULL,
288     HOA_COMORD_FUMA = 1ULL,
289 };
290 
291 enum HOANormalization: uint64_t {
292     HOA_NOR_N3D = 0ULL,
293     HOA_NOR_SN3D = 1ULL,
294 };
295 
296 enum AudioChannelLayout: uint64_t {
297     CH_LAYOUT_UNKNOWN = 0ULL,
298     /** Channel count: 1*/
299     CH_LAYOUT_MONO = FRONT_CENTER,
300     /** Channel count: 2*/
301     CH_LAYOUT_STEREO = FRONT_LEFT | FRONT_RIGHT,
302     CH_LAYOUT_STEREO_DOWNMIX = STEREO_LEFT | STEREO_RIGHT,
303     /** Channel count: 3*/
304     CH_LAYOUT_2POINT1 = CH_LAYOUT_STEREO | LOW_FREQUENCY,
305     CH_LAYOUT_3POINT0 = CH_LAYOUT_STEREO | BACK_CENTER,
306     CH_LAYOUT_SURROUND = CH_LAYOUT_STEREO | FRONT_CENTER,
307     /** Channel count: 4*/
308     CH_LAYOUT_3POINT1 = CH_LAYOUT_SURROUND | LOW_FREQUENCY,
309     CH_LAYOUT_4POINT0 = CH_LAYOUT_SURROUND | BACK_CENTER,
310     CH_LAYOUT_QUAD_SIDE = CH_LAYOUT_STEREO | SIDE_LEFT | SIDE_RIGHT,
311     CH_LAYOUT_QUAD = CH_LAYOUT_STEREO | BACK_LEFT | BACK_RIGHT,
312     CH_LAYOUT_2POINT0POINT2 = CH_LAYOUT_STEREO | TOP_SIDE_LEFT | TOP_SIDE_RIGHT,
313     /** Channel count: 5*/
314     CH_LAYOUT_4POINT1 = CH_LAYOUT_4POINT0 | LOW_FREQUENCY,
315     CH_LAYOUT_5POINT0 = CH_LAYOUT_SURROUND | SIDE_LEFT | SIDE_RIGHT,
316     CH_LAYOUT_5POINT0_BACK = CH_LAYOUT_SURROUND | BACK_LEFT | BACK_RIGHT,
317     CH_LAYOUT_2POINT1POINT2 = CH_LAYOUT_2POINT0POINT2 | LOW_FREQUENCY,
318     CH_LAYOUT_3POINT0POINT2 = CH_LAYOUT_2POINT0POINT2 | FRONT_CENTER,
319     /** Channel count: 6*/
320     CH_LAYOUT_5POINT1 = CH_LAYOUT_5POINT0 | LOW_FREQUENCY,
321     CH_LAYOUT_5POINT1_BACK = CH_LAYOUT_5POINT0_BACK | LOW_FREQUENCY,
322     CH_LAYOUT_6POINT0 = CH_LAYOUT_5POINT0 | BACK_CENTER,
323     CH_LAYOUT_HEXAGONAL = CH_LAYOUT_5POINT0_BACK | BACK_CENTER,
324     CH_LAYOUT_3POINT1POINT2 = CH_LAYOUT_3POINT1 | TOP_FRONT_LEFT | TOP_FRONT_RIGHT,
325     CH_LAYOUT_6POINT0_FRONT = CH_LAYOUT_QUAD_SIDE | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER,
326     /** Channel count: 7*/
327     CH_LAYOUT_6POINT1 = CH_LAYOUT_5POINT1 | BACK_CENTER,
328     CH_LAYOUT_6POINT1_BACK = CH_LAYOUT_5POINT1_BACK | BACK_CENTER,
329     CH_LAYOUT_6POINT1_FRONT = CH_LAYOUT_6POINT0_FRONT | LOW_FREQUENCY,
330     CH_LAYOUT_7POINT0 = CH_LAYOUT_5POINT0 | BACK_LEFT | BACK_RIGHT,
331     CH_LAYOUT_7POINT0_FRONT = CH_LAYOUT_5POINT0 | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER,
332     /** Channel count: 8*/
333     CH_LAYOUT_7POINT1 = CH_LAYOUT_5POINT1 | BACK_LEFT | BACK_RIGHT,
334     CH_LAYOUT_OCTAGONAL = CH_LAYOUT_5POINT0 | BACK_CENTER | BACK_LEFT | BACK_RIGHT,
335     CH_LAYOUT_5POINT1POINT2 = CH_LAYOUT_5POINT1 | TOP_SIDE_LEFT | TOP_SIDE_RIGHT,
336     CH_LAYOUT_7POINT1_WIDE = CH_LAYOUT_5POINT1 | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER,
337     CH_LAYOUT_7POINT1_WIDE_BACK = CH_LAYOUT_5POINT1_BACK | FRONT_LEFT_OF_CENTER | FRONT_RIGHT_OF_CENTER,
338     /** Channel count: 10*/
339     CH_LAYOUT_5POINT1POINT4 = CH_LAYOUT_5POINT1 | TOP_FRONT_LEFT | TOP_FRONT_RIGHT | TOP_BACK_LEFT |TOP_BACK_RIGHT,
340     CH_LAYOUT_7POINT1POINT2 = CH_LAYOUT_7POINT1 | TOP_SIDE_LEFT | TOP_SIDE_RIGHT,
341     /** Channel count: 12*/
342     CH_LAYOUT_7POINT1POINT4 = CH_LAYOUT_7POINT1 | TOP_FRONT_LEFT | TOP_FRONT_RIGHT | TOP_BACK_LEFT | TOP_BACK_RIGHT,
343     CH_LAYOUT_10POINT2 = FRONT_LEFT | FRONT_RIGHT | FRONT_CENTER | TOP_FRONT_LEFT | TOP_FRONT_RIGHT | BACK_LEFT
344         | BACK_RIGHT | BACK_CENTER | SIDE_LEFT | SIDE_RIGHT | WIDE_LEFT | WIDE_RIGHT,
345     /** Channel count: 14*/
346     CH_LAYOUT_9POINT1POINT4 = CH_LAYOUT_7POINT1POINT4 | WIDE_LEFT | WIDE_RIGHT,
347     /** Channel count: 16*/
348     CH_LAYOUT_9POINT1POINT6 = CH_LAYOUT_9POINT1POINT4 | TOP_SIDE_LEFT | TOP_SIDE_RIGHT,
349     CH_LAYOUT_HEXADECAGONAL = CH_LAYOUT_OCTAGONAL | WIDE_LEFT | WIDE_RIGHT | TOP_BACK_LEFT | TOP_BACK_RIGHT
350         | TOP_BACK_CENTER | TOP_FRONT_CENTER | TOP_FRONT_LEFT | TOP_FRONT_RIGHT,
351     /** HOA: fitst order*/
352     CH_LAYOUT_HOA_ORDER1_ACN_N3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_1 << CH_HOA_ORDNUM_OFFSET)
353         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_N3D << CH_HOA_NOR_OFFSET),
354     CH_LAYOUT_HOA_ORDER1_ACN_SN3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_1 << CH_HOA_ORDNUM_OFFSET)
355         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_SN3D << CH_HOA_NOR_OFFSET),
356     CH_LAYOUT_HOA_ORDER1_FUMA = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_1 << CH_HOA_ORDNUM_OFFSET)
357         | (HOA_COMORD_FUMA << CH_HOA_COMORD_OFFSET),
358     /** HOA: second order*/
359     CH_LAYOUT_HOA_ORDER2_ACN_N3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_2 << CH_HOA_ORDNUM_OFFSET)
360         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_N3D << CH_HOA_NOR_OFFSET),
361     CH_LAYOUT_HOA_ORDER2_ACN_SN3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_2 << CH_HOA_ORDNUM_OFFSET)
362         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_SN3D << CH_HOA_NOR_OFFSET),
363     CH_LAYOUT_HOA_ORDER2_FUMA = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_2 << CH_HOA_ORDNUM_OFFSET)
364         | (HOA_COMORD_FUMA << CH_HOA_COMORD_OFFSET),
365     /** HOA: third order*/
366     CH_LAYOUT_HOA_ORDER3_ACN_N3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_3 << CH_HOA_ORDNUM_OFFSET)
367         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_N3D << CH_HOA_NOR_OFFSET),
368     CH_LAYOUT_HOA_ORDER3_ACN_SN3D = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_3 << CH_HOA_ORDNUM_OFFSET)
369         | (HOA_COMORD_ACN << CH_HOA_COMORD_OFFSET) | (HOA_NOR_SN3D << CH_HOA_NOR_OFFSET),
370     CH_LAYOUT_HOA_ORDER3_FUMA = (CHANNEL_MDOE_AMBISONIC << CH_MODE_OFFSET) | (HOA_ORDNUM_3 << CH_HOA_ORDNUM_OFFSET)
371         | (HOA_COMORD_FUMA << CH_HOA_COMORD_OFFSET),
372 };
373 
374 const std::vector<AudioChannelLayout> RENDERER_SUPPORTED_CHANNELLAYOUTS {
375     CH_LAYOUT_UNKNOWN,
376     CH_LAYOUT_MONO,
377     CH_LAYOUT_STEREO, CH_LAYOUT_STEREO_DOWNMIX,
378     CH_LAYOUT_2POINT1, CH_LAYOUT_3POINT0, CH_LAYOUT_SURROUND,
379     CH_LAYOUT_3POINT1, CH_LAYOUT_4POINT0, CH_LAYOUT_QUAD_SIDE, CH_LAYOUT_QUAD, CH_LAYOUT_2POINT0POINT2,
380     CH_LAYOUT_4POINT1, CH_LAYOUT_5POINT0, CH_LAYOUT_5POINT0_BACK, CH_LAYOUT_2POINT1POINT2, CH_LAYOUT_3POINT0POINT2,
381     CH_LAYOUT_5POINT1, CH_LAYOUT_5POINT1_BACK, CH_LAYOUT_6POINT0,
382     CH_LAYOUT_HEXAGONAL, CH_LAYOUT_3POINT1POINT2, CH_LAYOUT_6POINT0_FRONT,
383     CH_LAYOUT_6POINT1, CH_LAYOUT_6POINT1_BACK, CH_LAYOUT_6POINT1_FRONT, CH_LAYOUT_7POINT0, CH_LAYOUT_7POINT0_FRONT,
384     CH_LAYOUT_7POINT1, CH_LAYOUT_OCTAGONAL, CH_LAYOUT_5POINT1POINT2, CH_LAYOUT_7POINT1_WIDE,
385     CH_LAYOUT_7POINT1_WIDE_BACK, CH_LAYOUT_5POINT1POINT4, CH_LAYOUT_7POINT1POINT2, CH_LAYOUT_7POINT1POINT4,
386     CH_LAYOUT_10POINT2, CH_LAYOUT_9POINT1POINT4, CH_LAYOUT_9POINT1POINT6, CH_LAYOUT_HEXADECAGONAL,
387     CH_LAYOUT_HOA_ORDER1_ACN_N3D, CH_LAYOUT_HOA_ORDER1_ACN_SN3D, CH_LAYOUT_HOA_ORDER1_FUMA,
388     CH_LAYOUT_HOA_ORDER2_ACN_N3D, CH_LAYOUT_HOA_ORDER2_ACN_SN3D, CH_LAYOUT_HOA_ORDER2_FUMA,
389     CH_LAYOUT_HOA_ORDER3_ACN_N3D, CH_LAYOUT_HOA_ORDER3_ACN_SN3D, CH_LAYOUT_HOA_ORDER3_FUMA
390 };
391 
392 const std::vector<AudioSampleFormat> AUDIO_SUPPORTED_FORMATS {
393     SAMPLE_U8,
394     SAMPLE_S16LE,
395     SAMPLE_S24LE,
396     SAMPLE_S32LE
397 };
398 
399 const std::vector<AudioChannel> RENDERER_SUPPORTED_CHANNELS {
400     MONO,
401     STEREO,
402     CHANNEL_3,
403     CHANNEL_4,
404     CHANNEL_5,
405     CHANNEL_6,
406     CHANNEL_7,
407     CHANNEL_8,
408     CHANNEL_9,
409     CHANNEL_10,
410     CHANNEL_12,
411     CHANNEL_14,
412     CHANNEL_16,
413 };
414 
415 const std::vector<AudioChannel> CAPTURER_SUPPORTED_CHANNELS {
416     MONO,
417     STEREO,
418     CHANNEL_3,
419     CHANNEL_4,
420     CHANNEL_5,
421     CHANNEL_6
422 };
423 
424 
425 const std::vector<AudioEncodingType> AUDIO_SUPPORTED_ENCODING_TYPES {
426     ENCODING_PCM,
427     ENCODING_AUDIOVIVID
428 };
429 
430 const std::vector<AudioSamplingRate> AUDIO_SUPPORTED_SAMPLING_RATES {
431     SAMPLE_RATE_8000,
432     SAMPLE_RATE_11025,
433     SAMPLE_RATE_12000,
434     SAMPLE_RATE_16000,
435     SAMPLE_RATE_22050,
436     SAMPLE_RATE_24000,
437     SAMPLE_RATE_32000,
438     SAMPLE_RATE_44100,
439     SAMPLE_RATE_48000,
440     SAMPLE_RATE_64000,
441     SAMPLE_RATE_96000
442 };
443 
444 const std::vector<StreamUsage> AUDIO_SUPPORTED_STREAM_USAGES {
445     STREAM_USAGE_UNKNOWN,
446     STREAM_USAGE_MEDIA,
447     STREAM_USAGE_MUSIC,
448     STREAM_USAGE_VOICE_COMMUNICATION,
449     STREAM_USAGE_VOICE_ASSISTANT,
450     STREAM_USAGE_ALARM,
451     STREAM_USAGE_VOICE_MESSAGE,
452     STREAM_USAGE_NOTIFICATION_RINGTONE,
453     STREAM_USAGE_RINGTONE,
454     STREAM_USAGE_NOTIFICATION,
455     STREAM_USAGE_ACCESSIBILITY,
456     STREAM_USAGE_SYSTEM,
457     STREAM_USAGE_MOVIE,
458     STREAM_USAGE_GAME,
459     STREAM_USAGE_AUDIOBOOK,
460     STREAM_USAGE_NAVIGATION,
461     STREAM_USAGE_DTMF,
462     STREAM_USAGE_ENFORCED_TONE,
463     STREAM_USAGE_ULTRASONIC,
464     STREAM_USAGE_RANGING,
465     STREAM_USAGE_VOICE_MODEM_COMMUNICATION
466 };
467 
468 // Supported audio parameters for fast audio stream
469 const std::vector<AudioSamplingRate> AUDIO_FAST_STREAM_SUPPORTED_SAMPLING_RATES {
470     SAMPLE_RATE_48000,
471 };
472 
473 const std::vector<AudioChannel> AUDIO_FAST_STREAM_SUPPORTED_CHANNELS {
474     MONO,
475     STEREO,
476 };
477 
478 const std::vector<AudioSampleFormat> AUDIO_FAST_STREAM_SUPPORTED_FORMATS {
479     SAMPLE_S16LE,
480     SAMPLE_S32LE
481 };
482 
483 struct BufferDesc {
484     uint8_t* buffer;
485     size_t bufLength;
486     size_t dataLength;
487 };
488 
489 class AudioStreamInfo {
490 public:
491     AudioSamplingRate samplingRate;
492     AudioEncodingType encoding = AudioEncodingType::ENCODING_PCM;
493     AudioSampleFormat format;
494     AudioChannel channels;
495     AudioChannelLayout channelLayout  = AudioChannelLayout::CH_LAYOUT_UNKNOWN;
AudioStreamInfo(AudioSamplingRate samplingRate_,AudioEncodingType encoding_,AudioSampleFormat format_,AudioChannel channels_)496     constexpr AudioStreamInfo(AudioSamplingRate samplingRate_, AudioEncodingType encoding_, AudioSampleFormat format_,
497         AudioChannel channels_) : samplingRate(samplingRate_), encoding(encoding_), format(format_), channels(channels_)
498     {}
499     AudioStreamInfo() = default;
Marshalling(Parcel & parcel)500     bool Marshalling(Parcel &parcel) const
501     {
502         return parcel.WriteInt32(static_cast<int32_t>(samplingRate))
503             && parcel.WriteInt32(static_cast<int32_t>(encoding))
504             && parcel.WriteInt32(static_cast<int32_t>(format))
505             && parcel.WriteInt32(static_cast<int32_t>(channels));
506     }
Unmarshalling(Parcel & parcel)507     void Unmarshalling(Parcel &parcel)
508     {
509         samplingRate = static_cast<AudioSamplingRate>(parcel.ReadInt32());
510         encoding = static_cast<AudioEncodingType>(parcel.ReadInt32());
511         format = static_cast<AudioSampleFormat>(parcel.ReadInt32());
512         channels = static_cast<AudioChannel>(parcel.ReadInt32());
513     }
514 };
515 
516 struct AudioStreamData {
517     AudioStreamInfo streamInfo;
518     BufferDesc bufferDesc;
519     int32_t volumeStart;
520     int32_t volumeEnd;
521 };
522 } // namespace AudioStandard
523 } // namespace OHOS
524 #endif // AUDIO_STREAM_INFO_H
525