Loading services/audioflinger/Threads.cpp +15 −4 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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)); Loading @@ -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; Loading @@ -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++; } } } } Loading services/audioflinger/Threads.h +2 −0 Original line number Diff line number Diff line Loading @@ -1666,6 +1666,8 @@ protected: bool mMasterMute; bool mStreamMute; float mHalVolFloat; int32_t mNoCallbackWarningCount; static constexpr int32_t kMaxNoCallbackWarnings = 5; AudioStreamOut* mOutput; }; Loading Loading
services/audioflinger/Threads.cpp +15 −4 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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)); Loading @@ -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; Loading @@ -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++; } } } } Loading
services/audioflinger/Threads.h +2 −0 Original line number Diff line number Diff line Loading @@ -1666,6 +1666,8 @@ protected: bool mMasterMute; bool mStreamMute; float mHalVolFloat; int32_t mNoCallbackWarningCount; static constexpr int32_t kMaxNoCallbackWarnings = 5; AudioStreamOut* mOutput; }; Loading