diff options
| author | Eric Laurent <elaurent@google.com> | 2012-04-25 15:47:56 -0700 |
|---|---|---|
| committer | Eric Laurent <elaurent@google.com> | 2012-04-26 10:17:13 -0700 |
| commit | ddfe26905ea3210c86a88eeb331eef4c9f99b931 (patch) | |
| tree | 6bff7549dc766a6798d73a6385b08dbc0d637054 | |
| parent | 739022f26a7127ba76a98dda65411496086114a7 (diff) | |
| download | hardware_libhardware_legacy-ddfe26905ea3210c86a88eeb331eef4c9f99b931.tar.gz hardware_libhardware_legacy-ddfe26905ea3210c86a88eeb331eef4c9f99b931.tar.bz2 hardware_libhardware_legacy-ddfe26905ea3210c86a88eeb331eef4c9f99b931.zip | |
system and UI sounds volume policy
Added specific volume curves for AUDIO_STREAM_SYSTEM,
AUDIO_STREAM_ENFORCED_AUDIBLE and AUDIO_STREAM_DTMF.
Volume for these streams tracks AUDIO_STREAM_RING on phones
and AUDIO_STREAM_MUSIC on tablets but is contrained in the range
-24dB to -6dB on speaker and -24dB to -12dB on headset.
STRATEGY_ENFORCED_AUDIBLE routing policy is now the same as
STRATEGY_MEDIA in countries where not enforced.
Change-Id: If58d96559bfe2bbff4cd94c631d5933bd940778e
| -rw-r--r-- | audio/AudioPolicyManagerBase.cpp | 75 | ||||
| -rw-r--r-- | include/hardware_legacy/AudioPolicyManagerBase.h | 6 |
2 files changed, 60 insertions, 21 deletions
diff --git a/audio/AudioPolicyManagerBase.cpp b/audio/AudioPolicyManagerBase.cpp index b0debef..a0c7ce4 100644 --- a/audio/AudioPolicyManagerBase.cpp +++ b/audio/AudioPolicyManagerBase.cpp @@ -1998,11 +1998,16 @@ audio_devices_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy st case STRATEGY_ENFORCED_AUDIBLE: // strategy STRATEGY_ENFORCED_AUDIBLE uses same routing policy as STRATEGY_SONIFICATION - // except when in call where it doesn't default to STRATEGY_PHONE behavior + // except: + // - when in call where it doesn't default to STRATEGY_PHONE behavior + // - in countries where not enforced in which case it follows STRATEGY_MEDIA - device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_SPEAKER; - if (device == 0) { - ALOGE("getDeviceForStrategy() speaker device not found for STRATEGY_SONIFICATION"); + if (strategy == STRATEGY_SONIFICATION || + !mStreams[AUDIO_STREAM_ENFORCED_AUDIBLE].mCanBeMuted) { + device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_SPEAKER; + if (device == 0) { + ALOGE("getDeviceForStrategy() speaker device not found for STRATEGY_SONIFICATION"); + } } // The second device used for sonification is the same as the device used by media strategy // FALL THROUGH @@ -2377,48 +2382,80 @@ const AudioPolicyManagerBase::VolumeCurvePoint {1, -29.7f}, {33, -20.1f}, {66, -10.2f}, {100, 0.0f} }; +// AUDIO_STREAM_SYSTEM, AUDIO_STREAM_ENFORCED_AUDIBLE and AUDIO_STREAM_DTMF volume tracks +// AUDIO_STREAM_RING on phones and AUDIO_STREAM_MUSIC on tablets (See AudioService.java). +// The range is constrained between -24dB and -6dB over speaker and -24dB and -12dB over headset. +const AudioPolicyManagerBase::VolumeCurvePoint + AudioPolicyManagerBase::sDefaultSystemVolumeCurve[AudioPolicyManagerBase::VOLCNT] = { + {1, -24.0f}, {33, -18.0f}, {66, -12.0f}, {100, -6.0f} +}; const AudioPolicyManagerBase::VolumeCurvePoint - *AudioPolicyManagerBase::sVolumeProfiles[AudioPolicyManagerBase::NUM_STRATEGIES] + AudioPolicyManagerBase::sHeadsetSystemVolumeCurve[AudioPolicyManagerBase::VOLCNT] = { + {1, -24.0f}, {33, -18.0f}, {66, -15.0f}, {100, -12.0f} +}; + +const AudioPolicyManagerBase::VolumeCurvePoint + *AudioPolicyManagerBase::sVolumeProfiles[AUDIO_STREAM_CNT] [AudioPolicyManagerBase::DEVICE_CATEGORY_CNT] = { - { // STRATEGY_MEDIA - sDefaultMediaVolumeCurve, // DEVICE_CATEGORY_HEADSET - sSpeakerMediaVolumeCurve, // DEVICE_CATEGORY_SPEAKER - sDefaultMediaVolumeCurve // DEVICE_CATEGORY_EARPIECE - }, - { // STRATEGY_PHONE + { // AUDIO_STREAM_VOICE_CALL sDefaultVolumeCurve, // DEVICE_CATEGORY_HEADSET sDefaultVolumeCurve, // DEVICE_CATEGORY_SPEAKER sDefaultVolumeCurve // DEVICE_CATEGORY_EARPIECE }, - { // STRATEGY_SONIFICATION + { // AUDIO_STREAM_SYSTEM + sHeadsetSystemVolumeCurve, // DEVICE_CATEGORY_HEADSET + sDefaultSystemVolumeCurve, // DEVICE_CATEGORY_SPEAKER + sDefaultSystemVolumeCurve // DEVICE_CATEGORY_EARPIECE + }, + { // AUDIO_STREAM_RING sDefaultVolumeCurve, // DEVICE_CATEGORY_HEADSET sSpeakerSonificationVolumeCurve, // DEVICE_CATEGORY_SPEAKER sDefaultVolumeCurve // DEVICE_CATEGORY_EARPIECE }, - { // STRATEGY_SONIFICATION_RESPECTFUL uses same volumes as SONIFICATION + { // AUDIO_STREAM_MUSIC + sDefaultMediaVolumeCurve, // DEVICE_CATEGORY_HEADSET + sSpeakerMediaVolumeCurve, // DEVICE_CATEGORY_SPEAKER + sDefaultMediaVolumeCurve // DEVICE_CATEGORY_EARPIECE + }, + { // AUDIO_STREAM_ALARM sDefaultVolumeCurve, // DEVICE_CATEGORY_HEADSET sSpeakerSonificationVolumeCurve, // DEVICE_CATEGORY_SPEAKER sDefaultVolumeCurve // DEVICE_CATEGORY_EARPIECE }, - { // STRATEGY_DTMF + { // AUDIO_STREAM_NOTIFICATION sDefaultVolumeCurve, // DEVICE_CATEGORY_HEADSET - sDefaultVolumeCurve, // DEVICE_CATEGORY_SPEAKER + sSpeakerSonificationVolumeCurve, // DEVICE_CATEGORY_SPEAKER sDefaultVolumeCurve // DEVICE_CATEGORY_EARPIECE }, - { // STRATEGY_ENFORCED_AUDIBLE + { // AUDIO_STREAM_BLUETOOTH_SCO sDefaultVolumeCurve, // DEVICE_CATEGORY_HEADSET - sSpeakerSonificationVolumeCurve, // DEVICE_CATEGORY_SPEAKER + sDefaultVolumeCurve, // DEVICE_CATEGORY_SPEAKER sDefaultVolumeCurve // DEVICE_CATEGORY_EARPIECE }, + { // AUDIO_STREAM_ENFORCED_AUDIBLE + sHeadsetSystemVolumeCurve, // DEVICE_CATEGORY_HEADSET + sDefaultSystemVolumeCurve, // DEVICE_CATEGORY_SPEAKER + sDefaultSystemVolumeCurve // DEVICE_CATEGORY_EARPIECE + }, + { // AUDIO_STREAM_DTMF + sHeadsetSystemVolumeCurve, // DEVICE_CATEGORY_HEADSET + sDefaultSystemVolumeCurve, // DEVICE_CATEGORY_SPEAKER + sDefaultSystemVolumeCurve // DEVICE_CATEGORY_EARPIECE + }, + { // AUDIO_STREAM_TTS + sDefaultMediaVolumeCurve, // DEVICE_CATEGORY_HEADSET + sSpeakerMediaVolumeCurve, // DEVICE_CATEGORY_SPEAKER + sDefaultMediaVolumeCurve // DEVICE_CATEGORY_EARPIECE + }, }; void AudioPolicyManagerBase::initializeVolumeCurves() { - for (int i = 0; i < AudioSystem::NUM_STREAM_TYPES; i++) { + for (int i = 0; i < AUDIO_STREAM_CNT; i++) { for (int j = 0; j < DEVICE_CATEGORY_CNT; j++) { mStreams[i].mVolumeCurve[j] = - sVolumeProfiles[getStrategy((AudioSystem::stream_type)i)][j]; + sVolumeProfiles[i][j]; } } } diff --git a/include/hardware_legacy/AudioPolicyManagerBase.h b/include/hardware_legacy/AudioPolicyManagerBase.h index 8d38bbd..be6c19d 100644 --- a/include/hardware_legacy/AudioPolicyManagerBase.h +++ b/include/hardware_legacy/AudioPolicyManagerBase.h @@ -221,8 +221,10 @@ protected: static const VolumeCurvePoint sSpeakerMediaVolumeCurve[AudioPolicyManagerBase::VOLCNT]; // volume curve for sonification strategy on speakers static const VolumeCurvePoint sSpeakerSonificationVolumeCurve[AudioPolicyManagerBase::VOLCNT]; - // default volume curves per strategy and device category. See initializeVolumeCurves() - static const VolumeCurvePoint *sVolumeProfiles[NUM_STRATEGIES][DEVICE_CATEGORY_CNT]; + static const VolumeCurvePoint sDefaultSystemVolumeCurve[AudioPolicyManagerBase::VOLCNT]; + static const VolumeCurvePoint sHeadsetSystemVolumeCurve[AudioPolicyManagerBase::VOLCNT]; + // default volume curves per stream and device category. See initializeVolumeCurves() + static const VolumeCurvePoint *sVolumeProfiles[AUDIO_STREAM_CNT][DEVICE_CATEGORY_CNT]; // descriptor for audio outputs. Used to maintain current configuration of each opened audio output // and keep track of the usage of this output by each audio stream type. |
