• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */