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 */