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

Commit 7e4859ce authored by Amy Zhang's avatar Amy Zhang
Browse files

Add TimeFilter test in Tuner VTS

Test: VtsHalTvTunerV1_0TargetTest
Bug: 150953857
Change-Id: I5509f4d368a44a7cb9bbe1b2499a4b4760b510b6
parent 154d45d7
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -93,9 +93,9 @@ Return<void> Demux::openFilter(const DemuxFilterType& type, uint32_t bufferSize,
Return<void> Demux::openTimeFilter(openTimeFilter_cb _hidl_cb) {
    ALOGV("%s", __FUNCTION__);

    sp<TimeFilter> timeFilter = new TimeFilter(this);
    mTimeFilter = new TimeFilter(this);

    _hidl_cb(Result::SUCCESS, timeFilter);
    _hidl_cb(Result::SUCCESS, mTimeFilter);
    return Void();
}

+5 −0
Original line number Diff line number Diff line
@@ -152,6 +152,11 @@ class Demux : public IDemux {
     */
    std::map<uint32_t, sp<Filter>> mFilters;

    /**
     * Local reference to the opened Timer Filter instance.
     */
    sp<TimeFilter> mTimeFilter;

    /**
     * Local reference to the opened DVR object.
     */
+13 −4
Original line number Diff line number Diff line
@@ -34,24 +34,32 @@ TimeFilter::TimeFilter(sp<Demux> demux) {

TimeFilter::~TimeFilter() {}

Return<Result> TimeFilter::setTimeStamp(uint64_t /* timeStamp */) {
Return<Result> TimeFilter::setTimeStamp(uint64_t timeStamp) {
    ALOGV("%s", __FUNCTION__);
    if (timeStamp == INVALID_TIME_STAMP) {
        return Result::INVALID_ARGUMENT;
    }
    mTimeStamp = timeStamp;
    mBeginTime = time(NULL);

    return Result::SUCCESS;
}

Return<Result> TimeFilter::clearTimeStamp() {
    ALOGV("%s", __FUNCTION__);
    mTimeStamp = INVALID_TIME_STAMP;

    return Result::SUCCESS;
}

Return<void> TimeFilter::getTimeStamp(getTimeStamp_cb _hidl_cb) {
    ALOGV("%s", __FUNCTION__);
    if (mTimeStamp == INVALID_TIME_STAMP) {
        _hidl_cb(Result::INVALID_STATE, mTimeStamp);
    }

    uint64_t timeStamp = 0;

    _hidl_cb(Result::SUCCESS, timeStamp);
    uint64_t currentTimeStamp = mTimeStamp + difftime(time(NULL), mBeginTime) * 900000;
    _hidl_cb(Result::SUCCESS, currentTimeStamp);
    return Void();
}

@@ -66,6 +74,7 @@ Return<void> TimeFilter::getSourceTime(getSourceTime_cb _hidl_cb) {

Return<Result> TimeFilter::close() {
    ALOGV("%s", __FUNCTION__);
    mTimeStamp = INVALID_TIME_STAMP;

    return Result::SUCCESS;
}
+5 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@

#include <android/hardware/tv/tuner/1.0/ITimeFilter.h>
#include "Demux.h"
#include "time.h"

using namespace std;

@@ -35,6 +36,8 @@ using ::android::hardware::tv::tuner::V1_0::Result;

using FilterMQ = MessageQueue<uint8_t, kSynchronizedReadWrite>;

#define INVALID_TIME_STAMP -1

class Demux;

class TimeFilter : public ITimeFilter {
@@ -57,6 +60,8 @@ class TimeFilter : public ITimeFilter {

  private:
    sp<Demux> mDemux;
    uint64_t mTimeStamp = INVALID_TIME_STAMP;
    time_t mBeginTime;
};

}  // namespace implementation
+56 −0
Original line number Diff line number Diff line
@@ -149,6 +149,44 @@ AssertionResult FilterTests::openFilterInDemux(DemuxFilterType type, uint32_t bu
    return AssertionResult(status == Result::SUCCESS);
}

AssertionResult FilterTests::openTimeFilterInDemux() {
    if (!mDemux) {
        ALOGW("[vts] Test with openDemux first.");
        return failure();
    }

    // Add time filter to the local demux
    Result status;
    mDemux->openTimeFilter([&](Result result, const sp<ITimeFilter>& filter) {
        mTimeFilter = filter;
        status = result;
    });

    return AssertionResult(status == Result::SUCCESS);
}

AssertionResult FilterTests::setTimeStamp(uint64_t timeStamp) {
    if (!mTimeFilter) {
        ALOGW("[vts] Test with openTimeFilterInDemux first.");
        return failure();
    }

    mBeginTimeStamp = timeStamp;
    return AssertionResult(mTimeFilter->setTimeStamp(timeStamp) == Result::SUCCESS);
}

AssertionResult FilterTests::getTimeStamp() {
    if (!mTimeFilter) {
        ALOGW("[vts] Test with openTimeFilterInDemux first.");
        return failure();
    }

    Result status;
    mTimeFilter->getTimeStamp([&](Result result, uint64_t /*timeStamp*/) { status = result; });

    return AssertionResult(status == Result::SUCCESS);
}

AssertionResult FilterTests::getNewlyOpenedFilterId(uint32_t& filterId) {
    Result status;
    EXPECT_TRUE(mDemux) << "Test with openDemux first.";
@@ -229,6 +267,15 @@ AssertionResult FilterTests::stopFilter(uint32_t filterId) {
    return AssertionResult(status == Result::SUCCESS);
}

AssertionResult FilterTests::clearTimeStamp() {
    if (!mTimeFilter) {
        ALOGW("[vts] Test with openTimeFilterInDemux first.");
        return failure();
    }

    return AssertionResult(mTimeFilter->clearTimeStamp() == Result::SUCCESS);
}

AssertionResult FilterTests::closeFilter(uint32_t filterId) {
    EXPECT_TRUE(mFilters[filterId]) << "Test with getNewlyOpenedFilterId first.";
    Result status = mFilters[filterId]->close();
@@ -244,3 +291,12 @@ AssertionResult FilterTests::closeFilter(uint32_t filterId) {
    }
    return AssertionResult(status == Result::SUCCESS);
}

AssertionResult FilterTests::closeTimeFilter() {
    if (!mTimeFilter) {
        ALOGW("[vts] Test with openTimeFilterInDemux first.");
        return failure();
    }

    return AssertionResult(mTimeFilter->close() == Result::SUCCESS);
}
Loading