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

Commit d9f75dce authored by Phil Burk's avatar Phil Burk Committed by android-build-merger
Browse files

audioflinger: only update mHalVolFloat on success am: 56ecf3e3

am: 92295119

Change-Id: I2520dd49cb4e6c7b8079b181b174ca8998bf5f81
parents 955811b7 92295119
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -8524,7 +8524,11 @@ AudioFlinger::MmapPlaybackThread::MmapPlaybackThread(
        audio_devices_t outDevice, audio_devices_t inDevice, bool systemReady)
    : MmapThread(audioFlinger, id, hwDev, output->stream, outDevice, inDevice, systemReady),
      mStreamType(AUDIO_STREAM_MUSIC),
      mStreamVolume(1.0), mStreamMute(false), mOutput(output)
      mStreamVolume(1.0),
      mStreamMute(false),
      mHalVolFloat(-1.0f), // Initialize to illegal value so it always gets set properly later.
      mNoCallbackWarningCount(0),
      mOutput(output)
{
    snprintf(mThreadName, kThreadNameLength, "AudioMmapOut_%X", id);
    mChannelCount = audio_channel_count_from_out_mask(mChannelMask);
@@ -8632,7 +8636,6 @@ void AudioFlinger::MmapPlaybackThread::processVolume_l()
    }

    if (volume != mHalVolFloat) {
        mHalVolFloat = volume;

        // Convert volumes from float to 8.24
        uint32_t vol = (uint32_t)(volume * (1 << 24));
@@ -8645,7 +8648,10 @@ void AudioFlinger::MmapPlaybackThread::processVolume_l()
            volume = (float)vol / (1 << 24);
        }
        // Try to use HW volume control and fall back to SW control if not implemented
        if (mOutput->stream->setVolume(volume, volume) != NO_ERROR) {
        if (mOutput->stream->setVolume(volume, volume) == NO_ERROR) {
            mHalVolFloat = volume; // HW volume control worked, so update value.
            mNoCallbackWarningCount = 0;
        } else {
            sp<MmapStreamCallback> callback = mCallback.promote();
            if (callback != 0) {
                int channelCount;
@@ -8659,8 +8665,13 @@ void AudioFlinger::MmapPlaybackThread::processVolume_l()
                    values.add(volume);
                }
                callback->onVolumeChanged(mChannelMask, values);
                mHalVolFloat = volume; // SW volume control worked, so update value.
                mNoCallbackWarningCount = 0;
            } else {
                if (mNoCallbackWarningCount < kMaxNoCallbackWarnings) {
                    ALOGW("Could not set MMAP stream volume: no volume callback!");
                    mNoCallbackWarningCount++;
                }
            }
        }
    }
+2 −0
Original line number Diff line number Diff line
@@ -1666,6 +1666,8 @@ protected:
                bool                        mMasterMute;
                bool                        mStreamMute;
                float                       mHalVolFloat;
                int32_t                     mNoCallbackWarningCount;
     static     constexpr int32_t           kMaxNoCallbackWarnings = 5;
                AudioStreamOut*             mOutput;
};