diff options
author | Scott Lobdell <slobdell@google.com> | 2021-07-23 16:46:35 +0000 |
---|---|---|
committer | Scott Lobdell <slobdell@google.com> | 2021-07-23 17:56:38 +0000 |
commit | dc5ea9d31ab76ba378da9c550813e6b7d8be1e69 (patch) | |
tree | e69528a4200094e8616a1303f0f3104ce54b9415 /media | |
parent | fef582047102b73e83831845a694f7409f33294b (diff) | |
parent | 0cf0aea05a722e3bec6fb3ea2077066edfd2fe57 (diff) |
Merge SP1A.210715.002
Change-Id: I65e2b7db097927b87c9c4023015c754033c62086
Diffstat (limited to 'media')
-rw-r--r-- | media/java/android/media/AudioManager.java | 33 | ||||
-rw-r--r-- | media/java/android/media/tv/tuner/Tuner.java | 3 | ||||
-rw-r--r-- | media/jni/android_media_tv_Tuner.cpp | 12 |
3 files changed, 32 insertions, 16 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index 5b48bea776a8..cdc1964b7f4f 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -73,6 +73,7 @@ import com.android.internal.util.Preconditions; import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -103,7 +104,7 @@ public class AudioManager { private static final AudioVolumeGroupChangeHandler sAudioAudioVolumeGroupChangedHandler = new AudioVolumeGroupChangeHandler(); - private static Context sContext; + private static WeakReference<Context> sContext; /** * Broadcast intent, a hint for applications that audio is about to become @@ -800,7 +801,7 @@ public class AudioManager { } else { mOriginalContext = context; } - sContext = context; + sContext = new WeakReference<>(context); } @UnsupportedAppUsage @@ -7312,23 +7313,27 @@ public class AudioManager { */ public static boolean hasHapticChannels(@Nullable Context context, @NonNull Uri uri) { Objects.requireNonNull(uri); + if (context != null) { return hasHapticChannelsImpl(context, uri); - } else if (sContext != null) { + } + + Context cachedContext = sContext.get(); + if (cachedContext != null) { if (DEBUG) { Log.d(TAG, "Try to use static context to query if having haptic channels"); } - return hasHapticChannelsImpl(sContext, uri); - } else { - // Try with audio service context, this may fail to get correct result. - if (DEBUG) { - Log.d(TAG, "Try to use audio service context to query if having haptic channels"); - } - try { - return getService().hasHapticChannels(uri); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } + return hasHapticChannelsImpl(cachedContext, uri); + } + + // Try with audio service context, this may fail to get correct result. + if (DEBUG) { + Log.d(TAG, "Try to use audio service context to query if having haptic channels"); + } + try { + return getService().hasHapticChannels(uri); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); } } diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index 952bbf56d5fa..2ea745b44288 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -347,7 +347,6 @@ public class Tuner implements AutoCloseable { mHandler = createEventHandler(); } - mHandler = createEventHandler(); int[] clientId = new int[1]; ResourceClientProfile profile = new ResourceClientProfile(); profile.tvInputSessionId = tvInputSessionId; @@ -516,6 +515,8 @@ public class Tuner implements AutoCloseable { mDemuxHandle = null; } + mTunerResourceManager.unregisterClientProfile(mClientId); + } /** diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index 657c9eff1034..3cf9b0370823 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -339,6 +339,12 @@ MediaEvent::~MediaEvent() { if (pC2Buffer != NULL) { pC2Buffer->unregisterOnDestroyNotify(&DestroyCallback, this); } + + if (mLinearBlockObj != NULL) { + env->DeleteWeakGlobalRef(mLinearBlockObj); + mLinearBlockObj = NULL; + } + mFilterClient = NULL; } @@ -2450,7 +2456,10 @@ static sp<JTuner> setTuner(JNIEnv *env, jobject thiz, const sp<JTuner> &tuner) { if (old != NULL) { old->decStrong(thiz); } - env->SetLongField(thiz, gFields.tunerContext, (jlong)tuner.get()); + + if (tuner != NULL) { + env->SetLongField(thiz, gFields.tunerContext, (jlong)tuner.get()); + } return old; } @@ -4042,6 +4051,7 @@ static jint android_media_tv_Tuner_open_demux(JNIEnv* env, jobject thiz, jint ha static jint android_media_tv_Tuner_close_tuner(JNIEnv* env, jobject thiz) { sp<JTuner> tuner = getTuner(env, thiz); + setTuner(env, thiz, NULL); return (jint) tuner->close(); } |