Merge "Remove unnecessary Tuner weak ref and enhance the Tuner weak ref on frontend init" into sc-dev

This commit is contained in:
Amy Zhang
2021-02-23 23:55:43 +00:00
committed by Android (Google) Code Review

View File

@@ -1237,15 +1237,23 @@ jobject JTuner::openFrontendByHandle(int feHandle) {
if (mDemuxClient != NULL) { if (mDemuxClient != NULL) {
mDemuxClient->setFrontendDataSource(mFeClient); mDemuxClient->setFrontendDataSource(mFeClient);
} }
sp<FrontendClientCallbackImpl> feClientCb = new FrontendClientCallbackImpl(mObject);
mFeClient->setCallback(feClientCb);
JNIEnv *env = AndroidRuntime::getJNIEnv(); JNIEnv *env = AndroidRuntime::getJNIEnv();
jobject tuner(env->NewLocalRef(mObject));
if (env->IsSameObject(tuner, nullptr)) {
ALOGE("openFrontendByHandle"
"Tuner object has been freed. Failed to open frontend.");
env->DeleteWeakGlobalRef(mObject);
return NULL;
}
sp<FrontendClientCallbackImpl> feClientCb = new FrontendClientCallbackImpl(mObject);
mFeClient->setCallback(feClientCb);
// TODO: add more fields to frontend // TODO: add more fields to frontend
return env->NewObject( return env->NewObject(
env->FindClass("android/media/tv/tuner/Tuner$Frontend"), env->FindClass("android/media/tv/tuner/Tuner$Frontend"),
gFields.frontendInitID, gFields.frontendInitID,
mObject, tuner,
(jint) mFeId); (jint) mFeId);
} }
@@ -1793,16 +1801,14 @@ jobject JTuner::openDvr(DvrType type, jlong bufferSize) {
dvrObj = dvrObj =
env->NewObject( env->NewObject(
env->FindClass("android/media/tv/tuner/dvr/DvrRecorder"), env->FindClass("android/media/tv/tuner/dvr/DvrRecorder"),
gFields.dvrRecorderInitID, gFields.dvrRecorderInitID);
mObject);
dvrClient->incStrong(dvrObj); dvrClient->incStrong(dvrObj);
env->SetLongField(dvrObj, gFields.dvrRecorderContext, (jlong)dvrClient.get()); env->SetLongField(dvrObj, gFields.dvrRecorderContext, (jlong)dvrClient.get());
} else { } else {
dvrObj = dvrObj =
env->NewObject( env->NewObject(
env->FindClass("android/media/tv/tuner/dvr/DvrPlayback"), env->FindClass("android/media/tv/tuner/dvr/DvrPlayback"),
gFields.dvrPlaybackInitID, gFields.dvrPlaybackInitID);
mObject);
dvrClient->incStrong(dvrObj); dvrClient->incStrong(dvrObj);
env->SetLongField(dvrObj, gFields.dvrPlaybackContext, (jlong)dvrClient.get()); env->SetLongField(dvrObj, gFields.dvrPlaybackContext, (jlong)dvrClient.get());
} }