Merge "Fix tuner JNI breakage due to recent changes" into rvc-dev am: 92b1b302a9 am: 332c753dce

Change-Id: I2472cd30b337e2f5ee79db761cf33a3e67a6339a
This commit is contained in:
TreeHugger Robot
2020-04-10 18:47:19 +00:00
committed by Automerger Merge Worker
3 changed files with 68 additions and 33 deletions

View File

@@ -394,7 +394,7 @@ public class Tuner implements AutoCloseable {
private native Lnb nativeOpenLnbByName(String name); private native Lnb nativeOpenLnbByName(String name);
private native Descrambler nativeOpenDescramblerByHandle(int handle); private native Descrambler nativeOpenDescramblerByHandle(int handle);
private native Descrambler nativeOpenDemuxByhandle(int handle); private native int nativeOpenDemuxByhandle(int handle);
private native DvrRecorder nativeOpenDvrRecorder(long bufferSize); private native DvrRecorder nativeOpenDvrRecorder(long bufferSize);
private native DvrPlayback nativeOpenDvrPlayback(long bufferSize); private native DvrPlayback nativeOpenDvrPlayback(long bufferSize);
@@ -985,7 +985,7 @@ public class Tuner implements AutoCloseable {
boolean granted = mTunerResourceManager.requestDescrambler(request, descramblerHandle); boolean granted = mTunerResourceManager.requestDescrambler(request, descramblerHandle);
if (granted) { if (granted) {
mDescramblerHandle = descramblerHandle[0]; mDescramblerHandle = descramblerHandle[0];
nativeOpenDescramblerByHandle(mDescramblerHandle); mDescrambler = nativeOpenDescramblerByHandle(mDescramblerHandle);
} }
return granted; return granted;
} }

View File

