Fix support for platforms without Frontends
Fix: 227741234
Test: atest VtsHalTvTunerTargetTest
Change-Id: Ic3d74be776bbdb377541ea24fb890152ad632508
diff --git a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp
index c99da41..07e3e3c 100644
--- a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp
+++ b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTargetTest.cpp
@@ -640,6 +640,48 @@
testTimeFilter(timeFilterMap[timeFilter.timeFilterId]);
}
+static bool isEventProducingFilter(const FilterConfig& filterConfig) {
+ switch (filterConfig.type.mainType) {
+ case DemuxFilterMainType::TS: {
+ auto tsFilterType =
+ filterConfig.type.subType.get<DemuxFilterSubType::Tag::tsFilterType>();
+ return (tsFilterType == DemuxTsFilterType::SECTION ||
+ tsFilterType == DemuxTsFilterType::PES ||
+ tsFilterType == DemuxTsFilterType::AUDIO ||
+ tsFilterType == DemuxTsFilterType::VIDEO ||
+ tsFilterType == DemuxTsFilterType::RECORD ||
+ tsFilterType == DemuxTsFilterType::TEMI);
+ }
+ case DemuxFilterMainType::MMTP: {
+ auto mmtpFilterType =
+ filterConfig.type.subType.get<DemuxFilterSubType::Tag::mmtpFilterType>();
+ return (mmtpFilterType == DemuxMmtpFilterType::SECTION ||
+ mmtpFilterType == DemuxMmtpFilterType::PES ||
+ mmtpFilterType == DemuxMmtpFilterType::AUDIO ||
+ mmtpFilterType == DemuxMmtpFilterType::VIDEO ||
+ mmtpFilterType == DemuxMmtpFilterType::RECORD ||
+ mmtpFilterType == DemuxMmtpFilterType::DOWNLOAD);
+ }
+ case DemuxFilterMainType::IP: {
+ auto ipFilterType =
+ filterConfig.type.subType.get<DemuxFilterSubType::Tag::ipFilterType>();
+ return (ipFilterType == DemuxIpFilterType::SECTION);
+ }
+ case DemuxFilterMainType::TLV: {
+ auto tlvFilterType =
+ filterConfig.type.subType.get<DemuxFilterSubType::Tag::tlvFilterType>();
+ return (tlvFilterType == DemuxTlvFilterType::SECTION);
+ }
+ case DemuxFilterMainType::ALP: {
+ auto alpFilterType =
+ filterConfig.type.subType.get<DemuxFilterSubType::Tag::alpFilterType>();
+ return (alpFilterType == DemuxAlpFilterType::SECTION);
+ }
+ default:
+ return false;
+ }
+}
+
static bool isMediaFilter(const FilterConfig& filterConfig) {
switch (filterConfig.type.mainType) {
case DemuxFilterMainType::TS: {
@@ -685,6 +727,12 @@
// TODO: move boilerplate into text fixture
void TunerFilterAidlTest::testDelayHint(const FilterConfig& filterConf) {
+ if (!filterConf.timeDelayInMs && !filterConf.dataDelayInBytes) {
+ return;
+ }
+ if (!isEventProducingFilter(filterConf)) {
+ return;
+ }
int32_t feId;
int32_t demuxId;
std::shared_ptr<IDemux> demux;
@@ -707,11 +755,11 @@
// startTime needs to be set before calling setDelayHint.
auto startTime = std::chrono::steady_clock::now();
- auto timeDelayInMs = std::chrono::milliseconds(filterConf.timeDelayInMs);
- if (timeDelayInMs.count() > 0) {
+ int timeDelayInMs = filterConf.timeDelayInMs;
+ if (timeDelayInMs > 0) {
FilterDelayHint delayHint;
delayHint.hintType = FilterDelayHintType::TIME_DELAY_IN_MS;
- delayHint.hintValue = timeDelayInMs.count();
+ delayHint.hintValue = timeDelayInMs;
// setDelayHint should fail for media filters.
ASSERT_EQ(filter->setDelayHint(delayHint).isOk(), !mediaFilter);
@@ -733,6 +781,10 @@
auto cb = mFilterTests.getFilterCallbacks().at(filterId);
auto future =
cb->verifyFilterCallback([](const std::vector<DemuxFilterEvent>&) { return true; });
+
+ // The configure stage can also produce events, so we should set the delay
+ // hint beforehand.
+ ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
mFilterTests.startFilter(filterId);
auto timeout = std::chrono::seconds(30);
@@ -750,20 +802,16 @@
return true;
});
- // The configure stage can also produce events, so we should set the delay
- // hint beforehand.
- ASSERT_TRUE(mFilterTests.configFilter(filterConf.settings, filterId));
-
ASSERT_TRUE(mFilterTests.startFilter(filterId));
// block and wait for callback to be received.
ASSERT_EQ(future.wait_for(timeout), std::future_status::ready);
- auto duration = std::chrono::steady_clock::now() - startTime;
- bool delayHintTest = duration >= timeDelayInMs;
+ auto duration = std::chrono::steady_clock::now() - startTime;
+ bool delayHintTest = duration >= std::chrono::milliseconds(timeDelayInMs);
bool dataSizeTest = callbackSize >= dataDelayInBytes;
- if (timeDelayInMs.count() > 0 && dataDelayInBytes > 0) {
+ if (timeDelayInMs > 0 && dataDelayInBytes > 0) {
ASSERT_TRUE(delayHintTest || dataSizeTest);
} else {
// if only one of time delay / data delay is configured, one of them
@@ -781,7 +829,9 @@
TEST_P(TunerFilterAidlTest, FilterDelayHintTest) {
description("Test filter time delay hint.");
-
+ if (!live.hasFrontendConnection) {
+ return;
+ }
for (const auto& obj : filterMap) {
testDelayHint(obj.second);
}
diff --git a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h
index 5a72ba4..5f1f9c5 100644
--- a/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h
+++ b/tv/tuner/aidl/vts/functional/VtsHalTvTunerTestConfigurations.h
@@ -175,9 +175,14 @@
ALOGW("[vts config] Record must support either a DVR source or a Frontend source.");
return false;
}
- bool feIsValid = frontendMap.find(live.frontendId) != frontendMap.end() &&
- frontendMap.find(scan.frontendId) != frontendMap.end();
- feIsValid &= record.support ? frontendMap.find(record.frontendId) != frontendMap.end() : true;
+ bool feIsValid = live.hasFrontendConnection
+ ? frontendMap.find(live.frontendId) != frontendMap.end()
+ : true;
+ feIsValid &= scan.hasFrontendConnection ? frontendMap.find(scan.frontendId) != frontendMap.end()
+ : true;
+ feIsValid &= record.support && record.hasFrontendConnection
+ ? frontendMap.find(record.frontendId) != frontendMap.end()
+ : true;
if (!feIsValid) {
ALOGW("[vts config] dynamic config fe connection is invalid.");
@@ -204,8 +209,10 @@
return false;
}
- bool filterIsValid = filterMap.find(live.audioFilterId) != filterMap.end() &&
- filterMap.find(live.videoFilterId) != filterMap.end();
+ bool filterIsValid = (live.hasFrontendConnection)
+ ? filterMap.find(live.audioFilterId) != filterMap.end() &&
+ filterMap.find(live.videoFilterId) != filterMap.end()
+ : true;
filterIsValid &=
record.support ? filterMap.find(record.recordFilterId) != filterMap.end() : true;
diff --git a/tv/tuner/config/TunerTestingConfigAidlReaderV1_0.h b/tv/tuner/config/TunerTestingConfigAidlReaderV1_0.h
index 3009c4a..189f5fd 100644
--- a/tv/tuner/config/TunerTestingConfigAidlReaderV1_0.h
+++ b/tv/tuner/config/TunerTestingConfigAidlReaderV1_0.h
@@ -867,6 +867,8 @@
settings.set<DemuxFilterSettings::Tag::ip>(ip);
break;
case FilterSubTypeEnum::IP: {
+ type.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
+ DemuxIpFilterType::IP);
ip.ipAddr = readIpAddress(filterConfig),
ip.filterSettings
.set<DemuxIpFilterSettingsFilterSettings::Tag::bPassthrough>(