summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanny Baumann <dannybaumann@web.de>2012-05-22 19:58:50 +0200
committerDanny Baumann <dannybaumann@web.de>2012-05-24 13:01:59 +0200
commit32b4d32539b5d8f7ac59f29f8a75c0a21807fbb0 (patch)
tree2b3dbe318515e432318530620e1526ae590228b0
parent4c113489d4ef8db98cce2ae02bb8a7906199311b (diff)
downloadframeworks_base-32b4d32539b5d8f7ac59f29f8a75c0a21807fbb0.zip
frameworks_base-32b4d32539b5d8f7ac59f29f8a75c0a21807fbb0.tar.gz
frameworks_base-32b4d32539b5d8f7ac59f29f8a75c0a21807fbb0.tar.bz2
Restore audio effect connections after binder death.
-rw-r--r--media/java/android/media/audiofx/AudioEffect.java25
1 files changed, 24 insertions, 1 deletions
diff --git a/media/java/android/media/audiofx/AudioEffect.java b/media/java/android/media/audiofx/AudioEffect.java
index 3e54627..ede4b71 100644
--- a/media/java/android/media/audiofx/AudioEffect.java
+++ b/media/java/android/media/audiofx/AudioEffect.java
@@ -140,6 +140,11 @@ public class AudioEffect {
* @hide
*/
public static final int NATIVE_EVENT_PARAMETER_CHANGED = 2;
+ /**
+ * Event id for engine error notification.
+ * @hide
+ */
+ public static final int NATIVE_EVENT_ERROR = 3;
/**
* Successful operation.
@@ -264,6 +269,9 @@ public class AudioEffect {
private int mNativeAudioEffect;
private int mJniData;
+ private int mPriority;
+ private int mAudioSession;
+
/**
* Effect descriptor
*/
@@ -338,6 +346,11 @@ public class AudioEffect {
public AudioEffect(UUID type, UUID uuid, int priority, int audioSession)
throws IllegalArgumentException, UnsupportedOperationException,
RuntimeException {
+ init(type, uuid, priority, audioSession);
+ createNativeEventHandler();
+ }
+
+ private void init(UUID type, UUID uuid, int priority, int audioSession) {
int[] id = new int[1];
Descriptor[] desc = new Descriptor[1];
// native initialization
@@ -364,6 +377,8 @@ public class AudioEffect {
mDescriptor = desc[0];
synchronized (mStateLock) {
mState = STATE_INITIALIZED;
+ mPriority = priority;
+ mAudioSession = audioSession;
}
}
@@ -1096,7 +1111,15 @@ public class AudioEffect {
status, param, value);
}
break;
-
+ case NATIVE_EVENT_ERROR:
+ release();
+ try {
+ init(mDescriptor.type, mDescriptor.uuid, mPriority, mAudioSession);
+ Log.i(TAG, "Reconnected audio effect after native error");
+ } catch (RuntimeException e) {
+ Log.e(TAG, "Could not reconnect audio effect", e);
+ }
+ break;
default:
Log.e(TAG, "handleMessage() Unknown event type: " + msg.what);
break;