Implement tune() in JNI
Test: make; acloud create; Change-Id: I6b0f044c5b11da40085e5d0a363048f63ebba397
This commit is contained in:
@@ -41,6 +41,54 @@ using ::android::hardware::tv::tuner::V1_0::DvrSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Bandwidth;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3CodeRate;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3DemodOutputFormat;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Fec;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Modulation;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3PlpSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Settings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3TimeInterleaveMode;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAtscSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendAtscModulation;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbcAnnex;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbcModulation;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbcOuterFec;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbcSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbcSpectralInversion;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbsCodeRate;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbsModulation;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbsPilot;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbsRolloff;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbsSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbsStandard;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbsVcmMode;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbtBandwidth;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbtCoderate;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbtConstellation;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbtGuardInterval;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbtHierarchy;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbtPlpMode;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbtSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbtStandard;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendDvbtTransmissionMode;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendInnerFec;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Coderate;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Modulation;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Rolloff;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Settings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsCoderate;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsModulation;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsRolloff;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsStreamIdType;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtBandwidth;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtCoderate;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtGuardInterval;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtMode;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtModulation;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendType;
|
||||
using ::android::hardware::tv::tuner::V1_0::ITuner;
|
||||
using ::android::hardware::tv::tuner::V1_0::PlaybackSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::RecordSettings;
|
||||
@@ -493,32 +541,437 @@ static DemuxPid getDemuxPid(int pidType, int pid) {
|
||||
return demuxPid;
|
||||
}
|
||||
|
||||
static FrontendSettings getFrontendSettings(JNIEnv *env, int type, jobject settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
static uint32_t getFrontendSettingsFreq(JNIEnv *env, const jobject& settings) {
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/FrontendSettings");
|
||||
jfieldID freqField = env->GetFieldID(clazz, "mFrequency", "I");
|
||||
uint32_t freq = static_cast<uint32_t>(env->GetIntField(clazz, freqField));
|
||||
uint32_t freq = static_cast<uint32_t>(env->GetIntField(settings, freqField));
|
||||
return freq;
|
||||
}
|
||||
|
||||
// TODO: handle the other 8 types of settings
|
||||
if (type == 1) {
|
||||
// analog
|
||||
clazz = env->FindClass("android/media/tv/tuner/frontend/AnalogFrontendSettings");
|
||||
FrontendAnalogType analogType =
|
||||
static_cast<FrontendAnalogType>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mAnalogType", "I")));
|
||||
FrontendAnalogSifStandard sifStandard =
|
||||
static_cast<FrontendAnalogSifStandard>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mSifStandard", "I")));
|
||||
FrontendAnalogSettings frontendAnalogSettings {
|
||||
.frequency = freq,
|
||||
.type = analogType,
|
||||
.sifStandard = sifStandard,
|
||||
};
|
||||
frontendSettings.analog(frontendAnalogSettings);
|
||||
}
|
||||
static FrontendSettings getAnalogFrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AnalogFrontendSettings");
|
||||
FrontendAnalogType analogType =
|
||||
static_cast<FrontendAnalogType>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mSignalType", "I")));
|
||||
FrontendAnalogSifStandard sifStandard =
|
||||
static_cast<FrontendAnalogSifStandard>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mSifStandard", "I")));
|
||||
FrontendAnalogSettings frontendAnalogSettings {
|
||||
.frequency = freq,
|
||||
.type = analogType,
|
||||
.sifStandard = sifStandard,
|
||||
};
|
||||
frontendSettings.analog(frontendAnalogSettings);
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static hidl_vec<FrontendAtsc3PlpSettings> getAtsc3PlpSettings(
|
||||
JNIEnv *env, const jobject& settings) {
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3FrontendSettings");
|
||||
jobjectArray plpSettings =
|
||||
reinterpret_cast<jobjectArray>(
|
||||
env->GetObjectField(settings,
|
||||
env->GetFieldID(
|
||||
clazz,
|
||||
"mPlpSettings",
|
||||
"[Landroid/media/tv/tuner/frontend/Atsc3PlpSettings;")));
|
||||
int len = env->GetArrayLength(plpSettings);
|
||||
|
||||
jclass plpClazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3PlpSettings");
|
||||
hidl_vec<FrontendAtsc3PlpSettings> plps = hidl_vec<FrontendAtsc3PlpSettings>(len);
|
||||
// parse PLP settings
|
||||
for (int i = 0; i < len; i++) {
|
||||
jobject plp = env->GetObjectArrayElement(plpSettings, i);
|
||||
uint8_t plpId =
|
||||
static_cast<uint8_t>(
|
||||
env->GetIntField(plp, env->GetFieldID(plpClazz, "mPlpId", "I")));
|
||||
FrontendAtsc3Modulation modulation =
|
||||
static_cast<FrontendAtsc3Modulation>(
|
||||
env->GetIntField(plp, env->GetFieldID(plpClazz, "mModulation", "I")));
|
||||
FrontendAtsc3TimeInterleaveMode interleaveMode =
|
||||
static_cast<FrontendAtsc3TimeInterleaveMode>(
|
||||
env->GetIntField(
|
||||
plp, env->GetFieldID(plpClazz, "mInterleaveMode", "I")));
|
||||
FrontendAtsc3CodeRate codeRate =
|
||||
static_cast<FrontendAtsc3CodeRate>(
|
||||
env->GetIntField(plp, env->GetFieldID(plpClazz, "mCodeRate", "I")));
|
||||
FrontendAtsc3Fec fec =
|
||||
static_cast<FrontendAtsc3Fec>(
|
||||
env->GetIntField(plp, env->GetFieldID(plpClazz, "mFec", "I")));
|
||||
FrontendAtsc3PlpSettings frontendAtsc3PlpSettings {
|
||||
.plpId = plpId,
|
||||
.modulation = modulation,
|
||||
.interleaveMode = interleaveMode,
|
||||
.codeRate = codeRate,
|
||||
.fec = fec,
|
||||
};
|
||||
plps[i] = frontendAtsc3PlpSettings;
|
||||
}
|
||||
return plps;
|
||||
}
|
||||
|
||||
static FrontendSettings getAtsc3FrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3FrontendSettings");
|
||||
|
||||
FrontendAtsc3Bandwidth bandwidth =
|
||||
static_cast<FrontendAtsc3Bandwidth>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mBandwidth", "I")));
|
||||
FrontendAtsc3DemodOutputFormat demod =
|
||||
static_cast<FrontendAtsc3DemodOutputFormat>(
|
||||
env->GetIntField(
|
||||
settings, env->GetFieldID(clazz, "mDemodOutputFormat", "I")));
|
||||
hidl_vec<FrontendAtsc3PlpSettings> plps = getAtsc3PlpSettings(env, settings);
|
||||
FrontendAtsc3Settings frontendAtsc3Settings {
|
||||
.frequency = freq,
|
||||
.bandwidth = bandwidth,
|
||||
.demodOutputFormat = demod,
|
||||
.plpSettings = plps,
|
||||
};
|
||||
frontendSettings.atsc3(frontendAtsc3Settings);
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static FrontendSettings getAtscFrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AtscFrontendSettings");
|
||||
FrontendAtscModulation modulation =
|
||||
static_cast<FrontendAtscModulation>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mModulation", "I")));
|
||||
FrontendAtscSettings frontendAtscSettings {
|
||||
.frequency = freq,
|
||||
.modulation = modulation,
|
||||
};
|
||||
frontendSettings.atsc(frontendAtscSettings);
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static FrontendSettings getDvbcFrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbcFrontendSettings");
|
||||
FrontendDvbcModulation modulation =
|
||||
static_cast<FrontendDvbcModulation>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mModulation", "I")));
|
||||
FrontendInnerFec innerFec =
|
||||
static_cast<FrontendInnerFec>(
|
||||
env->GetLongField(settings, env->GetFieldID(clazz, "mFec", "J")));
|
||||
uint32_t symbolRate =
|
||||
static_cast<uint32_t>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
|
||||
FrontendDvbcOuterFec outerFec =
|
||||
static_cast<FrontendDvbcOuterFec>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mOuterFec", "I")));
|
||||
FrontendDvbcAnnex annex =
|
||||
static_cast<FrontendDvbcAnnex>(
|
||||
env->GetByteField(settings, env->GetFieldID(clazz, "mAnnex", "B")));
|
||||
FrontendDvbcSpectralInversion spectralInversion =
|
||||
static_cast<FrontendDvbcSpectralInversion>(
|
||||
env->GetIntField(
|
||||
settings, env->GetFieldID(clazz, "mSpectralInversion", "I")));
|
||||
FrontendDvbcSettings frontendDvbcSettings {
|
||||
.frequency = freq,
|
||||
.modulation = modulation,
|
||||
.fec = innerFec,
|
||||
.symbolRate = symbolRate,
|
||||
.outerFec = outerFec,
|
||||
.annex = annex,
|
||||
.spectralInversion = spectralInversion,
|
||||
};
|
||||
frontendSettings.dvbc(frontendDvbcSettings);
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static FrontendDvbsCodeRate getDvbsCodeRate(JNIEnv *env, const jobject& settings) {
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbsFrontendSettings");
|
||||
jobject jcodeRate =
|
||||
env->GetObjectField(settings,
|
||||
env->GetFieldID(
|
||||
clazz,
|
||||
"mCodeRate",
|
||||
"Landroid/media/tv/tuner/frontend/DvbsCodeRate;"));
|
||||
|
||||
jclass codeRateClazz = env->FindClass("android/media/tv/tuner/frontend/DvbsCodeRate");
|
||||
FrontendInnerFec innerFec =
|
||||
static_cast<FrontendInnerFec>(
|
||||
env->GetLongField(
|
||||
jcodeRate, env->GetFieldID(codeRateClazz, "mInnerFec", "J")));
|
||||
bool isLinear =
|
||||
static_cast<bool>(
|
||||
env->GetBooleanField(
|
||||
jcodeRate, env->GetFieldID(codeRateClazz, "mIsLinear", "Z")));
|
||||
bool isShortFrames =
|
||||
static_cast<bool>(
|
||||
env->GetBooleanField(
|
||||
jcodeRate, env->GetFieldID(codeRateClazz, "mIsShortFrames", "Z")));
|
||||
uint32_t bitsPer1000Symbol =
|
||||
static_cast<uint32_t>(
|
||||
env->GetIntField(
|
||||
jcodeRate, env->GetFieldID(
|
||||
codeRateClazz, "mBitsPer1000Symbol", "I")));
|
||||
FrontendDvbsCodeRate coderate {
|
||||
.fec = innerFec,
|
||||
.isLinear = isLinear,
|
||||
.isShortFrames = isShortFrames,
|
||||
.bitsPer1000Symbol = bitsPer1000Symbol,
|
||||
};
|
||||
return coderate;
|
||||
}
|
||||
|
||||
static FrontendSettings getDvbsFrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbsFrontendSettings");
|
||||
|
||||
|
||||
FrontendDvbsModulation modulation =
|
||||
static_cast<FrontendDvbsModulation>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mModulation", "I")));
|
||||
uint32_t symbolRate =
|
||||
static_cast<uint32_t>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
|
||||
FrontendDvbsRolloff rolloff =
|
||||
static_cast<FrontendDvbsRolloff>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mRolloff", "I")));
|
||||
FrontendDvbsPilot pilot =
|
||||
static_cast<FrontendDvbsPilot>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mPilot", "I")));
|
||||
uint32_t inputStreamId =
|
||||
static_cast<uint32_t>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mInputStreamId", "I")));
|
||||
FrontendDvbsStandard standard =
|
||||
static_cast<FrontendDvbsStandard>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mStandard", "I")));
|
||||
FrontendDvbsVcmMode vcmMode =
|
||||
static_cast<FrontendDvbsVcmMode>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mVcmMode", "I")));
|
||||
FrontendDvbsCodeRate coderate = getDvbsCodeRate(env, settings);
|
||||
|
||||
FrontendDvbsSettings frontendDvbsSettings {
|
||||
.frequency = freq,
|
||||
.modulation = modulation,
|
||||
.coderate = coderate,
|
||||
.symbolRate = symbolRate,
|
||||
.rolloff = rolloff,
|
||||
.pilot = pilot,
|
||||
.inputStreamId = inputStreamId,
|
||||
.standard = standard,
|
||||
.vcmMode = vcmMode,
|
||||
};
|
||||
frontendSettings.dvbs(frontendDvbsSettings);
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static FrontendSettings getDvbtFrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbtFrontendSettings");
|
||||
FrontendDvbtTransmissionMode transmissionMode =
|
||||
static_cast<FrontendDvbtTransmissionMode>(
|
||||
env->GetIntField(
|
||||
settings, env->GetFieldID(clazz, "mTransmissionMode", "I")));
|
||||
FrontendDvbtBandwidth bandwidth =
|
||||
static_cast<FrontendDvbtBandwidth>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mBandwidth", "I")));
|
||||
FrontendDvbtConstellation constellation =
|
||||
static_cast<FrontendDvbtConstellation>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mConstellation", "I")));
|
||||
FrontendDvbtHierarchy hierarchy =
|
||||
static_cast<FrontendDvbtHierarchy>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mHierarchy", "I")));
|
||||
FrontendDvbtCoderate hpCoderate =
|
||||
static_cast<FrontendDvbtCoderate>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mHpCodeRate", "I")));
|
||||
FrontendDvbtCoderate lpCoderate =
|
||||
static_cast<FrontendDvbtCoderate>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mLpCodeRate", "I")));
|
||||
FrontendDvbtGuardInterval guardInterval =
|
||||
static_cast<FrontendDvbtGuardInterval>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mGuardInterval", "I")));
|
||||
bool isHighPriority =
|
||||
static_cast<bool>(
|
||||
env->GetBooleanField(
|
||||
settings, env->GetFieldID(clazz, "mIsHighPriority", "Z")));
|
||||
FrontendDvbtStandard standard =
|
||||
static_cast<FrontendDvbtStandard>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mStandard", "I")));
|
||||
bool isMiso =
|
||||
static_cast<bool>(
|
||||
env->GetBooleanField(settings, env->GetFieldID(clazz, "mIsMiso", "Z")));
|
||||
FrontendDvbtPlpMode plpMode =
|
||||
static_cast<FrontendDvbtPlpMode>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mPlpMode", "I")));
|
||||
uint8_t plpId =
|
||||
static_cast<uint8_t>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mPlpId", "I")));
|
||||
uint8_t plpGroupId =
|
||||
static_cast<uint8_t>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mPlpGroupId", "I")));
|
||||
|
||||
FrontendDvbtSettings frontendDvbtSettings {
|
||||
.frequency = freq,
|
||||
.transmissionMode = transmissionMode,
|
||||
.bandwidth = bandwidth,
|
||||
.constellation = constellation,
|
||||
.hierarchy = hierarchy,
|
||||
.hpCoderate = hpCoderate,
|
||||
.lpCoderate = lpCoderate,
|
||||
.guardInterval = guardInterval,
|
||||
.isHighPriority = isHighPriority,
|
||||
.standard = standard,
|
||||
.isMiso = isMiso,
|
||||
.plpMode = plpMode,
|
||||
.plpId = plpId,
|
||||
.plpGroupId = plpGroupId,
|
||||
};
|
||||
frontendSettings.dvbt(frontendDvbtSettings);
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static FrontendSettings getIsdbsFrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbsFrontendSettings");
|
||||
uint16_t streamId =
|
||||
static_cast<uint16_t>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mStreamId", "I")));
|
||||
FrontendIsdbsStreamIdType streamIdType =
|
||||
static_cast<FrontendIsdbsStreamIdType>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mStreamIdType", "I")));
|
||||
FrontendIsdbsModulation modulation =
|
||||
static_cast<FrontendIsdbsModulation>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mModulation", "I")));
|
||||
FrontendIsdbsCoderate coderate =
|
||||
static_cast<FrontendIsdbsCoderate>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mCodeRate", "I")));
|
||||
uint32_t symbolRate =
|
||||
static_cast<uint32_t>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
|
||||
FrontendIsdbsRolloff rolloff =
|
||||
static_cast<FrontendIsdbsRolloff>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mRolloff", "I")));
|
||||
|
||||
FrontendIsdbsSettings frontendIsdbsSettings {
|
||||
.frequency = freq,
|
||||
.streamId = streamId,
|
||||
.streamIdType = streamIdType,
|
||||
.modulation = modulation,
|
||||
.coderate = coderate,
|
||||
.symbolRate = symbolRate,
|
||||
.rolloff = rolloff,
|
||||
};
|
||||
frontendSettings.isdbs(frontendIsdbsSettings);
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static FrontendSettings getIsdbs3FrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Isdbs3FrontendSettings");
|
||||
uint16_t streamId =
|
||||
static_cast<uint16_t>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mStreamId", "I")));
|
||||
FrontendIsdbsStreamIdType streamIdType =
|
||||
static_cast<FrontendIsdbsStreamIdType>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mStreamIdType", "I")));
|
||||
FrontendIsdbs3Modulation modulation =
|
||||
static_cast<FrontendIsdbs3Modulation>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mModulation", "I")));
|
||||
FrontendIsdbs3Coderate coderate =
|
||||
static_cast<FrontendIsdbs3Coderate>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mCodeRate", "I")));
|
||||
uint32_t symbolRate =
|
||||
static_cast<uint32_t>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
|
||||
FrontendIsdbs3Rolloff rolloff =
|
||||
static_cast<FrontendIsdbs3Rolloff>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mRolloff", "I")));
|
||||
|
||||
FrontendIsdbs3Settings frontendIsdbs3Settings {
|
||||
.frequency = freq,
|
||||
.streamId = streamId,
|
||||
.streamIdType = streamIdType,
|
||||
.modulation = modulation,
|
||||
.coderate = coderate,
|
||||
.symbolRate = symbolRate,
|
||||
.rolloff = rolloff,
|
||||
};
|
||||
frontendSettings.isdbs3(frontendIsdbs3Settings);
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static FrontendSettings getIsdbtFrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbtFrontendSettings");
|
||||
FrontendIsdbtModulation modulation =
|
||||
static_cast<FrontendIsdbtModulation>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mModulation", "I")));
|
||||
FrontendIsdbtBandwidth bandwidth =
|
||||
static_cast<FrontendIsdbtBandwidth>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mBandwidth", "I")));
|
||||
FrontendIsdbtMode mode =
|
||||
static_cast<FrontendIsdbtMode>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mMode", "I")));
|
||||
FrontendIsdbtCoderate coderate =
|
||||
static_cast<FrontendIsdbtCoderate>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mCodeRate", "I")));
|
||||
FrontendIsdbtGuardInterval guardInterval =
|
||||
static_cast<FrontendIsdbtGuardInterval>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mGuardInterval", "I")));
|
||||
uint32_t serviceAreaId =
|
||||
static_cast<uint32_t>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mServiceAreaId", "I")));
|
||||
|
||||
FrontendIsdbtSettings frontendIsdbtSettings {
|
||||
.frequency = freq,
|
||||
.modulation = modulation,
|
||||
.bandwidth = bandwidth,
|
||||
.mode = mode,
|
||||
.coderate = coderate,
|
||||
.guardInterval = guardInterval,
|
||||
.serviceAreaId = serviceAreaId,
|
||||
};
|
||||
frontendSettings.isdbt(frontendIsdbtSettings);
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static FrontendSettings getFrontendSettings(JNIEnv *env, int type, jobject settings) {
|
||||
ALOGD("getFrontendSettings %d", type);
|
||||
|
||||
FrontendType feType = static_cast<FrontendType>(type);
|
||||
switch(feType) {
|
||||
case FrontendType::ANALOG:
|
||||
return getAnalogFrontendSettings(env, settings);
|
||||
case FrontendType::ATSC3:
|
||||
return getAtsc3FrontendSettings(env, settings);
|
||||
case FrontendType::ATSC:
|
||||
return getAtscFrontendSettings(env, settings);
|
||||
case FrontendType::DVBC:
|
||||
return getDvbcFrontendSettings(env, settings);
|
||||
case FrontendType::DVBS:
|
||||
return getDvbsFrontendSettings(env, settings);
|
||||
case FrontendType::DVBT:
|
||||
return getDvbtFrontendSettings(env, settings);
|
||||
case FrontendType::ISDBS:
|
||||
return getIsdbsFrontendSettings(env, settings);
|
||||
case FrontendType::ISDBS3:
|
||||
return getIsdbs3FrontendSettings(env, settings);
|
||||
case FrontendType::ISDBT:
|
||||
return getIsdbtFrontendSettings(env, settings);
|
||||
default:
|
||||
// should never happen because a type is associated with a subclass of
|
||||
// FrontendSettings and not set by users
|
||||
jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
|
||||
"Unsupported frontend type %d", type);
|
||||
return FrontendSettings();
|
||||
}
|
||||
}
|
||||
|
||||
static sp<Filter> getFilter(JNIEnv *env, jobject filter) {
|
||||
return (Filter *)env->GetLongField(filter, gFields.filterContext);
|
||||
}
|
||||
@@ -587,23 +1040,23 @@ static void android_media_tv_Tuner_native_init(JNIEnv *env) {
|
||||
|
||||
jclass lnbClazz = env->FindClass("android/media/tv/tuner/Lnb");
|
||||
gFields.lnbInitID =
|
||||
env->GetMethodID(lnbClazz, "<init>", "(Landroid/media/tv/tuner/Tuner;I)V");
|
||||
env->GetMethodID(lnbClazz, "<init>", "(I)V");
|
||||
|
||||
jclass filterClazz = env->FindClass("android/media/tv/tuner/filter/Filter");
|
||||
gFields.filterContext = env->GetFieldID(filterClazz, "mNativeContext", "J");
|
||||
gFields.filterInitID =
|
||||
env->GetMethodID(filterClazz, "<init>", "(Landroid/media/tv/tuner/Tuner;I)V");
|
||||
env->GetMethodID(filterClazz, "<init>", "(I)V");
|
||||
gFields.onFilterStatusID =
|
||||
env->GetMethodID(filterClazz, "onFilterStatus", "(I)V");
|
||||
|
||||
jclass descramblerClazz = env->FindClass("android/media/tv/tuner/Descrambler");
|
||||
gFields.descramblerContext = env->GetFieldID(descramblerClazz, "mNativeContext", "J");
|
||||
gFields.descramblerInitID =
|
||||
env->GetMethodID(descramblerClazz, "<init>", "(Landroid/media/tv/tuner/Tuner;)V");
|
||||
env->GetMethodID(descramblerClazz, "<init>", "()V");
|
||||
|
||||
jclass dvrClazz = env->FindClass("android/media/tv/tuner/dvr/Dvr");
|
||||
gFields.dvrContext = env->GetFieldID(dvrClazz, "mNativeContext", "J");
|
||||
gFields.dvrInitID = env->GetMethodID(dvrClazz, "<init>", "(Landroid/media/tv/tuner/Tuner;)V");
|
||||
gFields.dvrInitID = env->GetMethodID(dvrClazz, "<init>", "()V");
|
||||
}
|
||||
|
||||
static void android_media_tv_Tuner_native_setup(JNIEnv *env, jobject thiz) {
|
||||
@@ -1141,16 +1594,16 @@ static const JNINativeMethod gTunerMethods[] = {
|
||||
{ "nativeSetLna", "(Z)I", (void *)android_media_tv_Tuner_set_lna },
|
||||
{ "nativeGetFrontendStatus", "([I)Landroid/media/tv/tuner/frontend/FrontendStatus;",
|
||||
(void *)android_media_tv_Tuner_get_frontend_status },
|
||||
{ "nativeGetAvSyncHwId", "(Landroid/media/tv/tuner/Tuner/filter/Filter;)I",
|
||||
{ "nativeGetAvSyncHwId", "(Landroid/media/tv/tuner/filter/Filter;)I",
|
||||
(void *)android_media_tv_Tuner_gat_av_sync_hw_id },
|
||||
{ "nativeGetAvSyncTime", "(I)J", (void *)android_media_tv_Tuner_gat_av_sync_time },
|
||||
{ "nativeConnectCiCam", "(I)I", (void *)android_media_tv_Tuner_connect_cicam },
|
||||
{ "nativeDisconnectCiCam", "()I", (void *)android_media_tv_Tuner_disconnect_cicam },
|
||||
{ "nativeGetFrontendInfo", "(I)Landroid/media/tv/tuner/FrontendInfo;",
|
||||
{ "nativeGetFrontendInfo", "(I)Landroid/media/tv/tuner/frontend/FrontendInfo;",
|
||||
(void *)android_media_tv_Tuner_get_frontend_info },
|
||||
{ "nativeOpenFilter", "(IIJ)Landroid/media/tv/tuner/Tuner/filter/Filter;",
|
||||
{ "nativeOpenFilter", "(IIJ)Landroid/media/tv/tuner/filter/Filter;",
|
||||
(void *)android_media_tv_Tuner_open_filter },
|
||||
{ "nativeOpenTimeFilter", "()Landroid/media/tv/tuner/Tuner/filter/TimeFilter;",
|
||||
{ "nativeOpenTimeFilter", "()Landroid/media/tv/tuner/filter/TimeFilter;",
|
||||
(void *)android_media_tv_Tuner_open_time_filter },
|
||||
{ "nativeGetLnbIds", "()Ljava/util/List;",
|
||||
(void *)android_media_tv_Tuner_get_lnb_ids },
|
||||
@@ -1180,9 +1633,9 @@ static const JNINativeMethod gFilterMethods[] = {
|
||||
};
|
||||
|
||||
static const JNINativeMethod gTimeFilterMethods[] = {
|
||||
{ "nativeSetTimeStamp", "(J)I", (void *)android_media_tv_Tuner_time_filter_set_timestamp },
|
||||
{ "nativeClearTimeStamp", "()I", (void *)android_media_tv_Tuner_time_filter_clear_timestamp },
|
||||
{ "nativeGetTimeStamp", "()Ljava/lang/Long;",
|
||||
{ "nativeSetTimestamp", "(J)I", (void *)android_media_tv_Tuner_time_filter_set_timestamp },
|
||||
{ "nativeClearTimestamp", "()I", (void *)android_media_tv_Tuner_time_filter_clear_timestamp },
|
||||
{ "nativeGetTimestamp", "()Ljava/lang/Long;",
|
||||
(void *)android_media_tv_Tuner_time_filter_get_timestamp },
|
||||
{ "nativeGetSourceTime", "()Ljava/lang/Long;",
|
||||
(void *)android_media_tv_Tuner_time_filter_get_source_time },
|
||||
|
||||
Reference in New Issue
Block a user