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