Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7fb4d73f authored by Sham Rathod's avatar Sham Rathod Committed by Automerger Merge Worker
Browse files

Virtualizer: Add AIDL placeholder implementation and vts test am: 2d319dc8 am: 08be8b65

parents af57555c 08be8b65
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -24,6 +24,9 @@
    {
      "name": "VtsHalLoudnessEnhancerTargetTest"
    },
    {
      "name": "VtsHalVirtualizerTargetTest"
    },
    {
      "name": "VtsHalVisualizerTargetTest"
    },
+2 −0
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@ package android.hardware.audio.effect;
union Virtualizer {
  android.hardware.audio.effect.VendorExtension vendor;
  int strengthPm;
  const int MIN_PER_MILLE_STRENGTH = 0;
  const int MAX_PER_MILLE_STRENGTH = 1000;
  @VintfStability
  union Id {
    int vendorExtensionTag;
+10 −0
Original line number Diff line number Diff line
@@ -59,6 +59,16 @@ union Virtualizer {
        boolean strengthSupported;
    }

    /**
     * Minimal possible per mille strength.
     */
    const int MIN_PER_MILLE_STRENGTH = 0;

    /**
     * Maximum possible per mille strength.
     */
    const int MAX_PER_MILLE_STRENGTH = 1000;

    /**
     * The per mille strength of the virtualizer effect.
     *
+51 −5
Original line number Diff line number Diff line
@@ -60,7 +60,9 @@ extern "C" binder_exception_t queryEffect(const AudioUuid* in_impl_uuid, Descrip
namespace aidl::android::hardware::audio::effect {

const std::string VirtualizerSw::kEffectName = "VirtualizerSw";
const Virtualizer::Capability VirtualizerSw::kCapability;
const bool VirtualizerSw::kStrengthSupported = true;
const Virtualizer::Capability VirtualizerSw::kCapability = {.strengthSupported =
                                                                    kStrengthSupported};
const Descriptor VirtualizerSw::kDescriptor = {
        .common = {.id = {.type = kVirtualizerTypeUUID,
                          .uuid = kVirtualizerSwImplUUID,
@@ -82,16 +84,60 @@ ndk::ScopedAStatus VirtualizerSw::setParameterSpecific(const Parameter::Specific
    RETURN_IF(Parameter::Specific::virtualizer != specific.getTag(), EX_ILLEGAL_ARGUMENT,
              "EffectNotSupported");

    mSpecificParam = specific.get<Parameter::Specific::virtualizer>();
    LOG(DEBUG) << __func__ << " success with: " << specific.toString();
    auto& vrParam = specific.get<Parameter::Specific::virtualizer>();
    auto tag = vrParam.getTag();

    switch (tag) {
        case Virtualizer::strengthPm: {
            RETURN_IF(!kStrengthSupported, EX_ILLEGAL_ARGUMENT, "SettingStrengthNotSupported");

            RETURN_IF(mContext->setVrStrength(vrParam.get<Virtualizer::strengthPm>()) !=
                              RetCode::SUCCESS,
                      EX_ILLEGAL_ARGUMENT, "strengthPmNotSupported");
            return ndk::ScopedAStatus::ok();
        }
        default: {
            LOG(ERROR) << __func__ << " unsupported tag: " << toString(tag);
            return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT,
                                                                    "VirtualizerTagNotSupported");
        }
    }
}

ndk::ScopedAStatus VirtualizerSw::getParameterSpecific(const Parameter::Id& id,
                                                       Parameter::Specific* specific) {
    auto tag = id.getTag();
    RETURN_IF(Parameter::Id::virtualizerTag != tag, EX_ILLEGAL_ARGUMENT, "wrongIdTag");
    specific->set<Parameter::Specific::virtualizer>(mSpecificParam);
    auto vrId = id.get<Parameter::Id::virtualizerTag>();
    auto vrIdTag = vrId.getTag();
    switch (vrIdTag) {
        case Virtualizer::Id::commonTag:
            return getParameterVirtualizer(vrId.get<Virtualizer::Id::commonTag>(), specific);
        default:
            LOG(ERROR) << __func__ << " unsupported tag: " << toString(tag);
            return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT,
                                                                    "VirtualizerTagNotSupported");
    }
}

ndk::ScopedAStatus VirtualizerSw::getParameterVirtualizer(const Virtualizer::Tag& tag,
                                                          Parameter::Specific* specific) {
    RETURN_IF(!mContext, EX_NULL_POINTER, "nullContext");

    Virtualizer vrParam;
    switch (tag) {
        case Virtualizer::strengthPm: {
            vrParam.set<Virtualizer::strengthPm>(mContext->getVrStrength());
            break;
        }
        default: {
            LOG(ERROR) << __func__ << " unsupported tag: " << toString(tag);
            return ndk::ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT,
                                                                    "VirtualizerTagNotSupported");
        }
    }

    specific->set<Parameter::Specific::virtualizer>(vrParam);
    return ndk::ScopedAStatus::ok();
}

+18 −3
Original line number Diff line number Diff line
@@ -32,12 +32,26 @@ class VirtualizerSwContext final : public EffectContext {
        : EffectContext(statusDepth, common) {
        LOG(DEBUG) << __func__;
    }
    // TODO: add specific context here
    RetCode setVrStrength(int strength) {
        if (strength < Virtualizer::MIN_PER_MILLE_STRENGTH ||
            strength > Virtualizer::MAX_PER_MILLE_STRENGTH) {
            LOG(ERROR) << __func__ << " invalid strength " << strength;
            return RetCode::ERROR_ILLEGAL_PARAMETER;
        }
        // TODO : Add implementation to apply new strength
        mStrength = strength;
        return RetCode::SUCCESS;
    }
    int getVrStrength() const { return mStrength; }

  private:
    int mStrength;
};

class VirtualizerSw final : public EffectImpl {
  public:
    static const std::string kEffectName;
    static const bool kStrengthSupported;
    static const Virtualizer::Capability kCapability;
    static const Descriptor kDescriptor;
    VirtualizerSw() { LOG(DEBUG) << __func__; }
@@ -60,7 +74,8 @@ class VirtualizerSw final : public EffectImpl {

  private:
    std::shared_ptr<VirtualizerSwContext> mContext;
    /* parameters */
    Virtualizer mSpecificParam;

    ndk::ScopedAStatus getParameterVirtualizer(const Virtualizer::Tag& tag,
                                               Parameter::Specific* specific);
};
}  // namespace aidl::android::hardware::audio::effect
Loading