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