1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/system/gonk/android_audio/AudioSystem.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,964 @@ 1.4 +/* 1.5 + * Copyright (C) 2008 The Android Open Source Project 1.6 + * 1.7 + * Licensed under the Apache License, Version 2.0 (the "License"); 1.8 + * you may not use this file except in compliance with the License. 1.9 + * You may obtain a copy of the License at 1.10 + * 1.11 + * http://www.apache.org/licenses/LICENSE-2.0 1.12 + * 1.13 + * Unless required by applicable law or agreed to in writing, software 1.14 + * distributed under the License is distributed on an "AS IS" BASIS, 1.15 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1.16 + * See the License for the specific language governing permissions and 1.17 + * limitations under the License. 1.18 + */ 1.19 + 1.20 +#ifndef ANDROID_AUDIOSYSTEM_H_ 1.21 +#define ANDROID_AUDIOSYSTEM_H_ 1.22 + 1.23 +#include <utils/RefBase.h> 1.24 +#include <utils/threads.h> 1.25 +#include "IAudioFlinger.h" 1.26 + 1.27 +#ifndef VANILLA_ANDROID 1.28 +/* request to open a direct output with get_output() (by opposition to 1.29 + * sharing an output with other AudioTracks) 1.30 + */ 1.31 +typedef enum { 1.32 + AUDIO_POLICY_OUTPUT_FLAG_INDIRECT = 0x0, 1.33 + AUDIO_POLICY_OUTPUT_FLAG_DIRECT = 0x1 1.34 +} audio_policy_output_flags_t; 1.35 + 1.36 +/* device categories used for audio_policy->set_force_use() */ 1.37 +typedef enum { 1.38 + AUDIO_POLICY_FORCE_NONE, 1.39 + AUDIO_POLICY_FORCE_SPEAKER, 1.40 + AUDIO_POLICY_FORCE_HEADPHONES, 1.41 + AUDIO_POLICY_FORCE_BT_SCO, 1.42 + AUDIO_POLICY_FORCE_BT_A2DP, 1.43 + AUDIO_POLICY_FORCE_WIRED_ACCESSORY, 1.44 + AUDIO_POLICY_FORCE_BT_CAR_DOCK, 1.45 + AUDIO_POLICY_FORCE_BT_DESK_DOCK, 1.46 + 1.47 +#ifdef VANILLA_ANDROID 1.48 + AUDIO_POLICY_FORCE_ANALOG_DOCK, 1.49 + AUDIO_POLICY_FORCE_DIGITAL_DOCK, 1.50 +#endif 1.51 + 1.52 + AUDIO_POLICY_FORCE_CFG_CNT, 1.53 + AUDIO_POLICY_FORCE_CFG_MAX = AUDIO_POLICY_FORCE_CFG_CNT - 1, 1.54 + 1.55 + AUDIO_POLICY_FORCE_DEFAULT = AUDIO_POLICY_FORCE_NONE, 1.56 +} audio_policy_forced_cfg_t; 1.57 + 1.58 +/* usages used for audio_policy->set_force_use() */ 1.59 +typedef enum { 1.60 + AUDIO_POLICY_FORCE_FOR_COMMUNICATION, 1.61 + AUDIO_POLICY_FORCE_FOR_MEDIA, 1.62 + AUDIO_POLICY_FORCE_FOR_RECORD, 1.63 + AUDIO_POLICY_FORCE_FOR_DOCK, 1.64 + 1.65 + AUDIO_POLICY_FORCE_USE_CNT, 1.66 + AUDIO_POLICY_FORCE_USE_MAX = AUDIO_POLICY_FORCE_USE_CNT - 1, 1.67 +} audio_policy_force_use_t; 1.68 + 1.69 +typedef enum { 1.70 + AUDIO_STREAM_DEFAULT = -1, 1.71 + AUDIO_STREAM_VOICE_CALL = 0, 1.72 + AUDIO_STREAM_SYSTEM = 1, 1.73 + AUDIO_STREAM_RING = 2, 1.74 + AUDIO_STREAM_MUSIC = 3, 1.75 + AUDIO_STREAM_ALARM = 4, 1.76 + AUDIO_STREAM_NOTIFICATION = 5, 1.77 + AUDIO_STREAM_BLUETOOTH_SCO = 6, 1.78 + AUDIO_STREAM_ENFORCED_AUDIBLE = 7, /* Sounds that cannot be muted by user and must be routed to speaker */ 1.79 + AUDIO_STREAM_DTMF = 8, 1.80 + AUDIO_STREAM_TTS = 9, 1.81 + AUDIO_STREAM_FM = 10, 1.82 + 1.83 + AUDIO_STREAM_CNT, 1.84 + AUDIO_STREAM_MAX = AUDIO_STREAM_CNT - 1, 1.85 +} audio_stream_type_t; 1.86 + 1.87 +/* PCM sub formats */ 1.88 +typedef enum { 1.89 + AUDIO_FORMAT_PCM_SUB_16_BIT = 0x1, /* DO NOT CHANGE - PCM signed 16 bits */ 1.90 + AUDIO_FORMAT_PCM_SUB_8_BIT = 0x2, /* DO NOT CHANGE - PCM unsigned 8 bits */ 1.91 + AUDIO_FORMAT_PCM_SUB_32_BIT = 0x3, /* PCM signed .31 fixed point */ 1.92 + AUDIO_FORMAT_PCM_SUB_8_24_BIT = 0x4, /* PCM signed 7.24 fixed point */ 1.93 +} audio_format_pcm_sub_fmt_t; 1.94 + 1.95 +/* Audio format consists in a main format field (upper 8 bits) and a sub format 1.96 + * field (lower 24 bits). 1.97 + * 1.98 + * The main format indicates the main codec type. The sub format field 1.99 + * indicates options and parameters for each format. The sub format is mainly 1.100 + * used for record to indicate for instance the requested bitrate or profile. 1.101 + * It can also be used for certain formats to give informations not present in 1.102 + * the encoded audio stream (e.g. octet alignement for AMR). 1.103 + */ 1.104 +typedef enum { 1.105 + AUDIO_FORMAT_INVALID = 0xFFFFFFFFUL, 1.106 + AUDIO_FORMAT_DEFAULT = 0, 1.107 + AUDIO_FORMAT_PCM = 0x00000000UL, /* DO NOT CHANGE */ 1.108 + AUDIO_FORMAT_MP3 = 0x01000000UL, 1.109 + AUDIO_FORMAT_AMR_NB = 0x02000000UL, 1.110 + AUDIO_FORMAT_AMR_WB = 0x03000000UL, 1.111 + AUDIO_FORMAT_AAC = 0x04000000UL, 1.112 + AUDIO_FORMAT_HE_AAC_V1 = 0x05000000UL, 1.113 + AUDIO_FORMAT_HE_AAC_V2 = 0x06000000UL, 1.114 + AUDIO_FORMAT_VORBIS = 0x07000000UL, 1.115 + AUDIO_FORMAT_MAIN_MASK = 0xFF000000UL, 1.116 + AUDIO_FORMAT_SUB_MASK = 0x00FFFFFFUL, 1.117 + 1.118 + /* Aliases */ 1.119 + AUDIO_FORMAT_PCM_16_BIT = (AUDIO_FORMAT_PCM | 1.120 + AUDIO_FORMAT_PCM_SUB_16_BIT), 1.121 + AUDIO_FORMAT_PCM_8_BIT = (AUDIO_FORMAT_PCM | 1.122 + AUDIO_FORMAT_PCM_SUB_8_BIT), 1.123 + AUDIO_FORMAT_PCM_32_BIT = (AUDIO_FORMAT_PCM | 1.124 + AUDIO_FORMAT_PCM_SUB_32_BIT), 1.125 + AUDIO_FORMAT_PCM_8_24_BIT = (AUDIO_FORMAT_PCM | 1.126 + AUDIO_FORMAT_PCM_SUB_8_24_BIT), 1.127 +} audio_format_t; 1.128 + 1.129 +typedef enum { 1.130 + /* output channels */ 1.131 + AUDIO_CHANNEL_OUT_FRONT_LEFT = 0x1, 1.132 + AUDIO_CHANNEL_OUT_FRONT_RIGHT = 0x2, 1.133 + AUDIO_CHANNEL_OUT_FRONT_CENTER = 0x4, 1.134 + AUDIO_CHANNEL_OUT_LOW_FREQUENCY = 0x8, 1.135 + AUDIO_CHANNEL_OUT_BACK_LEFT = 0x10, 1.136 + AUDIO_CHANNEL_OUT_BACK_RIGHT = 0x20, 1.137 + AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 0x40, 1.138 + AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x80, 1.139 + AUDIO_CHANNEL_OUT_BACK_CENTER = 0x100, 1.140 + AUDIO_CHANNEL_OUT_SIDE_LEFT = 0x200, 1.141 + AUDIO_CHANNEL_OUT_SIDE_RIGHT = 0x400, 1.142 + AUDIO_CHANNEL_OUT_TOP_CENTER = 0x800, 1.143 + AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT = 0x1000, 1.144 + AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER = 0x2000, 1.145 + AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT = 0x4000, 1.146 + AUDIO_CHANNEL_OUT_TOP_BACK_LEFT = 0x8000, 1.147 + AUDIO_CHANNEL_OUT_TOP_BACK_CENTER = 0x10000, 1.148 + AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT = 0x20000, 1.149 + 1.150 + AUDIO_CHANNEL_OUT_MONO = AUDIO_CHANNEL_OUT_FRONT_LEFT, 1.151 + AUDIO_CHANNEL_OUT_STEREO = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 1.152 + AUDIO_CHANNEL_OUT_FRONT_RIGHT), 1.153 + AUDIO_CHANNEL_OUT_QUAD = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 1.154 + AUDIO_CHANNEL_OUT_FRONT_RIGHT | 1.155 + AUDIO_CHANNEL_OUT_BACK_LEFT | 1.156 + AUDIO_CHANNEL_OUT_BACK_RIGHT), 1.157 + AUDIO_CHANNEL_OUT_SURROUND = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 1.158 + AUDIO_CHANNEL_OUT_FRONT_RIGHT | 1.159 + AUDIO_CHANNEL_OUT_FRONT_CENTER | 1.160 + AUDIO_CHANNEL_OUT_BACK_CENTER), 1.161 + AUDIO_CHANNEL_OUT_5POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 1.162 + AUDIO_CHANNEL_OUT_FRONT_RIGHT | 1.163 + AUDIO_CHANNEL_OUT_FRONT_CENTER | 1.164 + AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 1.165 + AUDIO_CHANNEL_OUT_BACK_LEFT | 1.166 + AUDIO_CHANNEL_OUT_BACK_RIGHT), 1.167 + // matches the correct AudioFormat.CHANNEL_OUT_7POINT1_SURROUND definition for 7.1 1.168 + AUDIO_CHANNEL_OUT_7POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 1.169 + AUDIO_CHANNEL_OUT_FRONT_RIGHT | 1.170 + AUDIO_CHANNEL_OUT_FRONT_CENTER | 1.171 + AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 1.172 + AUDIO_CHANNEL_OUT_BACK_LEFT | 1.173 + AUDIO_CHANNEL_OUT_BACK_RIGHT | 1.174 + AUDIO_CHANNEL_OUT_SIDE_LEFT | 1.175 + AUDIO_CHANNEL_OUT_SIDE_RIGHT), 1.176 + AUDIO_CHANNEL_OUT_ALL = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 1.177 + AUDIO_CHANNEL_OUT_FRONT_RIGHT | 1.178 + AUDIO_CHANNEL_OUT_FRONT_CENTER | 1.179 + AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 1.180 + AUDIO_CHANNEL_OUT_BACK_LEFT | 1.181 + AUDIO_CHANNEL_OUT_BACK_RIGHT | 1.182 + AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER | 1.183 + AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER | 1.184 + AUDIO_CHANNEL_OUT_BACK_CENTER| 1.185 + AUDIO_CHANNEL_OUT_SIDE_LEFT| 1.186 + AUDIO_CHANNEL_OUT_SIDE_RIGHT| 1.187 + AUDIO_CHANNEL_OUT_TOP_CENTER| 1.188 + AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT| 1.189 + AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER| 1.190 + AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT| 1.191 + AUDIO_CHANNEL_OUT_TOP_BACK_LEFT| 1.192 + AUDIO_CHANNEL_OUT_TOP_BACK_CENTER| 1.193 + AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT), 1.194 + 1.195 + /* input channels */ 1.196 + AUDIO_CHANNEL_IN_LEFT = 0x4, 1.197 + AUDIO_CHANNEL_IN_RIGHT = 0x8, 1.198 + AUDIO_CHANNEL_IN_FRONT = 0x10, 1.199 + AUDIO_CHANNEL_IN_BACK = 0x20, 1.200 + AUDIO_CHANNEL_IN_LEFT_PROCESSED = 0x40, 1.201 + AUDIO_CHANNEL_IN_RIGHT_PROCESSED = 0x80, 1.202 + AUDIO_CHANNEL_IN_FRONT_PROCESSED = 0x100, 1.203 + AUDIO_CHANNEL_IN_BACK_PROCESSED = 0x200, 1.204 + AUDIO_CHANNEL_IN_PRESSURE = 0x400, 1.205 + AUDIO_CHANNEL_IN_X_AXIS = 0x800, 1.206 + AUDIO_CHANNEL_IN_Y_AXIS = 0x1000, 1.207 + AUDIO_CHANNEL_IN_Z_AXIS = 0x2000, 1.208 + AUDIO_CHANNEL_IN_VOICE_UPLINK = 0x4000, 1.209 + AUDIO_CHANNEL_IN_VOICE_DNLINK = 0x8000, 1.210 + 1.211 + AUDIO_CHANNEL_IN_MONO = AUDIO_CHANNEL_IN_FRONT, 1.212 + AUDIO_CHANNEL_IN_STEREO = (AUDIO_CHANNEL_IN_LEFT | AUDIO_CHANNEL_IN_RIGHT), 1.213 + AUDIO_CHANNEL_IN_ALL = (AUDIO_CHANNEL_IN_LEFT | 1.214 + AUDIO_CHANNEL_IN_RIGHT | 1.215 + AUDIO_CHANNEL_IN_FRONT | 1.216 + AUDIO_CHANNEL_IN_BACK| 1.217 + AUDIO_CHANNEL_IN_LEFT_PROCESSED | 1.218 + AUDIO_CHANNEL_IN_RIGHT_PROCESSED | 1.219 + AUDIO_CHANNEL_IN_FRONT_PROCESSED | 1.220 + AUDIO_CHANNEL_IN_BACK_PROCESSED| 1.221 + AUDIO_CHANNEL_IN_PRESSURE | 1.222 + AUDIO_CHANNEL_IN_X_AXIS | 1.223 + AUDIO_CHANNEL_IN_Y_AXIS | 1.224 + AUDIO_CHANNEL_IN_Z_AXIS | 1.225 + AUDIO_CHANNEL_IN_VOICE_UPLINK | 1.226 + AUDIO_CHANNEL_IN_VOICE_DNLINK), 1.227 +} audio_channels_t; 1.228 + 1.229 +#if ANDROID_VERSION >= 17 1.230 +typedef enum { 1.231 + AUDIO_MODE_INVALID = -2, 1.232 + AUDIO_MODE_CURRENT = -1, 1.233 + AUDIO_MODE_NORMAL = 0, 1.234 + AUDIO_MODE_RINGTONE = 1, 1.235 + AUDIO_MODE_IN_CALL = 2, 1.236 + AUDIO_MODE_IN_COMMUNICATION = 3, 1.237 + 1.238 + AUDIO_MODE_CNT, 1.239 + AUDIO_MODE_MAX = AUDIO_MODE_CNT - 1, 1.240 +} audio_mode_t; 1.241 +#endif 1.242 +#endif 1.243 + 1.244 +#if ANDROID_VERSION < 17 1.245 +typedef enum { 1.246 + /* output devices */ 1.247 + AUDIO_DEVICE_OUT_EARPIECE = 0x1, 1.248 + AUDIO_DEVICE_OUT_SPEAKER = 0x2, 1.249 + AUDIO_DEVICE_OUT_WIRED_HEADSET = 0x4, 1.250 + AUDIO_DEVICE_OUT_WIRED_HEADPHONE = 0x8, 1.251 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO = 0x10, 1.252 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20, 1.253 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40, 1.254 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP = 0x80, 1.255 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100, 1.256 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200, 1.257 + AUDIO_DEVICE_OUT_AUX_DIGITAL = 0x400, 1.258 + AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800, 1.259 + AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000, 1.260 + AUDIO_DEVICE_OUT_FM = 0x2000, 1.261 + AUDIO_DEVICE_OUT_ANC_HEADSET = 0x4000, 1.262 + AUDIO_DEVICE_OUT_ANC_HEADPHONE = 0x8000, 1.263 + AUDIO_DEVICE_OUT_FM_TX = 0x10000, 1.264 + AUDIO_DEVICE_OUT_DIRECTOUTPUT = 0x20000, 1.265 + AUDIO_DEVICE_OUT_PROXY = 0x40000, 1.266 + AUDIO_DEVICE_OUT_DEFAULT = 0x80000, 1.267 + AUDIO_DEVICE_OUT_ALL = (AUDIO_DEVICE_OUT_EARPIECE | 1.268 + AUDIO_DEVICE_OUT_SPEAKER | 1.269 + AUDIO_DEVICE_OUT_WIRED_HEADSET | 1.270 + AUDIO_DEVICE_OUT_WIRED_HEADPHONE | 1.271 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 1.272 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 1.273 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT | 1.274 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 1.275 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 1.276 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | 1.277 + AUDIO_DEVICE_OUT_AUX_DIGITAL | 1.278 + AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET | 1.279 + AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET | 1.280 + AUDIO_DEVICE_OUT_FM | 1.281 + AUDIO_DEVICE_OUT_ANC_HEADSET | 1.282 + AUDIO_DEVICE_OUT_ANC_HEADPHONE | 1.283 + AUDIO_DEVICE_OUT_FM_TX | 1.284 + AUDIO_DEVICE_OUT_DIRECTOUTPUT | 1.285 + AUDIO_DEVICE_OUT_PROXY | 1.286 + AUDIO_DEVICE_OUT_DEFAULT), 1.287 + AUDIO_DEVICE_OUT_ALL_A2DP = (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 1.288 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 1.289 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER), 1.290 + AUDIO_DEVICE_OUT_ALL_SCO = (AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 1.291 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 1.292 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT), 1.293 + /* input devices */ 1.294 + AUDIO_DEVICE_IN_COMMUNICATION = 0x100000, 1.295 + AUDIO_DEVICE_IN_AMBIENT = 0x200000, 1.296 + AUDIO_DEVICE_IN_BUILTIN_MIC = 0x400000, 1.297 + AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET = 0x800000, 1.298 + AUDIO_DEVICE_IN_WIRED_HEADSET = 0x1000000, 1.299 + AUDIO_DEVICE_IN_AUX_DIGITAL = 0x2000000, 1.300 + AUDIO_DEVICE_IN_VOICE_CALL = 0x4000000, 1.301 + AUDIO_DEVICE_IN_BACK_MIC = 0x8000000, 1.302 + AUDIO_DEVICE_IN_ANC_HEADSET = 0x10000000, 1.303 + AUDIO_DEVICE_IN_FM_RX = 0x20000000, 1.304 + AUDIO_DEVICE_IN_FM_RX_A2DP = 0x40000000, 1.305 + AUDIO_DEVICE_IN_DEFAULT = 0x80000000, 1.306 + 1.307 + AUDIO_DEVICE_IN_ALL = (AUDIO_DEVICE_IN_COMMUNICATION | 1.308 + AUDIO_DEVICE_IN_AMBIENT | 1.309 + AUDIO_DEVICE_IN_BUILTIN_MIC | 1.310 + AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET | 1.311 + AUDIO_DEVICE_IN_WIRED_HEADSET | 1.312 + AUDIO_DEVICE_IN_AUX_DIGITAL | 1.313 + AUDIO_DEVICE_IN_VOICE_CALL | 1.314 + AUDIO_DEVICE_IN_BACK_MIC | 1.315 + AUDIO_DEVICE_IN_ANC_HEADSET | 1.316 + AUDIO_DEVICE_IN_FM_RX | 1.317 + AUDIO_DEVICE_IN_FM_RX_A2DP | 1.318 + AUDIO_DEVICE_IN_DEFAULT), 1.319 + AUDIO_DEVICE_IN_ALL_SCO = AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET, 1.320 +} audio_devices_t; 1.321 +#else 1.322 +enum { 1.323 + AUDIO_DEVICE_NONE = 0x0, 1.324 + /* reserved bits */ 1.325 + AUDIO_DEVICE_BIT_IN = 0x80000000, 1.326 + AUDIO_DEVICE_BIT_DEFAULT = 0x40000000, 1.327 + /* output devices */ 1.328 + AUDIO_DEVICE_OUT_EARPIECE = 0x1, 1.329 + AUDIO_DEVICE_OUT_SPEAKER = 0x2, 1.330 + AUDIO_DEVICE_OUT_WIRED_HEADSET = 0x4, 1.331 + AUDIO_DEVICE_OUT_WIRED_HEADPHONE = 0x8, 1.332 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO = 0x10, 1.333 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20, 1.334 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40, 1.335 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP = 0x80, 1.336 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100, 1.337 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200, 1.338 + AUDIO_DEVICE_OUT_AUX_DIGITAL = 0x400, 1.339 + AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800, 1.340 + AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000, 1.341 + AUDIO_DEVICE_OUT_USB_ACCESSORY = 0x2000, 1.342 + AUDIO_DEVICE_OUT_USB_DEVICE = 0x4000, 1.343 + AUDIO_DEVICE_OUT_REMOTE_SUBMIX = 0x8000, 1.344 + AUDIO_DEVICE_OUT_ANC_HEADSET = 0x10000, 1.345 + AUDIO_DEVICE_OUT_ANC_HEADPHONE = 0x20000, 1.346 + AUDIO_DEVICE_OUT_PROXY = 0x40000, 1.347 + AUDIO_DEVICE_OUT_FM = 0x80000, 1.348 + AUDIO_DEVICE_OUT_FM_TX = 0x100000, 1.349 + AUDIO_DEVICE_OUT_DEFAULT = AUDIO_DEVICE_BIT_DEFAULT, 1.350 + AUDIO_DEVICE_OUT_ALL = (AUDIO_DEVICE_OUT_EARPIECE | 1.351 + AUDIO_DEVICE_OUT_SPEAKER | 1.352 + AUDIO_DEVICE_OUT_WIRED_HEADSET | 1.353 + AUDIO_DEVICE_OUT_WIRED_HEADPHONE | 1.354 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 1.355 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 1.356 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT | 1.357 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 1.358 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 1.359 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | 1.360 + AUDIO_DEVICE_OUT_AUX_DIGITAL | 1.361 + AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET | 1.362 + AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET | 1.363 + AUDIO_DEVICE_OUT_USB_ACCESSORY | 1.364 + AUDIO_DEVICE_OUT_USB_DEVICE | 1.365 + AUDIO_DEVICE_OUT_REMOTE_SUBMIX | 1.366 + AUDIO_DEVICE_OUT_ANC_HEADSET | 1.367 + AUDIO_DEVICE_OUT_ANC_HEADPHONE | 1.368 + AUDIO_DEVICE_OUT_PROXY | 1.369 + AUDIO_DEVICE_OUT_FM | 1.370 + AUDIO_DEVICE_OUT_FM_TX | 1.371 + AUDIO_DEVICE_OUT_DEFAULT), 1.372 + AUDIO_DEVICE_OUT_ALL_A2DP = (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 1.373 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 1.374 + AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER), 1.375 + AUDIO_DEVICE_OUT_ALL_SCO = (AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 1.376 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 1.377 + AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT), 1.378 + AUDIO_DEVICE_OUT_ALL_USB = (AUDIO_DEVICE_OUT_USB_ACCESSORY | 1.379 + AUDIO_DEVICE_OUT_USB_DEVICE), 1.380 + 1.381 + /* input devices */ 1.382 + AUDIO_DEVICE_IN_COMMUNICATION = AUDIO_DEVICE_BIT_IN | 0x1, 1.383 + AUDIO_DEVICE_IN_AMBIENT = AUDIO_DEVICE_BIT_IN | 0x2, 1.384 + AUDIO_DEVICE_IN_BUILTIN_MIC = AUDIO_DEVICE_BIT_IN | 0x4, 1.385 + AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET = AUDIO_DEVICE_BIT_IN | 0x8, 1.386 + AUDIO_DEVICE_IN_WIRED_HEADSET = AUDIO_DEVICE_BIT_IN | 0x10, 1.387 + AUDIO_DEVICE_IN_AUX_DIGITAL = AUDIO_DEVICE_BIT_IN | 0x20, 1.388 + AUDIO_DEVICE_IN_VOICE_CALL = AUDIO_DEVICE_BIT_IN | 0x40, 1.389 + AUDIO_DEVICE_IN_BACK_MIC = AUDIO_DEVICE_BIT_IN | 0x80, 1.390 + AUDIO_DEVICE_IN_REMOTE_SUBMIX = AUDIO_DEVICE_BIT_IN | 0x100, 1.391 + AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x200, 1.392 + AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x400, 1.393 + AUDIO_DEVICE_IN_USB_ACCESSORY = AUDIO_DEVICE_BIT_IN | 0x800, 1.394 + AUDIO_DEVICE_IN_USB_DEVICE = AUDIO_DEVICE_BIT_IN | 0x1000, 1.395 + AUDIO_DEVICE_IN_ANC_HEADSET = AUDIO_DEVICE_BIT_IN | 0x2000, 1.396 + AUDIO_DEVICE_IN_PROXY = AUDIO_DEVICE_BIT_IN | 0x4000, 1.397 + AUDIO_DEVICE_IN_FM_RX = AUDIO_DEVICE_BIT_IN | 0x8000, 1.398 + AUDIO_DEVICE_IN_FM_RX_A2DP = AUDIO_DEVICE_BIT_IN | 0x10000, 1.399 + AUDIO_DEVICE_IN_DEFAULT = AUDIO_DEVICE_BIT_IN | AUDIO_DEVICE_BIT_DEFAULT, 1.400 + 1.401 + AUDIO_DEVICE_IN_ALL = (AUDIO_DEVICE_IN_COMMUNICATION | 1.402 + AUDIO_DEVICE_IN_AMBIENT | 1.403 + AUDIO_DEVICE_IN_BUILTIN_MIC | 1.404 + AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET | 1.405 + AUDIO_DEVICE_IN_WIRED_HEADSET | 1.406 + AUDIO_DEVICE_IN_AUX_DIGITAL | 1.407 + AUDIO_DEVICE_IN_VOICE_CALL | 1.408 + AUDIO_DEVICE_IN_BACK_MIC | 1.409 + AUDIO_DEVICE_IN_REMOTE_SUBMIX | 1.410 + AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET | 1.411 + AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET | 1.412 + AUDIO_DEVICE_IN_USB_ACCESSORY | 1.413 + AUDIO_DEVICE_IN_USB_DEVICE | 1.414 + AUDIO_DEVICE_IN_ANC_HEADSET | 1.415 + AUDIO_DEVICE_IN_FM_RX | 1.416 + AUDIO_DEVICE_IN_FM_RX_A2DP | 1.417 + AUDIO_DEVICE_IN_PROXY | 1.418 + AUDIO_DEVICE_IN_DEFAULT), 1.419 + AUDIO_DEVICE_IN_ALL_SCO = AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET, 1.420 +}; 1.421 + 1.422 +typedef uint32_t audio_devices_t; 1.423 +#endif 1.424 + 1.425 +/* device connection states used for audio_policy->set_device_connection_state() 1.426 + * */ 1.427 +typedef enum { 1.428 + AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE, 1.429 + AUDIO_POLICY_DEVICE_STATE_AVAILABLE, 1.430 + 1.431 + AUDIO_POLICY_DEVICE_STATE_CNT, 1.432 + AUDIO_POLICY_DEVICE_STATE_MAX = AUDIO_POLICY_DEVICE_STATE_CNT - 1, 1.433 +} audio_policy_dev_state_t; 1.434 + 1.435 +namespace android { 1.436 + 1.437 +typedef void (*audio_error_callback)(status_t err); 1.438 +typedef int audio_io_handle_t; 1.439 + 1.440 +class IAudioPolicyService; 1.441 +class String8; 1.442 + 1.443 +class AudioSystem 1.444 +{ 1.445 +public: 1.446 + 1.447 + enum stream_type { 1.448 + DEFAULT =-1, 1.449 + VOICE_CALL = 0, 1.450 + SYSTEM = 1, 1.451 + RING = 2, 1.452 + MUSIC = 3, 1.453 + ALARM = 4, 1.454 + NOTIFICATION = 5, 1.455 + BLUETOOTH_SCO = 6, 1.456 + ENFORCED_AUDIBLE = 7, // Sounds that cannot be muted by user and must be routed to speaker 1.457 + DTMF = 8, 1.458 + TTS = 9, 1.459 + FM = 10, 1.460 + NUM_STREAM_TYPES 1.461 + }; 1.462 + 1.463 + // Audio sub formats (see AudioSystem::audio_format). 1.464 + enum pcm_sub_format { 1.465 + PCM_SUB_16_BIT = 0x1, // must be 1 for backward compatibility 1.466 + PCM_SUB_8_BIT = 0x2, // must be 2 for backward compatibility 1.467 + }; 1.468 + 1.469 + // MP3 sub format field definition : can use 11 LSBs in the same way as MP3 frame header to specify 1.470 + // bit rate, stereo mode, version... 1.471 + enum mp3_sub_format { 1.472 + //TODO 1.473 + }; 1.474 + 1.475 + // AMR NB/WB sub format field definition: specify frame block interleaving, bandwidth efficient or octet aligned, 1.476 + // encoding mode for recording... 1.477 + enum amr_sub_format { 1.478 + //TODO 1.479 + }; 1.480 + 1.481 + // AAC sub format field definition: specify profile or bitrate for recording... 1.482 + enum aac_sub_format { 1.483 + //TODO 1.484 + }; 1.485 + 1.486 + // VORBIS sub format field definition: specify quality for recording... 1.487 + enum vorbis_sub_format { 1.488 + //TODO 1.489 + }; 1.490 + 1.491 + // Audio format consists in a main format field (upper 8 bits) and a sub format field (lower 24 bits). 1.492 + // The main format indicates the main codec type. The sub format field indicates options and parameters 1.493 + // for each format. The sub format is mainly used for record to indicate for instance the requested bitrate 1.494 + // or profile. It can also be used for certain formats to give informations not present in the encoded 1.495 + // audio stream (e.g. octet alignement for AMR). 1.496 + enum audio_format { 1.497 + INVALID_FORMAT = -1, 1.498 + FORMAT_DEFAULT = 0, 1.499 + PCM = 0x00000000, // must be 0 for backward compatibility 1.500 + MP3 = 0x01000000, 1.501 + AMR_NB = 0x02000000, 1.502 + AMR_WB = 0x03000000, 1.503 + AAC = 0x04000000, 1.504 + HE_AAC_V1 = 0x05000000, 1.505 + HE_AAC_V2 = 0x06000000, 1.506 + VORBIS = 0x07000000, 1.507 + EVRC = 0x08000000, 1.508 + QCELP = 0x09000000, 1.509 + VOIP_PCM_INPUT = 0x0A000000, 1.510 + MAIN_FORMAT_MASK = 0xFF000000, 1.511 + SUB_FORMAT_MASK = 0x00FFFFFF, 1.512 + // Aliases 1.513 + PCM_16_BIT = (PCM|PCM_SUB_16_BIT), 1.514 + PCM_8_BIT = (PCM|PCM_SUB_8_BIT) 1.515 + }; 1.516 + 1.517 + 1.518 + // Channel mask definitions must be kept in sync with JAVA values in /media/java/android/media/AudioFormat.java 1.519 + enum audio_channels { 1.520 + // output channels 1.521 + CHANNEL_OUT_FRONT_LEFT = 0x4, 1.522 + CHANNEL_OUT_FRONT_RIGHT = 0x8, 1.523 + CHANNEL_OUT_FRONT_CENTER = 0x10, 1.524 + CHANNEL_OUT_LOW_FREQUENCY = 0x20, 1.525 + CHANNEL_OUT_BACK_LEFT = 0x40, 1.526 + CHANNEL_OUT_BACK_RIGHT = 0x80, 1.527 + CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 0x100, 1.528 + CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x200, 1.529 + CHANNEL_OUT_BACK_CENTER = 0x400, 1.530 + CHANNEL_OUT_MONO = CHANNEL_OUT_FRONT_LEFT, 1.531 + CHANNEL_OUT_STEREO = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT), 1.532 + CHANNEL_OUT_QUAD = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT | 1.533 + CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT), 1.534 + CHANNEL_OUT_SURROUND = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT | 1.535 + CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_CENTER), 1.536 + CHANNEL_OUT_5POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT | 1.537 + CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY | CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT), 1.538 + CHANNEL_OUT_7POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT | 1.539 + CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY | CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT | 1.540 + CHANNEL_OUT_FRONT_LEFT_OF_CENTER | CHANNEL_OUT_FRONT_RIGHT_OF_CENTER), 1.541 + CHANNEL_OUT_ALL = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT | 1.542 + CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY | CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT | 1.543 + CHANNEL_OUT_FRONT_LEFT_OF_CENTER | CHANNEL_OUT_FRONT_RIGHT_OF_CENTER | CHANNEL_OUT_BACK_CENTER), 1.544 + 1.545 + // input channels 1.546 + CHANNEL_IN_LEFT = 0x4, 1.547 + CHANNEL_IN_RIGHT = 0x8, 1.548 + CHANNEL_IN_FRONT = 0x10, 1.549 + CHANNEL_IN_BACK = 0x20, 1.550 + CHANNEL_IN_LEFT_PROCESSED = 0x40, 1.551 + CHANNEL_IN_RIGHT_PROCESSED = 0x80, 1.552 + CHANNEL_IN_FRONT_PROCESSED = 0x100, 1.553 + CHANNEL_IN_BACK_PROCESSED = 0x200, 1.554 + CHANNEL_IN_PRESSURE = 0x400, 1.555 + CHANNEL_IN_X_AXIS = 0x800, 1.556 + CHANNEL_IN_Y_AXIS = 0x1000, 1.557 + CHANNEL_IN_Z_AXIS = 0x2000, 1.558 + CHANNEL_IN_VOICE_UPLINK = 0x4000, 1.559 + CHANNEL_IN_VOICE_DNLINK = 0x8000, 1.560 + CHANNEL_IN_MONO = CHANNEL_IN_FRONT, 1.561 + CHANNEL_IN_STEREO = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT), 1.562 + CHANNEL_IN_ALL = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT | CHANNEL_IN_FRONT | CHANNEL_IN_BACK| 1.563 + CHANNEL_IN_LEFT_PROCESSED | CHANNEL_IN_RIGHT_PROCESSED | CHANNEL_IN_FRONT_PROCESSED | CHANNEL_IN_BACK_PROCESSED| 1.564 + CHANNEL_IN_PRESSURE | CHANNEL_IN_X_AXIS | CHANNEL_IN_Y_AXIS | CHANNEL_IN_Z_AXIS | 1.565 + CHANNEL_IN_VOICE_UPLINK | CHANNEL_IN_VOICE_DNLINK) 1.566 + }; 1.567 + 1.568 + enum audio_mode { 1.569 + MODE_INVALID = -2, 1.570 + MODE_CURRENT = -1, 1.571 + MODE_NORMAL = 0, 1.572 + MODE_RINGTONE, 1.573 + MODE_IN_CALL, 1.574 + MODE_IN_COMMUNICATION, 1.575 + NUM_MODES // not a valid entry, denotes end-of-list 1.576 + }; 1.577 + 1.578 + enum audio_in_acoustics { 1.579 + AGC_ENABLE = 0x0001, 1.580 + AGC_DISABLE = 0, 1.581 + NS_ENABLE = 0x0002, 1.582 + NS_DISABLE = 0, 1.583 + TX_IIR_ENABLE = 0x0004, 1.584 + TX_DISABLE = 0 1.585 + }; 1.586 + 1.587 + // special audio session values 1.588 + enum audio_sessions { 1.589 + SESSION_OUTPUT_STAGE = -1, // session for effects attached to a particular output stream 1.590 + // (value must be less than 0) 1.591 + SESSION_OUTPUT_MIX = 0, // session for effects applied to output mix. These effects can 1.592 + // be moved by audio policy manager to another output stream 1.593 + // (value must be 0) 1.594 + }; 1.595 + 1.596 + /* These are static methods to control the system-wide AudioFlinger 1.597 + * only privileged processes can have access to them 1.598 + */ 1.599 + 1.600 + // mute/unmute microphone 1.601 + static status_t muteMicrophone(bool state); 1.602 + static status_t isMicrophoneMuted(bool *state); 1.603 + 1.604 + // set/get master volume 1.605 + static status_t setMasterVolume(float value); 1.606 + static status_t getMasterVolume(float* volume); 1.607 + // mute/unmute audio outputs 1.608 + static status_t setMasterMute(bool mute); 1.609 + static status_t getMasterMute(bool* mute); 1.610 + 1.611 + // set/get stream volume on specified output 1.612 + static status_t setStreamVolume(int stream, float value, int output); 1.613 + static status_t getStreamVolume(int stream, float* volume, int output); 1.614 + 1.615 + // mute/unmute stream 1.616 + static status_t setStreamMute(int stream, bool mute); 1.617 + static status_t getStreamMute(int stream, bool* mute); 1.618 + 1.619 + // set audio mode in audio hardware (see AudioSystem::audio_mode) 1.620 + static status_t setMode(int mode); 1.621 + 1.622 + // returns true in *state if tracks are active on the specified stream 1.623 + static status_t isStreamActive(int stream, bool *state); 1.624 + 1.625 + // set/get audio hardware parameters. The function accepts a list of parameters 1.626 + // key value pairs in the form: key1=value1;key2=value2;... 1.627 + // Some keys are reserved for standard parameters (See AudioParameter class). 1.628 + static status_t setParameters(audio_io_handle_t ioHandle, const String8& keyValuePairs); 1.629 + static String8 getParameters(audio_io_handle_t ioHandle, const String8& keys); 1.630 + 1.631 + static void setErrorCallback(audio_error_callback cb); 1.632 + 1.633 + // helper function to obtain AudioFlinger service handle 1.634 + static const sp<IAudioFlinger>& get_audio_flinger(); 1.635 + 1.636 + static float linearToLog(int volume); 1.637 + static int logToLinear(float volume); 1.638 + 1.639 + static status_t getOutputSamplingRate(int* samplingRate, int stream = DEFAULT); 1.640 + static status_t getOutputFrameCount(int* frameCount, int stream = DEFAULT); 1.641 + static status_t getOutputLatency(uint32_t* latency, int stream = DEFAULT); 1.642 + 1.643 + static bool routedToA2dpOutput(int streamType); 1.644 + 1.645 + static status_t getInputBufferSize(uint32_t sampleRate, int format, int channelCount, 1.646 + size_t* buffSize); 1.647 + 1.648 + static status_t setVoiceVolume(float volume); 1.649 + 1.650 + // return the number of audio frames written by AudioFlinger to audio HAL and 1.651 + // audio dsp to DAC since the output on which the specificed stream is playing 1.652 + // has exited standby. 1.653 + // returned status (from utils/Errors.h) can be: 1.654 + // - NO_ERROR: successful operation, halFrames and dspFrames point to valid data 1.655 + // - INVALID_OPERATION: Not supported on current hardware platform 1.656 + // - BAD_VALUE: invalid parameter 1.657 + // NOTE: this feature is not supported on all hardware platforms and it is 1.658 + // necessary to check returned status before using the returned values. 1.659 + static status_t getRenderPosition(uint32_t *halFrames, uint32_t *dspFrames, int stream = DEFAULT); 1.660 + 1.661 + static unsigned int getInputFramesLost(audio_io_handle_t ioHandle); 1.662 + 1.663 + static int newAudioSessionId(); 1.664 + // 1.665 + // AudioPolicyService interface 1.666 + // 1.667 + 1.668 + enum audio_devices { 1.669 + // output devices 1.670 + DEVICE_OUT_EARPIECE = 0x1, 1.671 + DEVICE_OUT_SPEAKER = 0x2, 1.672 + DEVICE_OUT_WIRED_HEADSET = 0x4, 1.673 + DEVICE_OUT_WIRED_HEADPHONE = 0x8, 1.674 + DEVICE_OUT_BLUETOOTH_SCO = 0x10, 1.675 + DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20, 1.676 + DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40, 1.677 + DEVICE_OUT_BLUETOOTH_A2DP = 0x80, 1.678 + DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100, 1.679 + DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200, 1.680 + DEVICE_OUT_AUX_DIGITAL = 0x400, 1.681 + DEVICE_OUT_DEFAULT = 0x8000, 1.682 + DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | DEVICE_OUT_SPEAKER | DEVICE_OUT_WIRED_HEADSET | 1.683 + DEVICE_OUT_WIRED_HEADPHONE | DEVICE_OUT_BLUETOOTH_SCO | DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 1.684 + DEVICE_OUT_BLUETOOTH_SCO_CARKIT | DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 1.685 + DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL | DEVICE_OUT_DEFAULT), 1.686 + DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 1.687 + DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER), 1.688 + 1.689 + // input devices 1.690 + DEVICE_IN_COMMUNICATION = 0x10000, 1.691 + DEVICE_IN_AMBIENT = 0x20000, 1.692 + DEVICE_IN_BUILTIN_MIC = 0x40000, 1.693 + DEVICE_IN_BLUETOOTH_SCO_HEADSET = 0x80000, 1.694 + DEVICE_IN_WIRED_HEADSET = 0x100000, 1.695 + DEVICE_IN_AUX_DIGITAL = 0x200000, 1.696 + DEVICE_IN_VOICE_CALL = 0x400000, 1.697 + DEVICE_IN_BACK_MIC = 0x800000, 1.698 + DEVICE_IN_DEFAULT = 0x80000000, 1.699 + 1.700 + DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | DEVICE_IN_AMBIENT | DEVICE_IN_BUILTIN_MIC | 1.701 + DEVICE_IN_BLUETOOTH_SCO_HEADSET | DEVICE_IN_WIRED_HEADSET | DEVICE_IN_AUX_DIGITAL | 1.702 + DEVICE_IN_VOICE_CALL | DEVICE_IN_BACK_MIC | DEVICE_IN_DEFAULT) 1.703 + }; 1.704 + 1.705 + // device connection states used for setDeviceConnectionState() 1.706 + enum device_connection_state { 1.707 + DEVICE_STATE_UNAVAILABLE, 1.708 + DEVICE_STATE_AVAILABLE, 1.709 + NUM_DEVICE_STATES 1.710 + }; 1.711 + 1.712 + // request to open a direct output with getOutput() (by opposition to sharing an output with other AudioTracks) 1.713 + enum output_flags { 1.714 + OUTPUT_FLAG_INDIRECT = 0x0, 1.715 + OUTPUT_FLAG_DIRECT = 0x1 1.716 + }; 1.717 + 1.718 + // device categories used for setForceUse() 1.719 + enum forced_config { 1.720 + FORCE_NONE, 1.721 + FORCE_SPEAKER, 1.722 + FORCE_HEADPHONES, 1.723 + FORCE_BT_SCO, 1.724 + FORCE_BT_A2DP, 1.725 + FORCE_WIRED_ACCESSORY, 1.726 + FORCE_BT_CAR_DOCK, 1.727 + FORCE_BT_DESK_DOCK, 1.728 + NUM_FORCE_CONFIG, 1.729 + FORCE_DEFAULT = FORCE_NONE 1.730 + }; 1.731 + 1.732 + // usages used for setForceUse() 1.733 + enum force_use { 1.734 + FOR_COMMUNICATION, 1.735 + FOR_MEDIA, 1.736 + FOR_RECORD, 1.737 + FOR_DOCK, 1.738 + NUM_FORCE_USE 1.739 + }; 1.740 + 1.741 + // types of io configuration change events received with ioConfigChanged() 1.742 + enum io_config_event { 1.743 + OUTPUT_OPENED, 1.744 + OUTPUT_CLOSED, 1.745 + OUTPUT_CONFIG_CHANGED, 1.746 + INPUT_OPENED, 1.747 + INPUT_CLOSED, 1.748 + INPUT_CONFIG_CHANGED, 1.749 + STREAM_CONFIG_CHANGED, 1.750 + NUM_CONFIG_EVENTS 1.751 + }; 1.752 + 1.753 + // audio output descritor used to cache output configurations in client process to avoid frequent calls 1.754 + // through IAudioFlinger 1.755 + class OutputDescriptor { 1.756 + public: 1.757 + OutputDescriptor() 1.758 + : samplingRate(0), format(0), channels(0), frameCount(0), latency(0) {} 1.759 + 1.760 + uint32_t samplingRate; 1.761 + int32_t format; 1.762 + int32_t channels; 1.763 + size_t frameCount; 1.764 + uint32_t latency; 1.765 + }; 1.766 + 1.767 + // 1.768 + // IAudioPolicyService interface (see AudioPolicyInterface for method descriptions) 1.769 + // 1.770 + static status_t setDeviceConnectionState(audio_devices device, device_connection_state state, const char *device_address); 1.771 + static device_connection_state getDeviceConnectionState(audio_devices device, const char *device_address); 1.772 + static status_t setPhoneState(int state); 1.773 +#if ANDROID_VERSION >= 17 1.774 + static status_t setPhoneState(audio_mode_t state); 1.775 +#endif 1.776 + static status_t setRingerMode(uint32_t mode, uint32_t mask); 1.777 +#ifdef VANILLA_ANDROID 1.778 + static status_t setForceUse(force_use usage, forced_config config); 1.779 + static forced_config getForceUse(force_use usage); 1.780 + static audio_io_handle_t getOutput(stream_type stream, 1.781 + uint32_t samplingRate = 0, 1.782 + uint32_t format = FORMAT_DEFAULT, 1.783 + uint32_t channels = CHANNEL_OUT_STEREO, 1.784 + output_flags flags = OUTPUT_FLAG_INDIRECT); 1.785 + static status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, const char *device_address); 1.786 + static status_t setFmVolume(float volume); 1.787 + static audio_policy_dev_state_t getDeviceConnectionState(audio_devices_t device, const char *device_address); 1.788 +#else 1.789 + static status_t setForceUse(force_use usage, forced_config config) __attribute__((weak)); 1.790 + static forced_config getForceUse(force_use usage) __attribute__((weak)); 1.791 + static audio_io_handle_t getOutput(stream_type stream, 1.792 + uint32_t samplingRate = 0, 1.793 + uint32_t format = FORMAT_DEFAULT, 1.794 + uint32_t channels = CHANNEL_OUT_STEREO, 1.795 + output_flags flags = OUTPUT_FLAG_INDIRECT) __attribute__((weak)); 1.796 + 1.797 + static status_t setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cfg_t config) __attribute__((weak)); 1.798 + static audio_policy_forced_cfg_t getForceUse(audio_policy_force_use_t usage) __attribute__((weak)); 1.799 + static audio_io_handle_t getOutput(audio_stream_type_t stream, 1.800 + uint32_t samplingRate = 0, 1.801 + uint32_t format = AUDIO_FORMAT_DEFAULT, 1.802 + uint32_t channels = AUDIO_CHANNEL_OUT_STEREO, 1.803 + audio_policy_output_flags_t flags = AUDIO_POLICY_OUTPUT_FLAG_INDIRECT) __attribute__((weak)); 1.804 + static status_t setDeviceConnectionState(audio_devices_t device, audio_policy_dev_state_t state, const char *device_address) __attribute__((weak)); 1.805 + static status_t setFmVolume(float volume) __attribute__((weak)); 1.806 + static audio_policy_dev_state_t getDeviceConnectionState(audio_devices_t device, const char *device_address) __attribute__((weak)); 1.807 + 1.808 +#endif 1.809 + static status_t startOutput(audio_io_handle_t output, 1.810 + AudioSystem::stream_type stream, 1.811 + int session = 0); 1.812 + static status_t stopOutput(audio_io_handle_t output, 1.813 + AudioSystem::stream_type stream, 1.814 + int session = 0); 1.815 + static void releaseOutput(audio_io_handle_t output); 1.816 + static audio_io_handle_t getInput(int inputSource, 1.817 + uint32_t samplingRate = 0, 1.818 + uint32_t format = FORMAT_DEFAULT, 1.819 + uint32_t channels = CHANNEL_IN_MONO, 1.820 + audio_in_acoustics acoustics = (audio_in_acoustics)0); 1.821 + static status_t startInput(audio_io_handle_t input); 1.822 + static status_t stopInput(audio_io_handle_t input); 1.823 + static void releaseInput(audio_io_handle_t input); 1.824 + static status_t initStreamVolume(stream_type stream, 1.825 + int indexMin, 1.826 + int indexMax); 1.827 + static status_t initStreamVolume(audio_stream_type_t stream, 1.828 + int indexMin, 1.829 + int indexMax); 1.830 + static status_t setStreamVolumeIndex(stream_type stream, int index); 1.831 + static status_t setStreamVolumeIndex(audio_stream_type_t stream, int index); 1.832 +#if ANDROID_VERSION >= 17 1.833 + static status_t setStreamVolumeIndex(audio_stream_type_t stream, 1.834 + int index, 1.835 + audio_devices_t device); 1.836 + static status_t getStreamVolumeIndex(audio_stream_type_t stream, 1.837 + int *index, 1.838 + audio_devices_t device); 1.839 +#endif 1.840 + static status_t getStreamVolumeIndex(stream_type stream, int *index); 1.841 + static status_t getStreamVolumeIndex(audio_stream_type_t stream, int *index); 1.842 + 1.843 + static uint32_t getStrategyForStream(stream_type stream); 1.844 + 1.845 + static audio_io_handle_t getOutputForEffect(effect_descriptor_t *desc); 1.846 + static status_t registerEffect(effect_descriptor_t *desc, 1.847 + audio_io_handle_t output, 1.848 + uint32_t strategy, 1.849 + int session, 1.850 + int id); 1.851 + static status_t unregisterEffect(int id); 1.852 + 1.853 + static const sp<IAudioPolicyService>& get_audio_policy_service(); 1.854 + 1.855 + // ---------------------------------------------------------------------------- 1.856 + 1.857 + static uint32_t popCount(uint32_t u); 1.858 + static bool isOutputDevice(audio_devices device); 1.859 + static bool isInputDevice(audio_devices device); 1.860 + static bool isA2dpDevice(audio_devices device); 1.861 + static bool isBluetoothScoDevice(audio_devices device); 1.862 + static bool isSeperatedStream(stream_type stream); 1.863 + static bool isLowVisibility(stream_type stream); 1.864 + static bool isOutputChannel(uint32_t channel); 1.865 + static bool isInputChannel(uint32_t channel); 1.866 + static bool isValidFormat(uint32_t format); 1.867 + static bool isLinearPCM(uint32_t format); 1.868 + static bool isModeInCall(); 1.869 + 1.870 +private: 1.871 + 1.872 + class AudioFlingerClient: public IBinder::DeathRecipient, public BnAudioFlingerClient 1.873 + { 1.874 + public: 1.875 + AudioFlingerClient() { 1.876 + } 1.877 + 1.878 + // DeathRecipient 1.879 + virtual void binderDied(const wp<IBinder>& who); 1.880 + 1.881 + // IAudioFlingerClient 1.882 + 1.883 + // indicate a change in the configuration of an output or input: keeps the cached 1.884 + // values for output/input parameters upto date in client process 1.885 + virtual void ioConfigChanged(int event, int ioHandle, void *param2); 1.886 + }; 1.887 + 1.888 + class AudioPolicyServiceClient: public IBinder::DeathRecipient 1.889 + { 1.890 + public: 1.891 + AudioPolicyServiceClient() { 1.892 + } 1.893 + 1.894 + // DeathRecipient 1.895 + virtual void binderDied(const wp<IBinder>& who); 1.896 + }; 1.897 + 1.898 + static sp<AudioFlingerClient> gAudioFlingerClient; 1.899 + static sp<AudioPolicyServiceClient> gAudioPolicyServiceClient; 1.900 + friend class AudioFlingerClient; 1.901 + friend class AudioPolicyServiceClient; 1.902 + 1.903 + static Mutex gLock; 1.904 + static sp<IAudioFlinger> gAudioFlinger; 1.905 + static audio_error_callback gAudioErrorCallback; 1.906 + 1.907 + static size_t gInBuffSize; 1.908 + // previous parameters for recording buffer size queries 1.909 + static uint32_t gPrevInSamplingRate; 1.910 + static int gPrevInFormat; 1.911 + static int gPrevInChannelCount; 1.912 + 1.913 + static sp<IAudioPolicyService> gAudioPolicyService; 1.914 + 1.915 + // mapping between stream types and outputs 1.916 + static DefaultKeyedVector<int, audio_io_handle_t> gStreamOutputMap; 1.917 + // list of output descritor containing cached parameters (sampling rate, framecount, channel count...) 1.918 + static DefaultKeyedVector<audio_io_handle_t, OutputDescriptor *> gOutputs; 1.919 +}; 1.920 + 1.921 +class AudioParameter { 1.922 + 1.923 +public: 1.924 + AudioParameter() {} 1.925 + AudioParameter(const String8& keyValuePairs); 1.926 + virtual ~AudioParameter(); 1.927 + 1.928 + // reserved parameter keys for changing standard parameters with setParameters() function. 1.929 + // Using these keys is mandatory for AudioFlinger to properly monitor audio output/input 1.930 + // configuration changes and act accordingly. 1.931 + // keyRouting: to change audio routing, value is an int in AudioSystem::audio_devices 1.932 + // keySamplingRate: to change sampling rate routing, value is an int 1.933 + // keyFormat: to change audio format, value is an int in AudioSystem::audio_format 1.934 + // keyChannels: to change audio channel configuration, value is an int in AudioSystem::audio_channels 1.935 + // keyFrameCount: to change audio output frame count, value is an int 1.936 + // keyInputSource: to change audio input source, value is an int in audio_source 1.937 + // (defined in media/mediarecorder.h) 1.938 + static const char *keyRouting; 1.939 + static const char *keySamplingRate; 1.940 + static const char *keyFormat; 1.941 + static const char *keyChannels; 1.942 + static const char *keyFrameCount; 1.943 + static const char *keyInputSource; 1.944 + 1.945 + String8 toString(); 1.946 + 1.947 + status_t add(const String8& key, const String8& value); 1.948 + status_t addInt(const String8& key, const int value); 1.949 + status_t addFloat(const String8& key, const float value); 1.950 + 1.951 + status_t remove(const String8& key); 1.952 + 1.953 + status_t get(const String8& key, String8& value); 1.954 + status_t getInt(const String8& key, int& value); 1.955 + status_t getFloat(const String8& key, float& value); 1.956 + status_t getAt(size_t index, String8& key, String8& value); 1.957 + 1.958 + size_t size() { return mParameters.size(); } 1.959 + 1.960 +private: 1.961 + String8 mKeyValuePairs; 1.962 + KeyedVector <String8, String8> mParameters; 1.963 +}; 1.964 + 1.965 +}; // namespace android 1.966 + 1.967 +#endif /*ANDROID_AUDIOSYSTEM_H_*/