Loading services/audioflinger/Threads.cpp +31 −19 Original line number Diff line number Diff line Loading @@ -5376,12 +5376,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac volume = masterVolume * mStreamTypes[track->streamType()].volume; } track->processMuteEvent_l(mAudioFlinger->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted()}); handleVoipVolume_l(&volume); // cache the combined master volume and stream type volume for fast mixer; this Loading @@ -5391,8 +5385,18 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac volume *= vh; track->mCachedVolume = volume; gain_minifloat_packed_t vlr = proxy->getVolumeLR(); float vlf = volume * float_from_gain(gain_minifloat_unpack_left(vlr)); float vrf = volume * float_from_gain(gain_minifloat_unpack_right(vlr)); float vlf = float_from_gain(gain_minifloat_unpack_left(vlr)); float vrf = float_from_gain(gain_minifloat_unpack_right(vlr)); track->processMuteEvent_l(mAudioFlinger->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted(), vlf == 0.f && vrf == 0.f}); vlf *= volume; vrf *= volume; track->setFinalVolume((vlf + vrf) / 2.f); ++fastTracks; Loading Loading @@ -5546,12 +5550,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac v = 0; } track->processMuteEvent_l(mAudioFlinger->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted()}); handleVoipVolume_l(&v); if (track->isPausing()) { Loading @@ -5571,6 +5569,14 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac ALOGV("Track right volume out of range: %.3g", vrf); vrf = GAIN_FLOAT_UNITY; } track->processMuteEvent_l(mAudioFlinger->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted(), vlf == 0.f && vrf == 0.f}); // now apply the master volume and stream type volume and shaper volume vlf *= v * vh; vrf *= v * vh; Loading Loading @@ -6157,28 +6163,33 @@ 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; gain_minifloat_packed_t vlr = proxy->getVolumeLR(); left = float_from_gain(gain_minifloat_unpack_left(vlr)); right = float_from_gain(gain_minifloat_unpack_right(vlr)); const bool clientVolumeMute = (left == 0.f && right == 0.f); if (mMasterMute || mStreamTypes[track->streamType()].mute || track->isPlaybackRestricted()) { left = right = 0; } else { float typeVolume = mStreamTypes[track->streamType()].volume; const float v = mMasterVolume * typeVolume * shaperVolume; gain_minifloat_packed_t vlr = proxy->getVolumeLR(); left = float_from_gain(gain_minifloat_unpack_left(vlr)); if (left > GAIN_FLOAT_UNITY) { left = GAIN_FLOAT_UNITY; } left *= v * mMasterBalanceLeft; // DirectOutputThread balance applied as track volume right = float_from_gain(gain_minifloat_unpack_right(vlr)); if (right > GAIN_FLOAT_UNITY) { right = GAIN_FLOAT_UNITY; } left *= v * mMasterBalanceLeft; // DirectOutputThread balance applied as track volume right *= v * mMasterBalanceRight; } Loading @@ -6186,7 +6197,8 @@ void AudioFlinger::DirectOutputThread::processVolume_l(Track *track, bool lastTr /*muteState=*/{mMasterMute, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted()}); track->isPlaybackRestricted(), clientVolumeMute}); if (lastTrack) { track->setFinalVolume((left + right) / 2.f); Loading Loading
services/audioflinger/Threads.cpp +31 −19 Original line number Diff line number Diff line Loading @@ -5376,12 +5376,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac volume = masterVolume * mStreamTypes[track->streamType()].volume; } track->processMuteEvent_l(mAudioFlinger->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted()}); handleVoipVolume_l(&volume); // cache the combined master volume and stream type volume for fast mixer; this Loading @@ -5391,8 +5385,18 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac volume *= vh; track->mCachedVolume = volume; gain_minifloat_packed_t vlr = proxy->getVolumeLR(); float vlf = volume * float_from_gain(gain_minifloat_unpack_left(vlr)); float vrf = volume * float_from_gain(gain_minifloat_unpack_right(vlr)); float vlf = float_from_gain(gain_minifloat_unpack_left(vlr)); float vrf = float_from_gain(gain_minifloat_unpack_right(vlr)); track->processMuteEvent_l(mAudioFlinger->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted(), vlf == 0.f && vrf == 0.f}); vlf *= volume; vrf *= volume; track->setFinalVolume((vlf + vrf) / 2.f); ++fastTracks; Loading Loading @@ -5546,12 +5550,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac v = 0; } track->processMuteEvent_l(mAudioFlinger->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted()}); handleVoipVolume_l(&v); if (track->isPausing()) { Loading @@ -5571,6 +5569,14 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac ALOGV("Track right volume out of range: %.3g", vrf); vrf = GAIN_FLOAT_UNITY; } track->processMuteEvent_l(mAudioFlinger->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted(), vlf == 0.f && vrf == 0.f}); // now apply the master volume and stream type volume and shaper volume vlf *= v * vh; vrf *= v * vh; Loading Loading @@ -6157,28 +6163,33 @@ 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; gain_minifloat_packed_t vlr = proxy->getVolumeLR(); left = float_from_gain(gain_minifloat_unpack_left(vlr)); right = float_from_gain(gain_minifloat_unpack_right(vlr)); const bool clientVolumeMute = (left == 0.f && right == 0.f); if (mMasterMute || mStreamTypes[track->streamType()].mute || track->isPlaybackRestricted()) { left = right = 0; } else { float typeVolume = mStreamTypes[track->streamType()].volume; const float v = mMasterVolume * typeVolume * shaperVolume; gain_minifloat_packed_t vlr = proxy->getVolumeLR(); left = float_from_gain(gain_minifloat_unpack_left(vlr)); if (left > GAIN_FLOAT_UNITY) { left = GAIN_FLOAT_UNITY; } left *= v * mMasterBalanceLeft; // DirectOutputThread balance applied as track volume right = float_from_gain(gain_minifloat_unpack_right(vlr)); if (right > GAIN_FLOAT_UNITY) { right = GAIN_FLOAT_UNITY; } left *= v * mMasterBalanceLeft; // DirectOutputThread balance applied as track volume right *= v * mMasterBalanceRight; } Loading @@ -6186,7 +6197,8 @@ void AudioFlinger::DirectOutputThread::processVolume_l(Track *track, bool lastTr /*muteState=*/{mMasterMute, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted()}); track->isPlaybackRestricted(), clientVolumeMute}); if (lastTrack) { track->setFinalVolume((left + right) / 2.f); Loading