@@ -880,10 +880,12 @@ jobject JTuner::getFrontendIds() {
jobject JTuner::openFrontendById(int id) { jobject JTuner::openFrontendById(int id) {
sp<IFrontend> fe; sp<IFrontend> fe;
mTuner->openFrontendById(id, [&](Result, const sp<IFrontend>& frontend) { Result res;
mTuner->openFrontendById(id, [&](Result r, const sp<IFrontend>& frontend) {
fe = frontend; fe = frontend;
res = r;
}); });
if (fe == nullptr) { if (res != Result::SUCCESS || fe == nullptr) {
ALOGE("Failed to open frontend"); ALOGE("Failed to open frontend");
return NULL; return NULL;
} }
@@ -906,7 +908,7 @@ jobject JTuner::openFrontendById(int id) {
(jint) jId); (jint) jId);
} }
jobject JTuner::getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) { jobject JTuner::getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AnalogFrontendCapabilities"); jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AnalogFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V"); jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V");
@@ -915,7 +917,7 @@ jobject JTuner::getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabil
return env->NewObject(clazz, capsInit, typeCap, sifStandardCap); return env->NewObject(clazz, capsInit, typeCap, sifStandardCap);
} }
jobject JTuner::getAtsc3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) { jobject JTuner::getAtsc3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3FrontendCapabilities"); jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3FrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIIII)V"); jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIIII)V");
@@ -930,7 +932,7 @@ jobject JTuner::getAtsc3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabili
codeRateCap, fecCap, demodOutputFormatCap); codeRateCap, fecCap, demodOutputFormatCap);
} }
jobject JTuner::getAtscFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) { jobject JTuner::getAtscFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AtscFrontendCapabilities"); jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AtscFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(I)V"); jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(I)V");
@@ -939,7 +941,7 @@ jobject JTuner::getAtscFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilit
return env->NewObject(clazz, capsInit, modulationCap); return env->NewObject(clazz, capsInit, modulationCap);
} }
jobject JTuner::getDvbcFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) { jobject JTuner::getDvbcFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbcFrontendCapabilities"); jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbcFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(III)V"); jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(III)V");
@@ -950,7 +952,7 @@ jobject JTuner::getDvbcFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilit
return env->NewObject(clazz, capsInit, modulationCap, fecCap, annexCap); return env->NewObject(clazz, capsInit, modulationCap, fecCap, annexCap);
} }
jobject JTuner::getDvbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) { jobject JTuner::getDvbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbsFrontendCapabilities"); jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbsFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IJI)V"); jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IJI)V");
@@ -961,7 +963,7 @@ jobject JTuner::getDvbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilit
return env->NewObject(clazz, capsInit, modulationCap, innerfecCap, standard); return env->NewObject(clazz, capsInit, modulationCap, innerfecCap, standard);
} }
jobject JTuner::getDvbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) { jobject JTuner::getDvbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbtFrontendCapabilities"); jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbtFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIIIIZZ)V"); jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIIIIZZ)V");
@@ -978,7 +980,7 @@ jobject JTuner::getDvbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilit
coderateCap, hierarchyCap, guardIntervalCap, isT2Supported, isMisoSupported); coderateCap, hierarchyCap, guardIntervalCap, isT2Supported, isMisoSupported);
} }
jobject JTuner::getIsdbs3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) { jobject JTuner::getIsdbs3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Isdbs3FrontendCapabilities"); jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Isdbs3FrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V"); jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V");
@@ -988,7 +990,7 @@ jobject JTuner::getIsdbs3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabil
return env->NewObject(clazz, capsInit, modulationCap, coderateCap); return env->NewObject(clazz, capsInit, modulationCap, coderateCap);
} }
jobject JTuner::getIsdbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) { jobject JTuner::getIsdbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbsFrontendCapabilities"); jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbsFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V"); jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V");
@@ -998,7 +1000,7 @@ jobject JTuner::getIsdbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabili
return env->NewObject(clazz, capsInit, modulationCap, coderateCap); return env->NewObject(clazz, capsInit, modulationCap, coderateCap);
} }
jobject JTuner::getIsdbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps) { jobject JTuner::getIsdbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbtFrontendCapabilities"); jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbtFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIII)V"); jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIII)V");
@@ -1044,31 +1046,58 @@ jobject JTuner::getFrontendInfo(int id) {
jobject jcaps = NULL; jobject jcaps = NULL;
switch(feInfo.type) { switch(feInfo.type) {
case FrontendType::ANALOG: case FrontendType::ANALOG:
if (FrontendInfo::FrontendCapabilities::hidl_discriminator::analogCaps
== caps.getDiscriminator()) {
jcaps = getAnalogFrontendCaps(env, caps); jcaps = getAnalogFrontendCaps(env, caps);
}
break; break;
case FrontendType::ATSC3: case FrontendType::ATSC3:
if (FrontendInfo::FrontendCapabilities::hidl_discriminator::atsc3Caps
== caps.getDiscriminator()) {
jcaps = getAtsc3FrontendCaps(env, caps); jcaps = getAtsc3FrontendCaps(env, caps);
}
break; break;
case FrontendType::ATSC: case FrontendType::ATSC:
if (FrontendInfo::FrontendCapabilities::hidl_discriminator::atscCaps
== caps.getDiscriminator()) {
jcaps = getAtscFrontendCaps(env, caps); jcaps = getAtscFrontendCaps(env, caps);
}
break; break;
case FrontendType::DVBC: case FrontendType::DVBC:
if (FrontendInfo::FrontendCapabilities::hidl_discriminator::dvbcCaps
== caps.getDiscriminator()) {
jcaps = getDvbcFrontendCaps(env, caps); jcaps = getDvbcFrontendCaps(env, caps);
}
break; break;
case FrontendType::DVBS: case FrontendType::DVBS:
if (FrontendInfo::FrontendCapabilities::hidl_discriminator::dvbsCaps
== caps.getDiscriminator()) {
jcaps = getDvbsFrontendCaps(env, caps); jcaps = getDvbsFrontendCaps(env, caps);
}
break; break;
case FrontendType::DVBT: case FrontendType::DVBT:
if (FrontendInfo::FrontendCapabilities::hidl_discriminator::dvbtCaps
== caps.getDiscriminator()) {
jcaps = getDvbtFrontendCaps(env, caps); jcaps = getDvbtFrontendCaps(env, caps);
}
break; break;
case FrontendType::ISDBS: case FrontendType::ISDBS:
if (FrontendInfo::FrontendCapabilities::hidl_discriminator::isdbsCaps
== caps.getDiscriminator()) {
jcaps = getIsdbsFrontendCaps(env, caps); jcaps = getIsdbsFrontendCaps(env, caps);
}
break; break;
case FrontendType::ISDBS3: case FrontendType::ISDBS3:
if (FrontendInfo::FrontendCapabilities::hidl_discriminator::isdbs3Caps
== caps.getDiscriminator()) {
jcaps = getIsdbs3FrontendCaps(env, caps); jcaps = getIsdbs3FrontendCaps(env, caps);
}
break; break;
case FrontendType::ISDBT: case FrontendType::ISDBT:
if (FrontendInfo::FrontendCapabilities::hidl_discriminator::isdbtCaps
== caps.getDiscriminator()) {
jcaps = getIsdbtFrontendCaps(env, caps); jcaps = getIsdbtFrontendCaps(env, caps);
}
break; break;
default: default:
break; break;
@@ -2308,7 +2337,7 @@ static void android_media_tv_Tuner_native_init(JNIEnv *env) {
gFields.dvrPlaybackContext = env->GetFieldID(dvrPlaybackClazz, "mNativeContext", "J"); gFields.dvrPlaybackContext = env->GetFieldID(dvrPlaybackClazz, "mNativeContext", "J");
gFields.dvrPlaybackInitID = env->GetMethodID(dvrPlaybackClazz, "<init>", "()V"); gFields.dvrPlaybackInitID = env->GetMethodID(dvrPlaybackClazz, "<init>", "()V");
gFields.onDvrPlaybackStatusID = gFields.onDvrPlaybackStatusID =
env->GetMethodID(dvrRecorderClazz, "onPlaybackStatusChanged", "(I)V"); env->GetMethodID(dvrPlaybackClazz, "onPlaybackStatusChanged", "(I)V");
jclass linearBlockClazz = env->FindClass("android/media/MediaCodec$LinearBlock"); jclass linearBlockClazz = env->FindClass("android/media/MediaCodec$LinearBlock");
gFields.linearBlockInitID = env->GetMethodID(linearBlockClazz, "<init>", "()V"); gFields.linearBlockInitID = env->GetMethodID(linearBlockClazz, "<init>", "()V");
@@ -3101,6 +3130,11 @@ static jobject android_media_tv_Tuner_get_demux_caps(JNIEnv* env, jobject thiz)
return tuner->getDemuxCaps(); return tuner->getDemuxCaps();
} }
static jint android_media_tv_Tuner_open_demux(JNIEnv* env, jobject thiz, jint /* handle */) {
sp<JTuner> tuner = getTuner(env, thiz);
return (jint) tuner->openDemux();
}
static jint android_media_tv_Tuner_attach_filter(JNIEnv *env, jobject dvr, jobject filter) { static jint android_media_tv_Tuner_attach_filter(JNIEnv *env, jobject dvr, jobject filter) {
sp<Dvr> dvrSp = getDvr(env, dvr); sp<Dvr> dvrSp = getDvr(env, dvr);
if (dvrSp == NULL) { if (dvrSp == NULL) {
@@ -3425,6 +3459,7 @@ static const JNINativeMethod gTunerMethods[] = {
(void *)android_media_tv_Tuner_open_dvr_playback }, (void *)android_media_tv_Tuner_open_dvr_playback },
{ "nativeGetDemuxCapabilities", "()Landroid/media/tv/tuner/DemuxCapabilities;", { "nativeGetDemuxCapabilities", "()Landroid/media/tv/tuner/DemuxCapabilities;",
(void *)android_media_tv_Tuner_get_demux_caps }, (void *)android_media_tv_Tuner_get_demux_caps },
{ "nativeOpenDemuxByhandle", "(I)I", (void *)android_media_tv_Tuner_open_demux },
}; };
static const JNINativeMethod gFilterMethods[] = { static const JNINativeMethod gFilterMethods[] = {

View File

@@ -188,9 +188,9 @@ struct JTuner : public RefBase {
jobject openDvr(DvrType type, jlong bufferSize); jobject openDvr(DvrType type, jlong bufferSize);
jobject getDemuxCaps(); jobject getDemuxCaps();
jobject getFrontendStatus(jintArray types); jobject getFrontendStatus(jintArray types);
Result openDemux();
protected: protected:
Result openDemux();
virtual ~JTuner(); virtual ~JTuner();
private: private:
@@ -204,15 +204,15 @@ private:
sp<ILnb> mLnb; sp<ILnb> mLnb;
sp<IDemux> mDemux; sp<IDemux> mDemux;
uint32_t mDemuxId; uint32_t mDemuxId;
static jobject getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps); static jobject getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
static jobject getAtsc3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps); static jobject getAtsc3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
static jobject getAtscFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps); static jobject getAtscFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
static jobject getDvbcFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps); static jobject getDvbcFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
static jobject getDvbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps); static jobject getDvbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
static jobject getDvbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps); static jobject getDvbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
static jobject getIsdbs3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps); static jobject getIsdbs3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
static jobject getIsdbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps); static jobject getIsdbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
static jobject getIsdbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities caps); static jobject getIsdbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
}; };
} // namespace android } // namespace android