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

Commit 1084dc34 authored by Shunkai Yao's avatar Shunkai Yao Committed by Gerrit Code Review
Browse files

Merge changes from topic "effect_volume_ctrl" into main

* changes:
  Fix volume value and DPE range
  fix volume value of reverb and volume flag of visualizer
parents 8f172778 cb5bcc48
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -105,14 +105,14 @@ static const DynamicsProcessing::EqBandConfig kEqBandConfigMin =
        DynamicsProcessing::EqBandConfig({.channel = 0,
                                          .band = 0,
                                          .enable = false,
                                          .cutoffFrequencyHz = 20,
                                          .cutoffFrequencyHz = 0,
                                          .gainDb = -200});

static const DynamicsProcessing::EqBandConfig kEqBandConfigMax =
        DynamicsProcessing::EqBandConfig({.channel = std::numeric_limits<int>::max(),
                                          .band = std::numeric_limits<int>::max(),
                                          .enable = true,
                                          .cutoffFrequencyHz = 20000.1,
                                          .cutoffFrequencyHz = 192000,
                                          .gainDb = 200});

static const Range::DynamicsProcessingRange kPreEqBandConfigRange = {
@@ -129,7 +129,7 @@ static const Range::DynamicsProcessingRange kMbcBandConfigRange = {
                        {.channel = 0,
                         .band = 0,
                         .enable = false,
                         .cutoffFrequencyHz = 20,
                         .cutoffFrequencyHz = 0,
                         .attackTimeMs = 0,
                         .releaseTimeMs = 0,
                         .ratio = 1,
@@ -144,7 +144,7 @@ static const Range::DynamicsProcessingRange kMbcBandConfigRange = {
                        {.channel = std::numeric_limits<int>::max(),
                         .band = std::numeric_limits<int>::max(),
                         .enable = true,
                         .cutoffFrequencyHz = 20000.1,
                         .cutoffFrequencyHz = 192000,
                         .attackTimeMs = 60000,
                         .releaseTimeMs = 60000,
                         .ratio = 50,
@@ -443,7 +443,7 @@ RetCode DynamicsProcessingImpl::releaseContext() {
IEffect::Status DynamicsProcessingImpl::effectProcessImpl(float* in, float* out, int samples) {
    IEffect::Status status = {EX_NULL_POINTER, 0, 0};
    RETURN_VALUE_IF(!mContext, status, "nullContext");
    return mContext->lvmProcess(in, out, samples);
    return mContext->dpeProcess(in, out, samples);
}

}  // namespace aidl::android::hardware::audio::effect
+24 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include "DynamicsProcessingContext.h"
#include "DynamicsProcessing.h"

#include <audio_utils/power.h>
#include <sys/param.h>
#include <functional>
#include <unordered_set>
@@ -68,6 +69,23 @@ RetCode DynamicsProcessingContext::setCommon(const Parameter::Common& common) {
    return RetCode::SUCCESS;
}

RetCode DynamicsProcessingContext::setVolumeStereo(const Parameter::VolumeStereo& volumeStereo) {
    std::lock_guard lg(mMutex);
    dp_fx::DPChannel* leftChannel = mDpFreq->getChannel(0);
    dp_fx::DPChannel* rightChannel = mDpFreq->getChannel(1);
    if (leftChannel != nullptr) {
        leftChannel->setOutputGain(audio_utils_power_from_amplitude(volumeStereo.left));
    }
    if (rightChannel != nullptr) {
        rightChannel->setOutputGain(audio_utils_power_from_amplitude(volumeStereo.right));
    }
    return RetCode::SUCCESS;
}

Parameter::VolumeStereo DynamicsProcessingContext::getVolumeStereo() {
    return {1.0f, 1.0f};
}

void DynamicsProcessingContext::dpSetFreqDomainVariant_l(
        const DynamicsProcessing::EngineArchitecture& engine) {
    mDpFreq.reset(new dp_fx::DPFrequency());
@@ -273,7 +291,7 @@ std::vector<DynamicsProcessing::InputGain> DynamicsProcessingContext::getInputGa
    return ret;
}

IEffect::Status DynamicsProcessingContext::lvmProcess(float* in, float* out, int samples) {
IEffect::Status DynamicsProcessingContext::dpeProcess(float* in, float* out, int samples) {
    LOG(DEBUG) << __func__ << " in " << in << " out " << out << " sample " << samples;

    IEffect::Status status = {EX_NULL_POINTER, 0, 0};
@@ -460,6 +478,11 @@ RetCode DynamicsProcessingContext::setDpChannels_l(
    RetCode ret = RetCode::SUCCESS;
    std::unordered_set<int> channelSet;

    if (!stageInUse) {
        LOG(WARNING) << __func__ << " not in use " << ::android::internal::ToString(channels);
        return RetCode::SUCCESS;
    }

    RETURN_VALUE_IF(!stageInUse, RetCode::ERROR_ILLEGAL_PARAMETER, "stageNotInUse");
    for (auto& it : channels) {
        if (0 != channelSet.count(it.channel)) {
+3 −1
Original line number Diff line number Diff line
@@ -45,6 +45,8 @@ class DynamicsProcessingContext final : public EffectContext {

    // override EffectContext::setCommon to update mChannelCount
    RetCode setCommon(const Parameter::Common& common) override;
    RetCode setVolumeStereo(const Parameter::VolumeStereo& volumeStereo) override;
    Parameter::VolumeStereo getVolumeStereo() override;

    RetCode setEngineArchitecture(const DynamicsProcessing::EngineArchitecture& engineArchitecture);
    RetCode setPreEq(const std::vector<DynamicsProcessing::ChannelConfig>& eqChannels);
@@ -66,7 +68,7 @@ class DynamicsProcessingContext final : public EffectContext {
    std::vector<DynamicsProcessing::LimiterConfig> getLimiter();
    std::vector<DynamicsProcessing::InputGain> getInputGain();

    IEffect::Status lvmProcess(float* in, float* out, int samples);
    IEffect::Status dpeProcess(float* in, float* out, int samples);

  private:
    static constexpr float kPreferredProcessingDurationMs = 10.0f;
+1 −1
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ class BundleContext final : public EffectContext {
            const Virtualizer::SpeakerAnglesPayload payload);

    RetCode setVolumeStereo(const Parameter::VolumeStereo& volumeStereo) override;
    Parameter::VolumeStereo getVolumeStereo() override { return mVolumeStereo; }
    Parameter::VolumeStereo getVolumeStereo() override { return {1.0f, 1.0f}; }

    IEffect::Status lvmProcess(float* in, float* out, int samples);

+6 −1
Original line number Diff line number Diff line
@@ -81,7 +81,12 @@ class ReverbContext final : public EffectContext {
    bool getEnvironmentalReverbBypass() const { return mBypass; }

    RetCode setVolumeStereo(const Parameter::VolumeStereo& volumeStereo) override;
    Parameter::VolumeStereo getVolumeStereo() override { return mVolumeStereo; }
    Parameter::VolumeStereo getVolumeStereo() override {
        if (isAuxiliary()) {
            return mVolumeStereo;
        }
        return {1.0f, 1.0f};
    }

    RetCode setReflectionsDelay(int delay) {
        mReflectionsDelayMs = delay;
Loading