Make the default tuner HAL to be a dynamic AIDL
Add lazy tuner service.
Refine code to allow Tuner reference count to be 0 when no one uses it.
Bug: 236002754
Test: atest VtsHalTvTunerTargetTest on both lazy and normal HALs
Test: atest android.media.tv.tuner.cts on both lazy and normal HALs
Change-Id: I0cc69fe8ffd79a66db00cb72d212c222130629b5
diff --git a/tv/tuner/aidl/default/Frontend.cpp b/tv/tuner/aidl/default/Frontend.cpp
index 3f7797c..0573d08 100644
--- a/tv/tuner/aidl/default/Frontend.cpp
+++ b/tv/tuner/aidl/default/Frontend.cpp
@@ -28,10 +28,10 @@
namespace tv {
namespace tuner {
-Frontend::Frontend(FrontendType type, int32_t id, std::shared_ptr<Tuner> tuner) {
+Frontend::Frontend(FrontendType type, int32_t id) {
mType = type;
mId = id;
- mTuner = tuner;
+ mTuner = nullptr;
// Init callback to nullptr
mCallback = nullptr;
@@ -170,7 +170,12 @@
}
}
-Frontend::~Frontend() {}
+Frontend::~Frontend() {
+ ALOGV("%s", __FUNCTION__);
+ mCallback = nullptr;
+ mIsLocked = false;
+ mTuner = nullptr;
+}
::ndk::ScopedAStatus Frontend::close() {
ALOGV("%s", __FUNCTION__);
@@ -178,6 +183,7 @@
mCallback = nullptr;
mIsLocked = false;
mTuner->removeFrontend(mId);
+ mTuner = nullptr;
return ::ndk::ScopedAStatus::ok();
}
@@ -233,6 +239,10 @@
return ::ndk::ScopedAStatus::ok();
}
+void Frontend::setTunerService(std::shared_ptr<Tuner> tuner) {
+ mTuner = tuner;
+}
+
void Frontend::scanThreadLoop() {
if (mIsLocked) {
FrontendScanMessage msg;