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 16 #ifndef OHOS_VDI_AUDIO_V1_0_AUDIOTYPES_H 17 #define OHOS_VDI_AUDIO_V1_0_AUDIOTYPES_H 18 19 #include <stdbool.h> 20 #include <stdint.h> 21 22 #ifdef __cplusplus 23 extern "C" { 24 #endif /* __cplusplus */ 25 26 enum AudioPortDirectionVdi { 27 PORT_VDI_OUT = 1, 28 PORT_VDI_IN = 2, 29 PORT_VDI_OUT_IN = 3, 30 PORT_VDI_DIR_BUTT, 31 }; 32 33 enum AudioPortPinVdi { 34 PIN_VDI_NONE = 0, 35 PIN_VDI_OUT_SPEAKER = 1 << 0, 36 PIN_VDI_OUT_HEADSET = 1 << 1, 37 PIN_VDI_OUT_LINEOUT = 1 << 2, 38 PIN_VDI_OUT_HDMI = 1 << 3, 39 PIN_VDI_OUT_USB = 1 << 4, 40 PIN_VDI_OUT_USB_EXT = 1 << 5, 41 PIN_VDI_OUT_EARPIECE = 1 << 5 | 1 << 4, 42 PIN_VDI_OUT_BLUETOOTH_SCO = 1 << 6, 43 PIN_VDI_OUT_DAUDIO_DEFAULT = 1 << 7, 44 PIN_VDI_OUT_HEADPHONE = 1 << 8, 45 PIN_VDI_OUT_USB_HEADSET = 1 << 9, 46 PIN_VDI_OUT_BLUETOOTH_A2DP = 1 << 10, 47 PIN_VDI_OUT_DP = 1 << 11, 48 PIN_VDI_IN_MIC = 1 << 27 | 1 << 0, 49 PIN_VDI_IN_HS_MIC = 1 << 27 | 1 << 1, 50 PIN_VDI_IN_LINEIN = 1 << 27 | 1 << 2, 51 PIN_VDI_IN_USB_EXT = 1 << 27 | 1 << 3, 52 PIN_VDI_IN_BLUETOOTH_SCO_HEADSET = 1 << 27 | 1 << 4, 53 PIN_VDI_IN_DAUDIO_DEFAULT = 1 << 27 | 1 << 5, 54 PIN_VDI_IN_USB_HEADSET = 1 << 27 | 1 << 6, 55 PIN_VDI_IN_BUTT, 56 }; 57 58 enum AudioCategoryVdi { 59 AUDIO_VDI_IN_MEDIA = 0, 60 AUDIO_VDI_IN_COMMUNICATION = 1, 61 AUDIO_VDI_IN_RINGTONE = 2, 62 AUDIO_VDI_IN_CALL = 3, 63 AUDIO_VDI_MMAP_NOIRQ = 4, 64 AUDIO_VDI_OFFLOAD = 5, 65 AUDIO_VDI_MULTI_CHANNEL = 6, 66 AUDIO_VDI_DP = 7, 67 AUDIO_VDI_MMAP_VOIP = 8, 68 AUDIO_VDI_IN_NAVIGATION = 9, 69 AUDIO_VDI_DIRECT = 10, 70 AUDIO_VDI_CATEGORY_BUTT, 71 }; 72 73 enum AudioFormatVdi { 74 AUDIO_VDI_FORMAT_TYPE_PCM_8_BIT = 1 << 0, 75 AUDIO_VDI_FORMAT_TYPE_PCM_16_BIT = 1 << 1, 76 AUDIO_VDI_FORMAT_TYPE_PCM_24_BIT = 1 << 1 | 1 << 0, 77 AUDIO_VDI_FORMAT_TYPE_PCM_32_BIT = 1 << 2, 78 AUDIO_VDI_FORMAT_TYPE_PCM_FLOAT = 1 << 2 | 1 << 0, 79 AUDIO_VDI_FORMAT_TYPE_MP3 = 1 << 24, 80 AUDIO_VDI_FORMAT_TYPE_AAC_MAIN = 1 << 24 | 1 << 0, 81 AUDIO_VDI_FORMAT_TYPE_AAC_LC = 1 << 24 | 1 << 1, 82 AUDIO_VDI_FORMAT_TYPE_AAC_LD = 1 << 24 | 1 << 1 | 1 << 0, 83 AUDIO_VDI_FORMAT_TYPE_AAC_ELD = 1 << 24 | 1 << 2, 84 AUDIO_VDI_FORMAT_TYPE_AAC_HE_V1 = 1 << 24 | 1 << 2 | 1 << 0, 85 AUDIO_VDI_FORMAT_TYPE_AAC_HE_V2 = 1 << 24 | 1 << 2 | 1 << 1, 86 AUDIO_VDI_FORMAT_TYPE_G711A = 1 << 25 | 1 << 0, 87 AUDIO_VDI_FORMAT_TYPE_G711U = 1 << 25 | 1 << 1, 88 AUDIO_VDI_FORMAT_TYPE_G726 = 1 << 25 | 1 << 1 | 1 << 0, 89 AUDIO_VDI_FORMAT_TYPE_BUTT, 90 }; 91 92 enum AudioChannelMaskVdi { 93 AUDIO_VDI_CHANNEL_DEFAULT = 0, 94 AUDIO_VDI_CHANNEL_STEREO = 3, 95 AUDIO_VDI_CHANNEL_MONO = 4, 96 AUDIO_VDI_CHANNEL_2POINT1 = 11, 97 AUDIO_VDI_CHANNEL_QUAD = 51, 98 AUDIO_VDI_CHANNEL_3POINT0POINT2 = 206158430215, 99 AUDIO_VDI_CHANNEL_5POINT1 = 1551, 100 AUDIO_VDI_CHANNEL_6POINT1 = 1807, 101 AUDIO_VDI_CHANNEL_7POINT1 = 1599, 102 AUDIO_VDI_CHANNEL_5POINT1POINT2 = 206158431759, 103 AUDIO_VDI_CHANNEL_5POINT1POINT4 = 185871, 104 AUDIO_VDI_CHANNEL_7POINT1POINT2 = 206158431807, 105 AUDIO_VDI_CHANNEL_MASK_BUTT, 106 }; 107 108 enum AudioSampleRatesMaskVdi { 109 AUDIO_VDI_SAMPLE_RATE_MASK_8000 = 1 << 0, 110 AUDIO_VDI_SAMPLE_RATE_MASK_12000 = 1 << 1, 111 AUDIO_VDI_SAMPLE_RATE_MASK_11025 = 1 << 2, 112 AUDIO_VDI_SAMPLE_RATE_MASK_16000 = 1 << 3, 113 AUDIO_VDI_SAMPLE_RATE_MASK_22050 = 1 << 4, 114 AUDIO_VDI_SAMPLE_RATE_MASK_24000 = 1 << 5, 115 AUDIO_VDI_SAMPLE_RATE_MASK_32000 = 1 << 6, 116 AUDIO_VDI_SAMPLE_RATE_MASK_44100 = 1 << 7, 117 AUDIO_VDI_SAMPLE_RATE_MASK_48000 = 1 << 8, 118 AUDIO_VDI_SAMPLE_RATE_MASK_64000 = 1 << 9, 119 AUDIO_VDI_SAMPLE_RATE_MASK_96000 = 1 << 10, 120 AUDIO_VDI_SAMPLE_RATE_MASK_INVALID = 4294967295, 121 AUDIO_VDI_SAMPLE_RATE_MASK_BUTT, 122 }; 123 124 enum AudioPortPassthroughModeVdi { 125 PORT_VDI_PASSTHROUGH_LPCM = 1, 126 PORT_VDI_PASSTHROUGH_RAW = 2, 127 PORT_VDI_PASSTHROUGH_HBR2LBR = 4, 128 PORT_VDI_PASSTHROUGH_AUTO = 8, 129 PORT_VDI_PASSTHROUGH_MODE_BUTT, 130 }; 131 132 enum AudioSampleFormatVdi { 133 AUDIO_VDI_SAMPLE_FORMAT_S8 = 0, 134 AUDIO_VDI_SAMPLE_FORMAT_S8P = 1, 135 AUDIO_VDI_SAMPLE_FORMAT_U8 = 2, 136 AUDIO_VDI_SAMPLE_FORMAT_U8P = 3, 137 AUDIO_VDI_SAMPLE_FORMAT_S16 = 4, 138 AUDIO_VDI_SAMPLE_FORMAT_S16P = 5, 139 AUDIO_VDI_SAMPLE_FORMAT_U16 = 6, 140 AUDIO_VDI_SAMPLE_FORMAT_U16P = 7, 141 AUDIO_VDI_SAMPLE_FORMAT_S24 = 8, 142 AUDIO_VDI_SAMPLE_FORMAT_S24P = 9, 143 AUDIO_VDI_SAMPLE_FORMAT_U24 = 10, 144 AUDIO_VDI_SAMPLE_FORMAT_U24P = 11, 145 AUDIO_VDI_SAMPLE_FORMAT_S32 = 12, 146 AUDIO_VDI_SAMPLE_FORMAT_S32P = 13, 147 AUDIO_VDI_SAMPLE_FORMAT_U32 = 14, 148 AUDIO_VDI_SAMPLE_FORMAT_U32P = 15, 149 AUDIO_VDI_SAMPLE_FORMAT_S64 = 16, 150 AUDIO_VDI_SAMPLE_FORMAT_S64P = 17, 151 AUDIO_VDI_SAMPLE_FORMAT_U64 = 18, 152 AUDIO_VDI_SAMPLE_FORMAT_U64P = 19, 153 AUDIO_VDI_SAMPLE_FORMAT_F32 = 20, 154 AUDIO_VDI_SAMPLE_FORMAT_F32P = 21, 155 AUDIO_VDI_SAMPLE_FORMAT_F64 = 22, 156 AUDIO_VDI_SAMPLE_FORMAT_F64P = 23, 157 AUDIO_VDI_SAMPLE_FORMAT_BUTT, 158 }; 159 160 enum AudioChannelModeVdi { 161 AUDIO_VDI_CHANNEL_NORMAL = 0, 162 AUDIO_VDI_CHANNEL_BOTH_LEFT = 1, 163 AUDIO_VDI_CHANNEL_BOTH_RIGHT = 2, 164 AUDIO_VDI_CHANNEL_EXCHANGE = 3, 165 AUDIO_VDI_CHANNEL_MIX = 4, 166 AUDIO_VDI_CHANNEL_LEFT_MUTE = 5, 167 AUDIO_VDI_CHANNEL_RIGHT_MUTE = 6, 168 AUDIO_VDI_CHANNEL_BOTH_MUTE = 7, 169 AUDIO_VDI_CHANNEL_MODE_BUTT, 170 }; 171 172 enum AudioDrainNotifyTypeVdi { 173 AUDIO_VDI_DRAIN_NORMAL_MODE = 0, 174 AUDIO_VDI_DRAIN_EARLY_MODE = 1, 175 AUDIO_VDI_DRAIN_TYPE_BUTT, 176 }; 177 178 enum AudioCallbackTypeVdi { 179 AUDIO_VDI_NONBLOCK_WRITE_COMPLETED = 0, 180 AUDIO_VDI_DRAIN_COMPLETED = 1, 181 AUDIO_VDI_FLUSH_COMPLETED = 2, 182 AUDIO_VDI_RENDER_FULL = 3, 183 AUDIO_VDI_ERROR_OCCUR = 4, 184 AUDIO_VDI_CALLBACK_TYPE_BUTT, 185 }; 186 187 enum AudioPortRoleVdi { 188 AUDIO_VDI_PORT_UNASSIGNED_ROLE = 0, 189 AUDIO_VDI_PORT_SOURCE_ROLE = 1, 190 AUDIO_VDI_PORT_SINK_ROLE = 2, 191 AUDIO_VDI_PORT_ROLE_BUTT, 192 }; 193 194 enum AudioPortTypeVdi { 195 AUDIO_VDI_PORT_UNASSIGNED_TYPE = 0, 196 AUDIO_VDI_PORT_DEVICE_TYPE = 1, 197 AUDIO_VDI_PORT_MIX_TYPE = 2, 198 AUDIO_VDI_PORT_SESSION_TYPE = 3, 199 AUDIO_VDI_PORT_TYPE_BUTT, 200 }; 201 202 enum AudioSessionTypeVdi { 203 AUDI_VDI_OUTPUT_STAGE_SESSION = 0, 204 AUDI_VDI_OUTPUT_MIX_SESSION = 1, 205 AUDI_VDI_ALLOCATE_SESSION = 2, 206 AUDI_VDI_INVALID_SESSION = 3, 207 AUDI_VDI_SESSION_TYPE_BUTT, 208 }; 209 210 enum AudioDeviceTypeVdi { 211 AUDIO_VDI_LINEOUT = 1 << 0, 212 AUDIO_VDI_HEADPHONE = 1 << 1, 213 AUDIO_VDI_HEADSET = 1 << 2, 214 AUDIO_VDI_USB_HEADSET = 1 << 3, 215 AUDIO_VDI_USB_HEADPHONE = 1 << 4, 216 AUDIO_VDI_USBA_HEADSET = 1 << 5, 217 AUDIO_VDI_USBA_HEADPHONE = 1 << 6, 218 AUDIO_VDI_PRIMARY_DEVICE = 1 << 7, 219 AUDIO_VDI_USB_DEVICE = 1 << 8, 220 AUDIO_VDI_A2DP_DEVICE = 1 << 9, 221 AUDIO_VDI_HDMI_DEVICE = 1 << 10, 222 AUDIO_VDI_ADAPTER_DEVICE = 1 << 11, 223 AUDIO_VDI_DP_DEVICE = 1 << 12, 224 AUDIO_VDI_DEVICE_UNKNOWN, 225 AUDIO_VDI_DEVICE_TYPE_BUTT, 226 }; 227 228 enum AudioEventTypeVdi { 229 AUDIO_VDI_DEVICE_ADD = 1, 230 AUDIO_VDI_DEVICE_REMOVE = 2, 231 AUDIO_VDI_LOAD_SUCCESS = 3, 232 AUDIO_VDI_LOAD_FAILURE = 4, 233 AUDIO_VDI_UNLOAD = 5, 234 AUDIO_VDI_SERVICE_VALID = 7, 235 AUDIO_VDI_SERVICE_INVALID = 8, 236 AUDIO_VDI_CAPTURE_THRESHOLD = 9, 237 AUDIO_VDI_EVENT_UNKNOWN = 10, 238 AUDIO_VDI_EVENT_TYPE_BUTT, 239 }; 240 241 enum AudioExtParamKeyVdi { 242 AUDIO_VDI_EXT_PARAM_KEY_NONE = 0, 243 AUDIO_VDI_EXT_PARAM_KEY_VOLUME = 1, 244 AUDIO_VDI_EXT_PARAM_KEY_FOCUS = 2, 245 AUDIO_VDI_EXT_PARAM_KEY_BUTTON = 3, 246 AUDIO_VDI_EXT_PARAM_KEY_EFFECT = 4, 247 AUDIO_VDI_EXT_PARAM_KEY_STATUS = 5, 248 AUDIO_VDI_EXT_PARAM_KEY_USB_DEVICE = 101, 249 AUDIO_VDI_EXT_PARAM_KEY_PERF_INFO = 201, 250 AUDIO_VDI_EXT_PARAM_KEY_MMI = 301, 251 AUDIO_VDI_EXT_PARAM_KEY_LOWPOWER = 1000, 252 AUDIO_VDI_EXT_PARAM_KEY_BUTT, 253 }; 254 255 struct AudioDeviceStatusVdi { 256 uint32_t pnpStatus; 257 } __attribute__ ((aligned(8))); 258 259 union SceneDescVdi { 260 uint32_t id; 261 } __attribute__ ((aligned(8))); 262 263 struct AudioPortVdi { 264 enum AudioPortDirectionVdi dir; 265 uint32_t portId; 266 char *portName; 267 }; 268 269 struct AudioAdapterDescriptorVdi { 270 char *adapterName; 271 struct AudioPortVdi *ports; 272 uint32_t portsLen; 273 }; 274 275 struct AudioDeviceDescriptorVdi { 276 uint32_t portId; 277 enum AudioPortPinVdi pins; 278 char *desc; 279 }; 280 281 struct AudioSceneDescriptorVdi { 282 union SceneDescVdi scene; 283 struct AudioDeviceDescriptorVdi desc; 284 }; 285 286 enum AudioInputTypeVdi { 287 AUDIO_VDI_INPUT_DEFAULT_TYPE = 0, 288 AUDIO_VDI_INPUT_MIC_TYPE = 1 << 0, 289 AUDIO_VDI_INPUT_SPEECH_WAKEUP_TYPE = 1 << 1, 290 AUDIO_VDI_INPUT_VOICE_COMMUNICATION_TYPE = 1 << 2, 291 AUDIO_VDI_INPUT_VOICE_RECOGNITION_TYPE = 1 << 3, 292 AUDIO_VDI_INPUT_VOICE_UPLINK_TYPE = 1 << 4, 293 AUDIO_VDI_INPUT_VOICE_DOWNLINK_TYPE = 1 << 5, 294 AUDIO_VDI_INPUT_VOICE_CALL_TYPE = 1 << 6, 295 AUDIO_VDI_INPUT_CAMCORDER_TYPE = 1 << 7, 296 AUDIO_VDI_INPUT_EC_TYPE = 1 << 8, 297 AUDIO_VDI_INPUT_NOISE_REDUCTION_TYPE = 1 << 9, 298 AUDIO_VDI_INPUT_RAW_TYPE = 1 << 10, 299 }; 300 301 struct AudioOffloadInfoVdi { 302 uint32_t sampleRate; 303 uint32_t channelCount; 304 uint64_t channelLayout; 305 uint32_t bitRate; 306 uint32_t bitWidth; 307 enum AudioFormatVdi format; 308 uint32_t offloadBufferSize; 309 uint64_t duration; 310 }; 311 312 struct EcSampleAttributesVdi { 313 bool ecInterleaved; 314 enum AudioFormatVdi ecFormat; 315 uint32_t ecSampleRate; 316 uint32_t ecChannelCount; 317 uint64_t ecChannelLayout; 318 uint32_t ecPeriod; 319 uint32_t ecFrameSize; 320 bool ecIsBigEndian; 321 bool ecIsSignedData; 322 uint32_t ecStartThreshold; 323 uint32_t ecStopThreshold; 324 uint32_t ecSilenceThreshold; 325 }; 326 327 struct AudioCaptureFrameInfoVdi { 328 int8_t* frame; 329 uint32_t frameLen; 330 uint64_t replyBytes; 331 int8_t* frameEc; 332 uint32_t frameEcLen; 333 uint64_t replyBytesEc; 334 }; 335 336 struct AudioSampleAttributesVdi { 337 enum AudioCategoryVdi type; 338 bool interleaved; 339 enum AudioFormatVdi format; 340 uint32_t sampleRate; 341 uint32_t channelCount; 342 uint64_t channelLayout; 343 uint32_t period; 344 uint32_t frameSize; 345 bool isBigEndian; 346 bool isSignedData; 347 uint32_t startThreshold; 348 uint32_t stopThreshold; 349 uint32_t silenceThreshold; 350 int32_t streamId; 351 int32_t sourceType; 352 struct AudioOffloadInfoVdi offloadInfo; 353 } __attribute__ ((aligned(8))); 354 355 struct AudioTimeStampVdi { 356 int64_t tvSec; 357 int64_t tvNSec; 358 } __attribute__ ((aligned(8))); 359 360 struct AudioSubPortCapabilityVdi { 361 uint32_t portId; 362 char *desc; 363 enum AudioPortPassthroughModeVdi mask; 364 }; 365 366 struct AudioPortCapabilityVdi { 367 uint32_t deviceType; 368 uint32_t deviceId; 369 bool hardwareMode; 370 uint32_t formatNum; 371 enum AudioFormatVdi *formats; 372 uint32_t formatsLen; 373 uint32_t sampleRateMasks; 374 enum AudioChannelMaskVdi channelMasks; 375 uint32_t channelCount; 376 struct AudioSubPortCapabilityVdi *subPorts; 377 uint32_t subPortsLen; 378 enum AudioSampleFormatVdi *supportSampleFormats; 379 uint32_t supportSampleFormatsLen; 380 }; 381 382 struct AudioMmapBufferDescriptorVdi { 383 int8_t *memoryAddress; 384 uint32_t memoryAddressLen; 385 int32_t memoryFd; 386 int32_t totalBufferFrames; 387 int32_t transferFrameSize; 388 int32_t isShareable; 389 uint32_t offset; 390 char *filePath; 391 }; 392 393 struct AudioDevExtInfoVdi { 394 int32_t moduleId; 395 enum AudioPortPinVdi type; 396 char *desc; 397 }; 398 399 struct AudioMixExtInfoVdi { 400 int32_t moduleId; 401 int32_t streamId; 402 int32_t source; 403 } __attribute__ ((aligned(8))); 404 405 struct AudioSessionExtInfoVdi { 406 enum AudioSessionTypeVdi sessionType; 407 } __attribute__ ((aligned(8))); 408 409 struct AudioInfoVdi { 410 struct AudioDevExtInfoVdi device; 411 struct AudioMixExtInfoVdi mix; 412 struct AudioSessionExtInfoVdi session; 413 }; 414 415 struct AudioRouteNodeVdi { 416 int32_t portId; 417 enum AudioPortRoleVdi role; 418 enum AudioPortTypeVdi type; 419 struct AudioInfoVdi ext; 420 }; 421 422 struct AudioRouteVdi { 423 struct AudioRouteNodeVdi *sources; 424 uint32_t sourcesLen; 425 struct AudioRouteNodeVdi *sinks; 426 uint32_t sinksLen; 427 }; 428 429 struct AudioEventVdi { 430 uint32_t eventType; 431 uint32_t deviceType; 432 } __attribute__ ((aligned(8))); 433 434 /** 435 * @brief Called when an event defined in {@link AudioCallbackType} occurs. 436 * 437 * @param AudioCallbackTypeVdi Indicates the occurred event that triggers this callback. 438 * @param reserved Indicates the pointer to a reserved field. 439 * @param cookie Indicates the pointer to the cookie for data transmission. 440 * @return Returns <b>0</b> if the callback is successfully executed; returns a negative value otherwise. 441 * @see RegCallback 442 */ 443 typedef int32_t (*RenderCallbackVdi)(enum AudioCallbackTypeVdi, void *reserved, void *cookie); 444 445 /** 446 * @brief Register audio extra param callback that will be invoked during audio param event. 447 * 448 * @param key Indicates param change event. 449 * @param condition Indicates the param condition. 450 * @param value Indicates the param value. 451 * @param reserved Indicates reserved param. 452 * @param cookie Indicates the pointer to the callback parameters; 453 * @return Returns <b>0</b> if the operation is successful; returns a negative value otherwise. 454 */ 455 typedef int32_t (*ParamCallbackVdi)(enum AudioExtParamKeyVdi key, const char *condition, const char *value, 456 void *reserved, void *cookie); 457 #ifdef __cplusplus 458 } 459 #endif /* __cplusplus */ 460 461 #endif /* OHOS_VDI_AUDIO_V1_0_AUDIOTYPES_H */