Revert "libaudiohal@aidl: Make IHalAdapterVendorExtension mandatory"
Revert submission 2929484-fix-b-321651892-ihaladapter
Reason for revert: possible cause of b/323385784
Reverted changes: /q/submissionid:2929484-fix-b-321651892-ihaladapter
Change-Id: Ifaafeec27bee08648a3ced6d507b99454c317692
diff --git a/media/libaudiohal/impl/ConversionHelperAidl.cpp b/media/libaudiohal/impl/ConversionHelperAidl.cpp
index 7a32811..46abfda 100644
--- a/media/libaudiohal/impl/ConversionHelperAidl.cpp
+++ b/media/libaudiohal/impl/ConversionHelperAidl.cpp
@@ -37,6 +37,10 @@
using ParameterScope = IHalAdapterVendorExtension::ParameterScope;
if (parameterKeys.size() == 0) return OK;
const String8 rawKeys = parameterKeys.keysToString();
+ if (vendorExt == nullptr) {
+ ALOGW("%s: unknown parameters, ignored: \"%s\"", __func__, rawKeys.c_str());
+ return OK;
+ }
std::vector<std::string> parameterIds;
RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(vendorExt->parseVendorParameterIds(
@@ -81,6 +85,10 @@
using ParameterScope = IHalAdapterVendorExtension::ParameterScope;
if (parameters.size() == 0) return OK;
const String8 rawKeysAndValues = parameters.toString();
+ if (vendorExt == nullptr) {
+ ALOGW("%s: unknown parameters, ignored: \"%s\"", __func__, rawKeysAndValues.c_str());
+ return OK;
+ }
std::vector<VendorParameter> syncParameters, asyncParameters;
RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(vendorExt->parseVendorParameters(
diff --git a/media/libaudiohal/impl/DeviceHalAidl.cpp b/media/libaudiohal/impl/DeviceHalAidl.cpp
index fe44ecd..2af18cc 100644
--- a/media/libaudiohal/impl/DeviceHalAidl.cpp
+++ b/media/libaudiohal/impl/DeviceHalAidl.cpp
@@ -1024,11 +1024,15 @@
(void)VALUE_OR_RETURN_STATUS(filterOutAndProcessParameter<String8>(
parameters, String8(AudioParameter::keyReconfigA2dp),
[&](const String8& value) -> status_t {
- std::vector<VendorParameter> result;
- RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
- mVendorExt->parseBluetoothA2dpReconfigureOffload(
- std::string(value.c_str()), &result)));
- reconfigureOffload = std::move(result);
+ if (mVendorExt != nullptr) {
+ std::vector<VendorParameter> result;
+ RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
+ mVendorExt->parseBluetoothA2dpReconfigureOffload(
+ std::string(value.c_str()), &result)));
+ reconfigureOffload = std::move(result);
+ } else {
+ reconfigureOffload = std::vector<VendorParameter>();
+ }
return OK;
}));
if (mBluetoothA2dp != nullptr && a2dpEnabled.has_value()) {
diff --git a/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp b/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp
index 24df32d..3dbc14a 100644
--- a/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp
+++ b/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp
@@ -23,7 +23,6 @@
//#define LOG_NDEBUG 0
#include <aidl/android/hardware/audio/core/IModule.h>
-#include <aidl/android/media/audio/BnHalAdapterVendorExtension.h>
#include <android/binder_manager.h>
#include <media/AidlConversionNdkCpp.h>
#include <media/AidlConversionUtil.h>
@@ -36,7 +35,6 @@
using aidl::android::hardware::audio::core::IConfig;
using aidl::android::hardware::audio::core::IModule;
using aidl::android::hardware::audio::core::SurroundSoundConfig;
-using aidl::android::hardware::audio::core::VendorParameter;
using aidl::android::media::audio::common::AudioHalEngineConfig;
using aidl::android::media::audio::IHalAdapterVendorExtension;
using android::detail::AudioHalVersionInfo;
@@ -64,86 +62,10 @@
return cpp;
}
-class HalAdapterVendorExtensionWrapper :
- public ::aidl::android::media::audio::BnHalAdapterVendorExtension {
- private:
- ndk::ScopedAStatus parseVendorParameterIds(ParameterScope in_scope,
- const std::string& in_rawKeys,
- std::vector<std::string>* _aidl_return) override {
- ndk::ScopedAStatus status;
- while (true) {
- status = get()->parseVendorParameterIds(in_scope, in_rawKeys, _aidl_return);
- if (status.getStatus() != STATUS_DEAD_OBJECT) break;
- mVendorExt.reset();
- }
- return status;
- }
-
- ndk::ScopedAStatus parseVendorParameters(
- ParameterScope in_scope, const std::string& in_rawKeysAndValues,
- std::vector<VendorParameter>* out_syncParameters,
- std::vector<VendorParameter>* out_asyncParameters) override {
- ndk::ScopedAStatus status;
- while (true) {
- status = get()->parseVendorParameters(in_scope, in_rawKeysAndValues,
- out_syncParameters, out_asyncParameters);
- if (status.getStatus() != STATUS_DEAD_OBJECT) break;
- mVendorExt.reset();
- }
- return status;
- }
-
- ndk::ScopedAStatus parseBluetoothA2dpReconfigureOffload(
- const std::string& in_rawValue, std::vector<VendorParameter>* _aidl_return) override {
- ndk::ScopedAStatus status;
- while (true) {
- status = get()->parseBluetoothA2dpReconfigureOffload(in_rawValue, _aidl_return);
- if (status.getStatus() != STATUS_DEAD_OBJECT) break;
- mVendorExt.reset();
- }
- return status;
- }
-
- ndk::ScopedAStatus parseBluetoothLeReconfigureOffload(const std::string& in_rawValue,
- std::vector<VendorParameter>* _aidl_return) override {
- ndk::ScopedAStatus status;
- while (true) {
- status = get()->parseBluetoothLeReconfigureOffload(in_rawValue, _aidl_return);
- if (status.getStatus() != STATUS_DEAD_OBJECT) break;
- mVendorExt.reset();
- }
- return status;
- }
-
- ndk::ScopedAStatus processVendorParameters(ParameterScope in_scope,
- const std::vector<VendorParameter>& in_parameters,
- std::string* _aidl_return) override {
- ndk::ScopedAStatus status;
- while (true) {
- status = get()->processVendorParameters(in_scope, in_parameters, _aidl_return);
- if (status.getStatus() != STATUS_DEAD_OBJECT) break;
- mVendorExt.reset();
- }
- return status;
- }
-
- std::shared_ptr<IHalAdapterVendorExtension> get() {
- if (!mVendorExt) {
- auto serviceName = std::string(IHalAdapterVendorExtension::descriptor) + "/default";
- mVendorExt = IHalAdapterVendorExtension::fromBinder(ndk::SpAIBinder(
- AServiceManager_waitForService(serviceName.c_str())));
- }
- return mVendorExt;
- }
-
- std::shared_ptr<::aidl::android::media::audio::IHalAdapterVendorExtension> mVendorExt;
-};
-
} // namespace
DevicesFactoryHalAidl::DevicesFactoryHalAidl(std::shared_ptr<IConfig> config)
- : mConfig(std::move(config)),
- mVendorExt(ndk::SharedRefBase::make<HalAdapterVendorExtensionWrapper>()) {
+ : mConfig(std::move(config)) {
}
status_t DevicesFactoryHalAidl::getDeviceNames(std::vector<std::string> *names) {
@@ -188,7 +110,7 @@
ALOGE("%s fromBinder %s failed", __func__, serviceName.c_str());
return NO_INIT;
}
- *device = sp<DeviceHalAidl>::make(name, service, mVendorExt);
+ *device = sp<DeviceHalAidl>::make(name, service, getVendorExtension());
return OK;
}
@@ -227,6 +149,20 @@
return OK;
}
+std::shared_ptr<IHalAdapterVendorExtension> DevicesFactoryHalAidl::getVendorExtension() {
+ if (!mVendorExt.has_value()) {
+ auto serviceName = std::string(IHalAdapterVendorExtension::descriptor) + "/default";
+ if (AServiceManager_isDeclared(serviceName.c_str())) {
+ mVendorExt = std::shared_ptr<IHalAdapterVendorExtension>(
+ IHalAdapterVendorExtension::fromBinder(ndk::SpAIBinder(
+ AServiceManager_waitForService(serviceName.c_str()))));
+ } else {
+ mVendorExt = nullptr;
+ }
+ }
+ return mVendorExt.value();
+}
+
// Main entry-point to the shared library.
extern "C" __attribute__((visibility("default"))) void* createIDevicesFactoryImpl() {
auto serviceName = std::string(IConfig::descriptor) + "/default";
diff --git a/media/libaudiohal/impl/DevicesFactoryHalAidl.h b/media/libaudiohal/impl/DevicesFactoryHalAidl.h
index 2a3a9e7..17bfe43 100644
--- a/media/libaudiohal/impl/DevicesFactoryHalAidl.h
+++ b/media/libaudiohal/impl/DevicesFactoryHalAidl.h
@@ -45,7 +45,10 @@
private:
const std::shared_ptr<::aidl::android::hardware::audio::core::IConfig> mConfig;
- const std::shared_ptr<::aidl::android::media::audio::IHalAdapterVendorExtension> mVendorExt;
+ std::optional<std::shared_ptr<::aidl::android::media::audio::IHalAdapterVendorExtension>>
+ mVendorExt;
+
+ std::shared_ptr<::aidl::android::media::audio::IHalAdapterVendorExtension> getVendorExtension();
~DevicesFactoryHalAidl() = default;
};