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

Commit aaff02f4 authored by Amy Zhang's avatar Amy Zhang Committed by Android (Google) Code Review
Browse files

Merge "Add TimeFilter test in Tuner VTS" into rvc-dev

parents 416e3d94 7e4859ce
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