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