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