summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRoman Birg <roman@cyngn.com>2016-03-11 09:43:02 -0800
committerGerrit Code Review <gerrit@cyngn.com>2016-03-15 17:49:20 +0000
commit69bbfc9fbc6a56bfc5bd8e15c1eac49f99b0363a (patch)
treebfb427d11a1a9a2afa7286eb211fb849cf46d222 /src
parent9321ea876e7c3c2fdb684a78901fc1ab98474adb (diff)
downloadandroid_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.java23
-rw-r--r--src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java11
-rw-r--r--src/com/cyngn/audiofx/service/AudioFxService.java31
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);
}