Improve Tuner VTS Configuration

This CL allows vendors to configure the DVR Playback data flow in their
configuration files for the Tuner Hardware. Their connections were
checked to ensure their validity. Additionally, vendors can now give an
extra list of optional filters that can be utilized in the DVR Playback data flow.

Bug: b/182519645

Test: vts-tradefed run vts --module VtsHalTvTunerTargetTest
Change-Id: Ie77337508444672e327ac88a91e73c96bd80fb22
This commit is contained in:
Frankie Lizcano
2022-06-28 21:36:26 +00:00
parent 647d5aa84c
commit 5046193cd3
4 changed files with 49 additions and 2 deletions

View File

@@ -191,6 +191,7 @@ inline void connectHardwaresToTestCases() {
TunerTestingConfigAidlReader1_0::connectDescrambling(descrambling);
TunerTestingConfigAidlReader1_0::connectLnbLive(lnbLive);
TunerTestingConfigAidlReader1_0::connectLnbRecord(lnbRecord);
TunerTestingConfigAidlReader1_0::connectDvrPlayback(playback);
};
inline bool validateConnections() {
@@ -248,6 +249,8 @@ inline bool validateConnections() {
dvrIsValid &= lnbRecord.support ? dvrMap.find(lnbRecord.dvrRecordId) != dvrMap.end() : true;
dvrIsValid &= playback.support ? dvrMap.find(playback.dvrId) != dvrMap.end() : true;
if (!dvrIsValid) {
ALOGW("[vts config] dynamic config dvr connection is invalid.");
return false;
@@ -285,6 +288,19 @@ inline bool validateConnections() {
filterIsValid &= filterMap.find(filterId) != filterMap.end();
}
filterIsValid &= playback.support
? filterMap.find(playback.audioFilterId) != filterMap.end() &&
filterMap.find(playback.videoFilterId) != filterMap.end()
: true;
filterIsValid &= playback.sectionFilterId.compare(emptyHardwareId) == 0
? true
: filterMap.find(playback.sectionFilterId) != filterMap.end();
for (auto& filterId : playback.extraFilters) {
filterIsValid &=
playback.hasExtraFilters ? filterMap.find(filterId) != filterMap.end() : true;
}
if (!filterIsValid) {
ALOGW("[vts config] dynamic config filter connection is invalid.");
return false;

View File

@@ -146,12 +146,13 @@ struct ScanHardwareConnections {
struct DvrPlaybackHardwareConnections {
bool support;
bool hasExtraFilters = false;
string frontendId;
string dvrId;
string audioFilterId;
string videoFilterId;
string sectionFilterId;
/* list string of extra filters; */
vector<string> extraFilters;
};
struct DvrRecordHardwareConnections {
@@ -533,6 +534,13 @@ struct TunerTestingConfigAidlReader1_0 {
} else {
playback.sectionFilterId = emptyHardwareId;
}
if (playbackConfig.hasOptionalFilters() && !playback.hasExtraFilters) {
auto optionalFilters = playbackConfig.getFirstOptionalFilters()->getOptionalFilter();
for (size_t i = 0; i < optionalFilters.size(); ++i) {
playback.extraFilters.push_back(optionalFilters[i].getFilterId());
}
playback.hasExtraFilters = true;
}
}
static void connectDvrRecord(DvrRecordHardwareConnections& record) {

View File

@@ -83,14 +83,21 @@ package android.media.tuner.testing.configuration.V1_0 {
ctor public DataFlowConfiguration.DvrPlayback();
method @Nullable public String getAudioFilterConnection();
method @Nullable public String getDvrConnection();
method @Nullable public android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.DvrPlayback.OptionalFilters getOptionalFilters();
method @Nullable public String getSectionFilterConnection();
method @Nullable public String getVideoFilterConnection();
method public void setAudioFilterConnection(@Nullable String);
method public void setDvrConnection(@Nullable String);
method public void setOptionalFilters(@Nullable android.media.tuner.testing.configuration.V1_0.DataFlowConfiguration.DvrPlayback.OptionalFilters);
method public void setSectionFilterConnection(@Nullable String);
method public void setVideoFilterConnection(@Nullable String);
}
public static class DataFlowConfiguration.DvrPlayback.OptionalFilters {
ctor public DataFlowConfiguration.DvrPlayback.OptionalFilters();
method @Nullable public java.util.List<android.media.tuner.testing.configuration.V1_0.OptionalFilter> getOptionalFilter();
}
public static class DataFlowConfiguration.DvrRecord {
ctor public DataFlowConfiguration.DvrRecord();
method @Nullable public String getDvrRecordConnection();
@@ -496,6 +503,12 @@ package android.media.tuner.testing.configuration.V1_0 {
enum_constant public static final android.media.tuner.testing.configuration.V1_0.LnbVoltageEnum VOLTAGE_5V;
}
public class OptionalFilter {
ctor public OptionalFilter();
method @Nullable public String getFilterId();
method public void setFilterId(@Nullable String);
}
public class RecordFilterSettings {
ctor public RecordFilterSettings();
method @Nullable public android.media.tuner.testing.configuration.V1_0.ScIndexTypeEnum getScIndexType();

View File

@@ -664,7 +664,14 @@
<xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
<xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
<xs:attribute name="sectionFilterConnection" type="filterId" use="optional"/>
<!-- TODO: b/182519645 allow the users to insert extra filters -->
<xs:element name="optionalFilters" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="optionalFilter" type="optionalFilter" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--TODO: b/182519645 allow the users to insert extra filters/-->
</xs:complexType>
</xs:element>
<xs:element name="dvrRecord" minOccurs="0" maxOccurs="1">
@@ -743,4 +750,7 @@
<xs:field xpath="@id"/>
</xs:key>
</xs:element>
<xs:complexType name="optionalFilter">
<xs:attribute name="filterId" type="filterId" use="required"/>
</xs:complexType>
</xs:schema>