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