AIDL effect: Add all aosp effects default implementation

Bug: 238913361
Test: atest VtsHalAudioEffectTargetTest
atest VtsHalAudioEffectFactoryTargetTest
atest VtsHalEqualizerTargetTest

Change-Id: I6825ba77ae0707f97e852f0faa52ce3486ba2af5
diff --git a/audio/aidl/default/include/equalizer-impl/EqualizerSw.h b/audio/aidl/default/include/equalizer-impl/EqualizerSw.h
index aa3a727..dad03e1 100644
--- a/audio/aidl/default/include/equalizer-impl/EqualizerSw.h
+++ b/audio/aidl/default/include/equalizer-impl/EqualizerSw.h
@@ -21,85 +21,104 @@
 #include <cstdlib>
 #include <memory>
 
-#include "effect-impl/EffectContext.h"
-#include "effect-impl/EffectTypes.h"
+#include "effect-impl/EffectImpl.h"
 #include "effect-impl/EffectUUID.h"
-#include "effect-impl/EffectWorker.h"
 
 namespace aidl::android::hardware::audio::effect {
 
 class EqualizerSwContext : public EffectContext {
   public:
-    EqualizerSwContext(int statusDepth, int inBufferSize, int outBufferSize)
-        : EffectContext(statusDepth, inBufferSize, outBufferSize) {
+    EqualizerSwContext(int statusDepth, const Parameter::Common& common)
+        : EffectContext(statusDepth, common) {
         LOG(DEBUG) << __func__;
     }
 
+    RetCode setEqPreset(const int& presetIdx) {
+        if (presetIdx < 0 || presetIdx >= NUM_OF_PRESETS) {
+            return RetCode::ERROR_ILLEGAL_PARAMETER;
+        }
+        mPreset = presetIdx;
+        return RetCode::SUCCESS;
+    }
+    int getEqPreset() { return mPreset; }
+
+    RetCode setEqBandLevels(const std::vector<Equalizer::BandLevel>& bandLevels) {
+        if (bandLevels.size() > NUM_OF_BANDS) {
+            LOG(ERROR) << __func__ << " return because size exceed " << NUM_OF_BANDS;
+            return RetCode::ERROR_ILLEGAL_PARAMETER;
+        }
+        RetCode ret = RetCode::SUCCESS;
+        for (auto& it : bandLevels) {
+            if (it.index >= NUM_OF_BANDS || it.index < 0) {
+                LOG(ERROR) << __func__ << " index illegal, skip: " << it.index << " - "
+                           << it.levelMb;
+                ret = RetCode::ERROR_ILLEGAL_PARAMETER;
+            }
+            mBandLevels[it.index] = it.levelMb;
+        }
+        return ret;
+    }
+
+    std::vector<Equalizer::BandLevel> getEqBandLevels() {
+        std::vector<Equalizer::BandLevel> bandLevels;
+        for (int i = 0; i < NUM_OF_BANDS; i++) {
+            bandLevels.push_back({i, mBandLevels[i]});
+        }
+        return bandLevels;
+    }
+
   private:
+    static const int NUM_OF_BANDS = 5;
+    static const int NUM_OF_PRESETS = 10;
+    static const int PRESET_CUSTOM = -1;
+    // preset band level
+    int mPreset = PRESET_CUSTOM;
+    int32_t mBandLevels[NUM_OF_BANDS] = {3, 0, 0, 0, 3};
+
     // Add equalizer specific context for processing here
 };
 
-class EqualizerSw : public BnEffect, EffectWorker {
+class EqualizerSw : public EffectImpl {
   public:
-    EqualizerSw() {
-        Equalizer::Capability eqCap = {.bandFrequencies = mBandFrequency, .presets = mPresets};
-        mDesc.capability.set<Capability::equalizer>(eqCap);
-        LOG(DEBUG) << __func__;
-    };
+    EqualizerSw() { LOG(DEBUG) << __func__; }
     ~EqualizerSw() {
-        cleanUp();
         LOG(DEBUG) << __func__;
-    };
-    ndk::ScopedAStatus open(const Parameter::Common& common, const Parameter::Specific& specific,
-                            OpenEffectReturn* _aidl_return) override;
-    ndk::ScopedAStatus close() override;
+        releaseContext();
+    }
+
     ndk::ScopedAStatus getDescriptor(Descriptor* _aidl_return) override;
-
-    ndk::ScopedAStatus getState(State* _aidl_return) override;
-    ndk::ScopedAStatus command(CommandId in_commandId) override;
-    ndk::ScopedAStatus setParameter(const Parameter& in_param) override;
-    ndk::ScopedAStatus getParameter(const Parameter::Id& in_paramId,
-                                    Parameter* _aidl_return) override;
-
-    IEffect::Status effectProcessImpl() override;
+    ndk::ScopedAStatus setParameterSpecific(const Parameter::Specific& specific) override;
+    ndk::ScopedAStatus getParameterSpecific(const Parameter::Id& id,
+                                            Parameter::Specific* specific) override;
+    IEffect::Status effectProcessImpl(float* in, float* out, int process) override;
+    std::shared_ptr<EffectContext> createContext(const Parameter::Common& common) override;
+    RetCode releaseContext() override;
 
   private:
-    // Effect descriptor.
-    Descriptor mDesc = {.common = {.id = {.type = EqualizerTypeUUID, .uuid = EqualizerSwImplUUID}}};
-
-    // Parameters.
-    Parameter::Common mCommonParam;
-    Equalizer mEqualizerParam;  // TODO: the equalizer parameter needs to update
-
-    // Instance state INIT by default.
-    State mState = State::INIT;
-
-    int mPreset = PRESET_CUSTOM;  // the current preset
+    std::shared_ptr<EqualizerSwContext> mContext;
+    /* capabilities */
     const std::vector<Equalizer::BandFrequency> mBandFrequency = {{0, 30000, 120000},
                                                                   {1, 120001, 460000},
                                                                   {2, 460001, 1800000},
                                                                   {3, 1800001, 7000000},
                                                                   {4, 7000001, 20000000}};
-    // preset band level
-    std::vector<Equalizer::BandLevel> mBandLevels = {{0, 3}, {1, 0}, {2, 0}, {3, 0}, {4, 3}};
     // presets supported by the device
     const std::vector<Equalizer::Preset> mPresets = {
             {0, "Normal"},      {1, "Classical"}, {2, "Dance"}, {3, "Flat"}, {4, "Folk"},
             {5, "Heavy Metal"}, {6, "Hip Hop"},   {7, "Jazz"},  {8, "Pop"},  {9, "Rock"}};
-    static const int NUM_OF_BANDS = 5;
-    static const int NUM_OF_PRESETS = 10;
-    static const int PRESET_CUSTOM = -1;
 
-    // Equalizer worker context
-    std::shared_ptr<EqualizerSwContext> mContext;
+    const Equalizer::Capability kEqCap = {.bandFrequencies = mBandFrequency, .presets = mPresets};
+    // Effect descriptor.
+    const Descriptor kDesc = {.common = {.id = {.type = EqualizerTypeUUID,
+                                                .uuid = EqualizerSwImplUUID,
+                                                .proxy = std::nullopt},
+                                         .flags = {.type = Flags::Type::INSERT,
+                                                   .insert = Flags::Insert::FIRST,
+                                                   .volume = Flags::Volume::CTRL},
+                                         .name = "EqualizerSw"},
+                              .capability = Capability::make<Capability::equalizer>(kEqCap)};
 
-    ndk::ScopedAStatus setCommonParameter(const Parameter::Common& common_param);
-    ndk::ScopedAStatus setSpecificParameter(const Parameter::Specific& specific);
-    ndk::ScopedAStatus getSpecificParameter(Parameter::Specific::Id id,
-                                            Parameter::Specific* specific);
-
-    void cleanUp();
-
-    IEffect::Status status(binder_status_t status, size_t consumed, size_t produced);
+    ndk::ScopedAStatus getParameterEqualizer(const Equalizer::Tag& tag,
+                                             Parameter::Specific* specific);
 };
 }  // namespace aidl::android::hardware::audio::effect