Revert "Move EffectsConfig loading in AudioPolicyEffects to libAudioHal"

This reverts commit e3e403d4598c5460baffeba766f469eceafd91e5.

Reason for revert: fixes b/279127394 validated by http://go/abtd-run/L71300000960106239 and b/279108570

Change-Id: I58054d98365a6bf10b4dab2f347d4ee78205440c
diff --git a/media/libaudiohal/Android.bp b/media/libaudiohal/Android.bp
index 3c05b0b..1dbcb86 100644
--- a/media/libaudiohal/Android.bp
+++ b/media/libaudiohal/Android.bp
@@ -74,12 +74,6 @@
 cc_library_headers {
     name: "libaudiohal_headers",
 
-    header_libs: [
-        "libeffectsconfig_headers",
-    ],
-
-    export_header_lib_headers: ["libeffectsconfig_headers"],
-
     export_include_dirs: ["include"],
 }
 
diff --git a/media/libaudiohal/impl/Android.bp b/media/libaudiohal/impl/Android.bp
index 49fb2a4..1e3d45f 100644
--- a/media/libaudiohal/impl/Android.bp
+++ b/media/libaudiohal/impl/Android.bp
@@ -35,7 +35,6 @@
         "android.hidl.allocator@1.0",
         "android.hidl.memory@1.0",
         "libaudiohal_deathhandler",
-        "libeffectsconfig",
         "libhidlbase",
         "libhidlmemory",
     ],
@@ -282,16 +281,15 @@
         "android.hardware.common.fmq-V1-ndk",
     ],
     shared_libs: [
+        "libbinder_ndk",
         "libaudio_aidl_conversion_common_cpp",
         "libaudio_aidl_conversion_common_ndk",
         "libaudio_aidl_conversion_core_ndk",
         "libaudio_aidl_conversion_effect_ndk",
         "libaudioaidlcommon",
-        "libbinder_ndk",
     ],
     header_libs: [
         "libaudio_system_headers",
-        "libeffectsconfig_headers",
     ],
     cflags: [
         "-Wall",
diff --git a/media/libaudiohal/impl/EffectsFactoryHalAidl.cpp b/media/libaudiohal/impl/EffectsFactoryHalAidl.cpp
index 918d419..bc05aa0 100644
--- a/media/libaudiohal/impl/EffectsFactoryHalAidl.cpp
+++ b/media/libaudiohal/impl/EffectsFactoryHalAidl.cpp
@@ -23,7 +23,6 @@
 //#define LOG_NDEBUG 0
 
 #include <error/expected_utils.h>
-#include <aidl/android/media/audio/common/AudioStreamType.h>
 #include <android/binder_manager.h>
 #include <media/AidlConversionCppNdk.h>
 #include <media/AidlConversionEffect.h>
@@ -36,13 +35,11 @@
 #include "EffectsFactoryHalAidl.h"
 
 using ::aidl::android::legacy2aidl_audio_uuid_t_AudioUuid;
-using ::aidl::android::aidl_utils::statusTFromBinderStatus;
-using ::aidl::android::hardware::audio::effect::Descriptor;
-using ::aidl::android::hardware::audio::effect::IFactory;
-using ::aidl::android::hardware::audio::effect::Processing;
-using ::aidl::android::media::audio::common::AudioUuid;
-using ::android::base::unexpected;
-using ::android::detail::AudioHalVersionInfo;
+using aidl::android::aidl_utils::statusTFromBinderStatus;
+using aidl::android::hardware::audio::effect::Descriptor;
+using aidl::android::hardware::audio::effect::IFactory;
+using aidl::android::media::audio::common::AudioUuid;
+using android::detail::AudioHalVersionInfo;
 
 namespace android {
 namespace effect {
@@ -95,8 +92,7 @@
                        [](const Descriptor& desc) { return !desc.common.id.proxy.has_value(); });
           return list;
       }()),
