1
1
From: Ricardo Salveti de Araujo <ricardo.salveti@canonical.com>
2
Subject: hardware/include: adding audio hal related headers (from phablet CM 10.1)
2
Subject: Adding headers and test to support the Android Audio HAL
4
Changing headers to work with path defined by libhybris.
4
Headers originally from AOSP 4.2.2_r1.2, changed to have the correct
5
include path from other files provided by libhybris.
9
10
hybris/include/Makefile.am | 6 +
10
11
hybris/include/android/cutils/bitops.h | 41 +
11
hybris/include/android/hardware/audio.h | 659 +++++++++++++++
12
hybris/include/android/hardware/audio.h | 453 +++++++++++
12
13
hybris/include/android/hardware/audio_effect.h | 1028 ++++++++++++++++++++++++
13
hybris/include/android/hardware/audio_policy.h | 491 +++++++++++
14
hybris/include/android/system/audio.h | 693 ++++++++++++++++
15
hybris/include/android/system/audio_policy.h | 110 +++
14
hybris/include/android/hardware/audio_policy.h | 445 ++++++++++
15
hybris/include/android/system/audio.h | 518 ++++++++++++
16
hybris/include/android/system/audio_policy.h | 99 +++
16
17
hybris/tests/Makefile.am | 8 +
17
18
hybris/tests/test_audio.c | 58 ++
18
9 files changed, 3094 insertions(+)
19
9 files changed, 2656 insertions(+)
19
20
create mode 100644 hybris/include/android/cutils/bitops.h
20
21
create mode 100644 hybris/include/android/hardware/audio.h
21
22
create mode 100644 hybris/include/android/hardware/audio_effect.h
228
223
+ * "sup_sampling_rates=44100|48000" */
229
224
+#define AUDIO_PARAMETER_STREAM_SUP_SAMPLING_RATES "sup_sampling_rates"
231
+/* Query handle fm parameter*/
232
+#define AUDIO_PARAMETER_KEY_HANDLE_FM "handle_fm"
234
+/* Query voip flag */
235
+#define AUDIO_PARAMETER_KEY_VOIP_CHECK "voip_flag"
237
+/* Query Fluence type */
238
+#define AUDIO_PARAMETER_KEY_FLUENCE_TYPE "fluence"
240
+/* Query if surround sound recording is supported */
241
+#define AUDIO_PARAMETER_KEY_SSR "ssr"
243
+/* Query if a2dp is supported */
244
+#define AUDIO_PARAMETER_KEY_HANDLE_A2DP_DEVICE "isA2dpDeviceSupported"
245
227
+/**************************************/
247
229
+/* common audio stream configuration parameters */
379
358
+ int (*get_render_position)(const struct audio_stream_out *stream,
380
359
+ uint32_t *dsp_frames);
382
+#ifdef QCOM_HARDWARE
384
+ * start audio data rendering
386
+ int (*start)(struct audio_stream_out *stream);
389
+ * pause audio rendering
391
+ int (*pause)(struct audio_stream_out *stream);
394
+ * flush audio data with driver
396
+ int (*flush)(struct audio_stream_out *stream);
399
+ * stop audio data rendering
401
+ int (*stop)(struct audio_stream_out *stream);
405
362
+ * get the local time at which the next write to the audio driver will be presented.
406
363
+ * The units are microseconds, where the epoch is decided by the local audio HAL.
408
365
+ int (*get_next_write_timestamp)(const struct audio_stream_out *stream,
409
366
+ int64_t *timestamp);
410
+#ifdef QCOM_HARDWARE
412
+ * return the current timestamp after quering to the driver
414
+ int (*get_time_stamp)(const struct audio_stream_out *stream,
415
+ uint64_t *time_stamp);
417
+ * EOS notification from HAL to Player
419
+ int (*set_observer)(const struct audio_stream_out *stream,
422
+ * Get the physical address of the buffer allocated in the
425
+ int (*get_buffer_info) (const struct audio_stream_out *stream,
426
+ struct buf_info **buf);
428
+ * Check if next buffer is available. Waits until next buffer is
431
+ int (*is_buffer_available) (const struct audio_stream_out *stream,
436
369
+typedef struct audio_stream_out audio_stream_out_t;
438
+#ifdef QCOM_HARDWARE
440
+ * audio_broadcast_stream is the abstraction interface for the
441
+ * audio output hardware.
443
+ * It provides information about various properties of the audio output
447
+struct audio_broadcast_stream {
448
+ struct audio_stream common;
451
+ * return the audio hardware driver latency in milli seconds.
453
+ uint32_t (*get_latency)(const struct audio_broadcast_stream *stream);
456
+ * Use this method in situations where audio mixing is done in the
457
+ * hardware. This method serves as a direct interface with hardware,
458
+ * allowing you to directly set the volume as apposed to via the framework.
459
+ * This method might produce multiple PCM outputs or hardware accelerated
460
+ * codecs, such as MP3 or AAC.
462
+ int (*set_volume)(struct audio_broadcast_stream *stream, float left, float right);
464
+ int (*mute)(struct audio_broadcast_stream *stream, bool mute);
466
+ int (*start)(struct audio_broadcast_stream *stream, int64_t absTimeToStart);
468
+ * write audio buffer to driver. Returns number of bytes written
470
+ ssize_t (*write)(struct audio_broadcast_stream *stream, const void* buffer,
471
+ size_t bytes, int64_t timestamp, int audioType);
474
+typedef struct audio_broadcast_stream audio_broadcast_stream_t;
477
371
+struct audio_stream_in {
478
372
+ struct audio_stream common;
508
402
+static inline size_t audio_stream_frame_size(const struct audio_stream *s)
510
404
+ size_t chan_samp_sz;
511
+ uint32_t chan_mask = s->get_channels(s);
512
+ int format = s->get_format(s);
514
+#ifdef QCOM_HARDWARE
518
+ if (audio_is_input_channel(chan_mask)) {
519
+ chan_mask &= (AUDIO_CHANNEL_IN_STEREO | \
520
+ AUDIO_CHANNEL_IN_MONO | \
521
+ AUDIO_CHANNEL_IN_5POINT1);
524
+ if(!strncmp(s->get_parameters(s, "voip_flag"),"voip_flag=1",sizeof("voip_flag=1"))) {
525
+ if(format != AUDIO_FORMAT_PCM_8_BIT)
526
+ return popcount(chan_mask) * sizeof(int16_t);
528
+ return popcount(chan_mask) * sizeof(int8_t);
533
+#ifdef QCOM_HARDWARE
534
+ case AUDIO_FORMAT_AMR_NB:
537
+ case AUDIO_FORMAT_EVRC:
540
+ case AUDIO_FORMAT_QCELP:
406
+ switch (s->get_format(s)) {
544
407
+ case AUDIO_FORMAT_PCM_16_BIT:
545
408
+ chan_samp_sz = sizeof(int16_t);
640
496
+ * See also get_buffer_size which is for a particular stream.
642
498
+ size_t (*get_input_buffer_size)(const struct audio_hw_device *dev,
643
+#ifndef ICS_AUDIO_BLOB
644
499
+ const struct audio_config *config);
646
+ uint32_t sample_rate, int format,
647
+ int channel_count);
650
501
+ /** This method creates and opens the audio hardware output stream */
651
+#ifndef ICS_AUDIO_BLOB
652
502
+ int (*open_output_stream)(struct audio_hw_device *dev,
653
503
+ audio_io_handle_t handle,
654
504
+ audio_devices_t devices,
655
505
+ audio_output_flags_t flags,
656
506
+ struct audio_config *config,
657
507
+ struct audio_stream_out **stream_out);
659
+ int (*open_output_stream)(struct audio_hw_device *dev, uint32_t devices,
660
+ int *format, uint32_t *channels,
661
+ uint32_t *sample_rate,
662
+ struct audio_stream_out **out);
665
+#ifdef QCOM_ICS_LPA_COMPAT
666
+ /** This method creates and opens the audio hardware output session */
667
+ int (*open_output_session)(struct audio_hw_device *dev, uint32_t devices,
668
+ int *format, int sessionId,
669
+ struct audio_stream_out **out);
672
509
+ void (*close_output_stream)(struct audio_hw_device *dev,
673
510
+ struct audio_stream_out* stream_out);
675
+#ifdef QCOM_HARDWARE
676
+ /** This method creates and opens the audio hardware output
677
+ * for broadcast stream */
678
+ int (*open_broadcast_stream)(struct audio_hw_device *dev, uint32_t devices,
679
+ int format, uint32_t channels,
680
+ uint32_t sample_rate,
681
+ uint32_t audio_source,
682
+ struct audio_broadcast_stream **out);
684
+ void (*close_broadcast_stream)(struct audio_hw_device *dev,
685
+ struct audio_broadcast_stream *out);
688
512
+ /** This method creates and opens the audio hardware input stream */
689
+#ifndef ICS_AUDIO_BLOB
690
513
+ int (*open_input_stream)(struct audio_hw_device *dev,
691
514
+ audio_io_handle_t handle,
692
515
+ audio_devices_t devices,
693
516
+ struct audio_config *config,
694
517
+ struct audio_stream_in **stream_in);
696
+ int (*open_input_stream)(struct audio_hw_device *dev, uint32_t devices,
697
+ int *format, uint32_t *channels,
698
+ uint32_t *sample_rate,
699
+ audio_in_acoustics_t acoustics,
700
+ struct audio_stream_in **stream_in);
703
519
+ void (*close_input_stream)(struct audio_hw_device *dev,
704
520
+ struct audio_stream_in *stream_in);
1931
1725
+ * Audio routing query functions
1934
+#ifdef QCOM_ICS_LPA_COMPAT
1935
+ /* request an session appropriate for playback of the supplied stream type and
1937
+ audio_io_handle_t (*get_session)(struct audio_policy *pol,
1938
+ audio_stream_type_t stream,
1940
+ audio_output_flags_t flags,
1943
+ /* pause session created for LPA Playback */
1944
+ void (*pause_session)(struct audio_policy *pol,
1945
+ audio_io_handle_t output,
1946
+ audio_stream_type_t stream);
1948
+ /* resume session created for LPA Playback */
1949
+ void (*resume_session)(struct audio_policy *pol,
1950
+ audio_io_handle_t output,
1951
+ audio_stream_type_t stream);
1953
+ /* release session created for LPA Playback */
1954
+ void (*release_session)(struct audio_policy *pol,
1955
+ audio_io_handle_t output);
1958
1728
+ /* request an output appropriate for playback of the supplied stream type and
1959
1729
+ * parameters */
1960
1730
+ audio_io_handle_t (*get_output)(struct audio_policy *pol,
2099
1867
+ uint32_t *pLatencyMs,
2100
1868
+ audio_output_flags_t flags);
2102
+#ifdef QCOM_ICS_LPA_COMPAT
2103
+ audio_io_handle_t (*open_session)(void *service,
2104
+ uint32_t *pDevices,
2105
+ uint32_t *pFormat,
2106
+ audio_output_flags_t flags,
2108
+ int32_t sessionId);
2110
+ audio_io_handle_t (*close_session)(void *service,
2111
+ audio_io_handle_t output);
2114
1870
+ /* creates a special output that is duplicated to the two outputs passed as
2115
1871
+ * arguments. The duplication is performed by
2116
1872
+ * a special mixer thread in the AudioFlinger.
2365
2113
+ AUDIO_SOURCE_CAMCORDER = 5,
2366
2114
+ AUDIO_SOURCE_VOICE_RECOGNITION = 6,
2367
2115
+ AUDIO_SOURCE_VOICE_COMMUNICATION = 7,
2368
+ AUDIO_SOURCE_REMOTE_SUBMIX = 8, /* Source for the mix to be presented remotely. */
2369
+ /* An example of remote presentation is Wifi Display */
2370
+ /* where a dongle attached to a TV can be used to */
2371
+ /* play the mix captured by this audio source. */
2372
2117
+ AUDIO_SOURCE_CNT,
2373
2118
+ AUDIO_SOURCE_MAX = AUDIO_SOURCE_CNT - 1,
2374
2119
+} audio_source_t;
2443
2188
+ AUDIO_FORMAT_HE_AAC_V1 = 0x05000000UL,
2444
2189
+ AUDIO_FORMAT_HE_AAC_V2 = 0x06000000UL,
2445
2190
+ AUDIO_FORMAT_VORBIS = 0x07000000UL,
2446
+#ifdef QCOM_HARDWARE
2447
+ AUDIO_FORMAT_EVRC = 0x08000000UL,
2448
+ AUDIO_FORMAT_QCELP = 0x09000000UL,
2449
+ AUDIO_FORMAT_AC3 = 0x0a000000UL,
2450
+ AUDIO_FORMAT_AC3_PLUS = 0x0b000000UL,
2451
+ AUDIO_FORMAT_DTS = 0x0c000000UL,
2452
+ AUDIO_FORMAT_WMA = 0x0d000000UL,
2453
+ AUDIO_FORMAT_WMA_PRO = 0x0e000000UL,
2454
+ AUDIO_FORMAT_AAC_ADIF = 0x0f000000UL,
2455
+ AUDIO_FORMAT_EVRCB = 0x10000000UL,
2456
+ AUDIO_FORMAT_EVRCWB = 0x11000000UL,
2457
+ AUDIO_FORMAT_EAC3 = 0x12000000UL,
2458
+ AUDIO_FORMAT_DTS_LBR = 0x13000000UL,
2459
+ AUDIO_FORMAT_AMR_WB_PLUS = 0x14000000UL,
2460
+ AUDIO_FORMAT_MP2 = 0x15000000UL,
2462
2191
+ AUDIO_FORMAT_MAIN_MASK = 0xFF000000UL,
2463
2192
+ AUDIO_FORMAT_SUB_MASK = 0x00FFFFFFUL,
2497
2226
+ AUDIO_CHANNEL_OUT_MONO = AUDIO_CHANNEL_OUT_FRONT_LEFT,
2498
2227
+ AUDIO_CHANNEL_OUT_STEREO = (AUDIO_CHANNEL_OUT_FRONT_LEFT |
2499
2228
+ AUDIO_CHANNEL_OUT_FRONT_RIGHT),
2500
+#ifdef QCOM_HARDWARE
2501
+ AUDIO_CHANNEL_OUT_2POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT |
2502
+ AUDIO_CHANNEL_OUT_FRONT_RIGHT |
2503
+ AUDIO_CHANNEL_OUT_FRONT_CENTER),
2505
2229
+ AUDIO_CHANNEL_OUT_QUAD = (AUDIO_CHANNEL_OUT_FRONT_LEFT |
2506
2230
+ AUDIO_CHANNEL_OUT_FRONT_RIGHT |
2507
2231
+ AUDIO_CHANNEL_OUT_BACK_LEFT |
2510
2234
+ AUDIO_CHANNEL_OUT_FRONT_RIGHT |
2511
2235
+ AUDIO_CHANNEL_OUT_FRONT_CENTER |
2512
2236
+ AUDIO_CHANNEL_OUT_BACK_CENTER),
2513
+#ifdef QCOM_HARDWARE
2514
+ AUDIO_CHANNEL_OUT_PENTA = (AUDIO_CHANNEL_OUT_QUAD |
2515
+ AUDIO_CHANNEL_OUT_FRONT_CENTER),
2517
2237
+ AUDIO_CHANNEL_OUT_5POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT |
2518
2238
+ AUDIO_CHANNEL_OUT_FRONT_RIGHT |
2519
2239
+ AUDIO_CHANNEL_OUT_FRONT_CENTER |
2520
2240
+ AUDIO_CHANNEL_OUT_LOW_FREQUENCY |
2521
2241
+ AUDIO_CHANNEL_OUT_BACK_LEFT |
2522
2242
+ AUDIO_CHANNEL_OUT_BACK_RIGHT),
2523
+#ifdef QCOM_HARDWARE
2524
+ AUDIO_CHANNEL_OUT_6POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT |
2525
+ AUDIO_CHANNEL_OUT_FRONT_RIGHT |
2526
+ AUDIO_CHANNEL_OUT_FRONT_CENTER |
2527
+ AUDIO_CHANNEL_OUT_LOW_FREQUENCY |
2528
+ AUDIO_CHANNEL_OUT_BACK_LEFT |
2529
+ AUDIO_CHANNEL_OUT_BACK_RIGHT |
2530
+ AUDIO_CHANNEL_OUT_BACK_CENTER),
2532
2243
+ // matches the correct AudioFormat.CHANNEL_OUT_7POINT1_SURROUND definition for 7.1
2533
2244
+ AUDIO_CHANNEL_OUT_7POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT |
2534
2245
+ AUDIO_CHANNEL_OUT_FRONT_RIGHT |
2572
2283
+ AUDIO_CHANNEL_IN_Z_AXIS = 0x2000,
2573
2284
+ AUDIO_CHANNEL_IN_VOICE_UPLINK = 0x4000,
2574
2285
+ AUDIO_CHANNEL_IN_VOICE_DNLINK = 0x8000,
2575
+#ifdef QCOM_HARDWARE
2576
+ AUDIO_CHANNEL_IN_FRONT_LEFT = 0x10000,
2577
+ AUDIO_CHANNEL_IN_FRONT_RIGHT = 0x20000,
2578
+ AUDIO_CHANNEL_IN_FRONT_CENTER = 0x40000,
2579
+ AUDIO_CHANNEL_IN_LOW_FREQUENCY = 0x80000,
2580
+ AUDIO_CHANNEL_IN_BACK_LEFT = 0x100000,
2581
+ AUDIO_CHANNEL_IN_BACK_RIGHT = 0x200000,
2584
2287
+ AUDIO_CHANNEL_IN_MONO = AUDIO_CHANNEL_IN_FRONT,
2585
2288
+ AUDIO_CHANNEL_IN_STEREO = (AUDIO_CHANNEL_IN_LEFT | AUDIO_CHANNEL_IN_RIGHT),
2586
+#ifdef QCOM_HARDWARE
2587
+ AUDIO_CHANNEL_IN_5POINT1 = (AUDIO_CHANNEL_IN_FRONT_LEFT |
2588
+ AUDIO_CHANNEL_IN_FRONT_RIGHT |
2589
+ AUDIO_CHANNEL_IN_FRONT_CENTER |
2590
+ AUDIO_CHANNEL_IN_LOW_FREQUENCY |
2591
+ AUDIO_CHANNEL_IN_BACK_LEFT |
2592
+ AUDIO_CHANNEL_IN_BACK_RIGHT),
2593
+ AUDIO_CHANNEL_IN_VOICE_UPLINK_MONO = (AUDIO_CHANNEL_IN_VOICE_UPLINK | AUDIO_CHANNEL_IN_MONO),
2594
+ AUDIO_CHANNEL_IN_VOICE_DNLINK_MONO = (AUDIO_CHANNEL_IN_VOICE_DNLINK | AUDIO_CHANNEL_IN_MONO),
2595
+ AUDIO_CHANNEL_IN_VOICE_CALL_MONO = (AUDIO_CHANNEL_IN_VOICE_UPLINK_MONO | AUDIO_CHANNEL_IN_VOICE_DNLINK_MONO),
2597
2289
+ AUDIO_CHANNEL_IN_ALL = (AUDIO_CHANNEL_IN_LEFT |
2598
2290
+ AUDIO_CHANNEL_IN_RIGHT |
2599
2291
+ AUDIO_CHANNEL_IN_FRONT |
2636
2325
+ AUDIO_IN_ACOUSTICS_TX_DISABLE = 0,
2637
2326
+} audio_in_acoustics_t;
2640
+ AUDIO_DEVICE_NONE = 0x0,
2641
+ /* reserved bits */
2642
+#if defined(ICS_AUDIO_BLOB) || defined(MR0_AUDIO_BLOB)
2643
+ AUDIO_DEVICE_BIT_IN = 0x10000,
2645
+ AUDIO_DEVICE_BIT_IN = 0x80000000,
2647
+ AUDIO_DEVICE_BIT_DEFAULT = 0x40000000,
2648
2329
+ /* output devices */
2649
2330
+ AUDIO_DEVICE_OUT_EARPIECE = 0x1,
2650
2331
+ AUDIO_DEVICE_OUT_SPEAKER = 0x2,
2661
2342
+ AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000,
2662
2343
+ AUDIO_DEVICE_OUT_USB_ACCESSORY = 0x2000,
2663
2344
+ AUDIO_DEVICE_OUT_USB_DEVICE = 0x4000,
2664
+ AUDIO_DEVICE_OUT_REMOTE_SUBMIX = 0x8000,
2665
+#ifdef QCOM_HARDWARE
2666
+ AUDIO_DEVICE_OUT_ANC_HEADSET = 0x10000,
2667
+ AUDIO_DEVICE_OUT_ANC_HEADPHONE = 0x20000,
2668
+ AUDIO_DEVICE_OUT_PROXY = 0x40000,
2669
+ AUDIO_DEVICE_OUT_FM = 0x80000,
2670
+ AUDIO_DEVICE_OUT_FM_TX = 0x100000,
2672
+ AUDIO_DEVICE_OUT_DEFAULT = AUDIO_DEVICE_BIT_DEFAULT,
2345
+ AUDIO_DEVICE_OUT_DEFAULT = 0x8000,
2673
2346
+ AUDIO_DEVICE_OUT_ALL = (AUDIO_DEVICE_OUT_EARPIECE |
2674
2347
+ AUDIO_DEVICE_OUT_SPEAKER |
2675
2348
+ AUDIO_DEVICE_OUT_WIRED_HEADSET |
2685
2358
+ AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET |
2686
2359
+ AUDIO_DEVICE_OUT_USB_ACCESSORY |
2687
2360
+ AUDIO_DEVICE_OUT_USB_DEVICE |
2688
+ AUDIO_DEVICE_OUT_REMOTE_SUBMIX |
2689
+#ifdef QCOM_HARDWARE
2690
+ AUDIO_DEVICE_OUT_ANC_HEADSET |
2691
+ AUDIO_DEVICE_OUT_ANC_HEADPHONE |
2692
+ AUDIO_DEVICE_OUT_PROXY |
2693
+ AUDIO_DEVICE_OUT_FM |
2694
+ AUDIO_DEVICE_OUT_FM_TX |
2696
2361
+ AUDIO_DEVICE_OUT_DEFAULT),
2697
2362
+ AUDIO_DEVICE_OUT_ALL_A2DP = (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP |
2698
2363
+ AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
2704
2369
+ AUDIO_DEVICE_OUT_USB_DEVICE),
2706
2371
+ /* input devices */
2707
+#if defined(ICS_AUDIO_BLOB) || defined(MR0_AUDIO_BLOB)
2708
+ AUDIO_DEVICE_IN_COMMUNICATION = AUDIO_DEVICE_BIT_IN * 0x1,
2709
+ AUDIO_DEVICE_IN_AMBIENT = AUDIO_DEVICE_BIT_IN * 0x2,
2710
+ AUDIO_DEVICE_IN_BUILTIN_MIC = AUDIO_DEVICE_BIT_IN * 0x4,
2711
+ AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET = AUDIO_DEVICE_BIT_IN * 0x8,
2712
+ AUDIO_DEVICE_IN_WIRED_HEADSET = AUDIO_DEVICE_BIT_IN * 0x10,
2713
+ AUDIO_DEVICE_IN_AUX_DIGITAL = AUDIO_DEVICE_BIT_IN * 0x20,
2714
+ AUDIO_DEVICE_IN_VOICE_CALL = AUDIO_DEVICE_BIT_IN * 0x40,
2715
+ AUDIO_DEVICE_IN_BACK_MIC = AUDIO_DEVICE_BIT_IN * 0x80,
2716
+ AUDIO_DEVICE_IN_REMOTE_SUBMIX = AUDIO_DEVICE_BIT_IN * 0x100,
2717
+ AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN * 0x200,
2718
+ AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN * 0x400,
2719
+ AUDIO_DEVICE_IN_USB_ACCESSORY = AUDIO_DEVICE_BIT_IN * 0x800,
2720
+ AUDIO_DEVICE_IN_USB_DEVICE = AUDIO_DEVICE_BIT_IN * 0x1000,
2721
+ AUDIO_DEVICE_IN_DEFAULT = AUDIO_DEVICE_IN_BUILTIN_MIC,
2723
+ AUDIO_DEVICE_IN_COMMUNICATION = AUDIO_DEVICE_BIT_IN | 0x1,
2724
+ AUDIO_DEVICE_IN_AMBIENT = AUDIO_DEVICE_BIT_IN | 0x2,
2725
+ AUDIO_DEVICE_IN_BUILTIN_MIC = AUDIO_DEVICE_BIT_IN | 0x4,
2726
+ AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET = AUDIO_DEVICE_BIT_IN | 0x8,
2727
+ AUDIO_DEVICE_IN_WIRED_HEADSET = AUDIO_DEVICE_BIT_IN | 0x10,
2728
+ AUDIO_DEVICE_IN_AUX_DIGITAL = AUDIO_DEVICE_BIT_IN | 0x20,
2729
+ AUDIO_DEVICE_IN_VOICE_CALL = AUDIO_DEVICE_BIT_IN | 0x40,
2730
+ AUDIO_DEVICE_IN_BACK_MIC = AUDIO_DEVICE_BIT_IN | 0x80,
2731
+ AUDIO_DEVICE_IN_REMOTE_SUBMIX = AUDIO_DEVICE_BIT_IN | 0x100,
2732
+ AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x200,
2733
+ AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x400,
2734
+ AUDIO_DEVICE_IN_USB_ACCESSORY = AUDIO_DEVICE_BIT_IN | 0x800,
2735
+ AUDIO_DEVICE_IN_USB_DEVICE = AUDIO_DEVICE_BIT_IN | 0x1000,
2736
+#ifdef QCOM_HARDWARE
2737
+ AUDIO_DEVICE_IN_ANC_HEADSET = AUDIO_DEVICE_BIT_IN | 0x2000,
2738
+ AUDIO_DEVICE_IN_PROXY = AUDIO_DEVICE_BIT_IN | 0x4000,
2739
+ AUDIO_DEVICE_IN_FM_RX = AUDIO_DEVICE_BIT_IN | 0x8000,
2740
+ AUDIO_DEVICE_IN_FM_RX_A2DP = AUDIO_DEVICE_BIT_IN | 0x10000,
2742
+ AUDIO_DEVICE_IN_DEFAULT = AUDIO_DEVICE_BIT_IN | AUDIO_DEVICE_BIT_DEFAULT,
2372
+ AUDIO_DEVICE_IN_COMMUNICATION = 0x10000,
2373
+ AUDIO_DEVICE_IN_AMBIENT = 0x20000,
2374
+ AUDIO_DEVICE_IN_BUILTIN_MIC = 0x40000,
2375
+ AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET = 0x80000,
2376
+ AUDIO_DEVICE_IN_WIRED_HEADSET = 0x100000,
2377
+ AUDIO_DEVICE_IN_AUX_DIGITAL = 0x200000,
2378
+ AUDIO_DEVICE_IN_VOICE_CALL = 0x400000,
2379
+ AUDIO_DEVICE_IN_BACK_MIC = 0x800000,
2380
+ AUDIO_DEVICE_IN_DEFAULT = 0x80000000,
2745
2382
+ AUDIO_DEVICE_IN_ALL = (AUDIO_DEVICE_IN_COMMUNICATION |
2746
2383
+ AUDIO_DEVICE_IN_AMBIENT |
2750
2387
+ AUDIO_DEVICE_IN_AUX_DIGITAL |
2751
2388
+ AUDIO_DEVICE_IN_VOICE_CALL |
2752
2389
+ AUDIO_DEVICE_IN_BACK_MIC |
2753
+ AUDIO_DEVICE_IN_REMOTE_SUBMIX |
2754
+ AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET |
2755
+ AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET |
2756
+ AUDIO_DEVICE_IN_USB_ACCESSORY |
2757
+ AUDIO_DEVICE_IN_USB_DEVICE |
2758
+#ifdef QCOM_HARDWARE
2759
+ AUDIO_DEVICE_IN_ANC_HEADSET |
2760
+ AUDIO_DEVICE_IN_FM_RX |
2761
+ AUDIO_DEVICE_IN_FM_RX_A2DP |
2762
+ AUDIO_DEVICE_IN_PROXY |
2764
2390
+ AUDIO_DEVICE_IN_DEFAULT),
2765
2391
+ AUDIO_DEVICE_IN_ALL_SCO = AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET,
2768
+typedef uint32_t audio_devices_t;
2770
2394
+/* the audio output flags serve two purposes:
2771
2395
+ * - when an AudioTrack is created they indicate a "wish" to be connected to an
2787
2411
+ // controls related to voice calls.
2788
2412
+ AUDIO_OUTPUT_FLAG_FAST = 0x4, // output supports "fast tracks",
2789
2413
+ // defined elsewhere
2790
+ AUDIO_OUTPUT_FLAG_DEEP_BUFFER = 0x8,// use deep audio buffers
2791
+#ifdef QCOM_HARDWARE
2793
+ AUDIO_OUTPUT_FLAG_LPA = 0x1000, // use LPA
2794
+ AUDIO_OUTPUT_FLAG_TUNNEL = 0x2000, // use Tunnel
2795
+ AUDIO_OUTPUT_FLAG_VOIP_RX = 0x4000 // use this flag in combination with DIRECT to
2796
+ // indicate HAL to activate EC & NS
2797
+ // path for VOIP calls
2414
+ AUDIO_OUTPUT_FLAG_DEEP_BUFFER = 0x8 // use deep audio buffers
2799
2415
+} audio_output_flags_t;
2801
2417
+static inline bool audio_is_output_device(audio_devices_t device)
2803
+ if (((device & AUDIO_DEVICE_BIT_IN) == 0) &&
2804
+ (popcount(device) == 1) && ((device & ~AUDIO_DEVICE_OUT_ALL) == 0))
2419
+ if ((popcount(device) == 1) && ((device & ~AUDIO_DEVICE_OUT_ALL) == 0))
2807
2422
+ return false;
2937
2531
+ case AUDIO_FORMAT_HE_AAC_V1:
2938
2532
+ case AUDIO_FORMAT_HE_AAC_V2:
2939
2533
+ case AUDIO_FORMAT_VORBIS:
2940
+#ifdef QCOM_HARDWARE
2941
+ case AUDIO_FORMAT_QCELP:
2942
+ case AUDIO_FORMAT_EVRC:
2943
+ case AUDIO_FORMAT_EVRCB:
2944
+ case AUDIO_FORMAT_EVRCWB:
2945
+ case AUDIO_FORMAT_AC3:
2946
+ case AUDIO_FORMAT_EAC3:
2947
+ case AUDIO_FORMAT_AAC_ADIF:
2948
+ case AUDIO_FORMAT_WMA:
2949
+ case AUDIO_FORMAT_WMA_PRO:
2950
+ case AUDIO_FORMAT_DTS:
2951
+ case AUDIO_FORMAT_DTS_LBR:
2952
+ case AUDIO_FORMAT_AMR_WB_PLUS:
2953
+ case AUDIO_FORMAT_MP2:
2957
2536
+ return false;