diff options
author | Steve Kondik <steve@cyngn.com> | 2016-03-06 05:31:05 -0800 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2016-03-08 17:34:31 -0800 |
commit | 9957394df71db6f01802091858216582c58eab67 (patch) | |
tree | e5d0749c23553360f303c732b2401e3068dbb8db /core/jni | |
parent | e4bc68603b42ae01b22aebcb80b2d2c17d7b9158 (diff) | |
download | frameworks_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.cpp | 35 |
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", |