Merge "Enable Tuner JNI to use Extended Frontend Settings"
This commit is contained in:
@@ -134,6 +134,14 @@ using ::android::hardware::tv::tuner::V1_0::PlaybackSettings;
|
||||
using ::android::hardware::tv::tuner::V1_0::RecordSettings;
|
||||
using ::android::hardware::tv::tuner::V1_1::Constant;
|
||||
using ::android::hardware::tv::tuner::V1_1::Constant64Bit;
|
||||
using ::android::hardware::tv::tuner::V1_1::FrontendAnalogAftFlag;
|
||||
using ::android::hardware::tv::tuner::V1_1::FrontendAnalogSettingsExt1_1;
|
||||
using ::android::hardware::tv::tuner::V1_1::FrontendCableTimeInterleaveMode;
|
||||
using ::android::hardware::tv::tuner::V1_1::FrontendDvbsScanType;
|
||||
using ::android::hardware::tv::tuner::V1_1::FrontendDvbcSettingsExt1_1;
|
||||
using ::android::hardware::tv::tuner::V1_1::FrontendDvbsSettingsExt1_1;
|
||||
using ::android::hardware::tv::tuner::V1_1::FrontendDvbtSettingsExt1_1;
|
||||
using ::android::hardware::tv::tuner::V1_1::FrontendSpectralInversion;
|
||||
|
||||
struct fields_t {
|
||||
jfieldID tunerContext;
|
||||
@@ -1377,12 +1385,21 @@ jobject JTuner::openLnbByName(jstring name) {
|
||||
return lnbObj;
|
||||
}
|
||||
|
||||
int JTuner::tune(const FrontendSettings& settings) {
|
||||
int JTuner::tune(const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1) {
|
||||
if (mFe == NULL) {
|
||||
ALOGE("frontend is not initialized");
|
||||
return (int)Result::INVALID_STATE;
|
||||
}
|
||||
Result result = mFe->tune(settings);
|
||||
Result result;
|
||||
sp<::android::hardware::tv::tuner::V1_1::IFrontend> fe_1_1 =
|
||||
::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFe);
|
||||
if (fe_1_1 == NULL) {
|
||||
ALOGD("1.1 frontend is not found. Using 1.0 instead.");
|
||||
result = mFe->tune(settings);
|
||||
return (int)result;
|
||||
}
|
||||
|
||||
result = fe_1_1->tune_1_1(settings, settingsExt1_1);
|
||||
return (int)result;
|
||||
}
|
||||
|
||||
@@ -1395,12 +1412,22 @@ int JTuner::stopTune() {
|
||||
return (int)result;
|
||||
}
|
||||
|
||||
int JTuner::scan(const FrontendSettings& settings, FrontendScanType scanType) {
|
||||
int JTuner::scan(const FrontendSettings& settings, FrontendScanType scanType,
|
||||
const FrontendSettingsExt1_1& settingsExt1_1) {
|
||||
if (mFe == NULL) {
|
||||
ALOGE("frontend is not initialized");
|
||||
return (int)Result::INVALID_STATE;
|
||||
}
|
||||
Result result = mFe->scan(settings, scanType);
|
||||
Result result;
|
||||
sp<::android::hardware::tv::tuner::V1_1::IFrontend> fe_1_1 =
|
||||
::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFe);
|
||||
if (fe_1_1 == NULL) {
|
||||
ALOGD("1.1 frontend is not found. Using 1.0 instead.");
|
||||
result = mFe->scan(settings, scanType);
|
||||
return (int)result;
|
||||
}
|
||||
|
||||
result = fe_1_1->scan_1_1(settings, scanType, settingsExt1_1);
|
||||
return (int)result;
|
||||
}
|
||||
|
||||
@@ -2105,6 +2132,22 @@ static uint32_t getFrontendSettingsFreq(JNIEnv *env, const jobject& settings) {
|
||||
return freq;
|
||||
}
|
||||
|
||||
static uint32_t getFrontendSettingsEndFreq(JNIEnv *env, const jobject& settings) {
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/FrontendSettings");
|
||||
jfieldID endFreqField = env->GetFieldID(clazz, "mEndFrequency", "I");
|
||||
uint32_t endFreq = static_cast<uint32_t>(env->GetIntField(settings, endFreqField));
|
||||
return endFreq;
|
||||
}
|
||||
|
||||
static FrontendSpectralInversion getFrontendSettingsSpectralInversion(
|
||||
JNIEnv *env, const jobject& settings) {
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/FrontendSettings");
|
||||
jfieldID inversionField = env->GetFieldID(clazz, "mSpectralInversion", "I");
|
||||
FrontendSpectralInversion inversion =
|
||||
static_cast<FrontendSpectralInversion>(env->GetIntField(settings, inversionField));
|
||||
return inversion;
|
||||
}
|
||||
|
||||
static FrontendSettings getAnalogFrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
@@ -2124,6 +2167,18 @@ static FrontendSettings getAnalogFrontendSettings(JNIEnv *env, const jobject& se
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static void getAnalogFrontendSettingsExt1_1(JNIEnv *env, const jobject& settings,
|
||||
FrontendSettingsExt1_1& settingsExt1_1) {
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AnalogFrontendSettings");
|
||||
FrontendAnalogAftFlag aftFlag =
|
||||
static_cast<FrontendAnalogAftFlag>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mAftFlag", "I")));
|
||||
FrontendAnalogSettingsExt1_1 analogExt1_1 {
|
||||
.aftFlag = aftFlag,
|
||||
};
|
||||
settingsExt1_1.settingExt.analog(analogExt1_1);
|
||||
}
|
||||
|
||||
static hidl_vec<FrontendAtsc3PlpSettings> getAtsc3PlpSettings(
|
||||
JNIEnv *env, const jobject& settings) {
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3FrontendSettings");
|
||||
@@ -2243,6 +2298,19 @@ static FrontendSettings getDvbcFrontendSettings(JNIEnv *env, const jobject& sett
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static void getDvbcFrontendSettingsExt1_1(JNIEnv *env, const jobject& settings,
|
||||
FrontendSettingsExt1_1& settingsExt1_1) {
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbcFrontendSettings");
|
||||
FrontendCableTimeInterleaveMode interleaveMode =
|
||||
static_cast<FrontendCableTimeInterleaveMode>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mInterleaveMode", "I")));
|
||||
|
||||
FrontendDvbcSettingsExt1_1 dvbcExt1_1 {
|
||||
.interleaveMode = interleaveMode,
|
||||
};
|
||||
settingsExt1_1.settingExt.dvbc(dvbcExt1_1);
|
||||
}
|
||||
|
||||
static FrontendDvbsCodeRate getDvbsCodeRate(JNIEnv *env, const jobject& settings) {
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbsFrontendSettings");
|
||||
jobject jcodeRate =
|
||||
@@ -2284,7 +2352,6 @@ static FrontendSettings getDvbsFrontendSettings(JNIEnv *env, const jobject& sett
|
||||
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")));
|
||||
@@ -2323,6 +2390,22 @@ static FrontendSettings getDvbsFrontendSettings(JNIEnv *env, const jobject& sett
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static void getDvbsFrontendSettingsExt1_1(JNIEnv *env, const jobject& settings,
|
||||
FrontendSettingsExt1_1& settingsExt1_1) {
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbsFrontendSettings");
|
||||
FrontendDvbsScanType scanType =
|
||||
static_cast<FrontendDvbsScanType>(
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mScanType", "I")));
|
||||
bool isDiseqcRxMessage = static_cast<bool>(env->GetBooleanField(
|
||||
settings, env->GetFieldID(clazz, "mIsDiseqcRxMessage", "B")));
|
||||
|
||||
FrontendDvbsSettingsExt1_1 dvbsExt1_1 {
|
||||
.scanType = scanType,
|
||||
.isDiseqcRxMessage = isDiseqcRxMessage,
|
||||
};
|
||||
settingsExt1_1.settingExt.dvbs(dvbsExt1_1);
|
||||
}
|
||||
|
||||
static FrontendSettings getDvbtFrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
@@ -2389,6 +2472,25 @@ static FrontendSettings getDvbtFrontendSettings(JNIEnv *env, const jobject& sett
|
||||
return frontendSettings;
|
||||
}
|
||||
|
||||
static void getDvbtFrontendSettingsExt1_1(JNIEnv *env, const jobject& settings,
|
||||
FrontendSettingsExt1_1& settingsExt1_1) {
|
||||
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbtFrontendSettings");
|
||||
|
||||
FrontendDvbtSettingsExt1_1 dvbtExt1_1;
|
||||
int transmissionMode =
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mTransmissionMode", "I"));
|
||||
dvbtExt1_1.transmissionMode = static_cast<
|
||||
::android::hardware::tv::tuner::V1_1::FrontendDvbtTransmissionMode>(
|
||||
transmissionMode);
|
||||
|
||||
int constellation =
|
||||
env->GetIntField(settings, env->GetFieldID(clazz, "mConstellation", "I"));
|
||||
dvbtExt1_1.constellation = static_cast<
|
||||
::android::hardware::tv::tuner::V1_1::FrontendDvbtConstellation>(constellation);
|
||||
|
||||
settingsExt1_1.settingExt.dvbt(dvbtExt1_1);
|
||||
}
|
||||
|
||||
static FrontendSettings getIsdbsFrontendSettings(JNIEnv *env, const jobject& settings) {
|
||||
FrontendSettings frontendSettings;
|
||||
uint32_t freq = getFrontendSettingsFreq(env, settings);
|
||||
@@ -2529,6 +2631,54 @@ static FrontendSettings getFrontendSettings(JNIEnv *env, int type, jobject setti
|
||||
}
|
||||
}
|
||||
|
||||
static FrontendSettingsExt1_1 getFrontendSettingsExt1_1(JNIEnv *env, int type, jobject settings) {
|
||||
ALOGD("getFrontendSettingsExt1_1 %d", type);
|
||||
|
||||
FrontendSettingsExt1_1 settingsExt1_1 {
|
||||
.endFrequency = static_cast<uint32_t>(Constant::INVALID_FRONTEND_SETTING_FREQUENCY),
|
||||
.inversion = FrontendSpectralInversion::UNDEFINED,
|
||||
};
|
||||
settingsExt1_1.settingExt.noinit();
|
||||
FrontendType feType = static_cast<FrontendType>(type);
|
||||
switch(feType) {
|
||||
case FrontendType::DVBS:
|
||||
getDvbsFrontendSettingsExt1_1(env, settings, settingsExt1_1);
|
||||
break;
|
||||
case FrontendType::DVBT:
|
||||
getDvbtFrontendSettingsExt1_1(env, settings, settingsExt1_1);
|
||||
break;
|
||||
case FrontendType::ANALOG:
|
||||
getAnalogFrontendSettingsExt1_1(env, settings, settingsExt1_1);
|
||||
break;
|
||||
case FrontendType::ATSC3:
|
||||
break;
|
||||
case FrontendType::ATSC:
|
||||
break;
|
||||
case FrontendType::DVBC:
|
||||
getDvbcFrontendSettingsExt1_1(env, settings, settingsExt1_1);
|
||||
break;
|
||||
case FrontendType::ISDBS:
|
||||
break;
|
||||
case FrontendType::ISDBS3:
|
||||
break;
|
||||
case FrontendType::ISDBT:
|
||||
break;
|
||||
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 FrontendSettingsExt1_1();
|
||||
}
|
||||
|
||||
uint32_t endFreq = getFrontendSettingsEndFreq(env, settings);
|
||||
FrontendSpectralInversion inversion = getFrontendSettingsSpectralInversion(env, settings);
|
||||
settingsExt1_1.endFrequency = endFreq;
|
||||
settingsExt1_1.inversion = inversion;
|
||||
|
||||
return settingsExt1_1;
|
||||
}
|
||||
|
||||
static sp<Filter> getFilter(JNIEnv *env, jobject filter) {
|
||||
return (Filter *)env->GetLongField(filter, gFields.filterContext);
|
||||
}
|
||||
@@ -2670,7 +2820,9 @@ static jint android_media_tv_Tuner_close_frontend_by_handle(
|
||||
|
||||
static int android_media_tv_Tuner_tune(JNIEnv *env, jobject thiz, jint type, jobject settings) {
|
||||
sp<JTuner> tuner = getTuner(env, thiz);
|
||||
return tuner->tune(getFrontendSettings(env, type, settings));
|
||||
FrontendSettings setting = getFrontendSettings(env, type, settings);
|
||||
FrontendSettingsExt1_1 settingExt = getFrontendSettingsExt1_1(env, type, settings);
|
||||
return tuner->tune(setting, settingExt);
|
||||
}
|
||||
|
||||
static int android_media_tv_Tuner_stop_tune(JNIEnv *env, jobject thiz) {
|
||||
@@ -2681,8 +2833,9 @@ static int android_media_tv_Tuner_stop_tune(JNIEnv *env, jobject thiz) {
|
||||
static int android_media_tv_Tuner_scan(
|
||||
JNIEnv *env, jobject thiz, jint settingsType, jobject settings, jint scanType) {
|
||||
sp<JTuner> tuner = getTuner(env, thiz);
|
||||
return tuner->scan(getFrontendSettings(
|
||||
env, settingsType, settings), static_cast<FrontendScanType>(scanType));
|
||||
FrontendSettings setting = getFrontendSettings(env, settingsType, settings);
|
||||
FrontendSettingsExt1_1 settingExt = getFrontendSettingsExt1_1(env, settingsType, settings);
|
||||
return tuner->scan(setting, static_cast<FrontendScanType>(scanType), settingExt);
|
||||
}
|
||||
|
||||
static int android_media_tv_Tuner_stop_scan(JNIEnv *env, jobject thiz) {
|
||||
|
||||
@@ -55,6 +55,7 @@ using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendScanType;
|
||||
using ::android::hardware::tv::tuner::V1_0::FrontendSettings;
|
||||
using ::android::hardware::tv::tuner::V1_1::FrontendSettingsExt1_1;
|
||||
using ::android::hardware::tv::tuner::V1_0::IDemux;
|
||||
using ::android::hardware::tv::tuner::V1_0::IDescrambler;
|
||||
using ::android::hardware::tv::tuner::V1_0::IDvr;
|
||||
@@ -217,9 +218,10 @@ struct JTuner : public RefBase {
|
||||
jobject openFrontendById(int id);
|
||||
jint closeFrontendById(int id);
|
||||
jobject getFrontendInfo(int id);
|
||||
int tune(const FrontendSettings& settings);
|
||||
int tune(const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
|
||||
int stopTune();
|
||||
int scan(const FrontendSettings& settings, FrontendScanType scanType);
|
||||
int scan(const FrontendSettings& settings, FrontendScanType scanType,
|
||||
const FrontendSettingsExt1_1& settingsExt1_1);
|
||||
int stopScan();
|
||||
int setLnb(int id);
|
||||
int setLna(bool enable);
|
||||
|
||||
Reference in New Issue
Block a user