Add new features to tuner service.
*) Add AAC formats backward compatibility.
*) Support dumping frontend hardware information.
*) Add DemuxFilterMediaEvent ScIndexMask backward compatibility.
*) Move setLna to TunerService and add Hidl backward compatibility.
Bug: 205265630
Bug: 184017033
Bug: 202978951
Bug: 203623028
Test: atest android.media.tv.tuner.cts on AIDL and HIDL HALs
Change-Id: I491da4e21649b61b25734fc1f9bf64bb77f52a87
diff --git a/services/tuner/hidl/TunerHidlService.cpp b/services/tuner/hidl/TunerHidlService.cpp
index f4b0cde..f4aa61a 100644
--- a/services/tuner/hidl/TunerHidlService.cpp
+++ b/services/tuner/hidl/TunerHidlService.cpp
@@ -74,7 +74,10 @@
updateTunerResources();
}
-TunerHidlService::~TunerHidlService() {}
+TunerHidlService::~TunerHidlService() {
+ mOpenedFrontends.clear();
+ mLnaStatus = -1;
+}
binder_status_t TunerHidlService::instantiate() {
if (HidlITuner::getService() == nullptr) {
@@ -237,7 +240,17 @@
if (status != HidlResult::SUCCESS) {
return ::ndk::ScopedAStatus::fromServiceSpecificError(static_cast<int32_t>(status));
}
- *_aidl_return = ::ndk::SharedRefBase::make<TunerHidlFrontend>(frontend, id);
+
+ shared_ptr<TunerHidlFrontend> tunerFrontend =
+ ::ndk::SharedRefBase::make<TunerHidlFrontend>(frontend, id);
+ if (mLnaStatus != -1) {
+ tunerFrontend->setLna(mLnaStatus == 1);
+ }
+ {
+ Mutex::Autolock _l(mOpenedFrontendsLock);
+ mOpenedFrontends.insert(tunerFrontend);
+ }
+ *_aidl_return = tunerFrontend;
return ::ndk::ScopedAStatus::ok();
}
@@ -355,6 +368,25 @@
return ::ndk::ScopedAStatus::ok();
}
+::ndk::ScopedAStatus TunerHidlService::setLna(bool bEnable) {
+ if (!hasITuner()) {
+ ALOGE("get ITuner failed");
+ return ::ndk::ScopedAStatus::fromServiceSpecificError(
+ static_cast<int32_t>(Result::UNAVAILABLE));
+ }
+
+ mLnaStatus = bEnable ? 1 : 0;
+
+ {
+ Mutex::Autolock _l(mOpenedFrontendsLock);
+ for (auto it = mOpenedFrontends.begin(); it != mOpenedFrontends.end(); ++it) {
+ (*it)->setLna(mLnaStatus == 1);
+ }
+ }
+
+ return ::ndk::ScopedAStatus::ok();
+}
+
string TunerHidlService::addFilterToShared(const shared_ptr<TunerHidlFilter>& sharedFilter) {
Mutex::Autolock _l(mSharedFiltersLock);
@@ -372,6 +404,16 @@
mSharedFilters.erase(to_string(reinterpret_cast<std::uintptr_t>(sharedFilter.get())));
}
+void TunerHidlService::removeFrontend(const shared_ptr<TunerHidlFrontend>& frontend) {
+ Mutex::Autolock _l(mOpenedFrontendsLock);
+ for (auto it = mOpenedFrontends.begin(); it != mOpenedFrontends.end(); ++it) {
+ if (it->get() == frontend.get()) {
+ mOpenedFrontends.erase(it);
+ break;
+ }
+ }
+}
+
void TunerHidlService::updateTunerResources() {
if (!hasITuner()) {
ALOGE("Failed to updateTunerResources");