summaryrefslogtreecommitdiffstats
path: root/core/jni
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2016-03-06 05:31:05 -0800
committerSteve Kondik <shade@chemlab.org>2016-03-08 17:34:31 -0800
commit9957394df71db6f01802091858216582c58eab67 (patch)
treee5d0749c23553360f303c732b2401e3068dbb8db /core/jni
parente4bc68603b42ae01b22aebcb80b2d2c17d7b9158 (diff)
downloadframeworks_base-9957394df71db6f01802091858216582c58eab67.zip
frameworks_base-9957394df71db6f01802091858216582c58eab67.tar.gz
frameworks_base-9957394df71db6f01802091858216582c58eab67.tar.bz2
audiosystem: Add API for listening to effect session events
* This API will allow attaching a global listener which will notify the application when audio effect sessions are attached or removed on a stream. This requires that the policy is configured to automatically attach a set of effects. Change-Id: Iaf1ca133765045322b005d4148e2c4e86a9c3913
Diffstat (limited to 'core/jni')
-rw-r--r--core/jni/android_media_AudioSystem.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 91b3278..1acf867 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -154,6 +154,11 @@ static struct {
jmethodID postDynPolicyEventFromNative;
} gDynPolicyEventHandlerMethods;
+static struct {
+ jmethodID postEffectSessionEventFromNative;
+} gEffectSessionEventHandlerMethods;
+
+
static Mutex gLock;
enum AudioError {
@@ -386,6 +391,24 @@ android_media_AudioSystem_dyn_policy_callback(int event, String8 regId, int val)
}
+static void
+android_media_AudioSystem_effect_session_callback(int event, audio_stream_type_t stream,
+ audio_unique_id_t sessionId, bool added)
+{
+ JNIEnv *env = AndroidRuntime::getJNIEnv();
+ if (env == NULL) {
+ return;
+ }
+
+ jclass clazz = env->FindClass(kClassPathName);
+
+ env->CallStaticVoidMethod(clazz, gEffectSessionEventHandlerMethods.postEffectSessionEventFromNative,
+ event, stream, sessionId, added);
+
+ env->DeleteLocalRef(clazz);
+
+}
+
static jint
android_media_AudioSystem_setDeviceConnectionState(JNIEnv *env, jobject thiz, jint device, jint state, jstring device_address, jstring device_name)
{
@@ -1487,6 +1510,12 @@ android_media_AudioSystem_registerDynPolicyCallback(JNIEnv *env, jobject thiz)
AudioSystem::setDynPolicyCallback(android_media_AudioSystem_dyn_policy_callback);
}
+static void
+android_media_AudioSystem_registerEffectSessionCallback(JNIEnv *env, jobject thiz)
+{
+ AudioSystem::setEffectSessionCallback(android_media_AudioSystem_effect_session_callback);
+}
+
static jint convertAudioMixToNative(JNIEnv *env,
AudioMix *nAudioMix,
@@ -1659,6 +1688,8 @@ static JNINativeMethod gMethods[] = {
(void *)android_media_AudioSystem_registerPolicyMixes},
{"native_register_dynamic_policy_callback", "()V",
(void *)android_media_AudioSystem_registerDynPolicyCallback},
+ {"native_register_effect_session_callback", "()V",
+ (void *)android_media_AudioSystem_registerEffectSessionCallback},
{"systemReady", "()I", (void *)android_media_AudioSystem_systemReady},
};
@@ -1766,6 +1797,10 @@ int register_android_media_AudioSystem(JNIEnv *env)
GetStaticMethodIDOrDie(env, env->FindClass(kClassPathName),
"dynamicPolicyCallbackFromNative", "(ILjava/lang/String;I)V");
+ gEffectSessionEventHandlerMethods.postEffectSessionEventFromNative =
+ GetStaticMethodIDOrDie(env, env->FindClass(kClassPathName),
+ "effectSessionCallbackFromNative", "(IIIZ)V");
+
jclass audioMixClass = FindClassOrDie(env, "android/media/audiopolicy/AudioMix");
gAudioMixClass = MakeGlobalRefOrDie(env, audioMixClass);
gAudioMixFields.mRule = GetFieldIDOrDie(env, audioMixClass, "mRule",