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