OSDN Git Service

Audio HAL: extensions for new SoC features
[android-x86/system-media.git] / audio / include / system / audio.h
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17
18 #ifndef ANDROID_AUDIO_CORE_H
19 #define ANDROID_AUDIO_CORE_H
20
21 #include <stdbool.h>
22 #include <stdint.h>
23 #include <stdio.h>
24 #include <sys/cdefs.h>
25 #include <sys/types.h>
26
27 #include <cutils/bitops.h>
28
29 #include "audio-base.h"
30
31 __BEGIN_DECLS
32
33 /* The enums were moved here mostly from
34  * frameworks/base/include/media/AudioSystem.h
35  */
36
37 /* represents an invalid uid for tracks; the calling or client uid is often substituted. */
38 #define AUDIO_UID_INVALID ((uid_t)-1)
39
40 /* device address used to refer to the standard remote submix */
41 #define AUDIO_REMOTE_SUBMIX_DEVICE_ADDRESS "0"
42
43 /* AudioFlinger and AudioPolicy services use I/O handles to identify audio sources and sinks */
44 typedef int audio_io_handle_t;
45
46 /* Do not change these values without updating their counterparts
47  * in frameworks/base/media/java/android/media/AudioAttributes.java
48  */
49 typedef enum {
50     AUDIO_CONTENT_TYPE_UNKNOWN      = 0,
51     AUDIO_CONTENT_TYPE_SPEECH       = 1,
52     AUDIO_CONTENT_TYPE_MUSIC        = 2,
53     AUDIO_CONTENT_TYPE_MOVIE        = 3,
54     AUDIO_CONTENT_TYPE_SONIFICATION = 4,
55
56     AUDIO_CONTENT_TYPE_CNT,
57     AUDIO_CONTENT_TYPE_MAX          = AUDIO_CONTENT_TYPE_CNT - 1,
58 } audio_content_type_t;
59
60 typedef uint32_t audio_flags_mask_t;
61
62 /* Do not change these values without updating their counterparts
63  * in frameworks/base/media/java/android/media/AudioAttributes.java
64  */
65 enum {
66     AUDIO_FLAG_AUDIBILITY_ENFORCED        = 0x1,
67     AUDIO_FLAG_SECURE                     = 0x2,
68     AUDIO_FLAG_SCO                        = 0x4,
69     AUDIO_FLAG_BEACON                     = 0x8,
70     AUDIO_FLAG_HW_AV_SYNC                 = 0x10,
71     AUDIO_FLAG_HW_HOTWORD                 = 0x20,
72     AUDIO_FLAG_BYPASS_INTERRUPTION_POLICY = 0x40,
73     AUDIO_FLAG_BYPASS_MUTE                = 0x80,
74     AUDIO_FLAG_LOW_LATENCY                = 0x100,
75 };
76
77 /* Audio attributes */
78 #define AUDIO_ATTRIBUTES_TAGS_MAX_SIZE 256
79 typedef struct {
80     audio_content_type_t content_type;
81     audio_usage_t        usage;
82     audio_source_t       source;
83     audio_flags_mask_t   flags;
84     char                 tags[AUDIO_ATTRIBUTES_TAGS_MAX_SIZE]; /* UTF8 */
85 } audio_attributes_t;
86
87 /* a unique ID allocated by AudioFlinger for use as an audio_io_handle_t, audio_session_t,
88  * effect ID (int), audio_module_handle_t, and audio_patch_handle_t.
89  * Audio port IDs (audio_port_handle_t) are allocated by AudioPolicy
90  * in a different namespace than AudioFlinger unique IDs.
91  */
92 typedef int audio_unique_id_t;
93
94 /* Possible uses for an audio_unique_id_t */
95 typedef enum {
96     AUDIO_UNIQUE_ID_USE_UNSPECIFIED = 0,
97     AUDIO_UNIQUE_ID_USE_SESSION = 1,    // for allocated sessions, not special AUDIO_SESSION_*
98     AUDIO_UNIQUE_ID_USE_MODULE = 2,
99     AUDIO_UNIQUE_ID_USE_EFFECT = 3,
100     AUDIO_UNIQUE_ID_USE_PATCH = 4,
101     AUDIO_UNIQUE_ID_USE_OUTPUT = 5,
102     AUDIO_UNIQUE_ID_USE_INPUT = 6,
103     // 7 is available
104     AUDIO_UNIQUE_ID_USE_MAX = 8,  // must be a power-of-two
105     AUDIO_UNIQUE_ID_USE_MASK = AUDIO_UNIQUE_ID_USE_MAX - 1
106 } audio_unique_id_use_t;
107
108 /* Return the use of an audio_unique_id_t */
109 static inline audio_unique_id_use_t audio_unique_id_get_use(audio_unique_id_t id)
110 {
111     return (audio_unique_id_use_t) (id & AUDIO_UNIQUE_ID_USE_MASK);
112 }
113
114 /* Reserved audio_unique_id_t values.  FIXME: not a complete list. */
115 #define AUDIO_UNIQUE_ID_ALLOCATE AUDIO_SESSION_ALLOCATE
116
117 /* A channel mask per se only defines the presence or absence of a channel, not the order.
118  * But see AUDIO_INTERLEAVE_* below for the platform convention of order.
119  *
120  * audio_channel_mask_t is an opaque type and its internal layout should not
121  * be assumed as it may change in the future.
122  * Instead, always use the functions declared in this header to examine.
123  *
124  * These are the current representations:
125  *
126  *   AUDIO_CHANNEL_REPRESENTATION_POSITION
127  *     is a channel mask representation for position assignment.
128  *     Each low-order bit corresponds to the spatial position of a transducer (output),
129  *     or interpretation of channel (input).
130  *     The user of a channel mask needs to know the context of whether it is for output or input.
131  *     The constants AUDIO_CHANNEL_OUT_* or AUDIO_CHANNEL_IN_* apply to the bits portion.
132  *     It is not permitted for no bits to be set.
133  *
134  *   AUDIO_CHANNEL_REPRESENTATION_INDEX
135  *     is a channel mask representation for index assignment.
136  *     Each low-order bit corresponds to a selected channel.
137  *     There is no platform interpretation of the various bits.
138  *     There is no concept of output or input.
139  *     It is not permitted for no bits to be set.
140  *
141  * All other representations are reserved for future use.
142  *
143  * Warning: current representation distinguishes between input and output, but this will not the be
144  * case in future revisions of the platform. Wherever there is an ambiguity between input and output
145  * that is currently resolved by checking the channel mask, the implementer should look for ways to
146  * fix it with additional information outside of the mask.
147  */
148 typedef uint32_t audio_channel_mask_t;
149
150 /* log(2) of maximum number of representations, not part of public API */
151 #define AUDIO_CHANNEL_REPRESENTATION_LOG2   2
152
153 /* The return value is undefined if the channel mask is invalid. */
154 static inline uint32_t audio_channel_mask_get_bits(audio_channel_mask_t channel)
155 {
156     return channel & ((1 << AUDIO_CHANNEL_COUNT_MAX) - 1);
157 }
158
159 typedef uint32_t audio_channel_representation_t;
160
161 /* The return value is undefined if the channel mask is invalid. */
162 static inline audio_channel_representation_t audio_channel_mask_get_representation(
163         audio_channel_mask_t channel)
164 {
165     // The right shift should be sufficient, but also "and" for safety in case mask is not 32 bits
166     return (audio_channel_representation_t)
167             ((channel >> AUDIO_CHANNEL_COUNT_MAX) & ((1 << AUDIO_CHANNEL_REPRESENTATION_LOG2) - 1));
168 }
169
170 /* Returns true if the channel mask is valid,
171  * or returns false for AUDIO_CHANNEL_NONE, AUDIO_CHANNEL_INVALID, and other invalid values.
172  * This function is unable to determine whether a channel mask for position assignment
173  * is invalid because an output mask has an invalid output bit set,
174  * or because an input mask has an invalid input bit set.
175  * All other APIs that take a channel mask assume that it is valid.
176  */
177 static inline bool audio_channel_mask_is_valid(audio_channel_mask_t channel)
178 {
179     uint32_t bits = audio_channel_mask_get_bits(channel);
180     audio_channel_representation_t representation = audio_channel_mask_get_representation(channel);
181     switch (representation) {
182     case AUDIO_CHANNEL_REPRESENTATION_POSITION:
183     case AUDIO_CHANNEL_REPRESENTATION_INDEX:
184         break;
185     default:
186         bits = 0;
187         break;
188     }
189     return bits != 0;
190 }
191
192 /* Not part of public API */
193 static inline audio_channel_mask_t audio_channel_mask_from_representation_and_bits(
194         audio_channel_representation_t representation, uint32_t bits)
195 {
196     return (audio_channel_mask_t) ((representation << AUDIO_CHANNEL_COUNT_MAX) | bits);
197 }
198
199 /* This enum is deprecated */
200 typedef enum {
201     AUDIO_IN_ACOUSTICS_NONE          = 0,
202     AUDIO_IN_ACOUSTICS_AGC_ENABLE    = 0x0001,
203     AUDIO_IN_ACOUSTICS_AGC_DISABLE   = 0,
204     AUDIO_IN_ACOUSTICS_NS_ENABLE     = 0x0002,
205     AUDIO_IN_ACOUSTICS_NS_DISABLE    = 0,
206     AUDIO_IN_ACOUSTICS_TX_IIR_ENABLE = 0x0004,
207     AUDIO_IN_ACOUSTICS_TX_DISABLE    = 0,
208 } audio_in_acoustics_t;
209
210 typedef uint32_t audio_devices_t;
211 /**
212  * Stub audio output device. Used in policy configuration file on platforms without audio outputs.
213  * This alias value to AUDIO_DEVICE_OUT_DEFAULT is only used in the audio policy context.
214  */
215 #define AUDIO_DEVICE_OUT_STUB AUDIO_DEVICE_OUT_DEFAULT
216 /**
217  * Stub audio input device. Used in policy configuration file on platforms without audio inputs.
218  * This alias value to AUDIO_DEVICE_IN_DEFAULT is only used in the audio policy context.
219  */
220 #define AUDIO_DEVICE_IN_STUB AUDIO_DEVICE_IN_DEFAULT
221
222 /* Additional information about compressed streams offloaded to
223  * hardware playback
224  * The version and size fields must be initialized by the caller by using
225  * one of the constants defined here.
226  */
227 typedef struct {
228     uint16_t version;                   // version of the info structure
229     uint16_t size;                      // total size of the structure including version and size
230     uint32_t sample_rate;               // sample rate in Hz
231     audio_channel_mask_t channel_mask;  // channel mask
232     audio_format_t format;              // audio format
233     audio_stream_type_t stream_type;    // stream type
234     uint32_t bit_rate;                  // bit rate in bits per second
235     int64_t duration_us;                // duration in microseconds, -1 if unknown
236     bool has_video;                     // true if stream is tied to a video stream
237     bool is_streaming;                  // true if streaming, false if local playback
238     uint32_t bit_width;
239     uint32_t offload_buffer_size;       // offload fragment size
240     audio_usage_t usage;
241 } audio_offload_info_t;
242
243 #define AUDIO_MAKE_OFFLOAD_INFO_VERSION(maj,min) \
244             ((((maj) & 0xff) << 8) | ((min) & 0xff))
245
246 #define AUDIO_OFFLOAD_INFO_VERSION_0_1 AUDIO_MAKE_OFFLOAD_INFO_VERSION(0, 1)
247 #define AUDIO_OFFLOAD_INFO_VERSION_CURRENT AUDIO_OFFLOAD_INFO_VERSION_0_1
248
249 static const audio_offload_info_t AUDIO_INFO_INITIALIZER = {
250     /* .version = */ AUDIO_OFFLOAD_INFO_VERSION_CURRENT,
251     /* .size = */ sizeof(audio_offload_info_t),
252     /* .sample_rate = */ 0,
253     /* .channel_mask = */ 0,
254     /* .format = */ AUDIO_FORMAT_DEFAULT,
255     /* .stream_type = */ AUDIO_STREAM_VOICE_CALL,
256     /* .bit_rate = */ 0,
257     /* .duration_us = */ 0,
258     /* .has_video = */ false,
259     /* .is_streaming = */ false,
260     /* .bit_width = */ 16,
261     /* .offload_buffer_size = */ 0,
262     /* .usage = */ AUDIO_USAGE_UNKNOWN
263 };
264
265 /* common audio stream configuration parameters
266  * You should memset() the entire structure to zero before use to
267  * ensure forward compatibility
268  */
269 struct audio_config {
270     uint32_t sample_rate;
271     audio_channel_mask_t channel_mask;
272     audio_format_t  format;
273     audio_offload_info_t offload_info;
274     size_t frame_count;
275 };
276 typedef struct audio_config audio_config_t;
277
278 static const audio_config_t AUDIO_CONFIG_INITIALIZER = {
279     /* .sample_rate = */ 0,
280     /* .channel_mask = */ AUDIO_CHANNEL_NONE,
281     /* .format = */ AUDIO_FORMAT_DEFAULT,
282     /* .offload_info = */ {
283         /* .version = */ AUDIO_OFFLOAD_INFO_VERSION_CURRENT,
284         /* .size = */ sizeof(audio_offload_info_t),
285         /* .sample_rate = */ 0,
286         /* .channel_mask = */ 0,
287         /* .format = */ AUDIO_FORMAT_DEFAULT,
288         /* .stream_type = */ AUDIO_STREAM_VOICE_CALL,
289         /* .bit_rate = */ 0,
290         /* .duration_us = */ 0,
291         /* .has_video = */ false,
292         /* .is_streaming = */ false,
293         /* .bit_width = */ 16,
294         /* .offload_buffer_size = */ 0,
295         /* .usage = */ AUDIO_USAGE_UNKNOWN
296     },
297     /* .frame_count = */ 0,
298 };
299
300 struct audio_config_base {
301     uint32_t sample_rate;
302     audio_channel_mask_t channel_mask;
303     audio_format_t  format;
304 };
305
306 typedef struct audio_config_base audio_config_base_t;
307
308 static const audio_config_base_t AUDIO_CONFIG_BASE_INITIALIZER = {
309     /* .sample_rate = */ 0,
310     /* .channel_mask = */ AUDIO_CHANNEL_NONE,
311     /* .format = */ AUDIO_FORMAT_DEFAULT
312 };
313
314 /* audio hw module handle functions or structures referencing a module */
315 typedef int audio_module_handle_t;
316
317 /******************************
318  *  Volume control
319  *****************************/
320
321 /* If the audio hardware supports gain control on some audio paths,
322  * the platform can expose them in the audio_policy.conf file. The audio HAL
323  * will then implement gain control functions that will use the following data
324  * structures. */
325
326 typedef uint32_t audio_gain_mode_t;
327
328
329 /* An audio_gain struct is a representation of a gain stage.
330  * A gain stage is always attached to an audio port. */
331 struct audio_gain  {
332     audio_gain_mode_t    mode;          /* e.g. AUDIO_GAIN_MODE_JOINT */
333     audio_channel_mask_t channel_mask;  /* channels which gain an be controlled.
334                                            N/A if AUDIO_GAIN_MODE_CHANNELS is not supported */
335     int                  min_value;     /* minimum gain value in millibels */
336     int                  max_value;     /* maximum gain value in millibels */
337     int                  default_value; /* default gain value in millibels */
338     unsigned int         step_value;    /* gain step in millibels */
339     unsigned int         min_ramp_ms;   /* minimum ramp duration in ms */
340     unsigned int         max_ramp_ms;   /* maximum ramp duration in ms */
341 };
342
343 /* The gain configuration structure is used to get or set the gain values of a
344  * given port */
345 struct audio_gain_config  {
346     int                  index;             /* index of the corresponding audio_gain in the
347                                                audio_port gains[] table */
348     audio_gain_mode_t    mode;              /* mode requested for this command */
349     audio_channel_mask_t channel_mask;      /* channels which gain value follows.
350                                                N/A in joint mode */
351
352     // note this "8" is not FCC_8, so it won't need to be changed for > 8 channels
353     int                  values[sizeof(audio_channel_mask_t) * 8]; /* gain values in millibels
354                                                for each channel ordered from LSb to MSb in
355                                                channel mask. The number of values is 1 in joint
356                                                mode or popcount(channel_mask) */
357     unsigned int         ramp_duration_ms; /* ramp duration in ms */
358 };
359
360 /******************************
361  *  Routing control
362  *****************************/
363
364 /* Types defined here are used to describe an audio source or sink at internal
365  * framework interfaces (audio policy, patch panel) or at the audio HAL.
366  * Sink and sources are grouped in a concept of “audio port” representing an
367  * audio end point at the edge of the system managed by the module exposing
368  * the interface. */
369
370 /* Each port has a unique ID or handle allocated by policy manager */
371 typedef int audio_port_handle_t;
372
373 /* the maximum length for the human-readable device name */
374 #define AUDIO_PORT_MAX_NAME_LEN 128
375
376 /* maximum audio device address length */
377 #define AUDIO_DEVICE_MAX_ADDRESS_LEN 32
378
379 /* extension for audio port configuration structure when the audio port is a
380  * hardware device */
381 struct audio_port_config_device_ext {
382     audio_module_handle_t hw_module;                /* module the device is attached to */
383     audio_devices_t       type;                     /* device type (e.g AUDIO_DEVICE_OUT_SPEAKER) */
384     char                  address[AUDIO_DEVICE_MAX_ADDRESS_LEN]; /* device address. "" if N/A */
385 };
386
387 /* extension for audio port configuration structure when the audio port is a
388  * sub mix */
389 struct audio_port_config_mix_ext {
390     audio_module_handle_t hw_module;    /* module the stream is attached to */
391     audio_io_handle_t handle;           /* I/O handle of the input/output stream */
392     union {
393         //TODO: change use case for output streams: use strategy and mixer attributes
394         audio_stream_type_t stream;
395         audio_source_t      source;
396     } usecase;
397 };
398
399 /* extension for audio port configuration structure when the audio port is an
400  * audio session */
401 struct audio_port_config_session_ext {
402     audio_session_t   session; /* audio session */
403 };
404
405 /* audio port configuration structure used to specify a particular configuration of
406  * an audio port */
407 struct audio_port_config {
408     audio_port_handle_t      id;           /* port unique ID */
409     audio_port_role_t        role;         /* sink or source */
410     audio_port_type_t        type;         /* device, mix ... */
411     unsigned int             config_mask;  /* e.g AUDIO_PORT_CONFIG_ALL */
412     unsigned int             sample_rate;  /* sampling rate in Hz */
413     audio_channel_mask_t     channel_mask; /* channel mask if applicable */
414     audio_format_t           format;       /* format if applicable */
415     struct audio_gain_config gain;         /* gain to apply if applicable */
416     union {
417         struct audio_port_config_device_ext  device;  /* device specific info */
418         struct audio_port_config_mix_ext     mix;     /* mix specific info */
419         struct audio_port_config_session_ext session; /* session specific info */
420     } ext;
421 };
422
423
424 /* max number of sampling rates in audio port */
425 #define AUDIO_PORT_MAX_SAMPLING_RATES 16
426 /* max number of channel masks in audio port */
427 #define AUDIO_PORT_MAX_CHANNEL_MASKS 16
428 /* max number of audio formats in audio port */
429 #define AUDIO_PORT_MAX_FORMATS 16
430 /* max number of gain controls in audio port */
431 #define AUDIO_PORT_MAX_GAINS 16
432
433 /* extension for audio port structure when the audio port is a hardware device */
434 struct audio_port_device_ext {
435     audio_module_handle_t hw_module;    /* module the device is attached to */
436     audio_devices_t       type;         /* device type (e.g AUDIO_DEVICE_OUT_SPEAKER) */
437     char                  address[AUDIO_DEVICE_MAX_ADDRESS_LEN];
438 };
439
440 /* extension for audio port structure when the audio port is a sub mix */
441 struct audio_port_mix_ext {
442     audio_module_handle_t     hw_module;     /* module the stream is attached to */
443     audio_io_handle_t         handle;        /* I/O handle of the input.output stream */
444     audio_mix_latency_class_t latency_class; /* latency class */
445     // other attributes: routing strategies
446 };
447
448 /* extension for audio port structure when the audio port is an audio session */
449 struct audio_port_session_ext {
450     audio_session_t   session; /* audio session */
451 };
452
453 struct audio_port {
454     audio_port_handle_t      id;                /* port unique ID */
455     audio_port_role_t        role;              /* sink or source */
456     audio_port_type_t        type;              /* device, mix ... */
457     char                     name[AUDIO_PORT_MAX_NAME_LEN];
458     unsigned int             num_sample_rates;  /* number of sampling rates in following array */
459     unsigned int             sample_rates[AUDIO_PORT_MAX_SAMPLING_RATES];
460     unsigned int             num_channel_masks; /* number of channel masks in following array */
461     audio_channel_mask_t     channel_masks[AUDIO_PORT_MAX_CHANNEL_MASKS];
462     unsigned int             num_formats;       /* number of formats in following array */
463     audio_format_t           formats[AUDIO_PORT_MAX_FORMATS];
464     unsigned int             num_gains;         /* number of gains in following array */
465     struct audio_gain        gains[AUDIO_PORT_MAX_GAINS];
466     struct audio_port_config active_config;     /* current audio port configuration */
467     union {
468         struct audio_port_device_ext  device;
469         struct audio_port_mix_ext     mix;
470         struct audio_port_session_ext session;
471     } ext;
472 };
473
474 /* An audio patch represents a connection between one or more source ports and
475  * one or more sink ports. Patches are connected and disconnected by audio policy manager or by
476  * applications via framework APIs.
477  * Each patch is identified by a handle at the interface used to create that patch. For instance,
478  * when a patch is created by the audio HAL, the HAL allocates and returns a handle.
479  * This handle is unique to a given audio HAL hardware module.
480  * But the same patch receives another system wide unique handle allocated by the framework.
481  * This unique handle is used for all transactions inside the framework.
482  */
483 typedef int audio_patch_handle_t;
484
485 #define AUDIO_PATCH_PORTS_MAX   16
486
487 struct audio_patch {
488     audio_patch_handle_t id;            /* patch unique ID */
489     unsigned int      num_sources;      /* number of sources in following array */
490     struct audio_port_config sources[AUDIO_PATCH_PORTS_MAX];
491     unsigned int      num_sinks;        /* number of sinks in following array */
492     struct audio_port_config sinks[AUDIO_PATCH_PORTS_MAX];
493 };
494
495
496
497 /* a HW synchronization source returned by the audio HAL */
498 typedef uint32_t audio_hw_sync_t;
499
500 /* an invalid HW synchronization source indicating an error */
501 #define AUDIO_HW_SYNC_INVALID 0
502
503 static inline bool audio_is_output_device(audio_devices_t device)
504 {
505     if (((device & AUDIO_DEVICE_BIT_IN) == 0) &&
506             (popcount(device) == 1) && ((device & ~AUDIO_DEVICE_OUT_ALL) == 0))
507         return true;
508     else
509         return false;
510 }
511
512 static inline bool audio_is_input_device(audio_devices_t device)
513 {
514     if ((device & AUDIO_DEVICE_BIT_IN) != 0) {
515         device &= ~AUDIO_DEVICE_BIT_IN;
516         if ((popcount(device) == 1) && ((device & ~AUDIO_DEVICE_IN_ALL) == 0))
517             return true;
518     }
519     return false;
520 }
521
522 static inline bool audio_is_output_devices(audio_devices_t device)
523 {
524     return (device & AUDIO_DEVICE_BIT_IN) == 0;
525 }
526
527 static inline bool audio_is_a2dp_in_device(audio_devices_t device)
528 {
529     if ((device & AUDIO_DEVICE_BIT_IN) != 0) {
530         device &= ~AUDIO_DEVICE_BIT_IN;
531         if ((popcount(device) == 1) && (device & AUDIO_DEVICE_IN_BLUETOOTH_A2DP))
532             return true;
533     }
534     return false;
535 }
536
537 static inline bool audio_is_a2dp_out_device(audio_devices_t device)
538 {
539     if ((popcount(device) == 1) && (device & AUDIO_DEVICE_OUT_ALL_A2DP))
540         return true;
541     else
542         return false;
543 }
544
545 // Deprecated - use audio_is_a2dp_out_device() instead
546 static inline bool audio_is_a2dp_device(audio_devices_t device)
547 {
548     return audio_is_a2dp_out_device(device);
549 }
550
551 static inline bool audio_is_bluetooth_sco_device(audio_devices_t device)
552 {
553     if ((device & AUDIO_DEVICE_BIT_IN) == 0) {
554         if ((popcount(device) == 1) && ((device & ~AUDIO_DEVICE_OUT_ALL_SCO) == 0))
555             return true;
556     } else {
557         device &= ~AUDIO_DEVICE_BIT_IN;
558         if ((popcount(device) == 1) && ((device & ~AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET) == 0))
559             return true;
560     }
561
562     return false;
563 }
564
565 static inline bool audio_is_usb_out_device(audio_devices_t device)
566 {
567     return ((popcount(device) == 1) && (device & AUDIO_DEVICE_OUT_ALL_USB));
568 }
569
570 static inline bool audio_is_usb_in_device(audio_devices_t device)
571 {
572     if ((device & AUDIO_DEVICE_BIT_IN) != 0) {
573         device &= ~AUDIO_DEVICE_BIT_IN;
574         if (popcount(device) == 1 && (device & AUDIO_DEVICE_IN_ALL_USB) != 0)
575             return true;
576     }
577     return false;
578 }
579
580 /* OBSOLETE - use audio_is_usb_out_device() instead. */
581 static inline bool audio_is_usb_device(audio_devices_t device)
582 {
583     return audio_is_usb_out_device(device);
584 }
585
586 static inline bool audio_is_remote_submix_device(audio_devices_t device)
587 {
588     if ((audio_is_output_devices(device) &&
589          (device & AUDIO_DEVICE_OUT_REMOTE_SUBMIX) == AUDIO_DEVICE_OUT_REMOTE_SUBMIX)
590         || (!audio_is_output_devices(device) &&
591          (device & AUDIO_DEVICE_IN_REMOTE_SUBMIX) == AUDIO_DEVICE_IN_REMOTE_SUBMIX))
592         return true;
593     else
594         return false;
595 }
596
597 /* Returns true if:
598  *  representation is valid, and
599  *  there is at least one channel bit set which _could_ correspond to an input channel, and
600  *  there are no channel bits set which could _not_ correspond to an input channel.
601  * Otherwise returns false.
602  */
603 static inline bool audio_is_input_channel(audio_channel_mask_t channel)
604 {
605     uint32_t bits = audio_channel_mask_get_bits(channel);
606     switch (audio_channel_mask_get_representation(channel)) {
607     case AUDIO_CHANNEL_REPRESENTATION_POSITION:
608         if (bits & ~AUDIO_CHANNEL_IN_ALL) {
609             bits = 0;
610         }
611         // fall through
612     case AUDIO_CHANNEL_REPRESENTATION_INDEX:
613         return bits != 0;
614     default:
615         return false;
616     }
617 }
618
619 /* Returns true if:
620  *  representation is valid, and
621  *  there is at least one channel bit set which _could_ correspond to an output channel, and
622  *  there are no channel bits set which could _not_ correspond to an output channel.
623  * Otherwise returns false.
624  */
625 static inline bool audio_is_output_channel(audio_channel_mask_t channel)
626 {
627     uint32_t bits = audio_channel_mask_get_bits(channel);
628     switch (audio_channel_mask_get_representation(channel)) {
629     case AUDIO_CHANNEL_REPRESENTATION_POSITION:
630         if (bits & ~AUDIO_CHANNEL_OUT_ALL) {
631             bits = 0;
632         }
633         // fall through
634     case AUDIO_CHANNEL_REPRESENTATION_INDEX:
635         return bits != 0;
636     default:
637         return false;
638     }
639 }
640
641 /* Returns the number of channels from an input channel mask,
642  * used in the context of audio input or recording.
643  * If a channel bit is set which could _not_ correspond to an input channel,
644  * it is excluded from the count.
645  * Returns zero if the representation is invalid.
646  */
647 static inline uint32_t audio_channel_count_from_in_mask(audio_channel_mask_t channel)
648 {
649     uint32_t bits = audio_channel_mask_get_bits(channel);
650     switch (audio_channel_mask_get_representation(channel)) {
651     case AUDIO_CHANNEL_REPRESENTATION_POSITION:
652         // TODO: We can now merge with from_out_mask and remove anding
653         bits &= AUDIO_CHANNEL_IN_ALL;
654         // fall through
655     case AUDIO_CHANNEL_REPRESENTATION_INDEX:
656         return popcount(bits);
657     default:
658         return 0;
659     }
660 }
661
662 /* Returns the number of channels from an output channel mask,
663  * used in the context of audio output or playback.
664  * If a channel bit is set which could _not_ correspond to an output channel,
665  * it is excluded from the count.
666  * Returns zero if the representation is invalid.
667  */
668 static inline uint32_t audio_channel_count_from_out_mask(audio_channel_mask_t channel)
669 {
670     uint32_t bits = audio_channel_mask_get_bits(channel);
671     switch (audio_channel_mask_get_representation(channel)) {
672     case AUDIO_CHANNEL_REPRESENTATION_POSITION:
673         // TODO: We can now merge with from_in_mask and remove anding
674         bits &= AUDIO_CHANNEL_OUT_ALL;
675         // fall through
676     case AUDIO_CHANNEL_REPRESENTATION_INDEX:
677         return popcount(bits);
678     default:
679         return 0;
680     }
681 }
682
683 /* Derive a channel mask for index assignment from a channel count.
684  * Returns the matching channel mask,
685  * or AUDIO_CHANNEL_NONE if the channel count is zero,
686  * or AUDIO_CHANNEL_INVALID if the channel count exceeds AUDIO_CHANNEL_COUNT_MAX.
687  */
688 static inline audio_channel_mask_t audio_channel_mask_for_index_assignment_from_count(
689         uint32_t channel_count)
690 {
691     if (channel_count == 0) {
692         return AUDIO_CHANNEL_NONE;
693     }
694     if (channel_count > AUDIO_CHANNEL_COUNT_MAX) {
695         return AUDIO_CHANNEL_INVALID;
696     }
697     uint32_t bits = (1 << channel_count) - 1;
698     return audio_channel_mask_from_representation_and_bits(
699             AUDIO_CHANNEL_REPRESENTATION_INDEX, bits);
700 }
701
702 /* Derive an output channel mask for position assignment from a channel count.
703  * This is to be used when the content channel mask is unknown. The 1, 2, 4, 5, 6, 7 and 8 channel
704  * cases are mapped to the standard game/home-theater layouts, but note that 4 is mapped to quad,
705  * and not stereo + FC + mono surround. A channel count of 3 is arbitrarily mapped to stereo + FC
706  * for continuity with stereo.
707  * Returns the matching channel mask,
708  * or AUDIO_CHANNEL_NONE if the channel count is zero,
709  * or AUDIO_CHANNEL_INVALID if the channel count exceeds that of the
710  * configurations for which a default output channel mask is defined.
711  */
712 static inline audio_channel_mask_t audio_channel_out_mask_from_count(uint32_t channel_count)
713 {
714     uint32_t bits;
715     switch (channel_count) {
716     case 0:
717         return AUDIO_CHANNEL_NONE;
718     case 1:
719         bits = AUDIO_CHANNEL_OUT_MONO;
720         break;
721     case 2:
722         bits = AUDIO_CHANNEL_OUT_STEREO;
723         break;
724     case 3:
725         bits = AUDIO_CHANNEL_OUT_STEREO | AUDIO_CHANNEL_OUT_FRONT_CENTER;
726         break;
727     case 4: // 4.0
728         bits = AUDIO_CHANNEL_OUT_QUAD;
729         break;
730     case 5: // 5.0
731         bits = AUDIO_CHANNEL_OUT_QUAD | AUDIO_CHANNEL_OUT_FRONT_CENTER;
732         break;
733     case 6: // 5.1
734         bits = AUDIO_CHANNEL_OUT_5POINT1;
735         break;
736     case 7: // 6.1
737         bits = AUDIO_CHANNEL_OUT_5POINT1 | AUDIO_CHANNEL_OUT_BACK_CENTER;
738         break;
739     case 8:
740         bits = AUDIO_CHANNEL_OUT_7POINT1;
741         break;
742     // FIXME FCC_8
743     default:
744         return AUDIO_CHANNEL_INVALID;
745     }
746     return audio_channel_mask_from_representation_and_bits(
747             AUDIO_CHANNEL_REPRESENTATION_POSITION, bits);
748 }
749
750 /* Derive a default input channel mask from a channel count.
751  * Assumes a position mask for mono and stereo, or an index mask for channel counts > 2.
752  * Returns the matching channel mask,
753  * or AUDIO_CHANNEL_NONE if the channel count is zero,
754  * or AUDIO_CHANNEL_INVALID if the channel count exceeds that of the
755  * configurations for which a default input channel mask is defined.
756  */
757 static inline audio_channel_mask_t audio_channel_in_mask_from_count(uint32_t channel_count)
758 {
759     uint32_t bits;
760     switch (channel_count) {
761     case 0:
762         return AUDIO_CHANNEL_NONE;
763     case 1:
764         bits = AUDIO_CHANNEL_IN_MONO;
765         break;
766     case 2:
767         bits = AUDIO_CHANNEL_IN_STEREO;
768         break;
769     case 3:
770     case 4:
771     case 5:
772     case 6:
773     case 7:
774     case 8:
775         // FIXME FCC_8
776         return audio_channel_mask_for_index_assignment_from_count(channel_count);
777     default:
778         return AUDIO_CHANNEL_INVALID;
779     }
780     return audio_channel_mask_from_representation_and_bits(
781             AUDIO_CHANNEL_REPRESENTATION_POSITION, bits);
782 }
783
784 static inline bool audio_is_valid_format(audio_format_t format)
785 {
786     switch (format & AUDIO_FORMAT_MAIN_MASK) {
787     case AUDIO_FORMAT_PCM:
788         switch (format) {
789         case AUDIO_FORMAT_PCM_16_BIT:
790         case AUDIO_FORMAT_PCM_8_BIT:
791         case AUDIO_FORMAT_PCM_32_BIT:
792         case AUDIO_FORMAT_PCM_8_24_BIT:
793         case AUDIO_FORMAT_PCM_FLOAT:
794         case AUDIO_FORMAT_PCM_24_BIT_PACKED:
795             return true;
796         default:
797             return false;
798         }
799         /* not reached */
800     case AUDIO_FORMAT_MP3:
801     case AUDIO_FORMAT_AMR_NB:
802     case AUDIO_FORMAT_AMR_WB:
803     case AUDIO_FORMAT_AAC:
804     case AUDIO_FORMAT_AAC_ADTS:
805     case AUDIO_FORMAT_HE_AAC_V1:
806     case AUDIO_FORMAT_HE_AAC_V2:
807     case AUDIO_FORMAT_VORBIS:
808     case AUDIO_FORMAT_OPUS:
809     case AUDIO_FORMAT_AC3:
810     case AUDIO_FORMAT_E_AC3:
811     case AUDIO_FORMAT_DTS:
812     case AUDIO_FORMAT_DTS_HD:
813     case AUDIO_FORMAT_IEC61937:
814     case AUDIO_FORMAT_DOLBY_TRUEHD:
815     case AUDIO_FORMAT_QCELP:
816     case AUDIO_FORMAT_EVRC:
817     case AUDIO_FORMAT_EVRCB:
818     case AUDIO_FORMAT_EVRCWB:
819     case AUDIO_FORMAT_AAC_ADIF:
820     case AUDIO_FORMAT_AMR_WB_PLUS:
821     case AUDIO_FORMAT_MP2:
822     case AUDIO_FORMAT_EVRCNW:
823     case AUDIO_FORMAT_FLAC:
824     case AUDIO_FORMAT_ALAC:
825     case AUDIO_FORMAT_APE:
826     case AUDIO_FORMAT_WMA:
827     case AUDIO_FORMAT_WMA_PRO:
828     case AUDIO_FORMAT_DSD:
829     case AUDIO_FORMAT_LDAC:
830         return true;
831     default:
832         return false;
833     }
834 }
835
836 /**
837  * Extract the primary format, eg. PCM, AC3, etc.
838  */
839 static inline audio_format_t audio_get_main_format(audio_format_t format)
840 {
841     return (audio_format_t)(format & AUDIO_FORMAT_MAIN_MASK);
842 }
843
844 /**
845  * Is the data plain PCM samples that can be scaled and mixed?
846  */
847 static inline bool audio_is_linear_pcm(audio_format_t format)
848 {
849     return (audio_get_main_format(format) == AUDIO_FORMAT_PCM);
850 }
851
852 /**
853  * For this format, is the number of PCM audio frames directly proportional
854  * to the number of data bytes?
855  *
856  * In other words, is the format transported as PCM audio samples,
857  * but not necessarily scalable or mixable.
858  * This returns true for real PCM, but also for AUDIO_FORMAT_IEC61937,
859  * which is transported as 16 bit PCM audio, but where the encoded data
860  * cannot be mixed or scaled.
861  */
862 static inline bool audio_has_proportional_frames(audio_format_t format)
863 {
864     audio_format_t mainFormat = audio_get_main_format(format);
865     return (mainFormat == AUDIO_FORMAT_PCM
866             || mainFormat == AUDIO_FORMAT_IEC61937);
867 }
868
869 static inline size_t audio_bytes_per_sample(audio_format_t format)
870 {
871     size_t size = 0;
872
873     switch (format) {
874     case AUDIO_FORMAT_PCM_32_BIT:
875     case AUDIO_FORMAT_PCM_8_24_BIT:
876         size = sizeof(int32_t);
877         break;
878     case AUDIO_FORMAT_PCM_24_BIT_PACKED:
879         size = sizeof(uint8_t) * 3;
880         break;
881     case AUDIO_FORMAT_PCM_16_BIT:
882     case AUDIO_FORMAT_IEC61937:
883         size = sizeof(int16_t);
884         break;
885     case AUDIO_FORMAT_PCM_8_BIT:
886         size = sizeof(uint8_t);
887         break;
888     case AUDIO_FORMAT_PCM_FLOAT:
889         size = sizeof(float);
890         break;
891     default:
892         break;
893     }
894     return size;
895 }
896
897 /* converts device address to string sent to audio HAL via set_parameters */
898 static inline char *audio_device_address_to_parameter(audio_devices_t device, const char *address)
899 {
900     const size_t kSize = AUDIO_DEVICE_MAX_ADDRESS_LEN + sizeof("a2dp_sink_address=");
901     char param[kSize];
902
903     if (device & AUDIO_DEVICE_OUT_ALL_A2DP)
904         snprintf(param, kSize, "%s=%s", "a2dp_sink_address", address);
905     else if (device & AUDIO_DEVICE_OUT_REMOTE_SUBMIX)
906         snprintf(param, kSize, "%s=%s", "mix", address);
907     else
908         snprintf(param, kSize, "%s", address);
909
910     return strdup(param);
911 }
912
913 static inline bool audio_device_is_digital(audio_devices_t device) {
914     if ((device & AUDIO_DEVICE_BIT_IN) != 0) {
915         // input
916         return (~AUDIO_DEVICE_BIT_IN & device & (AUDIO_DEVICE_IN_ALL_USB |
917                           AUDIO_DEVICE_IN_HDMI |
918                           AUDIO_DEVICE_IN_SPDIF |
919                           AUDIO_DEVICE_IN_IP |
920                           AUDIO_DEVICE_IN_BUS)) != 0;
921     } else {
922         // output
923         return (device & (AUDIO_DEVICE_OUT_ALL_USB |
924                           AUDIO_DEVICE_OUT_HDMI |
925                           AUDIO_DEVICE_OUT_HDMI_ARC |
926                           AUDIO_DEVICE_OUT_SPDIF |
927                           AUDIO_DEVICE_OUT_IP |
928                           AUDIO_DEVICE_OUT_BUS)) != 0;
929     }
930 }
931
932 // Unique effect ID (can be generated from the following site:
933 //  http://www.itu.int/ITU-T/asn1/uuid.html)
934 // This struct is used for effects identification and in soundtrigger.
935 typedef struct audio_uuid_s {
936     uint32_t timeLow;
937     uint16_t timeMid;
938     uint16_t timeHiAndVersion;
939     uint16_t clockSeq;
940     uint8_t node[6];
941 } audio_uuid_t;
942
943 __END_DECLS
944
945 /**
946  * List of known audio HAL modules. This is the base name of the audio HAL
947  * library composed of the "audio." prefix, one of the base names below and
948  * a suffix specific to the device.
949  * e.g: audio.primary.goldfish.so or audio.a2dp.default.so
950  *
951  * The same module names are used in audio policy configuration files.
952  */
953
954 #define AUDIO_HARDWARE_MODULE_ID_PRIMARY "primary"
955 #define AUDIO_HARDWARE_MODULE_ID_A2DP "a2dp"
956 #define AUDIO_HARDWARE_MODULE_ID_USB "usb"
957 #define AUDIO_HARDWARE_MODULE_ID_REMOTE_SUBMIX "r_submix"
958 #define AUDIO_HARDWARE_MODULE_ID_CODEC_OFFLOAD "codec_offload"
959
960 /**
961  * Parameter definitions.
962  * Note that in the framework code it's recommended to use AudioParameter.h
963  * instead of these preprocessor defines, and for sure avoid just copying
964  * the constant values.
965  */
966
967 #define AUDIO_PARAMETER_VALUE_ON "on"
968 #define AUDIO_PARAMETER_VALUE_OFF "off"
969
970 /**
971  *  audio device parameters
972  */
973
974 /* BT SCO Noise Reduction + Echo Cancellation parameters */
975 #define AUDIO_PARAMETER_KEY_BT_NREC "bt_headset_nrec"
976
977 /* Get a new HW synchronization source identifier.
978  * Return a valid source (positive integer) or AUDIO_HW_SYNC_INVALID if an error occurs
979  * or no HW sync is available. */
980 #define AUDIO_PARAMETER_HW_AV_SYNC "hw_av_sync"
981
982 /* Screen state */
983 #define AUDIO_PARAMETER_KEY_SCREEN_STATE "screen_state"
984
985 /**
986  *  audio stream parameters
987  */
988
989 #define AUDIO_PARAMETER_STREAM_ROUTING "routing"             /* audio_devices_t */
990 #define AUDIO_PARAMETER_STREAM_FORMAT "format"               /* audio_format_t */
991 #define AUDIO_PARAMETER_STREAM_CHANNELS "channels"           /* audio_channel_mask_t */
992 #define AUDIO_PARAMETER_STREAM_FRAME_COUNT "frame_count"     /* size_t */
993 #define AUDIO_PARAMETER_STREAM_INPUT_SOURCE "input_source"   /* audio_source_t */
994 #define AUDIO_PARAMETER_STREAM_SAMPLING_RATE "sampling_rate" /* uint32_t */
995
996 #define AUDIO_PARAMETER_DEVICE_CONNECT "connect"            /* audio_devices_t */
997 #define AUDIO_PARAMETER_DEVICE_DISCONNECT "disconnect"      /* audio_devices_t */
998
999 /* Enable mono audio playback if 1, else should be 0. */
1000 #define AUDIO_PARAMETER_MONO_OUTPUT "mono_output"
1001
1002 /* Set the HW synchronization source for an output stream. */
1003 #define AUDIO_PARAMETER_STREAM_HW_AV_SYNC "hw_av_sync"
1004
1005 /* Query supported formats. The response is a '|' separated list of strings from
1006  * audio_format_t enum e.g: "sup_formats=AUDIO_FORMAT_PCM_16_BIT" */
1007 #define AUDIO_PARAMETER_STREAM_SUP_FORMATS "sup_formats"
1008 /* Query supported channel masks. The response is a '|' separated list of strings from
1009  * audio_channel_mask_t enum e.g: "sup_channels=AUDIO_CHANNEL_OUT_STEREO|AUDIO_CHANNEL_OUT_MONO" */
1010 #define AUDIO_PARAMETER_STREAM_SUP_CHANNELS "sup_channels"
1011 /* Query supported sampling rates. The response is a '|' separated list of integer values e.g:
1012  * "sup_sampling_rates=44100|48000" */
1013 #define AUDIO_PARAMETER_STREAM_SUP_SAMPLING_RATES "sup_sampling_rates"
1014
1015 #define AUDIO_PARAMETER_VALUE_LIST_SEPARATOR "|"
1016
1017 /**
1018  * audio codec parameters
1019  */
1020
1021 #define AUDIO_OFFLOAD_CODEC_PARAMS "music_offload_codec_param"
1022 #define AUDIO_OFFLOAD_CODEC_BIT_PER_SAMPLE "music_offload_bit_per_sample"
1023 #define AUDIO_OFFLOAD_CODEC_BIT_RATE "music_offload_bit_rate"
1024 #define AUDIO_OFFLOAD_CODEC_AVG_BIT_RATE "music_offload_avg_bit_rate"
1025 #define AUDIO_OFFLOAD_CODEC_ID "music_offload_codec_id"
1026 #define AUDIO_OFFLOAD_CODEC_BLOCK_ALIGN "music_offload_block_align"
1027 #define AUDIO_OFFLOAD_CODEC_SAMPLE_RATE "music_offload_sample_rate"
1028 #define AUDIO_OFFLOAD_CODEC_ENCODE_OPTION "music_offload_encode_option"
1029 #define AUDIO_OFFLOAD_CODEC_NUM_CHANNEL  "music_offload_num_channels"
1030 #define AUDIO_OFFLOAD_CODEC_DOWN_SAMPLING  "music_offload_down_sampling"
1031 #define AUDIO_OFFLOAD_CODEC_DELAY_SAMPLES  "delay_samples"
1032 #define AUDIO_OFFLOAD_CODEC_PADDING_SAMPLES  "padding_samples"
1033
1034
1035 #endif  // ANDROID_AUDIO_CORE_H