Loading services/audioflinger/Threads.cpp +13 −14 Original line number Diff line number Diff line Loading @@ -4918,6 +4918,10 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac // read original volumes with volume control float typeVolume = mStreamTypes[track->streamType()].volume; float v = masterVolume * typeVolume; // Always fetch volumeshaper volume to ensure state is updated. const sp<AudioTrackServerProxy> proxy = track->mAudioTrackServerProxy; const float vh = track->getVolumeHandler()->getVolume( track->mAudioTrackServerProxy->framesReleased()).first; if (track->isPausing() || mStreamTypes[track->streamType()].mute || track->isPlaybackRestricted()) { Loading @@ -4927,7 +4931,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac track->setPaused(); } } else { sp<AudioTrackServerProxy> proxy = track->mAudioTrackServerProxy; gain_minifloat_packed_t vlr = proxy->getVolumeLR(); vlf = float_from_gain(gain_minifloat_unpack_left(vlr)); vrf = float_from_gain(gain_minifloat_unpack_right(vlr)); Loading @@ -4940,8 +4943,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac ALOGV("Track right volume out of range: %.3g", vrf); vrf = GAIN_FLOAT_UNITY; } const float vh = track->getVolumeHandler()->getVolume( track->mAudioTrackServerProxy->framesReleased()).first; // now apply the master volume and stream type volume and shaper volume vlf *= v * vh; vrf *= v * vh; Loading Loading @@ -5021,7 +5022,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac (void *)(uintptr_t)(mChannelMask | mHapticChannelMask)); // limit track sample rate to 2 x output sample rate, which changes at re-configuration uint32_t maxSampleRate = mSampleRate * AUDIO_RESAMPLER_DOWN_RATIO_MAX; uint32_t reqSampleRate = track->mAudioTrackServerProxy->getSampleRate(); uint32_t reqSampleRate = proxy->getSampleRate(); if (reqSampleRate == 0) { reqSampleRate = mSampleRate; } else if (reqSampleRate > maxSampleRate) { Loading @@ -5033,7 +5034,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac AudioMixer::SAMPLE_RATE, (void *)(uintptr_t)reqSampleRate); AudioPlaybackRate playbackRate = track->mAudioTrackServerProxy->getPlaybackRate(); AudioPlaybackRate playbackRate = proxy->getPlaybackRate(); mAudioMixer->setParameter( trackId, AudioMixer::TIMESTRETCH, Loading Loading @@ -5507,19 +5508,17 @@ void AudioFlinger::DirectOutputThread::processVolume_l(Track *track, bool lastTr { float left, right; // Ensure volumeshaper state always advances even when muted. const sp<AudioTrackServerProxy> proxy = track->mAudioTrackServerProxy; const auto [shaperVolume, shaperActive] = track->getVolumeHandler()->getVolume( proxy->framesReleased()); mVolumeShaperActive = shaperActive; if (mMasterMute || mStreamTypes[track->streamType()].mute || track->isPlaybackRestricted()) { left = right = 0; } else { float typeVolume = mStreamTypes[track->streamType()].volume; float v = mMasterVolume * typeVolume; sp<AudioTrackServerProxy> proxy = track->mAudioTrackServerProxy; // Get volumeshaper scaling std::pair<float /* volume */, bool /* active */> vh = track->getVolumeHandler()->getVolume( track->mAudioTrackServerProxy->framesReleased()); v *= vh.first; mVolumeShaperActive = vh.second; const float v = mMasterVolume * typeVolume * shaperVolume; gain_minifloat_packed_t vlr = proxy->getVolumeLR(); left = float_from_gain(gain_minifloat_unpack_left(vlr)); Loading Loading
services/audioflinger/Threads.cpp +13 −14 Original line number Diff line number Diff line Loading @@ -4918,6 +4918,10 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac // read original volumes with volume control float typeVolume = mStreamTypes[track->streamType()].volume; float v = masterVolume * typeVolume; // Always fetch volumeshaper volume to ensure state is updated. const sp<AudioTrackServerProxy> proxy = track->mAudioTrackServerProxy; const float vh = track->getVolumeHandler()->getVolume( track->mAudioTrackServerProxy->framesReleased()).first; if (track->isPausing() || mStreamTypes[track->streamType()].mute || track->isPlaybackRestricted()) { Loading @@ -4927,7 +4931,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac track->setPaused(); } } else { sp<AudioTrackServerProxy> proxy = track->mAudioTrackServerProxy; gain_minifloat_packed_t vlr = proxy->getVolumeLR(); vlf = float_from_gain(gain_minifloat_unpack_left(vlr)); vrf = float_from_gain(gain_minifloat_unpack_right(vlr)); Loading @@ -4940,8 +4943,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac ALOGV("Track right volume out of range: %.3g", vrf); vrf = GAIN_FLOAT_UNITY; } const float vh = track->getVolumeHandler()->getVolume( track->mAudioTrackServerProxy->framesReleased()).first; // now apply the master volume and stream type volume and shaper volume vlf *= v * vh; vrf *= v * vh; Loading Loading @@ -5021,7 +5022,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac (void *)(uintptr_t)(mChannelMask | mHapticChannelMask)); // limit track sample rate to 2 x output sample rate, which changes at re-configuration uint32_t maxSampleRate = mSampleRate * AUDIO_RESAMPLER_DOWN_RATIO_MAX; uint32_t reqSampleRate = track->mAudioTrackServerProxy->getSampleRate(); uint32_t reqSampleRate = proxy->getSampleRate(); if (reqSampleRate == 0) { reqSampleRate = mSampleRate; } else if (reqSampleRate > maxSampleRate) { Loading @@ -5033,7 +5034,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac AudioMixer::SAMPLE_RATE, (void *)(uintptr_t)reqSampleRate); AudioPlaybackRate playbackRate = track->mAudioTrackServerProxy->getPlaybackRate(); AudioPlaybackRate playbackRate = proxy->getPlaybackRate(); mAudioMixer->setParameter( trackId, AudioMixer::TIMESTRETCH, Loading Loading @@ -5507,19 +5508,17 @@ void AudioFlinger::DirectOutputThread::processVolume_l(Track *track, bool lastTr { float left, right; // Ensure volumeshaper state always advances even when muted. const sp<AudioTrackServerProxy> proxy = track->mAudioTrackServerProxy; const auto [shaperVolume, shaperActive] = track->getVolumeHandler()->getVolume( proxy->framesReleased()); mVolumeShaperActive = shaperActive; if (mMasterMute || mStreamTypes[track->streamType()].mute || track->isPlaybackRestricted()) { left = right = 0; } else { float typeVolume = mStreamTypes[track->streamType()].volume; float v = mMasterVolume * typeVolume; sp<AudioTrackServerProxy> proxy = track->mAudioTrackServerProxy; // Get volumeshaper scaling std::pair<float /* volume */, bool /* active */> vh = track->getVolumeHandler()->getVolume( track->mAudioTrackServerProxy->framesReleased()); v *= vh.first; mVolumeShaperActive = vh.second; const float v = mMasterVolume * typeVolume * shaperVolume; gain_minifloat_packed_t vlr = proxy->getVolumeLR(); left = float_from_gain(gain_minifloat_unpack_left(vlr)); Loading