Loading tv/tuner/1.0/default/Demux.cpp +2 −2 Original line number Original line Diff line number Diff line Loading @@ -93,9 +93,9 @@ Return<void> Demux::openFilter(const DemuxFilterType& type, uint32_t bufferSize, Return<void> Demux::openTimeFilter(openTimeFilter_cb _hidl_cb) { Return<void> Demux::openTimeFilter(openTimeFilter_cb _hidl_cb) { ALOGV("%s", __FUNCTION__); 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(); return Void(); } } Loading tv/tuner/1.0/default/Demux.h +5 −0 Original line number Original line Diff line number Diff line Loading @@ -152,6 +152,11 @@ class Demux : public IDemux { */ */ std::map<uint32_t, sp<Filter>> mFilters; 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. * Local reference to the opened DVR object. */ */ Loading tv/tuner/1.0/default/TimeFilter.cpp +13 −4 Original line number Original line Diff line number Diff line Loading @@ -34,24 +34,32 @@ TimeFilter::TimeFilter(sp<Demux> demux) { TimeFilter::~TimeFilter() {} TimeFilter::~TimeFilter() {} Return<Result> TimeFilter::setTimeStamp(uint64_t /* timeStamp */) { Return<Result> TimeFilter::setTimeStamp(uint64_t timeStamp) { ALOGV("%s", __FUNCTION__); ALOGV("%s", __FUNCTION__); if (timeStamp == INVALID_TIME_STAMP) { return Result::INVALID_ARGUMENT; } mTimeStamp = timeStamp; mBeginTime = time(NULL); return Result::SUCCESS; return Result::SUCCESS; } } Return<Result> TimeFilter::clearTimeStamp() { Return<Result> TimeFilter::clearTimeStamp() { ALOGV("%s", __FUNCTION__); ALOGV("%s", __FUNCTION__); mTimeStamp = INVALID_TIME_STAMP; return Result::SUCCESS; return Result::SUCCESS; } } Return<void> TimeFilter::getTimeStamp(getTimeStamp_cb _hidl_cb) { Return<void> TimeFilter::getTimeStamp(getTimeStamp_cb _hidl_cb) { ALOGV("%s", __FUNCTION__); ALOGV("%s", __FUNCTION__); if (mTimeStamp == INVALID_TIME_STAMP) { _hidl_cb(Result::INVALID_STATE, mTimeStamp); } uint64_t timeStamp = 0; uint64_t currentTimeStamp = mTimeStamp + difftime(time(NULL), mBeginTime) * 900000; _hidl_cb(Result::SUCCESS, currentTimeStamp); _hidl_cb(Result::SUCCESS, timeStamp); return Void(); return Void(); } } Loading @@ -66,6 +74,7 @@ Return<void> TimeFilter::getSourceTime(getSourceTime_cb _hidl_cb) { Return<Result> TimeFilter::close() { Return<Result> TimeFilter::close() { ALOGV("%s", __FUNCTION__); ALOGV("%s", __FUNCTION__); mTimeStamp = INVALID_TIME_STAMP; return Result::SUCCESS; return Result::SUCCESS; } } Loading tv/tuner/1.0/default/TimeFilter.h +5 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <android/hardware/tv/tuner/1.0/ITimeFilter.h> #include <android/hardware/tv/tuner/1.0/ITimeFilter.h> #include "Demux.h" #include "Demux.h" #include "time.h" using namespace std; using namespace std; Loading @@ -35,6 +36,8 @@ using ::android::hardware::tv::tuner::V1_0::Result; using FilterMQ = MessageQueue<uint8_t, kSynchronizedReadWrite>; using FilterMQ = MessageQueue<uint8_t, kSynchronizedReadWrite>; #define INVALID_TIME_STAMP -1 class Demux; class Demux; class TimeFilter : public ITimeFilter { class TimeFilter : public ITimeFilter { Loading @@ -57,6 +60,8 @@ class TimeFilter : public ITimeFilter { private: private: sp<Demux> mDemux; sp<Demux> mDemux; uint64_t mTimeStamp = INVALID_TIME_STAMP; time_t mBeginTime; }; }; } // namespace implementation } // namespace implementation Loading tv/tuner/1.0/vts/functional/FilterTests.cpp +56 −0 Original line number Original line Diff line number Diff line Loading @@ -149,6 +149,44 @@ AssertionResult FilterTests::openFilterInDemux(DemuxFilterType type, uint32_t bu return AssertionResult(status == Result::SUCCESS); 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) { AssertionResult FilterTests::getNewlyOpenedFilterId(uint32_t& filterId) { Result status; Result status; EXPECT_TRUE(mDemux) << "Test with openDemux first."; EXPECT_TRUE(mDemux) << "Test with openDemux first."; Loading Loading @@ -229,6 +267,15 @@ AssertionResult FilterTests::stopFilter(uint32_t filterId) { return AssertionResult(status == Result::SUCCESS); 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) { AssertionResult FilterTests::closeFilter(uint32_t filterId) { EXPECT_TRUE(mFilters[filterId]) << "Test with getNewlyOpenedFilterId first."; EXPECT_TRUE(mFilters[filterId]) << "Test with getNewlyOpenedFilterId first."; Result status = mFilters[filterId]->close(); Result status = mFilters[filterId]->close(); Loading @@ -244,3 +291,12 @@ AssertionResult FilterTests::closeFilter(uint32_t filterId) { } } return AssertionResult(status == Result::SUCCESS); 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
tv/tuner/1.0/default/Demux.cpp +2 −2 Original line number Original line Diff line number Diff line Loading @@ -93,9 +93,9 @@ Return<void> Demux::openFilter(const DemuxFilterType& type, uint32_t bufferSize, Return<void> Demux::openTimeFilter(openTimeFilter_cb _hidl_cb) { Return<void> Demux::openTimeFilter(openTimeFilter_cb _hidl_cb) { ALOGV("%s", __FUNCTION__); 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(); return Void(); } } Loading
tv/tuner/1.0/default/Demux.h +5 −0 Original line number Original line Diff line number Diff line Loading @@ -152,6 +152,11 @@ class Demux : public IDemux { */ */ std::map<uint32_t, sp<Filter>> mFilters; 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. * Local reference to the opened DVR object. */ */ Loading
tv/tuner/1.0/default/TimeFilter.cpp +13 −4 Original line number Original line Diff line number Diff line Loading @@ -34,24 +34,32 @@ TimeFilter::TimeFilter(sp<Demux> demux) { TimeFilter::~TimeFilter() {} TimeFilter::~TimeFilter() {} Return<Result> TimeFilter::setTimeStamp(uint64_t /* timeStamp */) { Return<Result> TimeFilter::setTimeStamp(uint64_t timeStamp) { ALOGV("%s", __FUNCTION__); ALOGV("%s", __FUNCTION__); if (timeStamp == INVALID_TIME_STAMP) { return Result::INVALID_ARGUMENT; } mTimeStamp = timeStamp; mBeginTime = time(NULL); return Result::SUCCESS; return Result::SUCCESS; } } Return<Result> TimeFilter::clearTimeStamp() { Return<Result> TimeFilter::clearTimeStamp() { ALOGV("%s", __FUNCTION__); ALOGV("%s", __FUNCTION__); mTimeStamp = INVALID_TIME_STAMP; return Result::SUCCESS; return Result::SUCCESS; } } Return<void> TimeFilter::getTimeStamp(getTimeStamp_cb _hidl_cb) { Return<void> TimeFilter::getTimeStamp(getTimeStamp_cb _hidl_cb) { ALOGV("%s", __FUNCTION__); ALOGV("%s", __FUNCTION__); if (mTimeStamp == INVALID_TIME_STAMP) { _hidl_cb(Result::INVALID_STATE, mTimeStamp); } uint64_t timeStamp = 0; uint64_t currentTimeStamp = mTimeStamp + difftime(time(NULL), mBeginTime) * 900000; _hidl_cb(Result::SUCCESS, currentTimeStamp); _hidl_cb(Result::SUCCESS, timeStamp); return Void(); return Void(); } } Loading @@ -66,6 +74,7 @@ Return<void> TimeFilter::getSourceTime(getSourceTime_cb _hidl_cb) { Return<Result> TimeFilter::close() { Return<Result> TimeFilter::close() { ALOGV("%s", __FUNCTION__); ALOGV("%s", __FUNCTION__); mTimeStamp = INVALID_TIME_STAMP; return Result::SUCCESS; return Result::SUCCESS; } } Loading
tv/tuner/1.0/default/TimeFilter.h +5 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <android/hardware/tv/tuner/1.0/ITimeFilter.h> #include <android/hardware/tv/tuner/1.0/ITimeFilter.h> #include "Demux.h" #include "Demux.h" #include "time.h" using namespace std; using namespace std; Loading @@ -35,6 +36,8 @@ using ::android::hardware::tv::tuner::V1_0::Result; using FilterMQ = MessageQueue<uint8_t, kSynchronizedReadWrite>; using FilterMQ = MessageQueue<uint8_t, kSynchronizedReadWrite>; #define INVALID_TIME_STAMP -1 class Demux; class Demux; class TimeFilter : public ITimeFilter { class TimeFilter : public ITimeFilter { Loading @@ -57,6 +60,8 @@ class TimeFilter : public ITimeFilter { private: private: sp<Demux> mDemux; sp<Demux> mDemux; uint64_t mTimeStamp = INVALID_TIME_STAMP; time_t mBeginTime; }; }; } // namespace implementation } // namespace implementation Loading
tv/tuner/1.0/vts/functional/FilterTests.cpp +56 −0 Original line number Original line Diff line number Diff line Loading @@ -149,6 +149,44 @@ AssertionResult FilterTests::openFilterInDemux(DemuxFilterType type, uint32_t bu return AssertionResult(status == Result::SUCCESS); 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) { AssertionResult FilterTests::getNewlyOpenedFilterId(uint32_t& filterId) { Result status; Result status; EXPECT_TRUE(mDemux) << "Test with openDemux first."; EXPECT_TRUE(mDemux) << "Test with openDemux first."; Loading Loading @@ -229,6 +267,15 @@ AssertionResult FilterTests::stopFilter(uint32_t filterId) { return AssertionResult(status == Result::SUCCESS); 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) { AssertionResult FilterTests::closeFilter(uint32_t filterId) { EXPECT_TRUE(mFilters[filterId]) << "Test with getNewlyOpenedFilterId first."; EXPECT_TRUE(mFilters[filterId]) << "Test with getNewlyOpenedFilterId first."; Result status = mFilters[filterId]->close(); Result status = mFilters[filterId]->close(); Loading @@ -244,3 +291,12 @@ AssertionResult FilterTests::closeFilter(uint32_t filterId) { } } return AssertionResult(status == Result::SUCCESS); return AssertionResult(status == Result::SUCCESS); } } AssertionResult FilterTests::closeTimeFilter() { if (!mTimeFilter) { ALOGW("[vts] Test with openTimeFilterInDemux first."); return failure(); } return AssertionResult(mTimeFilter->close() == Result::SUCCESS); }