Merge "Release effects when not in use."
diff --git a/src/com/android/musicfx/ControlPanelEffect.java b/src/com/android/musicfx/ControlPanelEffect.java
index 403fb27..509ad0b 100644
--- a/src/com/android/musicfx/ControlPanelEffect.java
+++ b/src/com/android/musicfx/ControlPanelEffect.java
@@ -171,6 +171,7 @@
VIRTUALIZER_STRENGTH_DEFAULT);
editor.putBoolean(Key.virt_enabled.toString(), isVIEnabled);
editor.putInt(Key.virt_strength.toString(), vIStrength);
+
// BassBoost
final boolean isBBEnabled = prefs.getBoolean(Key.bb_enabled.toString(),
BASS_BOOST_ENABLED_DEFAULT);
@@ -178,6 +179,7 @@
BASS_BOOST_STRENGTH_DEFAULT);
editor.putBoolean(Key.bb_enabled.toString(), isBBEnabled);
editor.putInt(Key.bb_strength.toString(), bBStrength);
+
// Equalizer
synchronized (mEQInitLock) {
// If EQ is not initialized already create "dummy" audio session created by
@@ -187,7 +189,7 @@
final int session = mediaPlayer.getAudioSessionId();
Equalizer equalizerEffect = null;
try {
- Log.d(TAG, "Creating dummy EQ effect");
+ Log.d(TAG, "Creating dummy EQ effect on session " + session);
equalizerEffect = new Equalizer(PRIORITY, session);
mEQBandLevelRange = equalizerEffect.getBandLevelRange();
@@ -219,6 +221,7 @@
Log.e(TAG, "Equalizer: " + e);
} finally {
if (equalizerEffect != null) {
+ Log.d(TAG, "Releasing dummy EQ effect");
equalizerEffect.release();
}
mediaPlayer.release();
@@ -346,16 +349,32 @@
if (virtualizerEffect != null) {
virtualizerEffect.setEnabled(prefs.getBoolean(
Key.virt_enabled.toString(), VIRTUALIZER_ENABLED_DEFAULT));
+ final int vIStrength = prefs.getInt(Key.virt_strength.toString(),
+ VIRTUALIZER_STRENGTH_DEFAULT);
+ setParameterInt(context, packageName,
+ audioSession, Key.virt_strength, vIStrength);
}
final BassBoost bassBoostEffect = getBassBoostEffect(audioSession);
if (bassBoostEffect != null) {
bassBoostEffect.setEnabled(prefs.getBoolean(Key.bb_enabled.toString(),
BASS_BOOST_ENABLED_DEFAULT));
+ final int bBStrength = prefs.getInt(Key.bb_strength.toString(),
+ BASS_BOOST_STRENGTH_DEFAULT);
+ setParameterInt(context, packageName,
+ audioSession, Key.bb_strength, bBStrength);
}
final Equalizer equalizerEffect = getEqualizerEffect(audioSession);
if (equalizerEffect != null) {
equalizerEffect.setEnabled(prefs.getBoolean(Key.eq_enabled.toString(),
EQUALIZER_ENABLED_DEFAULT));
+ final int[] bandLevels = getParameterIntArray(context,
+ packageName, audioSession, Key.eq_band_level);
+ final int len = bandLevels.length;
+ for (short band = 0; band < len; band++) {
+ final int level = bandLevels[band];
+ setParameterInt(context, packageName,
+ audioSession, Key.eq_band_level, level, band);
+ }
}
// XXX: Preset Reverb not used for the moment, so commented out the effect
// creation to not use MIPS
@@ -373,17 +392,23 @@
} else {
// disable all
if (controlMode == ControlMode.CONTROL_EFFECTS) {
- final Virtualizer virtualizerEffect = getVirtualizerEffect(audioSession);
+ final Virtualizer virtualizerEffect = getVirtualizerEffectNoCreate(audioSession);
if (virtualizerEffect != null) {
+ mVirtualizerInstances.remove(audioSession, virtualizerEffect);
virtualizerEffect.setEnabled(false);
+ virtualizerEffect.release();
}
- final BassBoost bassBoostEffect = getBassBoostEffect(audioSession);
+ final BassBoost bassBoostEffect = getBassBoostEffectNoCreate(audioSession);
if (bassBoostEffect != null) {
+ mBassBoostInstances.remove(audioSession, bassBoostEffect);
bassBoostEffect.setEnabled(false);
+ bassBoostEffect.release();
}
- final Equalizer equalizerEffect = getEqualizerEffect(audioSession);
+ final Equalizer equalizerEffect = getEqualizerEffectNoCreate(audioSession);
if (equalizerEffect != null) {
+ mEQInstances.remove(audioSession, equalizerEffect);
equalizerEffect.setEnabled(false);
+ equalizerEffect.release();
}
// XXX: Preset Reverb not used for the moment, so commented out the effect
// creation to not use MIPS
@@ -937,6 +962,10 @@
GLOBAL_ENABLED_DEFAULT);
editor.putBoolean(Key.global_enabled.toString(), isGlobalEnabled);
+ if (!isGlobalEnabled) {
+ return;
+ }
+
// Manage audioSession information
// Retrieve AudioSession Id from map
@@ -1266,8 +1295,11 @@
* System wide unique audio session identifier.
* @return virtualizerEffect
*/
+ private static Virtualizer getVirtualizerEffectNoCreate(final int audioSession) {
+ return mVirtualizerInstances.get(audioSession);
+ }
private static Virtualizer getVirtualizerEffect(final int audioSession) {
- Virtualizer virtualizerEffect = mVirtualizerInstances.get(audioSession);
+ Virtualizer virtualizerEffect = getVirtualizerEffectNoCreate(audioSession);
if (virtualizerEffect == null) {
try {
final Virtualizer newVirtualizerEffect = new Virtualizer(PRIORITY, audioSession);
@@ -1296,8 +1328,12 @@
* System wide unique audio session identifier.
* @return bassBoostEffect
*/
+ private static BassBoost getBassBoostEffectNoCreate(final int audioSession) {
+ return mBassBoostInstances.get(audioSession);
+ }
private static BassBoost getBassBoostEffect(final int audioSession) {
- BassBoost bassBoostEffect = mBassBoostInstances.get(audioSession);
+
+ BassBoost bassBoostEffect = getBassBoostEffectNoCreate(audioSession);
if (bassBoostEffect == null) {
try {
final BassBoost newBassBoostEffect = new BassBoost(PRIORITY, audioSession);
@@ -1325,8 +1361,11 @@
* System wide unique audio session identifier.
* @return equalizerEffect
*/
+ private static Equalizer getEqualizerEffectNoCreate(final int audioSession) {
+ return mEQInstances.get(audioSession);
+ }
private static Equalizer getEqualizerEffect(final int audioSession) {
- Equalizer equalizerEffect = mEQInstances.get(audioSession);
+ Equalizer equalizerEffect = getEqualizerEffectNoCreate(audioSession);
if (equalizerEffect == null) {
try {
final Equalizer newEqualizerEffect = new Equalizer(PRIORITY, audioSession);