-      mEffectCount(mNonProxyDescList.size() + mProxyDescList.size()),
-      mEffectProcessings(INVALID_EFFECT_PROCESSING) {
+      mEffectCount(mNonProxyDescList.size() + mProxyDescList.size()) {
     ALOG_ASSERT(mFactory != nullptr, "Provided IEffectsFactory service is NULL");
     ALOGI("%s with %zu nonProxyEffects and %zu proxyEffects", __func__, mNonProxyDescList.size(),
           mProxyDescList.size());
@@ -273,10 +269,6 @@
     return 0 != mUuidProxyMap.count(uuid);
 }
 
-const effectsConfig::EffectProcessings& EffectsFactoryHalAidl::getProcessings() const {
-    return mEffectProcessings;
-}
-
 } // namespace effect
 
 // When a shared library is built from a static library, even explicit
diff --git a/media/libaudiohal/impl/EffectsFactoryHalAidl.h b/media/libaudiohal/impl/EffectsFactoryHalAidl.h
index 9116895..debfacf 100644
--- a/media/libaudiohal/impl/EffectsFactoryHalAidl.h
+++ b/media/libaudiohal/impl/EffectsFactoryHalAidl.h
@@ -62,8 +62,6 @@
 
     detail::AudioHalVersionInfo getHalVersion() const override;
 
-    const effectsConfig::EffectProcessings& getProcessings() const override;
-
   private:
     const std::shared_ptr<IFactory> mFactory;
     const detail::AudioHalVersionInfo mHalVersion;
@@ -79,8 +77,6 @@
     const std::vector<Descriptor> mNonProxyDescList;
     // total number of effects including proxy effects
     const size_t mEffectCount;
-    // Query result and all processing from effect factory
-    const effectsConfig::EffectProcessings mEffectProcessings;
 
     std::mutex mLock;
     uint64_t mEffectIdCounter GUARDED_BY(mLock) = 0;  // Align with HIDL (0 is INVALID_ID)
diff --git a/media/libaudiohal/impl/EffectsFactoryHalHidl.cpp b/media/libaudiohal/impl/EffectsFactoryHalHidl.cpp
index 483f643..172ebdf 100644
--- a/media/libaudiohal/impl/EffectsFactoryHalHidl.cpp
+++ b/media/libaudiohal/impl/EffectsFactoryHalHidl.cpp
@@ -33,11 +33,10 @@
 
 #include "android/media/AudioHalVersion.h"
 
-using ::android::base::unexpected;
 using ::android::detail::AudioHalVersionInfo;
-using ::android::hardware::Return;
 using ::android::hardware::audio::common::CPP_VERSION::implementation::UuidUtils;
 using ::android::hardware::audio::effect::CPP_VERSION::implementation::EffectUtils;
+using ::android::hardware::Return;
 
 namespace android {
 namespace effect {
@@ -79,17 +78,7 @@
 }
 
 EffectsFactoryHalHidl::EffectsFactoryHalHidl(sp<IEffectsFactory> effectsFactory)
-    : EffectConversionHelperHidl("EffectsFactory"),
-      mCache(new EffectDescriptorCache),
-      mEffectProcessings([&]() -> effectsConfig::EffectProcessings {
-          effectsConfig::EffectProcessings processings;
-          const auto& parseResult = effectsConfig::parse();
-          if (!parseResult.parsedConfig) {
-              return INVALID_EFFECT_PROCESSING;
-          }
-          return {parseResult.nbSkippedElement, parseResult.parsedConfig->preprocess,
-                  parseResult.parsedConfig->postprocess, parseResult.parsedConfig->deviceprocess};
-      }()) {
+        : EffectConversionHelperHidl("EffectsFactory"), mCache(new EffectDescriptorCache) {
     ALOG_ASSERT(effectsFactory != nullptr, "Provided IEffectsFactory service is NULL");
     mEffectsFactory = std::move(effectsFactory);
 }
@@ -239,10 +228,6 @@
     return AudioHalVersionInfo(AudioHalVersionInfo::Type::HIDL, MAJOR_VERSION, MINOR_VERSION);
 }
 
-const effectsConfig::EffectProcessings& EffectsFactoryHalHidl::getProcessings() const {
-    return mEffectProcessings;
-}
-
 } // namespace effect
 
 // When a shared library is built from a static library, even explicit
