Fix issues in Tuner Service implementation
This CL fixes the following bugs:
1. Missing Tuner HAL version check API
2. hidl_array init issue when converting ip settings
3. Missing handling the aidl service binding error
Test: atest android.media.tv.tuner.cts
Bug: 159067322
Change-Id: Ib43cedccb062e7849b5133e03c74c58c9e082437
diff --git a/services/tuner/TunerService.cpp b/services/tuner/TunerService.cpp
index 4f6f16c..b80fd85 100644
--- a/services/tuner/TunerService.cpp
+++ b/services/tuner/TunerService.cpp
@@ -52,10 +52,10 @@
TunerService::TunerService() {}
TunerService::~TunerService() {}
-void TunerService::instantiate() {
+binder_status_t TunerService::instantiate() {
shared_ptr<TunerService> service =
::ndk::SharedRefBase::make<TunerService>();
- AServiceManager_addService(service->asBinder().get(), getServiceName());
+ return AServiceManager_addService(service->asBinder().get(), getServiceName());
}
bool TunerService::hasITuner() {
@@ -68,23 +68,20 @@
ALOGE("Failed to get ITuner service");
return false;
}
+ mTunerVersion = TUNER_HAL_VERSION_1_0;
+ mTuner_1_1 = ::android::hardware::tv::tuner::V1_1::ITuner::castFrom(mTuner);
+ if (mTuner_1_1 != nullptr) {
+ mTunerVersion = TUNER_HAL_VERSION_1_1;
+ } else {
+ ALOGE("Failed to get ITuner_1_1 service");
+ }
return true;
}
bool TunerService::hasITuner_1_1() {
ALOGD("hasITuner_1_1");
- if (mTuner_1_1 != nullptr) {
- return true;
- }
- if (!hasITuner()) {
- return false;
- }
- mTuner_1_1 = ::android::hardware::tv::tuner::V1_1::ITuner::castFrom(mTuner);
- if (mTuner_1_1 == nullptr) {
- ALOGE("Failed to get ITuner_1_1 service");
- return false;
- }
- return true;
+ hasITuner();
+ return (mTunerVersion == TUNER_HAL_VERSION_1_1);
}
Status TunerService::openDemux(
@@ -300,6 +297,12 @@
return Status::ok();
}
+Status TunerService::getTunerHalVersion(int* _aidl_return) {
+ hasITuner();
+ *_aidl_return = mTunerVersion;
+ return Status::ok();
+}
+
void TunerService::updateFrontendResources() {
hidl_vec<FrontendId> ids;
Result res = getHidlFrontendIds(ids);