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