diff --git a/media/libaudiohal/impl/EffectsFactoryHalHidl.h b/media/libaudiohal/impl/EffectsFactoryHalHidl.h
index c64ca3a..9875154 100644
--- a/media/libaudiohal/impl/EffectsFactoryHalHidl.h
+++ b/media/libaudiohal/impl/EffectsFactoryHalHidl.h
@@ -17,7 +17,6 @@
 #pragma once
 
 #include <memory>
-#include <vector>
 
 #include PATH(android/hardware/audio/effect/FILE_VERSION/IEffectsFactory.h)
 #include <media/audiohal/EffectsFactoryHalInterface.h>
@@ -63,13 +62,9 @@
 
     android::detail::AudioHalVersionInfo getHalVersion() const override;
 
-    const effectsConfig::EffectProcessings& getProcessings() const override;
-
   private:
     sp<IEffectsFactory> mEffectsFactory;
     std::unique_ptr<EffectDescriptorCache> mCache;
-    // Configuration file parser result together with all processings from effect factory
-    const effectsConfig::EffectProcessings mEffectProcessings;
 };
 
 } // namespace effect
diff --git a/media/libaudiohal/include/media/audiohal/EffectsFactoryHalInterface.h b/media/libaudiohal/include/media/audiohal/EffectsFactoryHalInterface.h
index e15fcb5..d740fe9 100644
--- a/media/libaudiohal/include/media/audiohal/EffectsFactoryHalInterface.h
+++ b/media/libaudiohal/include/media/audiohal/EffectsFactoryHalInterface.h
@@ -15,10 +15,8 @@
  */
 
 #pragma once
-#include <vector>
 
 #include <media/audiohal/EffectHalInterface.h>
-#include <media/EffectsConfig.h>
 #include <system/audio_effect.h>
 #include <utils/Errors.h>
 #include <utils/RefBase.h>
@@ -35,21 +33,21 @@
     virtual status_t queryNumberEffects(uint32_t *pNumEffects) = 0;
 
     // Returns a descriptor of the next available effect.
-    virtual status_t getDescriptor(uint32_t index, effect_descriptor_t* pDescriptor) = 0;
+    virtual status_t getDescriptor(uint32_t index,
+            effect_descriptor_t *pDescriptor) = 0;
 
-    virtual status_t getDescriptor(const effect_uuid_t* pEffectUuid,
-                                   effect_descriptor_t* pDescriptor) = 0;
+    virtual status_t getDescriptor(const effect_uuid_t *pEffectUuid,
+            effect_descriptor_t *pDescriptor) = 0;
 
     virtual status_t getDescriptors(const effect_uuid_t *pEffectType,
                                     std::vector<effect_descriptor_t> *descriptors) = 0;
 
-    virtual const effectsConfig::EffectProcessings& getProcessings() const = 0;
-
     // Creates an effect engine of the specified type.
     // To release the effect engine, it is necessary to release references
     // to the returned effect object.
-    virtual status_t createEffect(const effect_uuid_t* pEffectUuid, int32_t sessionId, int32_t ioId,
-                                  int32_t deviceId, sp<EffectHalInterface>* effect) = 0;
+    virtual status_t createEffect(const effect_uuid_t *pEffectUuid,
+            int32_t sessionId, int32_t ioId, int32_t deviceId,
+            sp<EffectHalInterface> *effect) = 0;
 
     virtual status_t dumpEffects(int fd) = 0;
 
@@ -64,9 +62,6 @@
     // Helper function to compare effect uuid to EFFECT_UUID_NULL.
     static bool isNullUuid(const effect_uuid_t* pEffectUuid);
 
