diff options
author | Roman Birg <roman@cyngn.com> | 2016-03-11 09:43:02 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyngn.com> | 2016-03-15 17:49:20 +0000 |
commit | 69bbfc9fbc6a56bfc5bd8e15c1eac49f99b0363a (patch) | |
tree | bfb427d11a1a9a2afa7286eb211fb849cf46d222 /src | |
parent | 9321ea876e7c3c2fdb684a78901fc1ab98474adb (diff) | |
download | android_packages_apps_AudioFX-69bbfc9fbc6a56bfc5bd8e15c1eac49f99b0363a.tar.gz android_packages_apps_AudioFX-69bbfc9fbc6a56bfc5bd8e15c1eac49f99b0363a.tar.bz2 android_packages_apps_AudioFX-69bbfc9fbc6a56bfc5bd8e15c1eac49f99b0363a.zip |
AudioFX: catch effect crashes
And release as much as we can. But we should ever crash.
Ref: AUDIO-144
Change-Id: I31abd2d85ca2a7dc339141be12bad19d97011c44
Signed-off-by: Roman Birg <roman@cyngn.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/com/cyngn/audiofx/backends/AndroidEffects.java | 23 | ||||
-rw-r--r-- | src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java | 11 | ||||
-rw-r--r-- | src/com/cyngn/audiofx/service/AudioFxService.java | 31 |
3 files changed, 44 insertions, 21 deletions
diff --git a/src/com/cyngn/audiofx/backends/AndroidEffects.java b/src/com/cyngn/audiofx/backends/AndroidEffects.java index ece7742..88927a3 100644 --- a/src/com/cyngn/audiofx/backends/AndroidEffects.java +++ b/src/com/cyngn/audiofx/backends/AndroidEffects.java @@ -30,9 +30,14 @@ class AndroidEffects extends EffectSetWithAndroidEq { public AndroidEffects(int sessionId) { super(sessionId); - mBassBoost = new BassBoost(1000, sessionId); - mVirtualizer = new Virtualizer(1000, sessionId); - mPresetReverb = new PresetReverb(1000, sessionId); + try { + mBassBoost = new BassBoost(1000, sessionId); + mVirtualizer = new Virtualizer(1000, sessionId); + mPresetReverb = new PresetReverb(1000, sessionId); + } catch (Exception e) { + release(); + throw e; + } } @Override @@ -87,9 +92,15 @@ class AndroidEffects extends EffectSetWithAndroidEq { @Override public void release() { super.release(); - mPresetReverb.release(); - mBassBoost.release(); - mVirtualizer.release(); + if (mPresetReverb != null) { + mPresetReverb.release(); + } + if (mBassBoost != null) { + mBassBoost.release(); + } + if (mVirtualizer != null) { + mVirtualizer.release(); + } } @Override diff --git a/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java b/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java index fef8f54..5b0cd30 100644 --- a/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java +++ b/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java @@ -23,7 +23,12 @@ public abstract class EffectSetWithAndroidEq extends EffectSet { public EffectSetWithAndroidEq(int sessionId) { super(sessionId); - mEqualizer = new Equalizer(1000, sessionId); + try { + mEqualizer = new Equalizer(1000, sessionId); + } catch (Exception e) { + release(); + throw e; + } } @@ -86,6 +91,8 @@ public abstract class EffectSetWithAndroidEq extends EffectSet { @Override public void release() { - mEqualizer.release(); + if (mEqualizer != null) { + mEqualizer.release(); + } } } diff --git a/src/com/cyngn/audiofx/service/AudioFxService.java b/src/com/cyngn/audiofx/service/AudioFxService.java index fc2b6b3..d4c595e 100644 --- a/src/com/cyngn/audiofx/service/AudioFxService.java +++ b/src/com/cyngn/audiofx/service/AudioFxService.java @@ -251,23 +251,28 @@ public class AudioFxService extends Service { @Override public boolean handleMessage(Message msg) { - final EffectSet session; + EffectSet session; + Integer sessionId; switch (msg.what) { case MSG_ADD_SESSION: /** * msg.obj = sessionId */ + sessionId = (Integer) msg.obj; + mHandler.removeMessages(MSG_REMOVE_SESSION, sessionId); + mHandler.removeMessages(MSG_UPDATE_FOR_SESSION, sessionId); + try { + session = EffectsFactory.createEffectSet(getApplicationContext(), sessionId); + } catch (Exception e) { + Log.e(TAG, "couldn't create effects for session id: " + sessionId, e); + break; + } synchronized (mAudioSessionsL) { - final int sessionId = (Integer) msg.obj; - mHandler.removeMessages(MSG_REMOVE_SESSION, sessionId); - mHandler.removeMessages(MSG_UPDATE_FOR_SESSION, sessionId); if (mAudioSessionsL.indexOfKey(sessionId) < 0) { - mAudioSessionsL.put(sessionId, EffectsFactory.createEffectSet( - getApplicationContext(), sessionId)); + mAudioSessionsL.put(sessionId, session); if (DEBUG) Log.w(TAG, "added new EffectSet for sessionId=" + sessionId); - - Message.obtain(mHandler, MSG_UPDATE_FOR_SESSION, ALL_CHANGED, 0, sessionId) - .sendToTarget(); + Message.obtain(mHandler, MSG_UPDATE_FOR_SESSION, ALL_CHANGED, 0, + sessionId).sendToTarget(); } } break; @@ -276,10 +281,10 @@ public class AudioFxService extends Service { /** * msg.obj = sessionId */ + sessionId = (Integer) msg.obj; + mHandler.removeMessages(MSG_ADD_SESSION, sessionId); + mHandler.removeMessages(MSG_UPDATE_FOR_SESSION, sessionId); synchronized (mAudioSessionsL) { - final Integer sessionId = (Integer) msg.obj; - mHandler.removeMessages(MSG_ADD_SESSION, sessionId); - mHandler.removeMessages(MSG_UPDATE_FOR_SESSION, sessionId); if (mAudioSessionsL.indexOfKey(sessionId) > -1) { final EffectSet effectSet = mAudioSessionsL.removeReturnOld(sessionId); if (effectSet != null) { @@ -318,7 +323,7 @@ public class AudioFxService extends Service { * msg.obj = session id integer (for consistency) */ String device = getCurrentDeviceIdentifier(); - final Integer sessionId = (Integer) msg.obj; + sessionId = (Integer) msg.obj; if (DEBUG) { Log.i(TAG, "updating DSP for sessionId=" + sessionId + ", device=" + device); } |