Merge "Remove unnecessary Tuner weak ref and enhance the Tuner weak ref on frontend init" into sc-dev
This commit is contained in:
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user