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

Commit 371e1ae4 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "audio: change volume only if effect updates the volume" into main

parents caa957ea 98eb34bd
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -353,14 +353,22 @@ status_t EffectConversionHelperAidl::handleSetVolume(uint32_t cmdSize, const voi
    }

    constexpr uint32_t unityGain = 1 << 24;
    Parameter::VolumeStereo volume = {.left = (float)(*(uint32_t*)pCmdData) / unityGain,
    Parameter::VolumeStereo requestedVolume = {.left = (float)(*(uint32_t*)pCmdData) / unityGain,
                                      .right = (float)(*(uint32_t*)pCmdData + 1) / unityGain};

    RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
            mEffect->setParameter(Parameter::make<Parameter::volumeStereo>(volume))));
            mEffect->setParameter(Parameter::make<Parameter::volumeStereo>(requestedVolume))));

    // get volume from effect and set if changed.
    Parameter::Id id = Parameter::Id::make<Parameter::Id::commonTag>(Parameter::volumeStereo);
    Parameter volParam;
    RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mEffect->getParameter(id, &volParam)));
    Parameter::VolumeStereo appliedVolume = volParam.get<Parameter::volumeStereo>();

    // write unity gain back if volume was successfully set
    if (replySize && *replySize == 2 * sizeof(uint32_t) && pReplyData) {
        constexpr uint32_t vol_ret[2] = {unityGain, unityGain};
        uint32_t vl = (uint32_t)(appliedVolume.left * unityGain);
        uint32_t vr = (uint32_t)(appliedVolume.right * unityGain);
        uint32_t vol_ret[2] = {vl, vr};
        memcpy(pReplyData, vol_ret, sizeof(vol_ret));
    }
    return OK;