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