1e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin/*
2e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * Copyright (C) 2008 The Android Open Source Project
3e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin *
4e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * Licensed under the Apache License, Version 2.0 (the "License");
5e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * you may not use this file except in compliance with the License.
6e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * You may obtain a copy of the License at
7e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin *
8e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin *      http://www.apache.org/licenses/LICENSE-2.0
9e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin *
10e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * Unless required by applicable law or agreed to in writing, software
11e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * distributed under the License is distributed on an "AS IS" BASIS,
12e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * See the License for the specific language governing permissions and
14e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * limitations under the License.
15e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin */
16e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
17e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#ifndef ANDROID_AUDIOSYSTEM_LEGACY_H_
18e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#define ANDROID_AUDIOSYSTEM_LEGACY_H_
19e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
20e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include <utils/Errors.h>
21e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include <media/AudioParameter.h>
22e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
234a0748be283a8c9efa02243c3e1716c49443a87cDima Zavin#include <system/audio.h>
24d17f66f33276e64e8e288f6ff2b1cb8169650c81Dima Zavin#include <system/audio_policy.h>
25e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
26e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinnamespace android_audio_legacy {
27e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
28e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinusing android::status_t;
29e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinusing android::AudioParameter;
30e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
31e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinenum {
32e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    OK                  = android::OK,
33e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    NO_ERROR            = android::NO_ERROR,
34e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
35e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    UNKNOWN_ERROR       = android::UNKNOWN_ERROR,
36e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
37e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    NO_MEMORY           = android::NO_MEMORY,
38e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    INVALID_OPERATION   = android::INVALID_OPERATION,
39e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    BAD_VALUE           = android::BAD_VALUE,
40e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    BAD_TYPE            = android::BAD_TYPE,
41e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    NAME_NOT_FOUND      = android::NAME_NOT_FOUND,
42e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    PERMISSION_DENIED   = android::PERMISSION_DENIED,
43e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    NO_INIT             = android::NO_INIT,
44e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    ALREADY_EXISTS      = android::ALREADY_EXISTS,
45e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    DEAD_OBJECT         = android::DEAD_OBJECT,
46e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    FAILED_TRANSACTION  = android::FAILED_TRANSACTION,
47e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    BAD_INDEX           = android::BAD_INDEX,
48e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    NOT_ENOUGH_DATA     = android::NOT_ENOUGH_DATA,
49e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    WOULD_BLOCK         = android::WOULD_BLOCK,
50e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    TIMED_OUT           = android::TIMED_OUT,
51e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    UNKNOWN_TRANSACTION = android::UNKNOWN_TRANSACTION,
52e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin};
53e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
54e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinenum audio_source {
55e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_DEFAULT = 0,
56e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_MIC = 1,
57e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_VOICE_UPLINK = 2,
58e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_VOICE_DOWNLINK = 3,
59e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_VOICE_CALL = 4,
60e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_CAMCORDER = 5,
61e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_VOICE_RECOGNITION = 6,
62e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_VOICE_COMMUNICATION = 7,
63e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_MAX = AUDIO_SOURCE_VOICE_COMMUNICATION,
64e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
65e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_LIST_END  // must be last - used to validate audio source type
66e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin};
67e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
68e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinclass AudioSystem {
69e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinpublic:
70e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#if 1
71e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum stream_type {
72e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEFAULT          =-1,
73e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        VOICE_CALL       = 0,
74e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        SYSTEM           = 1,
75e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        RING             = 2,
76e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MUSIC            = 3,
77e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        ALARM            = 4,
78e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NOTIFICATION     = 5,
79e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        BLUETOOTH_SCO    = 6,
80e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        ENFORCED_AUDIBLE = 7, // Sounds that cannot be muted by user and must be routed to speaker
81e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DTMF             = 8,
82e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        TTS              = 9,
83e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_STREAM_TYPES
84e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
85e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
86e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // Audio sub formats (see AudioSystem::audio_format).
87e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum pcm_sub_format {
88e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        PCM_SUB_16_BIT          = 0x1, // must be 1 for backward compatibility
89e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        PCM_SUB_8_BIT           = 0x2, // must be 2 for backward compatibility
90e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
91e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
92e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_sessions {
93e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        SESSION_OUTPUT_STAGE = AUDIO_SESSION_OUTPUT_STAGE,
94e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        SESSION_OUTPUT_MIX = AUDIO_SESSION_OUTPUT_MIX,
95e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
96e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
97e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // MP3 sub format field definition : can use 11 LSBs in the same way as MP3 frame header to specify
98e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // bit rate, stereo mode, version...
99e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum mp3_sub_format {
100e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        //TODO
101e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
102e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
103e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // AMR NB/WB sub format field definition: specify frame block interleaving, bandwidth efficient or octet aligned,
104e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // encoding mode for recording...
105e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum amr_sub_format {
106e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        //TODO
107e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
108e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
109e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // AAC sub format field definition: specify profile or bitrate for recording...
110e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum aac_sub_format {
111e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        //TODO
112e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
113e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
114e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // VORBIS sub format field definition: specify quality for recording...
115e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum vorbis_sub_format {
116e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        //TODO
117e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
118e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
119e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // Audio format consists in a main format field (upper 8 bits) and a sub format field (lower 24 bits).
120e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // The main format indicates the main codec type. The sub format field indicates options and parameters
121e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // for each format. The sub format is mainly used for record to indicate for instance the requested bitrate
122e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // or profile. It can also be used for certain formats to give informations not present in the encoded
123e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // audio stream (e.g. octet alignement for AMR).
124e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_format {
125e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        INVALID_FORMAT      = -1,
126e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORMAT_DEFAULT      = 0,
127e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        PCM                 = 0x00000000, // must be 0 for backward compatibility
128e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MP3                 = 0x01000000,
129e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AMR_NB              = 0x02000000,
130e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AMR_WB              = 0x03000000,
131e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AAC                 = 0x04000000,
132e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        HE_AAC_V1           = 0x05000000,
133e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        HE_AAC_V2           = 0x06000000,
134e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        VORBIS              = 0x07000000,
135e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MAIN_FORMAT_MASK    = 0xFF000000,
136e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        SUB_FORMAT_MASK     = 0x00FFFFFF,
137e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // Aliases
138e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        PCM_16_BIT          = (PCM|PCM_SUB_16_BIT),
139e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        PCM_8_BIT          = (PCM|PCM_SUB_8_BIT)
140e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
141e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
142e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_channels {
143e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // output channels
14420324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_FRONT_LEFT            = 0x1,
14520324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_FRONT_RIGHT           = 0x2,
14620324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_FRONT_CENTER          = 0x4,
14720324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_LOW_FREQUENCY         = 0x8,
14820324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_BACK_LEFT             = 0x10,
14920324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_BACK_RIGHT            = 0x20,
15020324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_FRONT_LEFT_OF_CENTER  = 0x40,
15120324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x80,
15220324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_BACK_CENTER           = 0x100,
15320324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_SIDE_LEFT             = 0x200,
15420324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_SIDE_RIGHT            = 0x400,
15520324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_CENTER            = 0x800,
15620324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_FRONT_LEFT        = 0x1000,
15720324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_FRONT_CENTER      = 0x2000,
15820324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_FRONT_RIGHT       = 0x4000,
15920324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_BACK_LEFT         = 0x8000,
16020324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_BACK_CENTER       = 0x10000,
16120324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_BACK_RIGHT        = 0x20000,
1629b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi
163e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_MONO = CHANNEL_OUT_FRONT_LEFT,
164e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_STEREO = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT),
165e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_QUAD = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
166e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT),
167e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_SURROUND = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
168e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_CENTER),
169e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_5POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
1709b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY |
1719b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT),
1729b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        // matches the correct AudioFormat.CHANNEL_OUT_7POINT1_SURROUND definition for 7.1
173e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_7POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
1749b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY |
1759b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT |
1769b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT),
177e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_ALL = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
1789b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY | CHANNEL_OUT_BACK_LEFT |
1799b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_BACK_RIGHT | CHANNEL_OUT_FRONT_LEFT_OF_CENTER |
1809b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_RIGHT_OF_CENTER | CHANNEL_OUT_BACK_CENTER |
1819b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT | CHANNEL_OUT_TOP_CENTER |
1829b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_TOP_FRONT_LEFT | CHANNEL_OUT_TOP_FRONT_CENTER |
1839b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_TOP_FRONT_RIGHT | CHANNEL_OUT_TOP_BACK_LEFT |
1849b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_TOP_BACK_CENTER | CHANNEL_OUT_TOP_BACK_RIGHT),
185e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
186e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // input channels
187e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_LEFT = 0x4,
188e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_RIGHT = 0x8,
189e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_FRONT = 0x10,
190e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_BACK = 0x20,
191e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_LEFT_PROCESSED = 0x40,
192e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_RIGHT_PROCESSED = 0x80,
193e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_FRONT_PROCESSED = 0x100,
194e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_BACK_PROCESSED = 0x200,
195e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_PRESSURE = 0x400,
196e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_X_AXIS = 0x800,
197e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_Y_AXIS = 0x1000,
198e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_Z_AXIS = 0x2000,
199e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_VOICE_UPLINK = 0x4000,
200e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_VOICE_DNLINK = 0x8000,
201e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_MONO = CHANNEL_IN_FRONT,
202e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_STEREO = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT),
203e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_ALL = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT | CHANNEL_IN_FRONT | CHANNEL_IN_BACK|
204e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_IN_LEFT_PROCESSED | CHANNEL_IN_RIGHT_PROCESSED | CHANNEL_IN_FRONT_PROCESSED | CHANNEL_IN_BACK_PROCESSED|
205e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_IN_PRESSURE | CHANNEL_IN_X_AXIS | CHANNEL_IN_Y_AXIS | CHANNEL_IN_Z_AXIS |
206e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_IN_VOICE_UPLINK | CHANNEL_IN_VOICE_DNLINK)
207e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
208e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
209e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_mode {
210e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_INVALID = -2,
211e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_CURRENT = -1,
212e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_NORMAL = 0,
213e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_RINGTONE,
214e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_IN_CALL,
215e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_IN_COMMUNICATION,
216e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_MODES  // not a valid entry, denotes end-of-list
217e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
218e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
219e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_in_acoustics {
220e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AGC_ENABLE    = 0x0001,
221e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AGC_DISABLE   = 0,
222e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NS_ENABLE     = 0x0002,
223e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NS_DISABLE    = 0,
224e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        TX_IIR_ENABLE = 0x0004,
225e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        TX_DISABLE    = 0
226e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
227e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
228c8101f5b14e745b348592c5609e55f121a11a6bfJean-Michel Trivi    // DO NOT USE: the "audio_devices" enumeration below is obsolete, use type "audio_devices_t" and
229c8101f5b14e745b348592c5609e55f121a11a6bfJean-Michel Trivi    //   audio device enumeration from system/audio.h instead.
230e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_devices {
231e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // output devices
232e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_EARPIECE = 0x1,
233e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_SPEAKER = 0x2,
234e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_WIRED_HEADSET = 0x4,
235e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_WIRED_HEADPHONE = 0x8,
236e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_SCO = 0x10,
237e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20,
238e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40,
239e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_A2DP = 0x80,
240e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100,
241e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200,
242e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_AUX_DIGITAL = 0x400,
243e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800,
244e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000,
245e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_DEFAULT = 0x8000,
246e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | DEVICE_OUT_SPEAKER | DEVICE_OUT_WIRED_HEADSET |
247e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_WIRED_HEADPHONE | DEVICE_OUT_BLUETOOTH_SCO | DEVICE_OUT_BLUETOOTH_SCO_HEADSET |
248e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_BLUETOOTH_SCO_CARKIT | DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
249e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL |
250e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_ANLG_DOCK_HEADSET | DEVICE_OUT_DGTL_DOCK_HEADSET |
251e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_DEFAULT),
252e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
253e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),
254e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
255e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // input devices
256e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_COMMUNICATION = 0x10000,
257e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_AMBIENT = 0x20000,
258e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_BUILTIN_MIC = 0x40000,
259e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_BLUETOOTH_SCO_HEADSET = 0x80000,
260e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_WIRED_HEADSET = 0x100000,
261e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_AUX_DIGITAL = 0x200000,
262e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_VOICE_CALL = 0x400000,
263e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_BACK_MIC = 0x800000,
264e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_DEFAULT = 0x80000000,
265e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
266e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | DEVICE_IN_AMBIENT | DEVICE_IN_BUILTIN_MIC |
267e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_IN_BLUETOOTH_SCO_HEADSET | DEVICE_IN_WIRED_HEADSET | DEVICE_IN_AUX_DIGITAL |
268e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_IN_VOICE_CALL | DEVICE_IN_BACK_MIC | DEVICE_IN_DEFAULT)
269e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
270e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
271e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // request to open a direct output with getOutput() (by opposition to sharing an output with other AudioTracks)
272e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum output_flags {
273e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        OUTPUT_FLAG_INDIRECT = 0x0,
274e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        OUTPUT_FLAG_DIRECT = 0x1
275e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
276e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
277e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // device categories used for setForceUse()
278e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum forced_config {
279e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_NONE,
280e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_SPEAKER,
281e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_HEADPHONES,
282e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_SCO,
283e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_A2DP,
284e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_WIRED_ACCESSORY,
285e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_CAR_DOCK,
286e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_DESK_DOCK,
287e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_ANALOG_DOCK,
288e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_DIGITAL_DOCK,
2891afd84f62291d20414cbf58c7af01462a8fdca60Eric Laurent        FORCE_NO_BT_A2DP,
290738207def5f691d605ae33d041116829a74513a9Eric Laurent        FORCE_SYSTEM_ENFORCED,
291e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_FORCE_CONFIG,
292e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_DEFAULT = FORCE_NONE
293e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
294e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
295e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // usages used for setForceUse()
296e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum force_use {
297e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_COMMUNICATION,
298e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_MEDIA,
299e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_RECORD,
300e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_DOCK,
301738207def5f691d605ae33d041116829a74513a9Eric Laurent        FOR_SYSTEM,
302e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_FORCE_USE
303e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
304e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
305e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    //
306e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // AudioPolicyService interface
307e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    //
308e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
309e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // device connection states used for setDeviceConnectionState()
310e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum device_connection_state {
311e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_STATE_UNAVAILABLE,
312e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_STATE_AVAILABLE,
313e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_DEVICE_STATES
314e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
315e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
316e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#endif
317e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
318e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static uint32_t popCount(uint32_t u) {
319e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return popcount(u);
320e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
321e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
322e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#if 1
323e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isOutputDevice(audio_devices device) {
324ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent        if ((popcount(device) == 1) && ((device & ~DEVICE_OUT_ALL) == 0))
325ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent             return true;
326ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent         else
327ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent             return false;
328e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
329e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isInputDevice(audio_devices device) {
330ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent        if ((popcount(device) == 1) && ((device & ~DEVICE_IN_ALL) == 0))
331ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent             return true;
332ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent         else
333ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent             return false;
334e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
335e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isA2dpDevice(audio_devices device) {
336e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_a2dp_device((audio_devices_t)device);
337e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
338e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isBluetoothScoDevice(audio_devices device) {
339e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_bluetooth_sco_device((audio_devices_t)device);
340e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
341e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isLowVisibility(stream_type stream) {
342e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_low_visibility((audio_stream_type_t)stream);
343e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
344e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isValidFormat(uint32_t format) {
34553e2cfab45b411db0bf6c4b5d146cd9d8b1b1425Glenn Kasten        return audio_is_valid_format((audio_format_t) format);
346e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
347e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isLinearPCM(uint32_t format) {
34853e2cfab45b411db0bf6c4b5d146cd9d8b1b1425Glenn Kasten        return audio_is_linear_pcm((audio_format_t) format);
349e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
350e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isOutputChannel(uint32_t channel) {
351e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_output_channel(channel);
352e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
353e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isInputChannel(uint32_t channel) {
354e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_input_channel(channel);
355e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
356e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
357e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#endif
358e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin};
359e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
360e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin};  // namespace android
361e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
362e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#endif // ANDROID_AUDIOSYSTEM_LEGACY_H_
363