Complete TunerTimeFilter implementation
This CL also set all the successfully closed instance to null
to avoid duplicate closing on the same instance.
Test: make
Bug: 159067322
Bug: 176190508
Change-Id: Idf445641b47f4d8ab4230f30cf6ea3abd4226cbc
diff --git a/services/tuner/TunerDemux.cpp b/services/tuner/TunerDemux.cpp
index 8346992..ba8d6a7 100644
--- a/services/tuner/TunerDemux.cpp
+++ b/services/tuner/TunerDemux.cpp
@@ -222,6 +222,8 @@
}
Result res = mDemux->close();
+ mDemux = NULL;
+
if (res != Result::SUCCESS) {
return Status::fromServiceSpecificError(static_cast<int32_t>(res));
}
diff --git a/services/tuner/TunerDescrambler.cpp b/services/tuner/TunerDescrambler.cpp
index 6b2889d..16338db 100644
--- a/services/tuner/TunerDescrambler.cpp
+++ b/services/tuner/TunerDescrambler.cpp
@@ -97,6 +97,8 @@
}
Result res = mDescrambler->close();
+ mDescrambler = NULL;
+
if (res != Result::SUCCESS) {
return Status::fromServiceSpecificError(static_cast<int32_t>(res));
}
diff --git a/services/tuner/TunerDvr.cpp b/services/tuner/TunerDvr.cpp
index c7227b6..db4e07b 100644
--- a/services/tuner/TunerDvr.cpp
+++ b/services/tuner/TunerDvr.cpp
@@ -154,6 +154,8 @@
}
Result res = mDvr->close();
+ mDvr = NULL;
+
if (res != Result::SUCCESS) {
return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(res));
}
diff --git a/services/tuner/TunerFilter.cpp b/services/tuner/TunerFilter.cpp
index af5a600..d9935fd 100644
--- a/services/tuner/TunerFilter.cpp
+++ b/services/tuner/TunerFilter.cpp
@@ -541,6 +541,9 @@
return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
}
Result res = mFilter->close();
+ mFilter = NULL;
+ mFilter_1_1 = NULL;
+
if (res != Result::SUCCESS) {
return Status::fromServiceSpecificError(static_cast<int32_t>(res));
}
diff --git a/services/tuner/TunerFrontend.cpp b/services/tuner/TunerFrontend.cpp
index b85e58b..c62ba6b 100644
--- a/services/tuner/TunerFrontend.cpp
+++ b/services/tuner/TunerFrontend.cpp
@@ -278,11 +278,13 @@
}
Result status = mFrontend->close();
- if (status == Result::SUCCESS) {
- return Status::ok();
- }
+ mFrontend = NULL;
+ mFrontend_1_1 = NULL;
- return Status::fromServiceSpecificError(static_cast<int32_t>(status));
+ if (status != Result::SUCCESS) {
+ return Status::fromServiceSpecificError(static_cast<int32_t>(status));
+ }
+ return Status::ok();
}
Status TunerFrontend::getStatus(const vector<int32_t>& statusTypes,
diff --git a/services/tuner/TunerLnb.cpp b/services/tuner/TunerLnb.cpp
index 0bfa3fd..4a5acf5 100644
--- a/services/tuner/TunerLnb.cpp
+++ b/services/tuner/TunerLnb.cpp
@@ -97,8 +97,13 @@
return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
}
- Result status = mLnb->close();
- return Status::fromServiceSpecificError(static_cast<int32_t>(status));
+ Result res = mLnb->close();
+ mLnb = NULL;
+
+ if (res != Result::SUCCESS) {
+ return Status::fromServiceSpecificError(static_cast<int32_t>(res));
+ }
+ return Status::ok();
}
/////////////// ILnbCallback ///////////////////////
diff --git a/services/tuner/TunerTimeFilter.cpp b/services/tuner/TunerTimeFilter.cpp
index dce76d2..25e1ad9 100644
--- a/services/tuner/TunerTimeFilter.cpp
+++ b/services/tuner/TunerTimeFilter.cpp
@@ -18,6 +18,9 @@
#include "TunerTimeFilter.h"
+using ::android::hardware::tv::tuner::V1_0::Result;
+using ::android::hardware::tv::tuner::V1_1::Constant64Bit;
+
namespace android {
TunerTimeFilter::TunerTimeFilter(sp<ITimeFilter> timeFilter) {
@@ -28,23 +31,76 @@
mTimeFilter = NULL;
}
-Status TunerTimeFilter::setTimeStamp(int64_t /*timeStamp*/) {
- return Status::ok();
+Status TunerTimeFilter::setTimeStamp(int64_t timeStamp) {
+ if (mTimeFilter == NULL) {
+ ALOGE("ITimeFilter is not initialized");
+ return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
+ }
+
+ Result status = mTimeFilter->setTimeStamp(timeStamp);
+ return Status::fromServiceSpecificError(static_cast<int32_t>(status));
}
Status TunerTimeFilter::clearTimeStamp() {
- return Status::ok();
+ if (mTimeFilter == NULL) {
+ ALOGE("ITimeFilter is not initialized");
+ return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
+ }
+
+ Result status = mTimeFilter->clearTimeStamp();
+ return Status::fromServiceSpecificError(static_cast<int32_t>(status));
}
-Status TunerTimeFilter::getSourceTime(int64_t* /*_aidl_return*/) {
- return Status::ok();
+Status TunerTimeFilter::getSourceTime(int64_t* _aidl_return) {
+ if (mTimeFilter == NULL) {
+ *_aidl_return = (int64_t)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
+ ALOGE("ITimeFilter is not initialized");
+ return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
+ }
+
+ Result status;
+ mTimeFilter->getSourceTime(
+ [&](Result r, uint64_t t) {
+ status = r;
+ *_aidl_return = t;
+ });
+ if (status != Result::SUCCESS) {
+ *_aidl_return = (int64_t)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
+ }
+ return Status::fromServiceSpecificError(static_cast<int32_t>(status));
}
-Status TunerTimeFilter::getTimeStamp(int64_t* /*_aidl_return*/) {
- return Status::ok();
+Status TunerTimeFilter::getTimeStamp(int64_t* _aidl_return) {
+ if (mTimeFilter == NULL) {
+ *_aidl_return = (int64_t)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
+ ALOGE("ITimeFilter is not initialized");
+ return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
+ }
+
+ Result status;
+ mTimeFilter->getTimeStamp(
+ [&](Result r, uint64_t t) {
+ status = r;
+ *_aidl_return = t;
+ });
+ if (status != Result::SUCCESS) {
+ *_aidl_return = (int64_t)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
+ }
+ return Status::fromServiceSpecificError(static_cast<int32_t>(status));
}
Status TunerTimeFilter::close() {
+ if (mTimeFilter == NULL) {
+ ALOGE("ITimeFilter is not initialized");
+ return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE));
+ }
+
+ Result res = mTimeFilter->close();
+ mTimeFilter = NULL;
+
+ if (res != Result::SUCCESS) {
+ return Status::fromServiceSpecificError(static_cast<int32_t>(res));
+ }
return Status::ok();
}
} // namespace android
diff --git a/services/tuner/TunerTimeFilter.h b/services/tuner/TunerTimeFilter.h
index 50b8f54..d675319 100644
--- a/services/tuner/TunerTimeFilter.h
+++ b/services/tuner/TunerTimeFilter.h
@@ -19,6 +19,7 @@
#include <aidl/android/media/tv/tuner/BnTunerTimeFilter.h>
#include <android/hardware/tv/tuner/1.0/ITimeFilter.h>
+#include <android/hardware/tv/tuner/1.1/types.h>
#include <media/stagefright/foundation/ADebug.h>
#include <utils/Log.h>