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

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

Merge "Keep the millibels precision for lvm EQ gain"

parents 87467d3d 8a2bc023
Loading
Loading
Loading
Loading
+13 −11
Original line number Original line Diff line number Diff line
@@ -36,7 +36,7 @@ RetCode BundleContext::init() {
    std::lock_guard lg(mMutex);
    std::lock_guard lg(mMutex);
    // init with pre-defined preset NORMAL
    // init with pre-defined preset NORMAL
    for (std::size_t i = 0; i < lvm::MAX_NUM_BANDS; i++) {
    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
    // allocate lvm instance
@@ -214,7 +214,7 @@ RetCode BundleContext::limitLevel() {


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


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


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


    std::array<int, lvm::MAX_NUM_BANDS> tempLevel(mBandGaindB);
    std::array<int, lvm::MAX_NUM_BANDS> tempLevel(mBandGainMdB);
    for (const auto& it : bandLevels) {
    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;
    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++) {
        for (std::size_t i = 0; i < lvm::MAX_NUM_BANDS; i++) {
            params.pEQNB_BandDefinition[i].Frequency = lvm::kPresetsFrequencies[i];
            params.pEQNB_BandDefinition[i].Frequency = lvm::kPresetsFrequencies[i];
            params.pEQNB_BandDefinition[i].QFactor = lvm::kPresetsQFactors[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),
        RETURN_VALUE_IF(LVM_SUCCESS != LVM_SetControlParameters(mInstance, &params),
                        RetCode::ERROR_EFFECT_LIB_ERROR, " setControlParamFailed");
                        RetCode::ERROR_EFFECT_LIB_ERROR, " setControlParamFailed");
    }
    }
    mBandGaindB = tempLevel;
    mBandGainMdB = tempLevel;
    LOG(DEBUG) << __func__ << " update bandGain to " << ::android::internal::ToString(mBandGaindB);
    LOG(DEBUG) << __func__ << " update bandGain to " << ::android::internal::ToString(mBandGainMdB)
               << "mdB";


    return RetCode::SUCCESS;
    return RetCode::SUCCESS;
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -135,7 +135,7 @@ class BundleContext final : public EffectContext {
    int mBassStrengthSaved = 0;
    int mBassStrengthSaved = 0;
    // Equalizer
    // Equalizer
    int mCurPresetIdx = lvm::PRESET_CUSTOM; /* Current preset being used */
    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
    // Virtualizer
    int mVirtStrengthSaved = 0; /* Conversion between Get/Set */
    int mVirtStrengthSaved = 0; /* Conversion between Get/Set */
    bool mVirtualizerTempDisabled = false;
    bool mVirtualizerTempDisabled = false;