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