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

Commit 7eafa28c authored by Ramjee Singh's avatar Ramjee Singh
Browse files

policy: Delay FM volume update to start of FM playback

Delay update of FM volume to start of FM playback.
This avoids unnecessary set_parameter calls on primary output
whenever volume changes on primary output. Unnecessary calls
on primary output can cause breaks in audio since FastMixer
will be put to HOT_IDLE more often.

CRs-Fixed: 948361
Change-Id: Id614d32df7f35ac93dd029a08b10e19f64ac631e
parent 1b966ad9
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -289,10 +289,15 @@ status_t AudioPolicyManagerCustom::setDeviceConnectionStateInt(audio_devices_t d
           if (state == AUDIO_POLICY_DEVICE_STATE_AVAILABLE) {
               mPrimaryOutput->changeRefCount(AUDIO_STREAM_MUSIC, 1);
               newDevice = newDevice | AUDIO_DEVICE_OUT_FM;
               mFMIsActive = true;
           } else {
               mPrimaryOutput->changeRefCount(AUDIO_STREAM_MUSIC, -1);
               mFMIsActive = false;
           }
           AudioParameter param = AudioParameter();
           float volumeDb = mPrimaryOutput->mCurVolume[AUDIO_STREAM_MUSIC];
           mPrevFMVolumeDb = volumeDb;
           param.addFloat(String8("fm_volume"), Volume::DbToAmpl(volumeDb));
           param.addInt(String8("handle_fm"), (int)newDevice);
           mpClientInterface->setParameters(mPrimaryOutput->mIoHandle, param.toString());
        }
@@ -1299,7 +1304,7 @@ status_t AudioPolicyManagerCustom::checkAndSetVolume(audio_stream_type_t stream,
        }
#ifdef FM_POWER_OPT
    } else if (stream == AUDIO_STREAM_MUSIC && hasPrimaryOutput() &&
               outputDesc == mPrimaryOutput) {
               outputDesc == mPrimaryOutput && mFMIsActive) {
        AudioParameter param = AudioParameter();
        param.addFloat(String8("fm_volume"), Volume::DbToAmpl(volumeDb));
        mpClientInterface->setParameters(mPrimaryOutput->mIoHandle, param.toString(), delayMs);
@@ -1995,7 +2000,9 @@ status_t AudioPolicyManagerCustom::stopInput(audio_io_handle_t input,
}

AudioPolicyManagerCustom::AudioPolicyManagerCustom(AudioPolicyClientInterface *clientInterface)
    : AudioPolicyManager(clientInterface)
    : AudioPolicyManager(clientInterface),
      mPrevFMVolumeDb(0.0f),
      mFMIsActive(false)
{
#ifdef RECORD_PLAY_CONCURRENCY
    mIsInputRequestOnProgress = false;
+2 −1
Original line number Diff line number Diff line
@@ -157,7 +157,8 @@ private:
        // Used for record + playback concurrency
        bool mIsInputRequestOnProgress;
#endif

        float mPrevFMVolumeDb;
        bool mFMIsActive;

};