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

Commit 44d0695e authored by Shunkai Yao's avatar Shunkai Yao Committed by Automerger Merge Worker
Browse files

Merge "Keep the millibels precision for lvm EQ gain" am: d4c9da8c

parents a65c3af6 d4c9da8c
Loading
Loading
Loading
Loading
+13 −11
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ RetCode BundleContext::init() {
    std::lock_guard lg(mMutex);
    // init with pre-defined preset NORMAL
    for (std::size_t i = 0; i < lvm::MAX_NUM_BANDS; i++) {
        mBandGaindB[i] = lvm::kSoftPresets[0 /* normal */][i];
        mBandGainMdB[i] = lvm::kSoftPresets[0 /* normal */][i] * 100;
    }

    // allocate lvm instance
@@ -214,7 +214,7 @@ RetCode BundleContext::limitLevel() {

        if (eqEnabled) {
            for (int i = 0; i < lvm::MAX_NUM_BANDS; i++) {
                float bandFactor = mBandGaindB[i] / 15.0;
                float bandFactor = mBandGainMdB[i] / 1500.0;
                float bandCoefficient = lvm::kBandEnergyCoefficient[i];
                float bandEnergy = bandFactor * bandCoefficient * bandCoefficient;
                if (bandEnergy > 0) energyContribution += bandEnergy;
@@ -223,8 +223,8 @@ RetCode BundleContext::limitLevel() {
            // cross EQ coefficients
            float bandFactorSum = 0;
            for (int i = 0; i < lvm::MAX_NUM_BANDS - 1; i++) {
                float bandFactor1 = mBandGaindB[i] / 15.0;
                float bandFactor2 = mBandGaindB[i + 1] / 15.0;
                float bandFactor1 = mBandGainMdB[i] / 1500.0;
                float bandFactor2 = mBandGainMdB[i + 1] / 1500.0;

                if (bandFactor1 > 0 && bandFactor2 > 0) {
                    float crossEnergy =
@@ -246,7 +246,7 @@ RetCode BundleContext::limitLevel() {

            if (eqEnabled) {
                for (int i = 0; i < lvm::MAX_NUM_BANDS; i++) {
                    float bandFactor = mBandGaindB[i] / 15.0;
                    float bandFactor = mBandGainMdB[i] / 1500.0;
                    float bandCrossCoefficient = lvm::kBassBoostEnergyCrossCoefficient[i];
                    float bandEnergy = boostFactor * bandFactor * bandCrossCoefficient;
                    if (bandEnergy > 0) energyBassBoost += bandEnergy;
@@ -471,7 +471,7 @@ std::vector<Equalizer::BandLevel> BundleContext::getEqualizerBandLevels() const
    bandLevels.reserve(lvm::MAX_NUM_BANDS);
    for (std::size_t i = 0; i < lvm::MAX_NUM_BANDS; i++) {
        bandLevels.emplace_back(
                Equalizer::BandLevel{static_cast<int32_t>(i), mBandGaindB[i] * 100});
                Equalizer::BandLevel{static_cast<int32_t>(i), mBandGainMdB[i]});
    }
    return bandLevels;
}
@@ -505,9 +505,9 @@ RetCode BundleContext::updateControlParameter(const std::vector<Equalizer::BandL
    RETURN_VALUE_IF(!isBandLevelIndexInRange(bandLevels), RetCode::ERROR_ILLEGAL_PARAMETER,
                    "indexOutOfRange");

    std::array<int, lvm::MAX_NUM_BANDS> tempLevel(mBandGaindB);
    std::array<int, lvm::MAX_NUM_BANDS> tempLevel(mBandGainMdB);
    for (const auto& it : bandLevels) {
        tempLevel[it.index] = it.levelMb > 0 ? (it.levelMb + 50) / 100 : (it.levelMb - 50) / 100;
        tempLevel[it.index] = it.levelMb;
    }

    LVM_ControlParams_t params;
@@ -519,14 +519,16 @@ RetCode BundleContext::updateControlParameter(const std::vector<Equalizer::BandL
        for (std::size_t i = 0; i < lvm::MAX_NUM_BANDS; i++) {
            params.pEQNB_BandDefinition[i].Frequency = lvm::kPresetsFrequencies[i];
            params.pEQNB_BandDefinition[i].QFactor = lvm::kPresetsQFactors[i];
            params.pEQNB_BandDefinition[i].Gain = tempLevel[i];
            params.pEQNB_BandDefinition[i].Gain =
                    tempLevel[i] > 0 ? (tempLevel[i] + 50) / 100 : (tempLevel[i] - 50) / 100;
        }

        RETURN_VALUE_IF(LVM_SUCCESS != LVM_SetControlParameters(mInstance, &params),
                        RetCode::ERROR_EFFECT_LIB_ERROR, " setControlParamFailed");
    }
    mBandGaindB = tempLevel;
    LOG(DEBUG) << __func__ << " update bandGain to " << ::android::internal::ToString(mBandGaindB);
    mBandGainMdB = tempLevel;
    LOG(DEBUG) << __func__ << " update bandGain to " << ::android::internal::ToString(mBandGainMdB)
               << "mdB";

    return RetCode::SUCCESS;
}
+1 −1
Original line number Diff line number Diff line
@@ -135,7 +135,7 @@ class BundleContext final : public EffectContext {
    int mBassStrengthSaved = 0;
    // Equalizer
    int mCurPresetIdx = lvm::PRESET_CUSTOM; /* Current preset being used */
    std::array<int, lvm::MAX_NUM_BANDS> mBandGaindB;
    std::array<int, lvm::MAX_NUM_BANDS> mBandGainMdB; /* band gain in millibels */
    // Virtualizer
    int mVirtStrengthSaved = 0; /* Conversion between Get/Set */
    bool mVirtualizerTempDisabled = false;