-#define INVALID_EFFECT_PROCESSING \
-    effectsConfig::EffectProcessings({::android::base::unexpected(BAD_VALUE), {}, {}, {}})
-
   protected:
     // Subclasses can not be constructed directly by clients.
     EffectsFactoryHalInterface() {}
diff --git a/media/libeffects/config/Android.bp b/media/libeffects/config/Android.bp
index 293a9c2..b02dcb6 100644
--- a/media/libeffects/config/Android.bp
+++ b/media/libeffects/config/Android.bp
@@ -27,21 +27,8 @@
         "libcutils",
     ],
 
-    header_libs: [
-        "libaudio_system_headers",
-        "liberror_headers",
-    ],
-
-    export_header_lib_headers: [
-        "libaudio_system_headers",
-        "liberror_headers",
-    ],
-
-    export_include_dirs: ["include"],
-}
-
-cc_library_headers {
-    name: "libeffectsconfig_headers",
+    header_libs: ["libaudio_system_headers"],
+    export_header_lib_headers: ["libaudio_system_headers"],
 
     export_include_dirs: ["include"],
 }
diff --git a/media/libeffects/config/include/media/EffectsConfig.h b/media/libeffects/config/include/media/EffectsConfig.h
index f37e0ef..57d4dd7 100644
--- a/media/libeffects/config/include/media/EffectsConfig.h
+++ b/media/libeffects/config/include/media/EffectsConfig.h
@@ -22,10 +22,8 @@
  * @see audio_effects_conf_V2_0.xsd for documentation on each structure
  */
 
-#include <error/Result.h>
 #include <system/audio_effect.h>
 
-#include <cstddef>
 #include <map>
 #include <memory>
 #include <string>
@@ -77,14 +75,6 @@
     std::string address;
 };
 
