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

Commit 58741f22 authored by Shunkai Yao's avatar Shunkai Yao
Browse files

Keep the millibels precision for lvm EQ gain

Bug: 285632900
Test: atest --test-mapping hardware/interfaces/audio/aidl/vts:presubmit
Change-Id: I1b3f5832a4357327721c45d3a91926e9aab25a04
parent d232e45c
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;