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