diff --git a/audio/aidl/default/Android.bp b/audio/aidl/default/Android.bp index 95043f7f19..856f83f7bb 100644 --- a/audio/aidl/default/Android.bp +++ b/audio/aidl/default/Android.bp @@ -152,23 +152,7 @@ cc_binary { vintf_fragments: ["android.hardware.audio.effect.service-aidl.xml"], defaults: ["aidlaudioeffectservice_defaults"], shared_libs: [ - "libaecsw", - "libagcsw", - "libbassboostsw", - "libbundleaidl", - "libdownmixaidl", - "libdynamicsprocessingaidl", - "libenvreverbsw", - "libequalizersw", - "libhapticgeneratoraidl", - "libloudnessenhanceraidl", - "libnssw", - "libpresetreverbsw", - "libreverbaidl", "libtinyxml2", - "libvirtualizersw", - "libvisualizeraidl", - "libvolumesw", ], srcs: [ "EffectConfig.cpp", diff --git a/audio/aidl/default/EffectConfig.cpp b/audio/aidl/default/EffectConfig.cpp index e1427ec3d3..c030b7a88c 100644 --- a/audio/aidl/default/EffectConfig.cpp +++ b/audio/aidl/default/EffectConfig.cpp @@ -79,14 +79,30 @@ std::vector> EffectConfig::ge return children; } +bool EffectConfig::resolveLibrary(const std::string& path, std::string* resolvedPath) { + for (auto* libraryDirectory : kEffectLibPath) { + std::string candidatePath = std::string(libraryDirectory) + '/' + path; + if (access(candidatePath.c_str(), R_OK) == 0) { + *resolvedPath = std::move(candidatePath); + return true; + } + } + return false; +} + bool EffectConfig::parseLibrary(const tinyxml2::XMLElement& xml) { const char* name = xml.Attribute("name"); RETURN_VALUE_IF(!name, false, "noNameAttribute"); const char* path = xml.Attribute("path"); RETURN_VALUE_IF(!path, false, "noPathAttribute"); - mLibraryMap[name] = path; - LOG(DEBUG) << __func__ << " " << name << " : " << path; + std::string resolvedPath; + if (!resolveLibrary(path, &resolvedPath)) { + LOG(ERROR) << __func__ << " can't find " << path; + return false; + } + mLibraryMap[name] = resolvedPath; + LOG(DEBUG) << __func__ << " " << name << " : " << resolvedPath; return true; } diff --git a/audio/aidl/default/EffectFactory.cpp b/audio/aidl/default/EffectFactory.cpp index 5cd87fd879..638fa7fbb8 100644 --- a/audio/aidl/default/EffectFactory.cpp +++ b/audio/aidl/default/EffectFactory.cpp @@ -165,7 +165,7 @@ ndk::ScopedAStatus Factory::destroyEffect(const std::shared_ptr& in_han return status; } -bool Factory::openEffectLibrary(const AudioUuid& impl, const std::string& libName) { +bool Factory::openEffectLibrary(const AudioUuid& impl, const std::string& path) { std::function dlClose = [](void* handle) -> void { if (handle && dlclose(handle)) { LOG(ERROR) << "dlclose failed " << dlerror(); @@ -173,19 +173,19 @@ bool Factory::openEffectLibrary(const AudioUuid& impl, const std::string& libNam }; auto libHandle = - std::unique_ptr{dlopen(libName.c_str(), RTLD_LAZY), dlClose}; + std::unique_ptr{dlopen(path.c_str(), RTLD_LAZY), dlClose}; if (!libHandle) { LOG(ERROR) << __func__ << ": dlopen failed, err: " << dlerror(); return false; } - LOG(INFO) << __func__ << " dlopen lib:" << libName << "\nimpl:" << impl.toString() + LOG(INFO) << __func__ << " dlopen lib:" << path << "\nimpl:" << impl.toString() << "\nhandle:" << libHandle; auto interface = new effect_dl_interface_s{nullptr, nullptr, nullptr}; mEffectLibMap.insert( {impl, std::make_tuple(std::move(libHandle), - std::unique_ptr(interface), libName)}); + std::unique_ptr(interface), path)}); return true; } @@ -199,8 +199,8 @@ void Factory::createIdentityWithConfig(const EffectConfig::LibraryUuid& configLi id.type = typeUuid; id.uuid = configLib.uuid; id.proxy = proxyUuid; - LOG(DEBUG) << __func__ << ": typeUuid " << id.type.toString() << "\nimplUuid " - << id.uuid.toString() << " proxyUuid " + LOG(DEBUG) << __func__ << " loading lib " << path->second << ": typeUuid " + << id.type.toString() << "\nimplUuid " << id.uuid.toString() << " proxyUuid " << (proxyUuid.has_value() ? proxyUuid->toString() : "null"); if (openEffectLibrary(id.uuid, path->second)) { mIdentitySet.insert(std::move(id)); diff --git a/audio/aidl/default/acousticEchoCanceler/Android.bp b/audio/aidl/default/acousticEchoCanceler/Android.bp index b2e268237e..bfb72129a5 100644 --- a/audio/aidl/default/acousticEchoCanceler/Android.bp +++ b/audio/aidl/default/acousticEchoCanceler/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "AcousticEchoCancelerSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/automaticGainControl/Android.bp b/audio/aidl/default/automaticGainControl/Android.bp index 4899b39289..17d64168df 100644 --- a/audio/aidl/default/automaticGainControl/Android.bp +++ b/audio/aidl/default/automaticGainControl/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "AutomaticGainControlSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/bassboost/Android.bp b/audio/aidl/default/bassboost/Android.bp index f22eb952f4..82b2f203b9 100644 --- a/audio/aidl/default/bassboost/Android.bp +++ b/audio/aidl/default/bassboost/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "BassBoostSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/downmix/Android.bp b/audio/aidl/default/downmix/Android.bp index 230b2d82cd..6d15cdb0cd 100644 --- a/audio/aidl/default/downmix/Android.bp +++ b/audio/aidl/default/downmix/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "DownmixSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/dynamicProcessing/Android.bp b/audio/aidl/default/dynamicProcessing/Android.bp index 3697ba36ff..1c0312d36e 100644 --- a/audio/aidl/default/dynamicProcessing/Android.bp +++ b/audio/aidl/default/dynamicProcessing/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "DynamicsProcessingSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/envReverb/Android.bp b/audio/aidl/default/envReverb/Android.bp index c239ee5930..dd4219a5b8 100644 --- a/audio/aidl/default/envReverb/Android.bp +++ b/audio/aidl/default/envReverb/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "EnvReverbSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/equalizer/Android.bp b/audio/aidl/default/equalizer/Android.bp index 8de6b1a219..3610563cf7 100644 --- a/audio/aidl/default/equalizer/Android.bp +++ b/audio/aidl/default/equalizer/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "EqualizerSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/hapticGenerator/Android.bp b/audio/aidl/default/hapticGenerator/Android.bp index a632130c1a..0df9a9412d 100644 --- a/audio/aidl/default/hapticGenerator/Android.bp +++ b/audio/aidl/default/hapticGenerator/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "HapticGeneratorSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/include/effectFactory-impl/EffectConfig.h b/audio/aidl/default/include/effectFactory-impl/EffectConfig.h index 2b904f5e2c..c499811f12 100644 --- a/audio/aidl/default/include/effectFactory-impl/EffectConfig.h +++ b/audio/aidl/default/include/effectFactory-impl/EffectConfig.h @@ -63,6 +63,13 @@ class EffectConfig { } private: + static constexpr const char* kEffectLibPath[] = +#ifdef __LP64__ + {"/odm/lib64/soundfx", "/vendor/lib64/soundfx", "/system/lib64/soundfx"}; +#else + {"/odm/lib/soundfx", "/vendor/lib/soundfx", "/system/lib/soundfx"}; +#endif + int mSkippedElements; /* Parsed Libraries result */ std::unordered_map mLibraryMap; @@ -91,6 +98,8 @@ class EffectConfig { const char* dump(const tinyxml2::XMLElement& element, tinyxml2::XMLPrinter&& printer = {}) const; + + bool resolveLibrary(const std::string& path, std::string* resolvedPath); }; } // namespace aidl::android::hardware::audio::effect diff --git a/audio/aidl/default/include/effectFactory-impl/EffectFactory.h b/audio/aidl/default/include/effectFactory-impl/EffectFactory.h index b32ec56f34..fc9ef0290f 100644 --- a/audio/aidl/default/include/effectFactory-impl/EffectFactory.h +++ b/audio/aidl/default/include/effectFactory-impl/EffectFactory.h @@ -102,7 +102,7 @@ class Factory : public BnFactory { ndk::ScopedAStatus destroyEffectImpl(const std::shared_ptr& in_handle); void cleanupEffectMap(); bool openEffectLibrary(const ::aidl::android::media::audio::common::AudioUuid& impl, - const std::string& libName); + const std::string& path); void createIdentityWithConfig( const EffectConfig::LibraryUuid& configLib, const ::aidl::android::media::audio::common::AudioUuid& typeUuid, diff --git a/audio/aidl/default/loudnessEnhancer/Android.bp b/audio/aidl/default/loudnessEnhancer/Android.bp index 3a0ac73d03..89a72fe469 100644 --- a/audio/aidl/default/loudnessEnhancer/Android.bp +++ b/audio/aidl/default/loudnessEnhancer/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "LoudnessEnhancerSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/noiseSuppression/Android.bp b/audio/aidl/default/noiseSuppression/Android.bp index 581d4bfe01..dad3d49d47 100644 --- a/audio/aidl/default/noiseSuppression/Android.bp +++ b/audio/aidl/default/noiseSuppression/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "NoiseSuppressionSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/presetReverb/Android.bp b/audio/aidl/default/presetReverb/Android.bp index 41485112e4..18bdd17b29 100644 --- a/audio/aidl/default/presetReverb/Android.bp +++ b/audio/aidl/default/presetReverb/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "PresetReverbSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/virtualizer/Android.bp b/audio/aidl/default/virtualizer/Android.bp index ba38f5c1a8..ed0199df72 100644 --- a/audio/aidl/default/virtualizer/Android.bp +++ b/audio/aidl/default/virtualizer/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "VirtualizerSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/visualizer/Android.bp b/audio/aidl/default/visualizer/Android.bp index 5041be8344..091daa243f 100644 --- a/audio/aidl/default/visualizer/Android.bp +++ b/audio/aidl/default/visualizer/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "VisualizerSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ], diff --git a/audio/aidl/default/volume/Android.bp b/audio/aidl/default/volume/Android.bp index 505ee67c34..418bb8d0cd 100644 --- a/audio/aidl/default/volume/Android.bp +++ b/audio/aidl/default/volume/Android.bp @@ -34,6 +34,7 @@ cc_library_shared { "VolumeSw.cpp", ":effectCommonFile", ], + relative_install_path: "soundfx", visibility: [ "//hardware/interfaces/audio/aidl/default", ],