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);
}