summaryrefslogtreecommitdiff
path: root/media
diff options
context:
space:
mode:
authorScott Lobdell <slobdell@google.com>2021-07-23 16:46:35 +0000
committerScott Lobdell <slobdell@google.com>2021-07-23 17:56:38 +0000
commitdc5ea9d31ab76ba378da9c550813e6b7d8be1e69 (patch)
treee69528a4200094e8616a1303f0f3104ce54b9415 /media
parentfef582047102b73e83831845a694f7409f33294b (diff)
parent0cf0aea05a722e3bec6fb3ea2077066edfd2fe57 (diff)
Merge SP1A.210715.002
Change-Id: I65e2b7db097927b87c9c4023015c754033c62086
Diffstat (limited to 'media')
-rw-r--r--media/java/android/media/AudioManager.java33
-rw-r--r--media/java/android/media/tv/tuner/Tuner.java3
-rw-r--r--media/jni/android_media_tv_Tuner.cpp12
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();
}