-struct EffectProcessings {
-    // status_t if parser return error, skipped element if parsing result is OK
-    ::android::error::Result<size_t /* skipped element, 0 by default */> result;
-    std::vector<InputStream> preprocess;
-    std::vector<OutputStream> postprocess;
-    std::vector<DeviceEffects> deviceprocess;
-};
-
 /** Parsed configuration.
  * Intended to be a transient structure only used for deserialization.
  * Note: Everything is copied in the configuration from the xml dom.
diff --git a/media/libeffects/factory/Android.bp b/media/libeffects/factory/Android.bp
index d94093e..22838a3 100644
--- a/media/libeffects/factory/Android.bp
+++ b/media/libeffects/factory/Android.bp
@@ -39,7 +39,6 @@
     header_libs: [
         "libaudioeffects",
         "libeffects_headers",
-        "liberror_headers",
     ],
     export_header_lib_headers: ["libeffects_headers"],
 }
@@ -57,6 +56,7 @@
         "-Werror",
     ],
 
+
     shared_libs: [
         "libeffectsconfig",
         "libeffects",
diff --git a/services/audiopolicy/service/AudioPolicyEffects.cpp b/services/audiopolicy/service/AudioPolicyEffects.cpp
index b0eb3b7..c7a60c2 100644
--- a/services/audiopolicy/service/AudioPolicyEffects.cpp
+++ b/services/audiopolicy/service/AudioPolicyEffects.cpp
@@ -41,25 +41,26 @@
 // AudioPolicyEffects Implementation
 // ----------------------------------------------------------------------------
 
-AudioPolicyEffects::AudioPolicyEffects(const sp<EffectsFactoryHalInterface>& effectsFactoryHal) {
-    // load xml config with effectsFactoryHal
-    status_t loadResult = loadAudioEffectConfig(effectsFactoryHal);
+AudioPolicyEffects::AudioPolicyEffects()
+{
+    status_t loadResult = loadAudioEffectXmlConfig();
     if (loadResult == NO_ERROR) {
-        mDefaultDeviceEffectFuture =
-                std::async(std::launch::async, &AudioPolicyEffects::initDefaultDeviceEffects, this);
+        mDefaultDeviceEffectFuture = std::async(
+                    std::launch::async, &AudioPolicyEffects::initDefaultDeviceEffects, this);
     } else if (loadResult < 0) {
-        ALOGW("Failed to query effect configuration, fallback to load .conf");
+        ALOGW("Failed to load XML effect configuration, fallback to .conf");
         // load automatic audio effect modules
         if (access(AUDIO_EFFECT_VENDOR_CONFIG_FILE, R_OK) == 0) {
-            loadAudioEffectConfigLegacy(AUDIO_EFFECT_VENDOR_CONFIG_FILE);
+            loadAudioEffectConfig(AUDIO_EFFECT_VENDOR_CONFIG_FILE);
         } else if (access(AUDIO_EFFECT_DEFAULT_CONFIG_FILE, R_OK) == 0) {
-            loadAudioEffectConfigLegacy(AUDIO_EFFECT_DEFAULT_CONFIG_FILE);
+            loadAudioEffectConfig(AUDIO_EFFECT_DEFAULT_CONFIG_FILE);
         }
     } else if (loadResult > 0) {
         ALOGE("Effect config is partially invalid, skipped %d elements", loadResult);
     }
 }
 
+
 AudioPolicyEffects::~AudioPolicyEffects()
 {
     size_t i = 0;
@@ -906,16 +907,12 @@
     return NO_ERROR;
 }
 
-status_t AudioPolicyEffects::loadAudioEffectConfig(
-        const sp<EffectsFactoryHalInterface>& effectsFactoryHal) {
-    if (!effectsFactoryHal) {
-        ALOGE("%s Null EffectsFactoryHalInterface", __func__);
-        return UNEXPECTED_NULL;
+status_t AudioPolicyEffects::loadAudioEffectXmlConfig() {
+    auto result = effectsConfig::parse();
+    if (result.parsedConfig == nullptr) {
+        return -ENOENT;
     }
 
-    const auto& processings = effectsFactoryHal->getProcessings();
-    const auto& skippedElements = VALUE_OR_RETURN_STATUS(processings.result);
-
     auto loadProcessingChain = [](auto& processingChain, auto& streams) {
         for (auto& stream : processingChain) {
             auto effectDescs = std::make_unique<EffectDescVector>();
@@ -927,8 +924,9 @@
         }
     };
 
-    auto loadDeviceProcessingChain = [](auto& processingChain, auto& devicesEffects) {
+    auto loadDeviceProcessingChain = [](auto &processingChain, auto& devicesEffects) {
         for (auto& deviceProcess : processingChain) {
+
             auto effectDescs = std::make_unique<EffectDescVector>();
             for (auto& effect : deviceProcess.effects) {
                 effectDescs->mEffects.add(
@@ -940,18 +938,17 @@
         }
     };
 
-    loadProcessingChain(processings.preprocess, mInputSources);
-    loadProcessingChain(processings.postprocess, mOutputStreams);
-
+    loadProcessingChain(result.parsedConfig->preprocess, mInputSources);
+    loadProcessingChain(result.parsedConfig->postprocess, mOutputStreams);
     {
         Mutex::Autolock _l(mLock);
-        loadDeviceProcessingChain(processings.deviceprocess, mDeviceEffects);
+        loadDeviceProcessingChain(result.parsedConfig->deviceprocess, mDeviceEffects);
     }
-
-    return skippedElements;
+    // Casting from ssize_t to status_t is probably safe, there should not be more than 2^31 errors
+    return result.nbSkippedElement;
 }
 
-status_t AudioPolicyEffects::loadAudioEffectConfigLegacy(const char *path)
+status_t AudioPolicyEffects::loadAudioEffectConfig(const char *path)
 {
     cnode *root;
     char *data;
diff --git a/services/audiopolicy/service/AudioPolicyEffects.h b/services/audiopolicy/service/AudioPolicyEffects.h
index 6ed11f1..13d5d0c 100644
--- a/services/audiopolicy/service/AudioPolicyEffects.h
+++ b/services/audiopolicy/service/AudioPolicyEffects.h
@@ -20,33 +20,22 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-#include <future>
-
-#include <android-base/thread_annotations.h>
 #include <cutils/misc.h>
 #include <media/AudioEffect.h>
-#include <media/audiohal/EffectsFactoryHalInterface.h>
 #include <system/audio.h>
 #include <utils/Vector.h>
 #include <utils/SortedVector.h>
+#include <android-base/thread_annotations.h>
+
+#include <future>
 
 namespace android {
 
 // ----------------------------------------------------------------------------
 
-/**
- * AudioPolicyEffects class.
- *
- * This class manages all effects attached to input and output streams in AudioPolicyService.
- * The effect configurations caa be queried in several ways:
- *
- * With HIDL HAL, the configuration file `audio_effects.xml` will be loaded by libAudioHal. If this
- * file does not exist, AudioPolicyEffects class will fallback to load configuration from
- * `/vendor/etc/audio_effects.conf` (AUDIO_EFFECT_VENDOR_CONFIG_FILE). If this file also does not
- * exist, the configuration will be loaded from the file `/system/etc/audio_effects.conf`.
- *
- * With AIDL HAL, the configuration will be queried with the method `IFactory::queryProcessing()`.
- */
+// AudioPolicyEffects class
+// This class will manage all effects attached to input and output streams in
+// AudioPolicyService as configured in audio_effects.conf.
 class AudioPolicyEffects : public RefBase
 {
 
@@ -55,7 +44,7 @@
     // The constructor will parse audio_effects.conf
     // First it will look whether vendor specific file exists,
     // otherwise it will parse the system default file.
-    AudioPolicyEffects(const sp<EffectsFactoryHalInterface>& effectsFactoryHal);
+	         AudioPolicyEffects();
     virtual ~AudioPolicyEffects();
 
     // NOTE: methods on AudioPolicyEffects should never be called with the AudioPolicyService
@@ -229,6 +218,7 @@
 
     };
 
