Merge "Connect Frontend Settings between TunerFrontend and FrontendClient" into sc-dev

This commit is contained in:
Amy Zhang
2021-02-04 02:23:32 +00:00
committed by Android (Google) Code Review
2 changed files with 247 additions and 27 deletions

View File

@@ -21,8 +21,8 @@
#include "FrontendClient.h"
using ::aidl::android::media::tv::tuner::TunerFrontendDvbtSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendScanAtsc3PlpInfo;
using ::aidl::android::media::tv::tuner::TunerFrontendUnionSettings;
using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard;
using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType;
@@ -43,6 +43,7 @@ using ::android::hardware::tv::tuner::V1_1::Constant;
using ::android::hardware::tv::tuner::V1_1::FrontendDtmbModulation;
using ::android::hardware::tv::tuner::V1_1::FrontendDvbtConstellation;
using ::android::hardware::tv::tuner::V1_1::FrontendModulation;
using ::android::hardware::tv::tuner::V1_1::FrontendSpectralInversion;
namespace android {
@@ -86,14 +87,13 @@ void FrontendClient::setHidlFrontend(sp<IFrontend> frontend) {
Result FrontendClient::tune(const FrontendSettings& settings,
const FrontendSettingsExt1_1& settingsExt1_1) {
if (mTunerFrontend != NULL) {
// TODO: aidl frontend settings to include Tuner HAL 1.1 settings
TunerFrontendSettings tunerFeSettings = getAidlFrontendSettings(settings, settingsExt1_1);
Status s = mTunerFrontend->tune(tunerFeSettings);
return ClientHelper::getServiceSpecificErrorCode(s);
}
Result result;
if (mFrontend_1_1 != NULL) {
if (mFrontend_1_1 != NULL && validateExtendedSettings(settingsExt1_1)) {
result = mFrontend_1_1->tune_1_1(settings, settingsExt1_1);
return result;
}
@@ -123,14 +123,13 @@ Result FrontendClient::stopTune() {
Result FrontendClient::scan(const FrontendSettings& settings, FrontendScanType type,
const FrontendSettingsExt1_1& settingsExt1_1) {
if (mTunerFrontend != NULL) {
// TODO: aidl frontend settings to include Tuner HAL 1.1 settings
TunerFrontendSettings tunerFeSettings = getAidlFrontendSettings(settings, settingsExt1_1);
Status s = mTunerFrontend->scan(tunerFeSettings, (int)type);
return ClientHelper::getServiceSpecificErrorCode(s);
}
Result result;
if (mFrontend_1_1 != NULL) {
if (mFrontend_1_1 != NULL && validateExtendedSettings(settingsExt1_1)) {
result = mFrontend_1_1->scan_1_1(settings, type, settingsExt1_1);
return result;
}
@@ -293,6 +292,8 @@ Result FrontendClient::close() {
return Result::INVALID_STATE;
}
/////////////// TunerFrontend Helper Methods ///////////////////////
shared_ptr<ITunerFrontend> FrontendClient::getAidlFrontend() {
return mTunerFrontend;
}
@@ -302,52 +303,59 @@ int FrontendClient::getId() {
}
TunerFrontendSettings FrontendClient::getAidlFrontendSettings(const FrontendSettings& settings,
const FrontendSettingsExt1_1& /*settingsExt1_1*/) {
// TODO: complete hidl to aidl frontend settings conversion
TunerFrontendSettings s;
const FrontendSettingsExt1_1& settingsExt1_1) {
bool isExtended = validateExtendedSettings(settingsExt1_1);
TunerFrontendSettings s{
.isExtended = isExtended,
.endFrequency = (int) settingsExt1_1.endFrequency,
.inversion = (int) settingsExt1_1.inversion,
};
if (settingsExt1_1.settingExt.getDiscriminator()
== FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dtmb) {
s.settings.set<TunerFrontendUnionSettings::dtmb>(getAidlDtmbSettings(settingsExt1_1));
return s;
}
switch (settings.getDiscriminator()) {
case FrontendSettings::hidl_discriminator::analog: {
s.settings.set<TunerFrontendUnionSettings::analog>(
getAidlAnalogSettings(settings, settingsExt1_1));
break;
}
case FrontendSettings::hidl_discriminator::atsc: {
s.settings.set<TunerFrontendUnionSettings::atsc>(getAidlAtscSettings(settings));
break;
}
case FrontendSettings::hidl_discriminator::atsc3: {
s.settings.set<TunerFrontendUnionSettings::atsc3>(getAidlAtsc3Settings(settings));
break;
}
case FrontendSettings::hidl_discriminator::dvbs: {
s.settings.set<TunerFrontendUnionSettings::dvbs>(
getAidlDvbsSettings(settings, settingsExt1_1));
break;
}
case FrontendSettings::hidl_discriminator::dvbc: {
s.settings.set<TunerFrontendUnionSettings::cable>(
getAidlCableSettings(settings, settingsExt1_1));
break;
}
case FrontendSettings::hidl_discriminator::dvbt: {
TunerFrontendDvbtSettings dvbtSettings{
.frequency = (int)settings.dvbt().frequency,
.transmissionMode = (int)settings.dvbt().transmissionMode,
.bandwidth = (int)settings.dvbt().bandwidth,
.constellation = (int)settings.dvbt().constellation,
.hierarchy = (int)settings.dvbt().hierarchy,
.hpCodeRate = (int)settings.dvbt().hpCoderate,
.lpCodeRate = (int)settings.dvbt().lpCoderate,
.guardInterval = (int)settings.dvbt().guardInterval,
.isHighPriority = settings.dvbt().isHighPriority,
.standard = (int)settings.dvbt().standard,
.isMiso = settings.dvbt().isMiso,
.plpMode = (int)settings.dvbt().plpMode,
.plpId = (int)settings.dvbt().plpId,
.plpGroupId = (int)settings.dvbt().plpGroupId,
};
s.set<TunerFrontendSettings::dvbt>(dvbtSettings);
s.settings.set<TunerFrontendUnionSettings::dvbt>(
getAidlDvbtSettings(settings, settingsExt1_1));
break;
}
case FrontendSettings::hidl_discriminator::isdbs: {
s.settings.set<TunerFrontendUnionSettings::isdbs>(getAidlIsdbsSettings(settings));
break;
}
case FrontendSettings::hidl_discriminator::isdbs3: {
s.settings.set<TunerFrontendUnionSettings::isdbs3>(getAidlIsdbs3Settings(settings));
break;
}
case FrontendSettings::hidl_discriminator::isdbt: {
s.settings.set<TunerFrontendUnionSettings::isdbt>(getAidlIsdbtSettings(settings));
break;
}
default:
@@ -356,6 +364,192 @@ TunerFrontendSettings FrontendClient::getAidlFrontendSettings(const FrontendSett
return s;
}
TunerFrontendAnalogSettings FrontendClient::getAidlAnalogSettings(const FrontendSettings& settings,
const FrontendSettingsExt1_1& settingsExt1_1) {
TunerFrontendAnalogSettings analogSettings{
.frequency = (int)settings.analog().frequency,
.signalType = (int)settings.analog().type,
.sifStandard = (int)settings.analog().sifStandard,
};
if (settingsExt1_1.settingExt.getDiscriminator()
== FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::analog) {
analogSettings.isExtended = true;
analogSettings.aftFlag = (int)settingsExt1_1.settingExt.analog().aftFlag;
} else {
analogSettings.isExtended = false;
}
return analogSettings;
}
TunerFrontendDvbsSettings FrontendClient::getAidlDvbsSettings(const FrontendSettings& settings,
const FrontendSettingsExt1_1& settingsExt1_1) {
TunerFrontendDvbsSettings dvbsSettings{
.frequency = (int)settings.dvbs().frequency,
.modulation = (int)settings.dvbs().modulation,
.codeRate = {
.fec = (long)settings.dvbs().coderate.fec,
.isLinear = settings.dvbs().coderate.isLinear,
.isShortFrames = settings.dvbs().coderate.isShortFrames,
.bitsPer1000Symbol = (int)settings.dvbs().coderate.bitsPer1000Symbol,
},
.symbolRate = (int)settings.dvbs().symbolRate,
.rolloff = (int)settings.dvbs().rolloff,
.pilot = (int)settings.dvbs().pilot,
.inputStreamId = (int)settings.dvbs().inputStreamId,
.standard = (int)settings.dvbs().standard,
.vcm = (int)settings.dvbs().vcmMode,
};
if (settingsExt1_1.settingExt.getDiscriminator()
== FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dvbs) {
dvbsSettings.isExtended = true;
dvbsSettings.scanType = (int)settingsExt1_1.settingExt.dvbs().scanType;
dvbsSettings.isDiseqcRxMessage = settingsExt1_1.settingExt.dvbs().isDiseqcRxMessage;
} else {
dvbsSettings.isExtended = false;
}
return dvbsSettings;
}
TunerFrontendCableSettings FrontendClient::getAidlCableSettings(const FrontendSettings& settings,
const FrontendSettingsExt1_1& settingsExt1_1) {
TunerFrontendCableSettings cableSettings{
.frequency = (int)settings.dvbc().frequency,
.modulation = (int)settings.dvbc().modulation,
.innerFec = (long)settings.dvbc().fec,
.symbolRate = (int)settings.dvbc().symbolRate,
.outerFec = (int)settings.dvbc().outerFec,
.annex = (int)settings.dvbc().annex,
.spectralInversion = (int)settings.dvbc().spectralInversion,
};
if (settingsExt1_1.settingExt.getDiscriminator()
== FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dvbc) {
cableSettings.isExtended = true;
cableSettings.interleaveMode = (int)settingsExt1_1.settingExt.dvbc().interleaveMode;
cableSettings.bandwidth = (int)settingsExt1_1.settingExt.dvbc().bandwidth;
} else {
cableSettings.isExtended = false;
}
return cableSettings;
}
TunerFrontendDvbtSettings FrontendClient::getAidlDvbtSettings(const FrontendSettings& settings,
const FrontendSettingsExt1_1& settingsExt1_1) {
TunerFrontendDvbtSettings dvbtSettings{
.frequency = (int)settings.dvbt().frequency,
.transmissionMode = (int)settings.dvbt().transmissionMode,
.bandwidth = (int)settings.dvbt().bandwidth,
.constellation = (int)settings.dvbt().constellation,
.hierarchy = (int)settings.dvbt().hierarchy,
.hpCodeRate = (int)settings.dvbt().hpCoderate,
.lpCodeRate = (int)settings.dvbt().lpCoderate,
.guardInterval = (int)settings.dvbt().guardInterval,
.isHighPriority = settings.dvbt().isHighPriority,
.standard = (int)settings.dvbt().standard,
.isMiso = settings.dvbt().isMiso,
.plpMode = (int)settings.dvbt().plpMode,
.plpId = (int)settings.dvbt().plpId,
.plpGroupId = (int)settings.dvbt().plpGroupId,
};
if (settingsExt1_1.settingExt.getDiscriminator()
== FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dvbt) {
dvbtSettings.isExtended = true;
dvbtSettings.constellation = (int)settingsExt1_1.settingExt.dvbt().constellation;
dvbtSettings.transmissionMode =
(int)settingsExt1_1.settingExt.dvbt().transmissionMode;
} else {
dvbtSettings.isExtended = false;
}
return dvbtSettings;
}
TunerFrontendDtmbSettings FrontendClient::getAidlDtmbSettings(
const FrontendSettingsExt1_1& settingsExt1_1) {
TunerFrontendDtmbSettings dtmbSettings{
.frequency = (int)settingsExt1_1.settingExt.dtmb().frequency,
.transmissionMode = (int)settingsExt1_1.settingExt.dtmb().transmissionMode,
.bandwidth = (int)settingsExt1_1.settingExt.dtmb().bandwidth,
.modulation = (int)settingsExt1_1.settingExt.dtmb().modulation,
.codeRate = (int)settingsExt1_1.settingExt.dtmb().codeRate,
.guardInterval = (int)settingsExt1_1.settingExt.dtmb().guardInterval,
.interleaveMode = (int)settingsExt1_1.settingExt.dtmb().interleaveMode,
};
return dtmbSettings;
}
TunerFrontendAtscSettings FrontendClient::getAidlAtscSettings(const FrontendSettings& settings) {
TunerFrontendAtscSettings atscSettings{
.frequency = (int)settings.atsc().frequency,
.modulation = (int)settings.atsc().modulation,
};
return atscSettings;
}
TunerFrontendAtsc3Settings FrontendClient::getAidlAtsc3Settings(const FrontendSettings& settings) {
TunerFrontendAtsc3Settings atsc3Settings{
.frequency = (int)settings.atsc3().frequency,
.bandwidth = (int)settings.atsc3().bandwidth,
.demodOutputFormat = (int)settings.atsc3().demodOutputFormat,
};
atsc3Settings.plpSettings.resize(settings.atsc3().plpSettings.size());
for (auto plpSetting : settings.atsc3().plpSettings) {
atsc3Settings.plpSettings.push_back({
.plpId = (int)plpSetting.plpId,
.modulation = (int)plpSetting.modulation,
.interleaveMode = (int)plpSetting.interleaveMode,
.codeRate = (int)plpSetting.codeRate,
.fec = (int)plpSetting.fec,
});
}
return atsc3Settings;
}
TunerFrontendIsdbsSettings FrontendClient::getAidlIsdbsSettings(const FrontendSettings& settings) {
TunerFrontendIsdbsSettings isdbsSettings{
.frequency = (int)settings.isdbs().frequency,
.streamId = (int)settings.isdbs().streamId,
.streamIdType = (int)settings.isdbs().streamIdType,
.modulation = (int)settings.isdbs().modulation,
.codeRate = (int)settings.isdbs().coderate,
.symbolRate = (int)settings.isdbs().symbolRate,
.rolloff = (int)settings.isdbs().rolloff,
};
return isdbsSettings;
}
TunerFrontendIsdbs3Settings FrontendClient::getAidlIsdbs3Settings(
const FrontendSettings& settings) {
TunerFrontendIsdbs3Settings isdbs3Settings{
.frequency = (int)settings.isdbs3().frequency,
.streamId = (int)settings.isdbs3().streamId,
.streamIdType = (int)settings.isdbs3().streamIdType,
.modulation = (int)settings.isdbs3().modulation,
.codeRate = (int)settings.isdbs3().coderate,
.symbolRate = (int)settings.isdbs3().symbolRate,
.rolloff = (int)settings.isdbs3().rolloff,
};
return isdbs3Settings;
}
TunerFrontendIsdbtSettings FrontendClient::getAidlIsdbtSettings(const FrontendSettings& settings) {
TunerFrontendIsdbtSettings isdbtSettings{
.frequency = (int)settings.isdbt().frequency,
.modulation = (int)settings.isdbt().modulation,
.bandwidth = (int)settings.isdbt().bandwidth,
.mode = (int)settings.isdbt().mode,
.codeRate = (int)settings.isdbt().coderate,
.guardInterval = (int)settings.isdbt().guardInterval,
.serviceAreaId = (int)settings.isdbt().serviceAreaId,
};
return isdbtSettings;
}
bool FrontendClient::validateExtendedSettings(const FrontendSettingsExt1_1& settingsExt1_1) {
return settingsExt1_1.endFrequency != (uint32_t)Constant::INVALID_FRONTEND_SETTING_FREQUENCY
|| settingsExt1_1.inversion != FrontendSpectralInversion::UNDEFINED
|| settingsExt1_1.settingExt.getDiscriminator()
!= FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::noinit;
}
/////////////// TunerFrontendCallback ///////////////////////
TunerFrontendCallback::TunerFrontendCallback(sp<FrontendClientCallback> frontendClientCallback)

View File

@@ -31,6 +31,16 @@ using Status = ::ndk::ScopedAStatus;
using ::aidl::android::media::tv::tuner::BnTunerFrontendCallback;
using ::aidl::android::media::tv::tuner::ITunerFrontend;
using ::aidl::android::media::tv::tuner::TunerFrontendAnalogSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendAtscSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3Settings;
using ::aidl::android::media::tv::tuner::TunerFrontendCableSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendDvbsSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendDvbtSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendDtmbSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendIsdbsSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendIsdbs3Settings;
using ::aidl::android::media::tv::tuner::TunerFrontendIsdbtSettings;
using ::aidl::android::media::tv::tuner::TunerFrontendScanMessage;
using ::aidl::android::media::tv::tuner::TunerFrontendSettings;
@@ -172,8 +182,24 @@ public:
int getId();
private:
TunerFrontendSettings getAidlFrontendSettings(const FrontendSettings& settings,
const FrontendSettingsExt1_1& settingsExt1_1);
TunerFrontendSettings getAidlFrontendSettings(
const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
TunerFrontendAnalogSettings getAidlAnalogSettings(
const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
TunerFrontendDvbsSettings getAidlDvbsSettings(
const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
TunerFrontendCableSettings getAidlCableSettings(
const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
TunerFrontendDvbtSettings getAidlDvbtSettings(
const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
TunerFrontendDtmbSettings getAidlDtmbSettings(const FrontendSettingsExt1_1& settingsExt1_1);
TunerFrontendAtscSettings getAidlAtscSettings(const FrontendSettings& settings);
TunerFrontendAtsc3Settings getAidlAtsc3Settings(const FrontendSettings& settings);
TunerFrontendIsdbsSettings getAidlIsdbsSettings(const FrontendSettings& settings);
TunerFrontendIsdbs3Settings getAidlIsdbs3Settings(const FrontendSettings& settings);
TunerFrontendIsdbtSettings getAidlIsdbtSettings(const FrontendSettings& settings);
bool validateExtendedSettings(const FrontendSettingsExt1_1& settingsExt1_1);
/**
* An AIDL Tuner Frontend Singleton assigned at the first time when the Tuner Client