diff --git a/media/jni/tuner/FilterClient.cpp b/media/jni/tuner/FilterClient.cpp index 2aaf96c758a1f..8b4ca371056ee 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& fil void TunerFilterCallback::getHidlMediaEvent( const vector& 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().avMemory)); - event.events.resize(i + 1); event.events[i].media({ .avMemory = handle, .streamId = static_cast(filterEvents[i] @@ -752,9 +752,9 @@ void TunerFilterCallback::getHidlMediaEvent( void TunerFilterCallback::getHidlSectionEvent( const vector& filterEvents, DemuxFilterEvent& event) { + event.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto section = filterEvents[i].get(); - event.events.resize(i + 1); event.events[i].section({ .tableId = static_cast(section.tableId), .version = static_cast(section.version), @@ -766,9 +766,9 @@ void TunerFilterCallback::getHidlSectionEvent( void TunerFilterCallback::getHidlPesEvent( const vector& filterEvents, DemuxFilterEvent& event) { + event.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto pes = filterEvents[i].get(); - event.events.resize(i + 1); event.events[i].pes({ .streamId = static_cast(pes.streamId), .dataLength = static_cast(pes.dataLength), @@ -779,9 +779,10 @@ void TunerFilterCallback::getHidlPesEvent( void TunerFilterCallback::getHidlTsRecordEvent(const vector& 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(); - event.events.resize(i + 1); event.events[i].tsRecord({ .tsIndexMask = static_cast(ts.tsIndexMask), .byteNumber = static_cast(ts.byteNumber), @@ -803,7 +804,6 @@ void TunerFilterCallback::getHidlTsRecordEvent(const vector& f break; } - eventExt.events.resize(i + 1); if (ts.isExtended) { eventExt.events[i].tsRecord({ .pts = static_cast(ts.pts), @@ -817,15 +817,15 @@ void TunerFilterCallback::getHidlTsRecordEvent(const vector& f void TunerFilterCallback::getHidlMmtpRecordEvent(const vector& 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(); - event.events.resize(i + 1); event.events[i].mmtpRecord({ .scHevcIndexMask = static_cast(mmtp.scHevcIndexMask), .byteNumber = static_cast(mmtp.byteNumber), }); - eventExt.events.resize(i + 1); if (mmtp.isExtended) { eventExt.events[i].mmtpRecord({ .pts = static_cast(mmtp.pts), @@ -841,9 +841,9 @@ void TunerFilterCallback::getHidlMmtpRecordEvent(const vector& void TunerFilterCallback::getHidlDownloadEvent(const vector& filterEvents, DemuxFilterEvent& event) { + event.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto download = filterEvents[i].get(); - event.events.resize(i + 1); event.events[i].download({ .itemId = static_cast(download.itemId), .mpuSequenceNumber = static_cast(download.mpuSequenceNumber), @@ -856,9 +856,9 @@ void TunerFilterCallback::getHidlDownloadEvent(const vector& f void TunerFilterCallback::getHidlIpPayloadEvent(const vector& filterEvents, DemuxFilterEvent& event) { + event.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto ip = filterEvents[i].get(); - event.events.resize(i + 1); event.events[i].ipPayload({ .dataLength = static_cast(ip.dataLength), }); @@ -867,15 +867,15 @@ void TunerFilterCallback::getHidlIpPayloadEvent(const vector& void TunerFilterCallback::getHidlTemiEvent(const vector& filterEvents, DemuxFilterEvent& event) { + event.events.resize(filterEvents.size()); for (int i = 0; i < filterEvents.size(); i++) { auto temi = filterEvents[i].get(); - event.events.resize(i + 1); event.events[i].temi({ .pts = static_cast(temi.pts), .descrTag = static_cast(temi.descrTag), }); - vector descrData(temi.descrData.size()); - copy(temi.descrData.begin(), temi.descrData.end(), descrData.begin()); + hidl_vec 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 08573a61c6231..f454907851a4a 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 FrontendClient::getStatus(vector stat vector status; if (mTunerFrontend != NULL) { - // TODO: handle error message. - /*status = mTunerFrontend->getStatus(statusTypes); - return status;*/ + vector aidlStatus; + vector 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 FrontendClient::getStatus(vector stat return status; } + vector FrontendClient::getStatusExtended_1_1( vector statusTypes) { vector status; if (mTunerFrontend != NULL) { - // TODO: handle error message. - /*status = mTunerFrontend->getStatusExtended_1_1(statusTypes); - return status;*/ + vector aidlStatus; + vector 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 FrontendClient::getHidlStatus(vector& aidlStatus) { + vector hidlStatus; + for (TunerFrontendStatus s : aidlStatus) { + FrontendStatus status; + switch (s.getTag()) { + case TunerFrontendStatus::isDemodLocked: { + status.isDemodLocked(s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::snr: { + status.snr(s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::ber: { + status.ber((uint32_t)s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::per: { + status.per((uint32_t)s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::preBer: { + status.preBer((uint32_t)s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::signalQuality: { + status.signalQuality((uint32_t)s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::signalStrength: { + status.signalStrength(s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::symbolRate: { + status.symbolRate((uint32_t)s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::innerFec: { + status.innerFec(static_cast( + s.get())); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::modulation: { + auto aidlMod = s.get(); + switch (mType) { + case (int)FrontendType::DVBC: + status.modulation().dvbc(static_cast(aidlMod)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DVBS: + status.modulation().dvbs(static_cast(aidlMod)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBS: + status.modulation().isdbs(static_cast(aidlMod)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBS3: + status.modulation().isdbs3(static_cast(aidlMod)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBT: + status.modulation().isdbt(static_cast(aidlMod)); + hidlStatus.push_back(status); + break; + default: + break; + } + break; + } + case TunerFrontendStatus::inversion: { + status.inversion(static_cast( + s.get())); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::lnbVoltage: { + status.lnbVoltage(static_cast( + s.get())); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::plpId: { + status.plpId((uint8_t)s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isEWBS: { + status.isEWBS(s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::agc: { + status.agc((uint8_t)s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isLnaOn: { + status.isLnaOn(s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isLayerError: { + auto aidlE = s.get(); + hidl_vec e(aidlE.begin(), aidlE.end()); + status.isLayerError(e); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::mer: { + status.mer(s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::freqOffset: { + status.freqOffset(s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::hierarchy: { + status.hierarchy(static_cast( + s.get())); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isRfLocked: { + status.isRfLocked(s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::plpInfo: { + int size = s.get().size(); + status.plpInfo().resize(size); + for (int i = 0; i < size; i++) { + auto aidlInfo = s.get()[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 FrontendClient::getHidlStatusExt( + vector& aidlStatus) { + vector hidlStatus; + for (TunerFrontendStatus s : aidlStatus) { + FrontendStatusExt1_1 status; + switch (s.getTag()) { + case TunerFrontendStatus::modulations: { + for (auto aidlMod : s.get()) { + int size = status.modulations().size(); + status.modulations().resize(size + 1); + switch (mType) { + case (int)FrontendType::DVBC: + status.modulations()[size].dvbc( + static_cast(aidlMod)); + break; + case (int)FrontendType::DVBS: + status.modulations()[size].dvbs( + static_cast(aidlMod)); + break; + case (int)FrontendType::DVBT: + status.modulations()[size].dvbt( + static_cast(aidlMod)); + break; + case (int)FrontendType::ISDBS: + status.modulations()[size].isdbs( + static_cast(aidlMod)); + break; + case (int)FrontendType::ISDBS3: + status.modulations()[size].isdbs3( + static_cast(aidlMod)); + break; + case (int)FrontendType::ISDBT: + status.modulations()[size].isdbt( + static_cast(aidlMod)); + break; + case (int)FrontendType::ATSC: + status.modulations()[size].atsc( + static_cast(aidlMod)); + break; + case (int)FrontendType::ATSC3: + status.modulations()[size].atsc3( + static_cast(aidlMod)); + break; + case (int)FrontendType::DTMB: + status.modulations()[size].dtmb( + static_cast(aidlMod)); + break; + default: + status.modulations().resize(size); + break; + } + } + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::bers: { + auto aidlB = s.get(); + hidl_vec b(aidlB.begin(), aidlB.end()); + status.bers(b); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::codeRates: { + int size = s.get().size(); + status.codeRates().resize(size); + for (int i = 0; i < size; i++) { + auto aidlCodeRate = s.get()[i]; + status.codeRates()[i] = + static_cast(aidlCodeRate); + } + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::bandwidth: { + auto aidlBand = s.get(); + switch (mType) { + case (int)FrontendType::ATSC3: + status.bandwidth().atsc3(static_cast(aidlBand)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DVBC: + status.bandwidth().dvbc(static_cast(aidlBand)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DVBT: + status.bandwidth().dvbt(static_cast(aidlBand)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBT: + status.bandwidth().isdbt(static_cast(aidlBand)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DTMB: + status.bandwidth().dtmb(static_cast(aidlBand)); + hidlStatus.push_back(status); + break; + default: + break; + } + break; + } + case TunerFrontendStatus::interval: { + auto aidlInter = s.get(); + switch (mType) { + case (int)FrontendType::DVBT: + status.interval().dvbt(static_cast(aidlInter)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBT: + status.interval().isdbt(static_cast(aidlInter)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DTMB: + status.interval().dtmb(static_cast(aidlInter)); + hidlStatus.push_back(status); + break; + default: + break; + } + break; + } + case TunerFrontendStatus::transmissionMode: { + auto aidlTran = s.get(); + switch (mType) { + case (int)FrontendType::DVBT: + status.transmissionMode().dvbt( + static_cast(aidlTran)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBT: + status.transmissionMode().isdbt(static_cast(aidlTran)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::DTMB: + status.transmissionMode().dtmb( + static_cast(aidlTran)); + hidlStatus.push_back(status); + break; + default: + break; + } + break; + } + case TunerFrontendStatus::uec: { + status.uec((uint32_t)s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::systemId: { + status.systemId((uint16_t)s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::interleaving: { + for (auto aidlInter : s.get()) { + int size = status.interleaving().size(); + status.interleaving().resize(size + 1); + switch (mType) { + case (int)FrontendType::DVBC: + status.interleaving()[size].dvbc( + static_cast(aidlInter)); + break; + case (int)FrontendType::ATSC3: + status.interleaving()[size].atsc3( + static_cast(aidlInter)); + break; + case (int)FrontendType::DTMB: + status.interleaving()[size].dtmb( + static_cast(aidlInter)); + break; + default: + status.interleaving().resize(size); + break; + } + } + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isdbtSegment: { + auto aidlSeg = s.get(); + hidl_vec s(aidlSeg.begin(), aidlSeg.end()); + status.isdbtSegment(s); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::tsDataRate: { + auto aidlTs = s.get(); + hidl_vec ts(aidlTs.begin(), aidlTs.end()); + status.tsDataRate(ts); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::rollOff: { + auto aidlRoll = s.get(); + switch (mType) { + case (int)FrontendType::DVBS: + status.rollOff().dvbs(static_cast(aidlRoll)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBS: + status.rollOff().isdbs(static_cast(aidlRoll)); + hidlStatus.push_back(status); + break; + case (int)FrontendType::ISDBS3: + status.rollOff().isdbs3(static_cast(aidlRoll)); + hidlStatus.push_back(status); + break; + default: + break; + } + break; + } + case TunerFrontendStatus::isMiso: { + status.isMiso(s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isLinear: { + status.isLinear(s.get()); + hidlStatus.push_back(status); + break; + } + case TunerFrontendStatus::isShortFrames: { + status.isShortFrames(s.get()); + 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 plp = message.get(); hidl_vec plpInfo; - for (TunerFrontendScanAtsc3PlpInfo info : plp) { + int size = plp.size(); + plpInfo.resize(size); + for (int i = 0; i < size; i++) { + auto info = message.get()[i]; FrontendScanAtsc3PlpInfo p{ .plpId = static_cast(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 b0107ff174d41..298b3974aeb99 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 getHidlStatus(vector& aidlStatus); + vector getHidlStatusExt(vector& aidlStatus); + TunerFrontendSettings getAidlFrontendSettings( const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1); TunerFrontendAnalogSettings getAidlAnalogSettings(