dom/system/gonk/android_audio/AudioSystem.h

changeset 0
6474c204b198
     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_*/

mercurial