+
     static const char * const kInputSourceNames[AUDIO_SOURCE_CNT -1];
     static audio_source_t inputSourceNameToEnum(const char *name);
 
@@ -236,8 +226,8 @@
     audio_stream_type_t streamNameToEnum(const char *name);
 
     // Parse audio_effects.conf
-    status_t loadAudioEffectConfigLegacy(const char *path);
-    status_t loadAudioEffectConfig(const sp<EffectsFactoryHalInterface>& effectsFactoryHal);
+    status_t loadAudioEffectConfig(const char *path); // TODO: add legacy in the name
+    status_t loadAudioEffectXmlConfig(); // TODO: remove "Xml" in the name
 
     // Load all effects descriptors in configuration file
     status_t loadEffects(cnode *root, Vector <EffectDesc *>& effects);
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 0df3962..f34427c 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -460,14 +460,14 @@
     }
     ALOGV("startOutput()");
     sp<AudioPlaybackClient> client;
-    sp<AudioPolicyEffects> audioPolicyEffects;
+    sp<AudioPolicyEffects>audioPolicyEffects;
 
     getPlaybackClientAndEffects(portId, client, audioPolicyEffects, __func__);
 
     if (audioPolicyEffects != 0) {
         // create audio processors according to stream
-        status_t status = audioPolicyEffects->addOutputSessionEffects(client->io, client->stream,
-                                                                      client->session);
+        status_t status = audioPolicyEffects->addOutputSessionEffects(
+            client->io, client->stream, client->session);
         if (status != NO_ERROR && status != ALREADY_EXISTS) {
             ALOGW("Failed to add effects on session %d", client->session);
         }
diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp
index 040f869..281785e 100644
--- a/services/audiopolicy/service/AudioPolicyService.cpp
+++ b/services/audiopolicy/service/AudioPolicyService.cpp
@@ -252,8 +252,7 @@
     }
 
     // load audio processing modules
