Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f535212b authored by Frankie Lizcano's avatar Frankie Lizcano
Browse files

Improve Tuner VTS Configuration: Enable Descrambling

This CL allows vendors to configure the Descrambling 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 data flow.

Bug: b/182519645

Test: vts-tradefed run vts --module VtsHalTvTunerTargetTest
Change-Id: Iaa216876307571afa3ae6baf4624d0da14657439
parent 1fd52970
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ bool initConfiguration() {
    initFilterConfig();
    initDvrConfig();
    initTimeFilterConfig();
    initDescramblerConfig();
    connectHardwaresToTestCases();
    if (!validateConnections()) {
        ALOGW("[vts] failed to validate connections.");
+37 −0
Original line number Diff line number Diff line
@@ -167,12 +167,18 @@ inline void initTimeFilterConfig() {
    TunerTestingConfigAidlReader1_0::readTimeFilterConfig1_0(timeFilterMap);
};

inline void initDescramblerConfig() {
    // Read customized config
    TunerTestingConfigAidlReader1_0::readDescramblerConfig1_0(descramblerMap);
}

/** Read the vendor configurations of which hardware to use for each test cases/data flows */
inline void connectHardwaresToTestCases() {
    TunerTestingConfigAidlReader1_0::connectLiveBroadcast(live);
    TunerTestingConfigAidlReader1_0::connectScan(scan);
    TunerTestingConfigAidlReader1_0::connectDvrRecord(record);
    TunerTestingConfigAidlReader1_0::connectTimeFilter(timeFilter);
    TunerTestingConfigAidlReader1_0::connectDescrambling(descrambling);
};

inline bool validateConnections() {
@@ -189,6 +195,9 @@ inline bool validateConnections() {
    feIsValid &= record.support && record.hasFrontendConnection
                         ? frontendMap.find(record.frontendId) != frontendMap.end()
                         : true;
    feIsValid &= descrambling.support && descrambling.hasFrontendConnection
                         ? frontendMap.find(descrambling.frontendId) != frontendMap.end()
                         : true;

    if (!feIsValid) {
        ALOGW("[vts config] dynamic config fe connection is invalid.");
@@ -210,6 +219,16 @@ inline bool validateConnections() {
        dvrIsValid &= dvrMap.find(record.dvrRecordId) != dvrMap.end();
    }

    if (descrambling.support) {
        if (descrambling.hasFrontendConnection) {
            if (frontendMap[descrambling.frontendId].isSoftwareFe) {
                dvrIsValid &= dvrMap.find(descrambling.dvrSoftwareFeId) != dvrMap.end();
            }
        } else {
            dvrIsValid &= dvrMap.find(descrambling.dvrSourceId) != dvrMap.end();
        }
    }

    if (!dvrIsValid) {
        ALOGW("[vts config] dynamic config dvr connection is invalid.");
        return false;
@@ -222,6 +241,15 @@ inline bool validateConnections() {
    filterIsValid &=
            record.support ? filterMap.find(record.recordFilterId) != filterMap.end() : true;

    filterIsValid &= descrambling.support
                             ? filterMap.find(descrambling.videoFilterId) != filterMap.end() &&
                                       filterMap.find(descrambling.audioFilterId) != filterMap.end()
                             : true;

    for (auto& filterId : descrambling.extraFilters) {
        filterIsValid &= filterMap.find(filterId) != filterMap.end();
    }

    if (!filterIsValid) {
        ALOGW("[vts config] dynamic config filter connection is invalid.");
        return false;
@@ -233,6 +261,15 @@ inline bool validateConnections() {

    if (!timeFilterIsValid) {
        ALOGW("[vts config] dynamic config time filter connection is invalid.");
    }

    bool descramblerIsValid =
            descrambling.support
                    ? descramblerMap.find(descrambling.descramblerId) != descramblerMap.end()
                    : true;

    if (!descramblerIsValid) {
        ALOGW("[vts config] dynamic config descrambler connection is invalid.");
        return false;
    }

+5 −1
Original line number Diff line number Diff line
@@ -173,7 +173,7 @@ struct DescramblingHardwareConnections {
    string videoFilterId;
    string descramblerId;
    string dvrSourceId;
    /* list string of extra filters; */
    vector<string> extraFilters;
};

struct LnbLiveHardwareConnections {
@@ -582,6 +582,10 @@ struct TunerTestingConfigAidlReader1_0 {
            descrambling.hasFrontendConnection = false;
            descrambling.dvrSourceId = descConfig.getDvrSourceConnection();
        }
        if (descConfig.hasOptionalFilters()) {
            auto optionalFilters = descConfig.getOptionalFilters();
            descrambling.extraFilters = optionalFilters;
        }
    }

    static void connectLnbLive(LnbLiveHardwareConnections& lnbLive) {
+2 −0
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ package android.media.tuner.testing.configuration.V1_0 {
    method @Nullable public String getDvrSourceConnection();
    method @Nullable public String getFrontendConnection();
    method @Nullable public boolean getHasFrontendConnection();
    method @Nullable public java.util.List<java.lang.String> getOptionalFilters();
    method @Nullable public String getVideoFilterConnection();
    method public void setAudioFilterConnection(@Nullable String);
    method public void setDescramblerConnection(@Nullable String);
@@ -74,6 +75,7 @@ package android.media.tuner.testing.configuration.V1_0 {
    method public void setDvrSourceConnection(@Nullable String);
    method public void setFrontendConnection(@Nullable String);
    method public void setHasFrontendConnection(@Nullable boolean);
    method public void setOptionalFilters(@Nullable java.util.List<java.lang.String>);
    method public void setVideoFilterConnection(@Nullable String);
  }

+1 −0
Original line number Diff line number Diff line
@@ -651,6 +651,7 @@
                    <xs:attribute name="audioFilterConnection" type="filterId" use="required"/>
                    <xs:attribute name="videoFilterConnection" type="filterId" use="required"/>
                    <!-- TODO: b/182519645 allow the users to insert extra filters -->
                    <xs:element name="optionalFilters" type="filterConnections" minOccurs="0" maxOccurs="1"/>
                    <!-- This DVR is only required when the frontend is using the software input -->
                    <xs:attribute name="dvrSoftwareFeConnection" type="dvrId" use="optional"/>
                    <!-- This Dvr is only required when there's no frontend(sw or hw) connection -->