Loading media/jni/android_media_tv_Tuner.cpp +128 −49 Original line number Diff line number Diff line Loading @@ -217,23 +217,36 @@ namespace android { void LnbClientCallbackImpl::onEvent(const LnbEventType lnbEventType) { ALOGD("LnbClientCallbackImpl::onEvent, type=%d", lnbEventType); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject lnb(env->NewLocalRef(mLnbObj)); if (!env->IsSameObject(lnb, nullptr)) { env->CallVoidMethod( mLnbObj, lnb, gFields.onLnbEventID, (jint)lnbEventType); } else { ALOGE("LnbClientCallbackImpl::onEvent:" "Lnb object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mLnbObj); } } void LnbClientCallbackImpl::onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage) { ALOGD("LnbClientCallbackImpl::onDiseqcMessage"); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject lnb(env->NewLocalRef(mLnbObj)); if (!env->IsSameObject(lnb, nullptr)) { jbyteArray array = env->NewByteArray(diseqcMessage.size()); env->SetByteArrayRegion( array, 0, diseqcMessage.size(), reinterpret_cast<jbyte*>(diseqcMessage[0])); env->CallVoidMethod( mLnbObj, lnb, gFields.onLnbDiseqcMessageID, array); } else { ALOGE("LnbClientCallbackImpl::onDiseqcMessage:" "Lnb object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mLnbObj); } } void LnbClientCallbackImpl::setLnb(jweak lnbObj) { Loading @@ -254,19 +267,33 @@ LnbClientCallbackImpl::~LnbClientCallbackImpl() { void DvrClientCallbackImpl::onRecordStatus(RecordStatus status) { ALOGD("DvrClientCallbackImpl::onRecordStatus"); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject dvr(env->NewLocalRef(mDvrObj)); if (!env->IsSameObject(dvr, nullptr)) { env->CallVoidMethod( mDvrObj, dvr, gFields.onDvrRecordStatusID, (jint) status); } else { ALOGE("DvrClientCallbackImpl::onRecordStatus:" "Dvr object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mDvrObj); } } void DvrClientCallbackImpl::onPlaybackStatus(PlaybackStatus status) { ALOGD("DvrClientCallbackImpl::onPlaybackStatus"); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject dvr(env->NewLocalRef(mDvrObj)); if (!env->IsSameObject(dvr, nullptr)) { env->CallVoidMethod( mDvrObj, dvr, gFields.onDvrPlaybackStatusID, (jint) status); } else { ALOGE("DvrClientCallbackImpl::onPlaybackStatus:" "Dvr object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mDvrObj); } } void DvrClientCallbackImpl::setDvr(jweak dvrObj) { Loading Loading @@ -810,10 +837,17 @@ void FilterClientCallbackImpl::onFilterEvent_1_1(const DemuxFilterEvent& filterE } } } jobject filter(env->NewLocalRef(mFilterObj)); if (!env->IsSameObject(filter, nullptr)) { env->CallVoidMethod( mFilterObj, filter, gFields.onFilterEventID, array); } else { ALOGE("FilterClientCallbackImpl::onFilterEvent_1_1:" "Filter object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mFilterObj); } } void FilterClientCallbackImpl::onFilterEvent(const DemuxFilterEvent& filterEvent) { Loading @@ -828,10 +862,17 @@ void FilterClientCallbackImpl::onFilterEvent(const DemuxFilterEvent& filterEvent void FilterClientCallbackImpl::onFilterStatus(const DemuxFilterStatus status) { ALOGD("FilterClientCallbackImpl::onFilterStatus"); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject filter(env->NewLocalRef(mFilterObj)); if (!env->IsSameObject(filter, nullptr)) { env->CallVoidMethod( mFilterObj, filter, gFields.onFilterStatusID, (jint)status); } else { ALOGE("FilterClientCallbackImpl::onFilterStatus:" "Filter object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mFilterObj); } } void FilterClientCallbackImpl::setFilter(jweak filterObj, sp<FilterClient> filterClient) { Loading @@ -841,6 +882,15 @@ void FilterClientCallbackImpl::setFilter(jweak filterObj, sp<FilterClient> filte mFilterClient = filterClient; } FilterClientCallbackImpl::~FilterClientCallbackImpl() { JNIEnv *env = AndroidRuntime::getJNIEnv(); if (mFilterObj != NULL) { env->DeleteWeakGlobalRef(mFilterObj); mFilterObj = NULL; } mFilterClient = NULL; } /////////////// FrontendClientCallbackImpl /////////////////////// FrontendClientCallbackImpl::FrontendClientCallbackImpl(jweak tunerObj) : mObject(tunerObj) {} Loading @@ -848,10 +898,17 @@ FrontendClientCallbackImpl::FrontendClientCallbackImpl(jweak tunerObj) : mObject void FrontendClientCallbackImpl::onEvent(FrontendEventType frontendEventType) { ALOGD("FrontendClientCallbackImpl::onEvent, type=%d", frontendEventType); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject frontend(env->NewLocalRef(mObject)); if (!env->IsSameObject(frontend, nullptr)) { env->CallVoidMethod( mObject, frontend, gFields.onFrontendEventID, (jint)frontendEventType); } else { ALOGE("FrontendClientCallbackImpl::onEvent:" "Frontend object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mObject); } } void FrontendClientCallbackImpl::onScanMessage( Loading @@ -859,11 +916,18 @@ void FrontendClientCallbackImpl::onScanMessage( ALOGD("FrontendClientCallbackImpl::onScanMessage, type=%d", type); JNIEnv *env = AndroidRuntime::getJNIEnv(); jclass clazz = env->FindClass("android/media/tv/tuner/Tuner"); jobject frontend(env->NewLocalRef(mObject)); if (env->IsSameObject(frontend, nullptr)) { ALOGE("FrontendClientCallbackImpl::onScanMessage:" "Frontend object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mObject); return; } switch(type) { case FrontendScanMessageType::LOCKED: { if (message.isLocked()) { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onLocked", "()V")); } break; Loading @@ -871,14 +935,14 @@ void FrontendClientCallbackImpl::onScanMessage( case FrontendScanMessageType::END: { if (message.isEnd()) { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onScanStopped", "()V")); } break; } case FrontendScanMessageType::PROGRESS_PERCENT: { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onProgress", "(I)V"), (jint) message.progressPercent()); break; Loading @@ -889,7 +953,7 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetIntArrayRegion(freqs, 0, v.size(), reinterpret_cast<jint*>(&v[0])); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onFrequenciesReport", "([I)V"), freqs); break; Loading @@ -900,21 +964,21 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetIntArrayRegion(symbolRates, 0, v.size(), reinterpret_cast<jint*>(&v[0])); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onSymbolRates", "([I)V"), symbolRates); break; } case FrontendScanMessageType::HIERARCHY: { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onHierarchy", "(I)V"), (jint) message.hierarchy()); break; } case FrontendScanMessageType::ANALOG_TYPE: { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onSignalType", "(I)V"), (jint) message.analogType()); break; Loading @@ -926,7 +990,7 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetIntArrayRegion(plpIds, 0, jintV.size(), &jintV[0]); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onPlpIds", "([I)V"), plpIds); break; Loading @@ -938,7 +1002,7 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetIntArrayRegion(groupIds, 0, jintV.size(), &jintV[0]); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onGroupIds", "([I)V"), groupIds); break; Loading @@ -950,7 +1014,7 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetIntArrayRegion(streamIds, 0, jintV.size(), &jintV[0]); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onInputStreamIds", "([I)V"), streamIds); break; Loading @@ -961,21 +1025,21 @@ void FrontendClientCallbackImpl::onScanMessage( if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sStd) { standard = (jint) std.sStd(); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onDvbsStandard", "(I)V"), standard); } else if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::tStd) { standard = (jint) std.tStd(); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onDvbtStandard", "(I)V"), standard); } else if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sifStd) { standard = (jint) std.sifStd(); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onAnalogSifStandard", "(I)V"), standard); } Loading @@ -996,7 +1060,7 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetObjectArrayElement(array, i, obj); } env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onAtsc3PlpInfos", "([Landroid/media/tv/tuner/frontend/Atsc3PlpInfo;)V"), array); Loading @@ -1010,6 +1074,13 @@ void FrontendClientCallbackImpl::onScanMessageExt1_1(FrontendScanMessageTypeExt1 ALOGD("FrontendClientCallbackImpl::onScanMessageExt1_1, type=%d", type); JNIEnv *env = AndroidRuntime::getJNIEnv(); jclass clazz = env->FindClass("android/media/tv/tuner/Tuner"); jobject frontend(env->NewLocalRef(mObject)); if (env->IsSameObject(frontend, nullptr)) { ALOGE("FrontendClientCallbackImpl::onScanMessageExt1_1:" "Frontend object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mObject); return; } switch(type) { case FrontendScanMessageTypeExt1_1::MODULATION: { jint modulation = -1; Loading Loading @@ -1056,7 +1127,7 @@ void FrontendClientCallbackImpl::onScanMessageExt1_1(FrontendScanMessageTypeExt1 } if (modulation > 0) { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onModulationReported", "(I)V"), modulation); } Loading @@ -1065,7 +1136,7 @@ void FrontendClientCallbackImpl::onScanMessageExt1_1(FrontendScanMessageTypeExt1 case FrontendScanMessageTypeExt1_1::HIGH_PRIORITY: { bool isHighPriority = message.isHighPriority(); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onPriorityReported", "(B)V"), isHighPriority); break; Loading @@ -1073,7 +1144,7 @@ void FrontendClientCallbackImpl::onScanMessageExt1_1(FrontendScanMessageTypeExt1 case FrontendScanMessageTypeExt1_1::DVBC_ANNEX: { jint dvbcAnnex = (jint) message.annex(); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onDvbcAnnexReported", "(I)V"), dvbcAnnex); break; Loading @@ -1083,6 +1154,14 @@ void FrontendClientCallbackImpl::onScanMessageExt1_1(FrontendScanMessageTypeExt1 } } FrontendClientCallbackImpl::~FrontendClientCallbackImpl() { JNIEnv *env = AndroidRuntime::getJNIEnv(); if (mObject != NULL) { env->DeleteWeakGlobalRef(mObject); mObject = NULL; } } /////////////// Tuner /////////////////////// sp<TunerClient> JTuner::mTunerClient; Loading media/jni/android_media_tv_Tuner.h +2 −1 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ struct MediaEvent : public RefBase { }; struct FilterClientCallbackImpl : public FilterClientCallback { ~FilterClientCallbackImpl(); virtual void onFilterEvent_1_1(const DemuxFilterEvent& filterEvent, const DemuxFilterEventExt& filterEventExt); virtual void onFilterEvent(const DemuxFilterEvent& filterEvent); Loading Loading @@ -155,7 +156,7 @@ private: struct FrontendClientCallbackImpl : public FrontendClientCallback { FrontendClientCallbackImpl(jweak tunerObj); ~FrontendClientCallbackImpl(); virtual void onEvent(FrontendEventType frontendEventType); virtual void onScanMessage( FrontendScanMessageType type, const FrontendScanMessage& message); Loading Loading
media/jni/android_media_tv_Tuner.cpp +128 −49 Original line number Diff line number Diff line Loading @@ -217,23 +217,36 @@ namespace android { void LnbClientCallbackImpl::onEvent(const LnbEventType lnbEventType) { ALOGD("LnbClientCallbackImpl::onEvent, type=%d", lnbEventType); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject lnb(env->NewLocalRef(mLnbObj)); if (!env->IsSameObject(lnb, nullptr)) { env->CallVoidMethod( mLnbObj, lnb, gFields.onLnbEventID, (jint)lnbEventType); } else { ALOGE("LnbClientCallbackImpl::onEvent:" "Lnb object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mLnbObj); } } void LnbClientCallbackImpl::onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage) { ALOGD("LnbClientCallbackImpl::onDiseqcMessage"); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject lnb(env->NewLocalRef(mLnbObj)); if (!env->IsSameObject(lnb, nullptr)) { jbyteArray array = env->NewByteArray(diseqcMessage.size()); env->SetByteArrayRegion( array, 0, diseqcMessage.size(), reinterpret_cast<jbyte*>(diseqcMessage[0])); env->CallVoidMethod( mLnbObj, lnb, gFields.onLnbDiseqcMessageID, array); } else { ALOGE("LnbClientCallbackImpl::onDiseqcMessage:" "Lnb object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mLnbObj); } } void LnbClientCallbackImpl::setLnb(jweak lnbObj) { Loading @@ -254,19 +267,33 @@ LnbClientCallbackImpl::~LnbClientCallbackImpl() { void DvrClientCallbackImpl::onRecordStatus(RecordStatus status) { ALOGD("DvrClientCallbackImpl::onRecordStatus"); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject dvr(env->NewLocalRef(mDvrObj)); if (!env->IsSameObject(dvr, nullptr)) { env->CallVoidMethod( mDvrObj, dvr, gFields.onDvrRecordStatusID, (jint) status); } else { ALOGE("DvrClientCallbackImpl::onRecordStatus:" "Dvr object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mDvrObj); } } void DvrClientCallbackImpl::onPlaybackStatus(PlaybackStatus status) { ALOGD("DvrClientCallbackImpl::onPlaybackStatus"); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject dvr(env->NewLocalRef(mDvrObj)); if (!env->IsSameObject(dvr, nullptr)) { env->CallVoidMethod( mDvrObj, dvr, gFields.onDvrPlaybackStatusID, (jint) status); } else { ALOGE("DvrClientCallbackImpl::onPlaybackStatus:" "Dvr object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mDvrObj); } } void DvrClientCallbackImpl::setDvr(jweak dvrObj) { Loading Loading @@ -810,10 +837,17 @@ void FilterClientCallbackImpl::onFilterEvent_1_1(const DemuxFilterEvent& filterE } } } jobject filter(env->NewLocalRef(mFilterObj)); if (!env->IsSameObject(filter, nullptr)) { env->CallVoidMethod( mFilterObj, filter, gFields.onFilterEventID, array); } else { ALOGE("FilterClientCallbackImpl::onFilterEvent_1_1:" "Filter object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mFilterObj); } } void FilterClientCallbackImpl::onFilterEvent(const DemuxFilterEvent& filterEvent) { Loading @@ -828,10 +862,17 @@ void FilterClientCallbackImpl::onFilterEvent(const DemuxFilterEvent& filterEvent void FilterClientCallbackImpl::onFilterStatus(const DemuxFilterStatus status) { ALOGD("FilterClientCallbackImpl::onFilterStatus"); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject filter(env->NewLocalRef(mFilterObj)); if (!env->IsSameObject(filter, nullptr)) { env->CallVoidMethod( mFilterObj, filter, gFields.onFilterStatusID, (jint)status); } else { ALOGE("FilterClientCallbackImpl::onFilterStatus:" "Filter object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mFilterObj); } } void FilterClientCallbackImpl::setFilter(jweak filterObj, sp<FilterClient> filterClient) { Loading @@ -841,6 +882,15 @@ void FilterClientCallbackImpl::setFilter(jweak filterObj, sp<FilterClient> filte mFilterClient = filterClient; } FilterClientCallbackImpl::~FilterClientCallbackImpl() { JNIEnv *env = AndroidRuntime::getJNIEnv(); if (mFilterObj != NULL) { env->DeleteWeakGlobalRef(mFilterObj); mFilterObj = NULL; } mFilterClient = NULL; } /////////////// FrontendClientCallbackImpl /////////////////////// FrontendClientCallbackImpl::FrontendClientCallbackImpl(jweak tunerObj) : mObject(tunerObj) {} Loading @@ -848,10 +898,17 @@ FrontendClientCallbackImpl::FrontendClientCallbackImpl(jweak tunerObj) : mObject void FrontendClientCallbackImpl::onEvent(FrontendEventType frontendEventType) { ALOGD("FrontendClientCallbackImpl::onEvent, type=%d", frontendEventType); JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject frontend(env->NewLocalRef(mObject)); if (!env->IsSameObject(frontend, nullptr)) { env->CallVoidMethod( mObject, frontend, gFields.onFrontendEventID, (jint)frontendEventType); } else { ALOGE("FrontendClientCallbackImpl::onEvent:" "Frontend object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mObject); } } void FrontendClientCallbackImpl::onScanMessage( Loading @@ -859,11 +916,18 @@ void FrontendClientCallbackImpl::onScanMessage( ALOGD("FrontendClientCallbackImpl::onScanMessage, type=%d", type); JNIEnv *env = AndroidRuntime::getJNIEnv(); jclass clazz = env->FindClass("android/media/tv/tuner/Tuner"); jobject frontend(env->NewLocalRef(mObject)); if (env->IsSameObject(frontend, nullptr)) { ALOGE("FrontendClientCallbackImpl::onScanMessage:" "Frontend object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mObject); return; } switch(type) { case FrontendScanMessageType::LOCKED: { if (message.isLocked()) { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onLocked", "()V")); } break; Loading @@ -871,14 +935,14 @@ void FrontendClientCallbackImpl::onScanMessage( case FrontendScanMessageType::END: { if (message.isEnd()) { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onScanStopped", "()V")); } break; } case FrontendScanMessageType::PROGRESS_PERCENT: { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onProgress", "(I)V"), (jint) message.progressPercent()); break; Loading @@ -889,7 +953,7 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetIntArrayRegion(freqs, 0, v.size(), reinterpret_cast<jint*>(&v[0])); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onFrequenciesReport", "([I)V"), freqs); break; Loading @@ -900,21 +964,21 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetIntArrayRegion(symbolRates, 0, v.size(), reinterpret_cast<jint*>(&v[0])); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onSymbolRates", "([I)V"), symbolRates); break; } case FrontendScanMessageType::HIERARCHY: { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onHierarchy", "(I)V"), (jint) message.hierarchy()); break; } case FrontendScanMessageType::ANALOG_TYPE: { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onSignalType", "(I)V"), (jint) message.analogType()); break; Loading @@ -926,7 +990,7 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetIntArrayRegion(plpIds, 0, jintV.size(), &jintV[0]); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onPlpIds", "([I)V"), plpIds); break; Loading @@ -938,7 +1002,7 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetIntArrayRegion(groupIds, 0, jintV.size(), &jintV[0]); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onGroupIds", "([I)V"), groupIds); break; Loading @@ -950,7 +1014,7 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetIntArrayRegion(streamIds, 0, jintV.size(), &jintV[0]); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onInputStreamIds", "([I)V"), streamIds); break; Loading @@ -961,21 +1025,21 @@ void FrontendClientCallbackImpl::onScanMessage( if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sStd) { standard = (jint) std.sStd(); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onDvbsStandard", "(I)V"), standard); } else if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::tStd) { standard = (jint) std.tStd(); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onDvbtStandard", "(I)V"), standard); } else if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sifStd) { standard = (jint) std.sifStd(); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onAnalogSifStandard", "(I)V"), standard); } Loading @@ -996,7 +1060,7 @@ void FrontendClientCallbackImpl::onScanMessage( env->SetObjectArrayElement(array, i, obj); } env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onAtsc3PlpInfos", "([Landroid/media/tv/tuner/frontend/Atsc3PlpInfo;)V"), array); Loading @@ -1010,6 +1074,13 @@ void FrontendClientCallbackImpl::onScanMessageExt1_1(FrontendScanMessageTypeExt1 ALOGD("FrontendClientCallbackImpl::onScanMessageExt1_1, type=%d", type); JNIEnv *env = AndroidRuntime::getJNIEnv(); jclass clazz = env->FindClass("android/media/tv/tuner/Tuner"); jobject frontend(env->NewLocalRef(mObject)); if (env->IsSameObject(frontend, nullptr)) { ALOGE("FrontendClientCallbackImpl::onScanMessageExt1_1:" "Frontend object has been freed. Ignoring callback."); env->DeleteWeakGlobalRef(mObject); return; } switch(type) { case FrontendScanMessageTypeExt1_1::MODULATION: { jint modulation = -1; Loading Loading @@ -1056,7 +1127,7 @@ void FrontendClientCallbackImpl::onScanMessageExt1_1(FrontendScanMessageTypeExt1 } if (modulation > 0) { env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onModulationReported", "(I)V"), modulation); } Loading @@ -1065,7 +1136,7 @@ void FrontendClientCallbackImpl::onScanMessageExt1_1(FrontendScanMessageTypeExt1 case FrontendScanMessageTypeExt1_1::HIGH_PRIORITY: { bool isHighPriority = message.isHighPriority(); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onPriorityReported", "(B)V"), isHighPriority); break; Loading @@ -1073,7 +1144,7 @@ void FrontendClientCallbackImpl::onScanMessageExt1_1(FrontendScanMessageTypeExt1 case FrontendScanMessageTypeExt1_1::DVBC_ANNEX: { jint dvbcAnnex = (jint) message.annex(); env->CallVoidMethod( mObject, frontend, env->GetMethodID(clazz, "onDvbcAnnexReported", "(I)V"), dvbcAnnex); break; Loading @@ -1083,6 +1154,14 @@ void FrontendClientCallbackImpl::onScanMessageExt1_1(FrontendScanMessageTypeExt1 } } FrontendClientCallbackImpl::~FrontendClientCallbackImpl() { JNIEnv *env = AndroidRuntime::getJNIEnv(); if (mObject != NULL) { env->DeleteWeakGlobalRef(mObject); mObject = NULL; } } /////////////// Tuner /////////////////////// sp<TunerClient> JTuner::mTunerClient; Loading
media/jni/android_media_tv_Tuner.h +2 −1 Original line number Diff line number Diff line Loading @@ -118,6 +118,7 @@ struct MediaEvent : public RefBase { }; struct FilterClientCallbackImpl : public FilterClientCallback { ~FilterClientCallbackImpl(); virtual void onFilterEvent_1_1(const DemuxFilterEvent& filterEvent, const DemuxFilterEventExt& filterEventExt); virtual void onFilterEvent(const DemuxFilterEvent& filterEvent); Loading Loading @@ -155,7 +156,7 @@ private: struct FrontendClientCallbackImpl : public FrontendClientCallback { FrontendClientCallbackImpl(jweak tunerObj); ~FrontendClientCallbackImpl(); virtual void onEvent(FrontendEventType frontendEventType); virtual void onScanMessage( FrontendScanMessageType type, const FrontendScanMessage& message); Loading