summaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2012-04-25 15:47:56 -0700
committerEric Laurent <elaurent@google.com>2012-04-26 10:17:13 -0700
commitddfe26905ea3210c86a88eeb331eef4c9f99b931 (patch)
tree6bff7549dc766a6798d73a6385b08dbc0d637054 /audio
parent739022f26a7127ba76a98dda65411496086114a7 (diff)
downloadhardware_libhardware_legacy-ddfe26905ea3210c86a88eeb331eef4c9f99b931.zip
hardware_libhardware_legacy-ddfe26905ea3210c86a88eeb331eef4c9f99b931.tar.gz
hardware_libhardware_legacy-ddfe26905ea3210c86a88eeb331eef4c9f99b931.tar.bz2
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
Diffstat (limited to 'audio')
-rw-r--r--audio/AudioPolicyManagerBase.cpp75
1 files changed, 56 insertions, 19 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];
}
}
}