diff options
| author | 2021-02-05 18:28:36 +0000 | |
|---|---|---|
| committer | 2021-02-05 18:28:36 +0000 | |
| commit | 2d16f0aac2a16bde5bee0e342d131ffec2efe07e (patch) | |
| tree | 7d34fbf14cb774e79ad586a2161f1b8a680e2a44 | |
| parent | b333b92b3506fa63d7dd976cb362f5dbb972e4f8 (diff) | |
| parent | 46c31ece5b0256975a96a2593bf9cfb3379f17ad (diff) | |
Merge "Connect getStatus/getStatusExt between TunerFrontend and FrontendClient" into sc-dev
| -rw-r--r-- | media/jni/tuner/FilterClient.cpp | 26 | ||||
| -rw-r--r-- | media/jni/tuner/FrontendClient.cpp | 452 | ||||
| -rw-r--r-- | media/jni/tuner/FrontendClient.h | 4 |
3 files changed, 458 insertions, 24 deletions
diff --git a/media/jni/tuner/FilterClient.cpp b/media/jni/tuner/FilterClient.cpp index 2aaf96c758a1..8b4ca371056e 100644 --- a/media/jni/tuner/FilterClient.cpp +++ b/media/jni/tuner/FilterClient.cpp @@ -35,7 +35,7 @@ using ::aidl::android::media::tv::tuner::TunerFilterSectionTableInfo; using ::aidl::android::media::tv::tuner::TunerFilterSharedHandleInfo; using ::aidl::android::media::tv::tuner::TunerFilterTlvConfiguration; using ::aidl::android::media::tv::tuner::TunerFilterTsConfiguration; - +using ::android::hardware::hidl_vec; using ::android::hardware::tv::tuner::V1_0::DemuxFilterMainType; using ::android::hardware::tv::tuner::V1_0::DemuxMmtpFilterType; using ::android::hardware::tv::tuner::V1_0::DemuxQueueNotifyBits; @@ -703,10 +703,10 @@ void TunerFilterCallback::getHidlFilterEvent(const vector<TunerFilterEvent>& fil void TunerFilterCallback::getHidlMediaEvent( const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event) { + event.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { hidl_handle handle = hidl_handle(makeFromAidl(filterEvents[i] .get<TunerFilterEvent::media>().avMemory)); - event.events.resize(i + 1); event.events[i].media({ .avMemory = handle, .streamId = static_cast<DemuxStreamId>(filterEvents[i] @@ -752,9 +752,9 @@ void TunerFilterCallback::getHidlMediaEvent( void TunerFilterCallback::getHidlSectionEvent( const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event) { + event.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto section = filterEvents[i].get<TunerFilterEvent::section>(); - event.events.resize(i + 1); event.events[i].section({ .tableId = static_cast<uint16_t>(section.tableId), .version = static_cast<uint16_t>(section.version), @@ -766,9 +766,9 @@ void TunerFilterCallback::getHidlSectionEvent( void TunerFilterCallback::getHidlPesEvent( const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event) { + event.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto pes = filterEvents[i].get<TunerFilterEvent::pes>(); - event.events.resize(i + 1); event.events[i].pes({ .streamId = static_cast<DemuxStreamId>(pes.streamId), .dataLength = static_cast<uint16_t>(pes.dataLength), @@ -779,9 +779,10 @@ void TunerFilterCallback::getHidlPesEvent( void TunerFilterCallback::getHidlTsRecordEvent(const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event, DemuxFilterEventExt& eventExt) { + event.events.resize(filterEvents.size()); + eventExt.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto ts = filterEvents[i].get<TunerFilterEvent::tsRecord>(); - event.events.resize(i + 1); event.events[i].tsRecord({ .tsIndexMask = static_cast<uint32_t>(ts.tsIndexMask), .byteNumber = static_cast<uint64_t>(ts.byteNumber), @@ -803,7 +804,6 @@ void TunerFilterCallback::getHidlTsRecordEvent(const vector<TunerFilterEvent>& f break; } - eventExt.events.resize(i + 1); if (ts.isExtended) { eventExt.events[i].tsRecord({ .pts = static_cast<uint64_t>(ts.pts), @@ -817,15 +817,15 @@ void TunerFilterCallback::getHidlTsRecordEvent(const vector<TunerFilterEvent>& f void TunerFilterCallback::getHidlMmtpRecordEvent(const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event, DemuxFilterEventExt& eventExt) { + event.events.resize(filterEvents.size()); + eventExt.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto mmtp = filterEvents[i].get<TunerFilterEvent::mmtpRecord>(); - event.events.resize(i + 1); event.events[i].mmtpRecord({ .scHevcIndexMask = static_cast<uint32_t>(mmtp.scHevcIndexMask), .byteNumber = static_cast<uint64_t>(mmtp.byteNumber), }); - eventExt.events.resize(i + 1); if (mmtp.isExtended) { eventExt.events[i].mmtpRecord({ .pts = static_cast<uint64_t>(mmtp.pts), @@ -841,9 +841,9 @@ void TunerFilterCallback::getHidlMmtpRecordEvent(const vector<TunerFilterEvent>& void TunerFilterCallback::getHidlDownloadEvent(const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event) { + event.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto download = filterEvents[i].get<TunerFilterEvent::download>(); - event.events.resize(i + 1); event.events[i].download({ .itemId = static_cast<uint32_t>(download.itemId), .mpuSequenceNumber = static_cast<uint32_t>(download.mpuSequenceNumber), @@ -856,9 +856,9 @@ void TunerFilterCallback::getHidlDownloadEvent(const vector<TunerFilterEvent>& f void TunerFilterCallback::getHidlIpPayloadEvent(const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event) { + event.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto ip = filterEvents[i].get<TunerFilterEvent::ipPayload>(); - event.events.resize(i + 1); event.events[i].ipPayload({ .dataLength = static_cast<uint16_t>(ip.dataLength), }); @@ -867,15 +867,15 @@ void TunerFilterCallback::getHidlIpPayloadEvent(const vector<TunerFilterEvent>& void TunerFilterCallback::getHidlTemiEvent(const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event) { + event.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto temi = filterEvents[i].get<TunerFilterEvent::temi>(); - event.events.resize(i + 1); event.events[i].temi({ .pts = static_cast<uint64_t>(temi.pts), .descrTag = static_cast<uint8_t>(temi.descrTag), }); - vector<uint8_t> descrData(temi.descrData.size()); - copy(temi.descrData.begin(), temi.descrData.end(), descrData.begin()); + hidl_vec<uint8_t> descrData(temi.descrData.begin(), temi.descrData.end()); + event.events[i].temi().descrData = descrData; } } diff --git a/media/jni/tuner/FrontendClient.cpp b/media/jni/tuner/FrontendClient.cpp index 08573a61c623..f454907851a4 100644 --- a/media/jni/tuner/FrontendClient.cpp +++ b/media/jni/tuner/FrontendClient.cpp @@ -27,23 +27,43 @@ using ::aidl::android::media::tv::tuner::TunerFrontendUnionSettings; using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard; using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType; using ::android::hardware::tv::tuner::V1_0::FrontendAtscModulation; +using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Bandwidth; using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Modulation; +using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3TimeInterleaveMode; using ::android::hardware::tv::tuner::V1_0::FrontendDvbcAnnex; using ::android::hardware::tv::tuner::V1_0::FrontendDvbcModulation; +using ::android::hardware::tv::tuner::V1_0::FrontendDvbcSpectralInversion; using ::android::hardware::tv::tuner::V1_0::FrontendDvbsModulation; using ::android::hardware::tv::tuner::V1_0::FrontendDvbsStandard; +using ::android::hardware::tv::tuner::V1_0::FrontendDvbsRolloff; +using ::android::hardware::tv::tuner::V1_0::FrontendDvbtBandwidth; +using ::android::hardware::tv::tuner::V1_0::FrontendDvbtGuardInterval; using ::android::hardware::tv::tuner::V1_0::FrontendDvbtHierarchy; using ::android::hardware::tv::tuner::V1_0::FrontendDvbtStandard; +using ::android::hardware::tv::tuner::V1_0::FrontendInnerFec; using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsModulation; +using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsRolloff; using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Modulation; +using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Rolloff; +using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtBandwidth; +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::FrontendScanAtsc3PlpInfo; -using ::android::hardware::tv::tuner::V1_0::FrontendType; +using ::android::hardware::tv::tuner::V1_0::LnbVoltage; using ::android::hardware::tv::tuner::V1_1::Constant; +using ::android::hardware::tv::tuner::V1_1::FrontendCableTimeInterleaveMode; +using ::android::hardware::tv::tuner::V1_1::FrontendDtmbBandwidth; +using ::android::hardware::tv::tuner::V1_1::FrontendDtmbGuardInterval; using ::android::hardware::tv::tuner::V1_1::FrontendDtmbModulation; +using ::android::hardware::tv::tuner::V1_1::FrontendDtmbTimeInterleaveMode; +using ::android::hardware::tv::tuner::V1_1::FrontendDtmbTransmissionMode; +using ::android::hardware::tv::tuner::V1_1::FrontendDvbcBandwidth; using ::android::hardware::tv::tuner::V1_1::FrontendDvbtConstellation; +using ::android::hardware::tv::tuner::V1_1::FrontendDvbtTransmissionMode; using ::android::hardware::tv::tuner::V1_1::FrontendModulation; using ::android::hardware::tv::tuner::V1_1::FrontendSpectralInversion; +using ::android::hardware::tv::tuner::V1_1::FrontendType; namespace android { @@ -160,9 +180,16 @@ vector<FrontendStatus> FrontendClient::getStatus(vector<FrontendStatusType> stat vector<FrontendStatus> status; if (mTunerFrontend != NULL) { - // TODO: handle error message. - /*status = mTunerFrontend->getStatus(statusTypes); - return status;*/ + vector<TunerFrontendStatus> aidlStatus; + vector<int> types; + for (auto t : statusTypes) { + types.push_back((int)t); + } + Status s = mTunerFrontend->getStatus(types, &aidlStatus); + if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) { + return status; + } + return getHidlStatus(aidlStatus); } if (mFrontend != NULL && statusTypes.size() > 0) { @@ -180,14 +207,22 @@ vector<FrontendStatus> FrontendClient::getStatus(vector<FrontendStatusType> stat return status; } + vector<FrontendStatusExt1_1> FrontendClient::getStatusExtended_1_1( vector<FrontendStatusTypeExt1_1> statusTypes) { vector<FrontendStatusExt1_1> status; if (mTunerFrontend != NULL) { - // TODO: handle error message. - /*status = mTunerFrontend->getStatusExtended_1_1(statusTypes); - return status;*/ + vector<TunerFrontendStatus> aidlStatus; + vector<int> types; + for (auto t : statusTypes) { + types.push_back((int)t); + } + Status s = mTunerFrontend->getStatusExtended_1_1(types, &aidlStatus); + if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) { + return status; + } + return getHidlStatusExt(aidlStatus); } if (mFrontend_1_1 != NULL && statusTypes.size() > 0) { @@ -302,6 +337,400 @@ int FrontendClient::getId() { return mId; } +vector<FrontendStatus> FrontendClient::getHidlStatus(vector<TunerFrontendStatus>& aidlStatus) { + vector<FrontendStatus> hidlStatus; + for (TunerFrontendStatus s : aidlStatus) { + FrontendStatus status; + switch (s.getTag()) { + case TunerFrontendStatus::isDemodLocked: { + status.isDemodLocked(s.get<TunerFrontendStatus::isDemodLocked>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::snr: { + status.snr(s.get<TunerFrontendStatus::snr>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::ber: { + status.ber((uint32_t)s.get<TunerFrontendStatus::ber>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::per: { + status.per((uint32_t)s.get<TunerFrontendStatus::per>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::preBer: { + status.preBer((uint32_t)s.get<TunerFrontendStatus::preBer>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::signalQuality: { + status.signalQuality((uint32_t)s.get<TunerFrontendStatus::signalQuality>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::signalStrength: { + status.signalStrength(s.get<TunerFrontendStatus::signalStrength>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::symbolRate: { + status.symbolRate((uint32_t)s.get<TunerFrontendStatus::symbolRate>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::innerFec: { + status.innerFec(static_cast<FrontendInnerFec>( + s.get<TunerFrontendStatus::innerFec>())); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::modulation: { + auto aidlMod = s.get<TunerFrontendStatus::modulation>(); + switch (mType) { + case (int)FrontendType::DVBC: + status.modulation().dvbc(static_cast<FrontendDvbcModulation>(aidlMod)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DVBS: + status.modulation().dvbs(static_cast<FrontendDvbsModulation>(aidlMod)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBS: + status.modulation().isdbs(static_cast<FrontendIsdbsModulation>(aidlMod)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBS3: + status.modulation().isdbs3(static_cast<FrontendIsdbs3Modulation>(aidlMod)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBT: + status.modulation().isdbt(static_cast<FrontendIsdbtModulation>(aidlMod)); + hidlStatus.push_back(status); + break; + default: + break; + } + break; + } + case TunerFrontendStatus::inversion: { + status.inversion(static_cast<FrontendDvbcSpectralInversion>( + s.get<TunerFrontendStatus::inversion>())); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::lnbVoltage: { + status.lnbVoltage(static_cast<LnbVoltage>( + s.get<TunerFrontendStatus::lnbVoltage>())); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::plpId: { + status.plpId((uint8_t)s.get<TunerFrontendStatus::plpId>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isEWBS: { + status.isEWBS(s.get<TunerFrontendStatus::isEWBS>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::agc: { + status.agc((uint8_t)s.get<TunerFrontendStatus::agc>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isLnaOn: { + status.isLnaOn(s.get<TunerFrontendStatus::isLnaOn>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isLayerError: { + auto aidlE = s.get<TunerFrontendStatus::isLayerError>(); + hidl_vec<bool> e(aidlE.begin(), aidlE.end()); + status.isLayerError(e); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::mer: { + status.mer(s.get<TunerFrontendStatus::mer>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::freqOffset: { + status.freqOffset(s.get<TunerFrontendStatus::freqOffset>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::hierarchy: { + status.hierarchy(static_cast<FrontendDvbtHierarchy>( + s.get<TunerFrontendStatus::freqOffset>())); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isRfLocked: { + status.isRfLocked(s.get<TunerFrontendStatus::isRfLocked>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::plpInfo: { + int size = s.get<TunerFrontendStatus::plpInfo>().size(); + status.plpInfo().resize(size); + for (int i = 0; i < size; i++) { + auto aidlInfo = s.get<TunerFrontendStatus::plpInfo>()[i]; + status.plpInfo()[i] = { + .plpId = (uint8_t)aidlInfo.plpId, + .isLocked = aidlInfo.isLocked, + .uec = (uint32_t)aidlInfo.uec, + }; + } + hidlStatus.push_back(status); + break; + } + default: + break; + } + } + return hidlStatus; +} + +vector<FrontendStatusExt1_1> FrontendClient::getHidlStatusExt( + vector<TunerFrontendStatus>& aidlStatus) { + vector<FrontendStatusExt1_1> hidlStatus; + for (TunerFrontendStatus s : aidlStatus) { + FrontendStatusExt1_1 status; + switch (s.getTag()) { + case TunerFrontendStatus::modulations: { + for (auto aidlMod : s.get<TunerFrontendStatus::modulations>()) { + int size = status.modulations().size(); + status.modulations().resize(size + 1); + switch (mType) { + case (int)FrontendType::DVBC: + status.modulations()[size].dvbc( + static_cast<FrontendDvbcModulation>(aidlMod)); + break; + case (int)FrontendType::DVBS: + status.modulations()[size].dvbs( + static_cast<FrontendDvbsModulation>(aidlMod)); + break; + case (int)FrontendType::DVBT: + status.modulations()[size].dvbt( + static_cast<FrontendDvbtConstellation>(aidlMod)); + break; + case (int)FrontendType::ISDBS: + status.modulations()[size].isdbs( + static_cast<FrontendIsdbsModulation>(aidlMod)); + break; + case (int)FrontendType::ISDBS3: + status.modulations()[size].isdbs3( + static_cast<FrontendIsdbs3Modulation>(aidlMod)); + break; + case (int)FrontendType::ISDBT: + status.modulations()[size].isdbt( + static_cast<FrontendIsdbtModulation>(aidlMod)); + break; + case (int)FrontendType::ATSC: + status.modulations()[size].atsc( + static_cast<FrontendAtscModulation>(aidlMod)); + break; + case (int)FrontendType::ATSC3: + status.modulations()[size].atsc3( + static_cast<FrontendAtsc3Modulation>(aidlMod)); + break; + case (int)FrontendType::DTMB: + status.modulations()[size].dtmb( + static_cast<FrontendDtmbModulation>(aidlMod)); + break; + default: + status.modulations().resize(size); + break; + } + } + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::bers: { + auto aidlB = s.get<TunerFrontendStatus::bers>(); + hidl_vec<uint32_t> b(aidlB.begin(), aidlB.end()); + status.bers(b); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::codeRates: { + int size = s.get<TunerFrontendStatus::codeRates>().size(); + status.codeRates().resize(size); + for (int i = 0; i < size; i++) { + auto aidlCodeRate = s.get<TunerFrontendStatus::codeRates>()[i]; + status.codeRates()[i] = + static_cast<hardware::tv::tuner::V1_1::FrontendInnerFec>(aidlCodeRate); + } + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::bandwidth: { + auto aidlBand = s.get<TunerFrontendStatus::bandwidth>(); + switch (mType) { + case (int)FrontendType::ATSC3: + status.bandwidth().atsc3(static_cast<FrontendAtsc3Bandwidth>(aidlBand)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DVBC: + status.bandwidth().dvbc(static_cast<FrontendDvbcBandwidth>(aidlBand)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DVBT: + status.bandwidth().dvbt(static_cast<FrontendDvbtBandwidth>(aidlBand)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBT: + status.bandwidth().isdbt(static_cast<FrontendIsdbtBandwidth>(aidlBand)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DTMB: + status.bandwidth().dtmb(static_cast<FrontendDtmbBandwidth>(aidlBand)); + hidlStatus.push_back(status); + break; + default: + break; + } + break; + } + case TunerFrontendStatus::interval: { + auto aidlInter = s.get<TunerFrontendStatus::interval>(); + switch (mType) { + case (int)FrontendType::DVBT: + status.interval().dvbt(static_cast<FrontendDvbtGuardInterval>(aidlInter)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBT: + status.interval().isdbt(static_cast<FrontendIsdbtGuardInterval>(aidlInter)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DTMB: + status.interval().dtmb(static_cast<FrontendDtmbGuardInterval>(aidlInter)); + hidlStatus.push_back(status); + break; + default: + break; + } + break; + } + case TunerFrontendStatus::transmissionMode: { + auto aidlTran = s.get<TunerFrontendStatus::transmissionMode>(); + switch (mType) { + case (int)FrontendType::DVBT: + status.transmissionMode().dvbt( + static_cast<FrontendDvbtTransmissionMode>(aidlTran)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBT: + status.transmissionMode().isdbt(static_cast<FrontendIsdbtMode>(aidlTran)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DTMB: + status.transmissionMode().dtmb( + static_cast<FrontendDtmbTransmissionMode>(aidlTran)); + hidlStatus.push_back(status); + break; + default: + break; + } + break; + } + case TunerFrontendStatus::uec: { + status.uec((uint32_t)s.get<TunerFrontendStatus::uec>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::systemId: { + status.systemId((uint16_t)s.get<TunerFrontendStatus::systemId>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::interleaving: { + for (auto aidlInter : s.get<TunerFrontendStatus::interleaving>()) { + int size = status.interleaving().size(); + status.interleaving().resize(size + 1); + switch (mType) { + case (int)FrontendType::DVBC: + status.interleaving()[size].dvbc( + static_cast<FrontendCableTimeInterleaveMode>(aidlInter)); + break; + case (int)FrontendType::ATSC3: + status.interleaving()[size].atsc3( + static_cast<FrontendAtsc3TimeInterleaveMode>(aidlInter)); + break; + case (int)FrontendType::DTMB: + status.interleaving()[size].dtmb( + static_cast<FrontendDtmbTimeInterleaveMode>(aidlInter)); + break; + default: + status.interleaving().resize(size); + break; + } + } + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isdbtSegment: { + auto aidlSeg = s.get<TunerFrontendStatus::isdbtSegment>(); + hidl_vec<uint8_t> s(aidlSeg.begin(), aidlSeg.end()); + status.isdbtSegment(s); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::tsDataRate: { + auto aidlTs = s.get<TunerFrontendStatus::tsDataRate>(); + hidl_vec<uint32_t> ts(aidlTs.begin(), aidlTs.end()); + status.tsDataRate(ts); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::rollOff: { + auto aidlRoll = s.get<TunerFrontendStatus::rollOff>(); + switch (mType) { + case (int)FrontendType::DVBS: + status.rollOff().dvbs(static_cast<FrontendDvbsRolloff>(aidlRoll)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBS: + status.rollOff().isdbs(static_cast<FrontendIsdbsRolloff>(aidlRoll)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBS3: + status.rollOff().isdbs3(static_cast<FrontendIsdbs3Rolloff>(aidlRoll)); + hidlStatus.push_back(status); + break; + default: + break; + } + break; + } + case TunerFrontendStatus::isMiso: { + status.isMiso(s.get<TunerFrontendStatus::isMiso>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isLinear: { + status.isLinear(s.get<TunerFrontendStatus::isLinear>()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isShortFrames: { + status.isShortFrames(s.get<TunerFrontendStatus::isShortFrames>()); + hidlStatus.push_back(status); + break; + } + default: + break; + } + } + return hidlStatus; +} + TunerFrontendSettings FrontendClient::getAidlFrontendSettings(const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1) { bool isExtended = validateExtendedSettings(settingsExt1_1); @@ -686,14 +1115,15 @@ FrontendScanMessage TunerFrontendCallback::getHalScanMessage( vector<TunerFrontendScanAtsc3PlpInfo> plp = message.get<TunerFrontendScanMessage::atsc3PlpInfos>(); hidl_vec<FrontendScanAtsc3PlpInfo> plpInfo; - for (TunerFrontendScanAtsc3PlpInfo info : plp) { + int size = plp.size(); + plpInfo.resize(size); + for (int i = 0; i < size; i++) { + auto info = message.get<TunerFrontendScanMessage::atsc3PlpInfos>()[i]; FrontendScanAtsc3PlpInfo p{ .plpId = static_cast<uint8_t>(info.plpId), .bLlsFlag = info.llsFlag, }; - int size = plpInfo.size(); - plpInfo.resize(size + 1); - plpInfo[size] = p; + plpInfo[i] = p; } scanMessage.atsc3PlpInfos(plpInfo); break; diff --git a/media/jni/tuner/FrontendClient.h b/media/jni/tuner/FrontendClient.h index b0107ff174d4..298b3974aeb9 100644 --- a/media/jni/tuner/FrontendClient.h +++ b/media/jni/tuner/FrontendClient.h @@ -43,6 +43,7 @@ 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; +using ::aidl::android::media::tv::tuner::TunerFrontendStatus; using ::android::hardware::Return; using ::android::hardware::Void; @@ -182,6 +183,9 @@ public: int getId(); private: + vector<FrontendStatus> getHidlStatus(vector<TunerFrontendStatus>& aidlStatus); + vector<FrontendStatusExt1_1> getHidlStatusExt(vector<TunerFrontendStatus>& aidlStatus); + TunerFrontendSettings getAidlFrontendSettings( const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1); TunerFrontendAnalogSettings getAidlAnalogSettings( |