-    const sp<EffectsFactoryHalInterface> effectsFactoryHal = EffectsFactoryHalInterface::create();
-    sp<AudioPolicyEffects> audioPolicyEffects = new AudioPolicyEffects(effectsFactoryHal);
+    sp<AudioPolicyEffects> audioPolicyEffects = new AudioPolicyEffects();
     sp<UidPolicy> uidPolicy = new UidPolicy(this);
     sp<SensorPrivacyPolicy> sensorPrivacyPolicy = new SensorPrivacyPolicy(this);
     {
@@ -272,7 +271,7 @@
         AudioDeviceTypeAddrVector devices;
         bool hasSpatializer = mAudioPolicyManager->canBeSpatialized(&attr, nullptr, devices);
         if (hasSpatializer) {
-            mSpatializer = Spatializer::create(this, effectsFactoryHal);
+            mSpatializer = Spatializer::create(this);
         }
         if (mSpatializer == nullptr) {
             // No spatializer created, signal the reason: NO_INIT a failure, OK means intended.
diff --git a/services/audiopolicy/service/Spatializer.cpp b/services/audiopolicy/service/Spatializer.cpp
index f0d5274..5db82f7 100644
--- a/services/audiopolicy/service/Spatializer.cpp
+++ b/services/audiopolicy/service/Spatializer.cpp
@@ -30,6 +30,7 @@
 #include <audio_utils/fixedfft.h>
 #include <cutils/bitops.h>
 #include <hardware/sensors.h>
+#include <media/audiohal/EffectsFactoryHalInterface.h>
 #include <media/stagefright/foundation/AHandler.h>
 #include <media/stagefright/foundation/AMessage.h>
 #include <media/MediaMetricsItem.h>
@@ -214,17 +215,18 @@
 };
 
 // ---------------------------------------------------------------------------
-sp<Spatializer> Spatializer::create(SpatializerPolicyCallback* callback,
-                                    const sp<EffectsFactoryHalInterface>& effectsFactoryHal) {
+sp<Spatializer> Spatializer::create(SpatializerPolicyCallback *callback) {
     sp<Spatializer> spatializer;
 
+    sp<EffectsFactoryHalInterface> effectsFactoryHal = EffectsFactoryHalInterface::create();
     if (effectsFactoryHal == nullptr) {
         ALOGW("%s failed to create effect factory interface", __func__);
         return spatializer;
     }
 
     std::vector<effect_descriptor_t> descriptors;
-    status_t status = effectsFactoryHal->getDescriptors(FX_IID_SPATIALIZER, &descriptors);
+    status_t status =
+            effectsFactoryHal->getDescriptors(FX_IID_SPATIALIZER, &descriptors);
     if (status != NO_ERROR) {
         ALOGW("%s failed to get spatializer descriptor, error %d", __func__, status);
         return spatializer;
diff --git a/services/audiopolicy/service/Spatializer.h b/services/audiopolicy/service/Spatializer.h
index a657b7f..60030bd 100644
--- a/services/audiopolicy/service/Spatializer.h
+++ b/services/audiopolicy/service/Spatializer.h
@@ -27,7 +27,6 @@
 #include <audio_utils/SimpleLog.h>
 #include <math.h>
 #include <media/AudioEffect.h>
-#include <media/audiohal/EffectsFactoryHalInterface.h>
 #include <media/VectorRecorder.h>
 #include <media/audiohal/EffectHalInterface.h>
 #include <media/stagefright/foundation/ALooper.h>
@@ -95,8 +94,7 @@
                     private SpatializerPoseController::Listener,
                     public virtual AudioSystem::SupportedLatencyModesCallback {
   public:
-    static sp<Spatializer> create(SpatializerPolicyCallback* callback,
-                                  const sp<EffectsFactoryHalInterface>& effectsFactoryHal);
+    static sp<Spatializer> create(SpatializerPolicyCallback *callback);
 
            ~Spatializer() override;