Home | History | Annotate | Download | only in hardware_legacy
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 
     18 #include <stdint.h>
     19 #include <sys/types.h>
     20 #include <cutils/config_utils.h>
     21 #include <cutils/misc.h>
     22 #include <utils/Timers.h>
     23 #include <utils/Errors.h>
     24 #include <utils/KeyedVector.h>
     25 #include <utils/SortedVector.h>
     26 #include <hardware_legacy/AudioPolicyInterface.h>
     27 
     28 
     29 namespace android_audio_legacy {
     30     using android::KeyedVector;
     31     using android::DefaultKeyedVector;
     32     using android::SortedVector;
     33 
     34 // ----------------------------------------------------------------------------
     35 
     36 #define MAX_DEVICE_ADDRESS_LEN 20
     37 // Attenuation applied to STRATEGY_SONIFICATION streams when a headset is connected: 6dB
     38 #define SONIFICATION_HEADSET_VOLUME_FACTOR 0.5
     39 // Min volume for STRATEGY_SONIFICATION streams when limited by music volume: -36dB
     40 #define SONIFICATION_HEADSET_VOLUME_MIN  0.016
     41 // Time in milliseconds during which we consider that music is still active after a music
     42 // track was stopped - see computeVolume()
     43 #define SONIFICATION_HEADSET_MUSIC_DELAY  5000
     44 // Time in milliseconds after media stopped playing during which we consider that the
     45 // sonification should be as unobtrusive as during the time media was playing.
     46 #define SONIFICATION_RESPECTFUL_AFTER_MUSIC_DELAY 5000
     47 // Time in milliseconds during witch some streams are muted while the audio path
     48 // is switched
     49 #define MUTE_TIME_MS 2000
     50 
     51 #define NUM_TEST_OUTPUTS 5
     52 
     53 #define NUM_VOL_CURVE_KNEES 2
     54 
     55 // ----------------------------------------------------------------------------
     56 // AudioPolicyManagerBase implements audio policy manager behavior common to all platforms.
     57 // Each platform must implement an AudioPolicyManager class derived from AudioPolicyManagerBase
     58 // and override methods for which the platform specific behavior differs from the implementation
     59 // in AudioPolicyManagerBase. Even if no specific behavior is required, the AudioPolicyManager
     60 // class must be implemented as well as the class factory function createAudioPolicyManager()
     61 // and provided in a shared library libaudiopolicy.so.
     62 // ----------------------------------------------------------------------------
     63 
     64 class AudioPolicyManagerBase: public AudioPolicyInterface
     65 #ifdef AUDIO_POLICY_TEST
     66     , public Thread
     67 #endif //AUDIO_POLICY_TEST
     68 {
     69 
     70 public:
     71                 AudioPolicyManagerBase(AudioPolicyClientInterface *clientInterface);
     72         virtual ~AudioPolicyManagerBase();
     73 
     74         // AudioPolicyInterface
     75         virtual status_t setDeviceConnectionState(AudioSystem::audio_devices device,
     76                                                           AudioSystem::device_connection_state state,
     77                                                           const char *device_address);
     78         virtual AudioSystem::device_connection_state getDeviceConnectionState(AudioSystem::audio_devices device,
     79                                                                               const char *device_address);
     80         virtual void setPhoneState(int state);
     81         virtual void setForceUse(AudioSystem::force_use usage, AudioSystem::forced_config config);
     82         virtual AudioSystem::forced_config getForceUse(AudioSystem::force_use usage);
     83         virtual void setSystemProperty(const char* property, const char* value);
     84         virtual status_t initCheck();
     85         virtual audio_io_handle_t getOutput(AudioSystem::stream_type stream,
     86                                             uint32_t samplingRate = 0,
     87                                             uint32_t format = AudioSystem::FORMAT_DEFAULT,
     88                                             uint32_t channels = 0,
     89                                             AudioSystem::output_flags flags =
     90                                                     AudioSystem::OUTPUT_FLAG_INDIRECT);
     91         virtual status_t startOutput(audio_io_handle_t output,
     92                                      AudioSystem::stream_type stream,
     93                                      int session = 0);
     94         virtual status_t stopOutput(audio_io_handle_t output,
     95                                     AudioSystem::stream_type stream,
     96                                     int session = 0);
     97         virtual void releaseOutput(audio_io_handle_t output);
     98         virtual audio_io_handle_t getInput(int inputSource,
     99                                             uint32_t samplingRate,
    100                                             uint32_t format,
    101                                             uint32_t channels,
    102                                             AudioSystem::audio_in_acoustics acoustics);
    103 
    104         // indicates to the audio policy manager that the input starts being used.
    105         virtual status_t startInput(audio_io_handle_t input);
    106 
    107         // indicates to the audio policy manager that the input stops being used.
    108         virtual status_t stopInput(audio_io_handle_t input);
    109         virtual void releaseInput(audio_io_handle_t input);
    110         virtual void initStreamVolume(AudioSystem::stream_type stream,
    111                                                     int indexMin,
    112                                                     int indexMax);
    113         virtual status_t setStreamVolumeIndex(AudioSystem::stream_type stream,
    114                                               int index,
    115                                               audio_devices_t device);
    116         virtual status_t getStreamVolumeIndex(AudioSystem::stream_type stream,
    117                                               int *index,
    118                                               audio_devices_t device);
    119 
    120         // return the strategy corresponding to a given stream type
    121         virtual uint32_t getStrategyForStream(AudioSystem::stream_type stream);
    122 
    123         // return the enabled output devices for the given stream type
    124         virtual audio_devices_t getDevicesForStream(AudioSystem::stream_type stream);
    125 
    126         virtual audio_io_handle_t getOutputForEffect(effect_descriptor_t *desc);
    127         virtual status_t registerEffect(effect_descriptor_t *desc,
    128                                         audio_io_handle_t io,
    129                                         uint32_t strategy,
    130                                         int session,
    131                                         int id);
    132         virtual status_t unregisterEffect(int id);
    133         virtual status_t setEffectEnabled(int id, bool enabled);
    134 
    135         virtual bool isStreamActive(int stream, uint32_t inPastMs = 0) const;
    136 
    137         virtual status_t dump(int fd);
    138 
    139 protected:
    140 
    141         enum routing_strategy {
    142             STRATEGY_MEDIA,
    143             STRATEGY_PHONE,
    144             STRATEGY_SONIFICATION,
    145             STRATEGY_SONIFICATION_RESPECTFUL,
    146             STRATEGY_DTMF,
    147             STRATEGY_ENFORCED_AUDIBLE,
    148             NUM_STRATEGIES
    149         };
    150 
    151         // 4 points to define the volume attenuation curve, each characterized by the volume
    152         // index (from 0 to 100) at which they apply, and the attenuation in dB at that index.
    153         // we use 100 steps to avoid rounding errors when computing the volume in volIndexToAmpl()
    154 
    155         enum { VOLMIN = 0, VOLKNEE1 = 1, VOLKNEE2 = 2, VOLMAX = 3, VOLCNT = 4};
    156 
    157         class VolumeCurvePoint
    158         {
    159         public:
    160             int mIndex;
    161             float mDBAttenuation;
    162         };
    163 
    164         // device categories used for volume curve management.
    165         enum device_category {
    166             DEVICE_CATEGORY_HEADSET,
    167             DEVICE_CATEGORY_SPEAKER,
    168             DEVICE_CATEGORY_EARPIECE,
    169             DEVICE_CATEGORY_CNT
    170         };
    171 
    172         class IOProfile;
    173 
    174         class HwModule {
    175         public:
    176                     HwModule(const char *name);
    177                     ~HwModule();
    178 
    179             void dump(int fd);
    180 
    181             const char *const mName; // base name of the audio HW module (primary, a2dp ...)
    182             audio_module_handle_t mHandle;
    183             Vector <IOProfile *> mOutputProfiles; // output profiles exposed by this module
    184             Vector <IOProfile *> mInputProfiles;  // input profiles exposed by this module
    185         };
    186 
    187         // the IOProfile class describes the capabilities of an output or input stream.
    188         // It is currently assumed that all combination of listed parameters are supported.
    189         // It is used by the policy manager to determine if an output or input is suitable for
    190         // a given use case,  open/close it accordingly and connect/disconnect audio tracks
    191         // to/from it.
    192         class IOProfile
    193         {
    194         public:
    195             IOProfile(HwModule *module);
    196             ~IOProfile();
    197 
    198             bool isCompatibleProfile(audio_devices_t device,
    199                                      uint32_t samplingRate,
    200                                      uint32_t format,
    201                                      uint32_t channelMask,
    202                                      audio_output_flags_t flags) const;
    203 
    204             void dump(int fd);
    205 
    206             // by convention, "0' in the first entry in mSamplingRates, mChannelMasks or mFormats
    207             // indicates the supported parameters should be read from the output stream
    208             // after it is opened for the first time
    209             Vector <uint32_t> mSamplingRates; // supported sampling rates
    210             Vector <audio_channel_mask_t> mChannelMasks; // supported channel masks
    211             Vector <audio_format_t> mFormats; // supported audio formats
    212             audio_devices_t mSupportedDevices; // supported devices (devices this output can be
    213                                                // routed to)
    214             audio_output_flags_t mFlags; // attribute flags (e.g primary output,
    215                                                 // direct output...). For outputs only.
    216             HwModule *mModule;                     // audio HW module exposing this I/O stream
    217         };
    218 
    219         // default volume curve
    220         static const VolumeCurvePoint sDefaultVolumeCurve[AudioPolicyManagerBase::VOLCNT];
    221         // default volume curve for media strategy
    222         static const VolumeCurvePoint sDefaultMediaVolumeCurve[AudioPolicyManagerBase::VOLCNT];
    223         // volume curve for media strategy on speakers
    224         static const VolumeCurvePoint sSpeakerMediaVolumeCurve[AudioPolicyManagerBase::VOLCNT];
    225         // volume curve for sonification strategy on speakers
    226         static const VolumeCurvePoint sSpeakerSonificationVolumeCurve[AudioPolicyManagerBase::VOLCNT];
    227         static const VolumeCurvePoint sDefaultSystemVolumeCurve[AudioPolicyManagerBase::VOLCNT];
    228         static const VolumeCurvePoint sHeadsetSystemVolumeCurve[AudioPolicyManagerBase::VOLCNT];
    229         // default volume curves per stream and device category. See initializeVolumeCurves()
    230         static const VolumeCurvePoint *sVolumeProfiles[AUDIO_STREAM_CNT][DEVICE_CATEGORY_CNT];
    231 
    232         // descriptor for audio outputs. Used to maintain current configuration of each opened audio output
    233         // and keep track of the usage of this output by each audio stream type.
    234         class AudioOutputDescriptor
    235         {
    236         public:
    237             AudioOutputDescriptor(const IOProfile *profile);
    238 
    239             status_t    dump(int fd);
    240 
    241             audio_devices_t device();
    242             void changeRefCount(AudioSystem::stream_type, int delta);
    243             uint32_t refCount();
    244             uint32_t strategyRefCount(routing_strategy strategy);
    245             bool isUsedByStrategy(routing_strategy strategy) { return (strategyRefCount(strategy) != 0);}
    246             bool isDuplicated() const { return (mOutput1 != NULL && mOutput2 != NULL); }
    247             audio_devices_t supportedDevices();
    248             uint32_t latency();
    249             bool sharesHwModuleWith(const AudioOutputDescriptor *outputDesc);
    250 
    251             audio_io_handle_t mId;              // output handle
    252             uint32_t mSamplingRate;             //
    253             audio_format_t mFormat;             //
    254             audio_channel_mask_t mChannelMask;     // output configuration
    255             uint32_t mLatency;                  //
    256             audio_output_flags_t mFlags;   //
    257             audio_devices_t mDevice;                   // current device this output is routed to
    258             uint32_t mRefCount[AudioSystem::NUM_STREAM_TYPES]; // number of streams of each type using this output
    259             nsecs_t mStopTime[AudioSystem::NUM_STREAM_TYPES];
    260             AudioOutputDescriptor *mOutput1;    // used by duplicated outputs: first output
    261             AudioOutputDescriptor *mOutput2;    // used by duplicated outputs: second output
    262             float mCurVolume[AudioSystem::NUM_STREAM_TYPES];   // current stream volume
    263             int mMuteCount[AudioSystem::NUM_STREAM_TYPES];     // mute request counter
    264             const IOProfile *mProfile;          // I/O profile this output derives from
    265             bool mStrategyMutedByDevice[NUM_STRATEGIES]; // strategies muted because of incompatible
    266                                                 // device selection. See checkDeviceMuteStrategies()
    267         };
    268 
    269         // descriptor for audio inputs. Used to maintain current configuration of each opened audio input
    270         // and keep track of the usage of this input.
    271         class AudioInputDescriptor
    272         {
    273         public:
    274             AudioInputDescriptor(const IOProfile *profile);
    275 
    276             status_t    dump(int fd);
    277 
    278             uint32_t mSamplingRate;                     //
    279             audio_format_t mFormat;                     // input configuration
    280             audio_channel_mask_t mChannelMask;             //
    281             audio_devices_t mDevice;                    // current device this input is routed to
    282             uint32_t mRefCount;                         // number of AudioRecord clients using this output
    283             int      mInputSource;                      // input source selected by application (mediarecorder.h)
    284             const IOProfile *mProfile;                  // I/O profile this output derives from
    285         };
    286 
    287         // stream descriptor used for volume control
    288         class StreamDescriptor
    289         {
    290         public:
    291             StreamDescriptor();
    292 
    293             int getVolumeIndex(audio_devices_t device);
    294             void dump(int fd);
    295 
    296             int mIndexMin;      // min volume index
    297             int mIndexMax;      // max volume index
    298             KeyedVector<audio_devices_t, int> mIndexCur;   // current volume index per device
    299             bool mCanBeMuted;   // true is the stream can be muted
    300 
    301             const VolumeCurvePoint *mVolumeCurve[DEVICE_CATEGORY_CNT];
    302         };
    303 
    304         // stream descriptor used for volume control
    305         class EffectDescriptor
    306         {
    307         public:
    308 
    309             status_t dump(int fd);
    310 
    311             int mIo;                // io the effect is attached to
    312             routing_strategy mStrategy; // routing strategy the effect is associated to
    313             int mSession;               // audio session the effect is on
    314             effect_descriptor_t mDesc;  // effect descriptor
    315             bool mEnabled;              // enabled state: CPU load being used or not
    316         };
    317 
    318         void addOutput(audio_io_handle_t id, AudioOutputDescriptor *outputDesc);
    319 
    320         // return the strategy corresponding to a given stream type
    321         static routing_strategy getStrategy(AudioSystem::stream_type stream);
    322 
    323         // return appropriate device for streams handled by the specified strategy according to current
    324         // phone state, connected devices...
    325         // if fromCache is true, the device is returned from mDeviceForStrategy[],
    326         // otherwise it is determine by current state
    327         // (device connected,phone state, force use, a2dp output...)
    328         // This allows to:
    329         //  1 speed up process when the state is stable (when starting or stopping an output)
    330         //  2 access to either current device selection (fromCache == true) or
    331         // "future" device selection (fromCache == false) when called from a context
    332         //  where conditions are changing (setDeviceConnectionState(), setPhoneState()...) AND
    333         //  before updateDeviceForStrategy() is called.
    334         virtual audio_devices_t getDeviceForStrategy(routing_strategy strategy,
    335                                                      bool fromCache);
    336 
    337         // change the route of the specified output. Returns the number of ms we have slept to
    338         // allow new routing to take effect in certain cases.
    339         uint32_t setOutputDevice(audio_io_handle_t output,
    340                              audio_devices_t device,
    341                              bool force = false,
    342                              int delayMs = 0);
    343 
    344         // select input device corresponding to requested audio source
    345         virtual audio_devices_t getDeviceForInputSource(int inputSource);
    346 
    347         // return io handle of active input or 0 if no input is active
    348         audio_io_handle_t getActiveInput();
    349 
    350         // initialize volume curves for each strategy and device category
    351         void initializeVolumeCurves();
    352 
    353         // compute the actual volume for a given stream according to the requested index and a particular
    354         // device
    355         virtual float computeVolume(int stream, int index, audio_io_handle_t output, audio_devices_t device);
    356 
    357         // check that volume change is permitted, compute and send new volume to audio hardware
    358         status_t checkAndSetVolume(int stream, int index, audio_io_handle_t output, audio_devices_t device, int delayMs = 0, bool force = false);
    359 
    360         // apply all stream volumes to the specified output and device
    361         void applyStreamVolumes(audio_io_handle_t output, audio_devices_t device, int delayMs = 0, bool force = false);
    362 
    363         // Mute or unmute all streams handled by the specified strategy on the specified output
    364         void setStrategyMute(routing_strategy strategy,
    365                              bool on,
    366                              audio_io_handle_t output,
    367                              int delayMs = 0,
    368                              audio_devices_t device = (audio_devices_t)0);
    369 
    370         // Mute or unmute the stream on the specified output
    371         void setStreamMute(int stream,
    372                            bool on,
    373                            audio_io_handle_t output,
    374                            int delayMs = 0,
    375                            audio_devices_t device = (audio_devices_t)0);
    376 
    377         // handle special cases for sonification strategy while in call: mute streams or replace by
    378         // a special tone in the device used for communication
    379         void handleIncallSonification(int stream, bool starting, bool stateChange);
    380 
    381         // true if device is in a telephony or VoIP call
    382         virtual bool isInCall();
    383 
    384         // true if given state represents a device in a telephony or VoIP call
    385         virtual bool isStateInCall(int state);
    386 
    387         // when a device is connected, checks if an open output can be routed
    388         // to this device. If none is open, tries to open one of the available outputs.
    389         // Returns an output suitable to this device or 0.
    390         // when a device is disconnected, checks if an output is not used any more and
    391         // returns its handle if any.
    392         // transfers the audio tracks and effects from one output thread to another accordingly.
    393         status_t checkOutputsForDevice(audio_devices_t device,
    394                                        AudioSystem::device_connection_state state,
    395                                        SortedVector<audio_io_handle_t>& outputs);
    396 
    397         // close an output and its companion duplicating output.
    398         void closeOutput(audio_io_handle_t output);
    399 
    400         // checks and if necessary changes outputs used for all strategies.
    401         // must be called every time a condition that affects the output choice for a given strategy
    402         // changes: connected device, phone state, force use...
    403         // Must be called before updateDeviceForStrategy()
    404         void checkOutputForStrategy(routing_strategy strategy);
    405 
    406         // Same as checkOutputForStrategy() but for a all strategies in order of priority
    407         void checkOutputForAllStrategies();
    408 
    409         // manages A2DP output suspend/restore according to phone state and BT SCO usage
    410         void checkA2dpSuspend();
    411 
    412         // returns the A2DP output handle if it is open or 0 otherwise
    413         audio_io_handle_t getA2dpOutput();
    414 
    415         // selects the most appropriate device on output for current state
    416         // must be called every time a condition that affects the device choice for a given output is
    417         // changed: connected device, phone state, force use, output start, output stop..
    418         // see getDeviceForStrategy() for the use of fromCache parameter
    419 
    420         audio_devices_t getNewDevice(audio_io_handle_t output, bool fromCache);
    421         // updates cache of device used by all strategies (mDeviceForStrategy[])
    422         // must be called every time a condition that affects the device choice for a given strategy is
    423         // changed: connected device, phone state, force use...
    424         // cached values are used by getDeviceForStrategy() if parameter fromCache is true.
    425          // Must be called after checkOutputForAllStrategies()
    426 
    427         void updateDeviceForStrategy();
    428 
    429         // true if current platform requires a specific output to be opened for this particular
    430         // set of parameters. This function is called by getOutput() and is implemented by platform
    431         // specific audio policy manager.
    432         virtual bool needsDirectOuput(audio_stream_type_t stream,
    433                                       uint32_t samplingRate,
    434                                       audio_format_t format,
    435                                       audio_channel_mask_t channelMask,
    436                                       audio_output_flags_t flags,
    437                                       audio_devices_t device);
    438 
    439         virtual uint32_t getMaxEffectsCpuLoad();
    440         virtual uint32_t getMaxEffectsMemory();
    441 #ifdef AUDIO_POLICY_TEST
    442         virtual     bool        threadLoop();
    443                     void        exit();
    444         int testOutputIndex(audio_io_handle_t output);
    445 #endif //AUDIO_POLICY_TEST
    446 
    447         status_t setEffectEnabled(EffectDescriptor *pDesc, bool enabled);
    448 
    449         // returns the category the device belongs to with regard to volume curve management
    450         static device_category getDeviceCategory(audio_devices_t device);
    451 
    452         // extract one device relevant for volume control from multiple device selection
    453         static audio_devices_t getDeviceForVolume(audio_devices_t device);
    454 
    455         SortedVector<audio_io_handle_t> getOutputsForDevice(audio_devices_t device);
    456         bool vectorsEqual(SortedVector<audio_io_handle_t>& outputs1,
    457                                            SortedVector<audio_io_handle_t>& outputs2);
    458 
    459         // mute/unmute strategies using an incompatible device combination
    460         // if muting, wait for the audio in pcm buffer to be drained before proceeding
    461         // if unmuting, unmute only after the specified delay
    462         // Returns the number of ms waited
    463         uint32_t  checkDeviceMuteStrategies(AudioOutputDescriptor *outputDesc,
    464                                             audio_devices_t prevDevice,
    465                                             uint32_t delayMs);
    466 
    467         audio_io_handle_t selectOutput(const SortedVector<audio_io_handle_t>& outputs,
    468                                        AudioSystem::output_flags flags);
    469         IOProfile *getInputProfile(audio_devices_t device,
    470                                    uint32_t samplingRate,
    471                                    uint32_t format,
    472                                    uint32_t channelMask);
    473         IOProfile *getProfileForDirectOutput(audio_devices_t device,
    474                                                        uint32_t samplingRate,
    475                                                        uint32_t format,
    476                                                        uint32_t channelMask,
    477                                                        audio_output_flags_t flags);
    478         //
    479         // Audio policy configuration file parsing (audio_policy.conf)
    480         //
    481         static uint32_t stringToEnum(const struct StringToEnum *table,
    482                                      size_t size,
    483                                      const char *name);
    484         static audio_output_flags_t parseFlagNames(char *name);
    485         static audio_devices_t parseDeviceNames(char *name);
    486         void loadSamplingRates(char *name, IOProfile *profile);
    487         void loadFormats(char *name, IOProfile *profile);
    488         void loadOutChannels(char *name, IOProfile *profile);
    489         void loadInChannels(char *name, IOProfile *profile);
    490         status_t loadOutput(cnode *root,  HwModule *module);
    491         status_t loadInput(cnode *root,  HwModule *module);
    492         void loadHwModule(cnode *root);
    493         void loadHwModules(cnode *root);
    494         void loadGlobalConfig(cnode *root);
    495         status_t loadAudioPolicyConfig(const char *path);
    496         void defaultAudioPolicyConfig(void);
    497 
    498 
    499         AudioPolicyClientInterface *mpClientInterface;  // audio policy client interface
    500         audio_io_handle_t mPrimaryOutput;              // primary output handle
    501         DefaultKeyedVector<audio_io_handle_t, AudioOutputDescriptor *> mOutputs;   // list of output descriptors
    502         DefaultKeyedVector<audio_io_handle_t, AudioInputDescriptor *> mInputs;     // list of input descriptors
    503         audio_devices_t mAvailableOutputDevices; // bit field of all available output devices
    504         audio_devices_t mAvailableInputDevices; // bit field of all available input devices
    505         int mPhoneState;                                                    // current phone state
    506         AudioSystem::forced_config mForceUse[AudioSystem::NUM_FORCE_USE];   // current forced use configuration
    507 
    508         StreamDescriptor mStreams[AudioSystem::NUM_STREAM_TYPES];           // stream descriptors for volume control
    509         String8 mA2dpDeviceAddress;                                         // A2DP device MAC address
    510         String8 mScoDeviceAddress;                                          // SCO device MAC address
    511         String8 mUsbCardAndDevice; // USB audio ALSA card and device numbers:
    512                                    // card=<card_number>;device=<><device_number>
    513         bool    mLimitRingtoneVolume;                                       // limit ringtone volume to music volume if headset connected
    514         audio_devices_t mDeviceForStrategy[NUM_STRATEGIES];
    515         float   mLastVoiceVolume;                                           // last voice volume value sent to audio HAL
    516 
    517         // Maximum CPU load allocated to audio effects in 0.1 MIPS (ARMv5TE, 0 WS memory) units
    518         static const uint32_t MAX_EFFECTS_CPU_LOAD = 1000;
    519         // Maximum memory allocated to audio effects in KB
    520         static const uint32_t MAX_EFFECTS_MEMORY = 512;
    521         uint32_t mTotalEffectsCpuLoad; // current CPU load used by effects
    522         uint32_t mTotalEffectsMemory;  // current memory used by effects
    523         KeyedVector<int, EffectDescriptor *> mEffects;  // list of registered audio effects
    524         bool    mA2dpSuspended;  // true if A2DP output is suspended
    525         bool mHasA2dp; // true on platforms with support for bluetooth A2DP
    526         bool mHasUsb; // true on platforms with support for USB audio
    527         audio_devices_t mAttachedOutputDevices; // output devices always available on the platform
    528         audio_devices_t mDefaultOutputDevice; // output device selected by default at boot time
    529                                               // (must be in mAttachedOutputDevices)
    530 
    531         Vector <HwModule *> mHwModules;
    532         Vector <IOProfile *> mOutputProfiles; // output profiles loaded from audio_policy.conf
    533         Vector <IOProfile *> mInputProfiles;  // input profiles loaded from audio_policy.conf
    534 
    535 #ifdef AUDIO_POLICY_TEST
    536         Mutex   mLock;
    537         Condition mWaitWorkCV;
    538 
    539         int             mCurOutput;
    540         bool            mDirectOutput;
    541         audio_io_handle_t mTestOutputs[NUM_TEST_OUTPUTS];
    542         int             mTestInput;
    543         uint32_t        mTestDevice;
    544         uint32_t        mTestSamplingRate;
    545         uint32_t        mTestFormat;
    546         uint32_t        mTestChannels;
    547         uint32_t        mTestLatencyMs;
    548 #endif //AUDIO_POLICY_TEST
    549 
    550 private:
    551         static float volIndexToAmpl(audio_devices_t device, const StreamDescriptor& streamDesc,
    552                 int indexInUi);
    553         // updates device caching and output for streams that can influence the
    554         //    routing of notifications
    555         void handleNotificationRoutingForStream(AudioSystem::stream_type stream);
    556 };
    557 
    558 };
    559