Loading services/audioflinger/IAfTrack.h +5 −0 Original line number Diff line number Diff line Loading @@ -395,6 +395,11 @@ public: virtual bool isDisabled() const = 0; virtual int& fastIndex() = 0; // Restricted due to OP_PLAY_AUDIO virtual bool isPlaybackRestrictedOp() const = 0; // Restricted due to OP_AUDIO_CONTROL_SOFT virtual bool isPlaybackRestrictedControl() const = 0; virtual bool isPlaybackRestricted() const = 0; // Used by thread only Loading services/audioflinger/PlaybackTracks.h +13 −2 Original line number Diff line number Diff line Loading @@ -291,9 +291,20 @@ protected: bool isDisabled() const final; int& fastIndex() final { return mFastIndex; } bool isPlaybackRestricted() const final { bool isPlaybackRestrictedOp() const final { // The monitor is only created for tracks that can be silenced. return mOpPlayAudioMonitor ? !mOpPlayAudioMonitor->hasOpPlayAudio() : false; } return mOpPlayAudioMonitor ? !mOpPlayAudioMonitor->hasOpPlayAudio() : false; } bool isPlaybackRestrictedControl() const final { return false; // return mOpAudioControlSoftMonitor ? !mOpAudioControlSoftMonitor->hasOp() : false; } bool isPlaybackRestricted() const final { return isPlaybackRestrictedOp() || isPlaybackRestrictedControl(); } const sp<AudioTrackServerProxy>& audioTrackServerProxy() const final { return mAudioTrackServerProxy; Loading services/audioflinger/Threads.cpp +18 −12 Original line number Diff line number Diff line Loading @@ -5891,19 +5891,21 @@ PlaybackThread::mixer_state MixerThread::prepareTracks_l( /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), vlf == 0.f && vrf == 0.f, vh == 0.f, /*muteFromPortVolume=*/false}); /*muteFromPortVolume=*/false, track->isPlaybackRestrictedControl()}); } else { track->processMuteEvent_l(mAfThreadCallback->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, track->getPortVolume() == 0.f, /* muteFromStreamMuted= */ false, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), vlf == 0.f && vrf == 0.f, vh == 0.f, track->getPortMute()}); track->getPortMute(), track->isPlaybackRestrictedControl()}); } vlf *= volume; vrf *= volume; Loading Loading @@ -6093,19 +6095,21 @@ PlaybackThread::mixer_state MixerThread::prepareTracks_l( /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), vlf == 0.f && vrf == 0.f, vh == 0.f, /*muteFromPortVolume=*/false}); /*muteFromPortVolume=*/false, track->isPlaybackRestrictedControl()}); } else { track->processMuteEvent_l(mAfThreadCallback->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, track->getPortVolume() == 0.f, /* muteFromStreamMuted= */ false, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), vlf == 0.f && vrf == 0.f, vh == 0.f, track->getPortMute()}); track->getPortMute(), track->isPlaybackRestrictedControl()}); } // now apply the master volume and stream type volume and shaper volume vlf *= v * vh; Loading Loading @@ -6861,10 +6865,11 @@ void DirectOutputThread::processVolume_l(IAfTrack* track, bool lastTrack) /*muteState=*/{mMasterMute, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), clientVolumeMute, shaperVolume == 0.f, /*muteFromPortVolume=*/false}); /*muteFromPortVolume=*/false, track->isPlaybackRestrictedControl()}); } else { if (mMasterMute || track->isPlaybackRestricted()) { left = right = 0; Loading @@ -6890,10 +6895,11 @@ void DirectOutputThread::processVolume_l(IAfTrack* track, bool lastTrack) /*muteState=*/{mMasterMute, track->getPortVolume() == 0.f, /* muteFromStreamMuted= */ false, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), clientVolumeMute, shaperVolume == 0.f, track->getPortMute()}); track->getPortMute(), track->isPlaybackRestrictedControl()}); } if (lastTrack) { Loading Loading
services/audioflinger/IAfTrack.h +5 −0 Original line number Diff line number Diff line Loading @@ -395,6 +395,11 @@ public: virtual bool isDisabled() const = 0; virtual int& fastIndex() = 0; // Restricted due to OP_PLAY_AUDIO virtual bool isPlaybackRestrictedOp() const = 0; // Restricted due to OP_AUDIO_CONTROL_SOFT virtual bool isPlaybackRestrictedControl() const = 0; virtual bool isPlaybackRestricted() const = 0; // Used by thread only Loading
services/audioflinger/PlaybackTracks.h +13 −2 Original line number Diff line number Diff line Loading @@ -291,9 +291,20 @@ protected: bool isDisabled() const final; int& fastIndex() final { return mFastIndex; } bool isPlaybackRestricted() const final { bool isPlaybackRestrictedOp() const final { // The monitor is only created for tracks that can be silenced. return mOpPlayAudioMonitor ? !mOpPlayAudioMonitor->hasOpPlayAudio() : false; } return mOpPlayAudioMonitor ? !mOpPlayAudioMonitor->hasOpPlayAudio() : false; } bool isPlaybackRestrictedControl() const final { return false; // return mOpAudioControlSoftMonitor ? !mOpAudioControlSoftMonitor->hasOp() : false; } bool isPlaybackRestricted() const final { return isPlaybackRestrictedOp() || isPlaybackRestrictedControl(); } const sp<AudioTrackServerProxy>& audioTrackServerProxy() const final { return mAudioTrackServerProxy; Loading
services/audioflinger/Threads.cpp +18 −12 Original line number Diff line number Diff line Loading @@ -5891,19 +5891,21 @@ PlaybackThread::mixer_state MixerThread::prepareTracks_l( /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), vlf == 0.f && vrf == 0.f, vh == 0.f, /*muteFromPortVolume=*/false}); /*muteFromPortVolume=*/false, track->isPlaybackRestrictedControl()}); } else { track->processMuteEvent_l(mAfThreadCallback->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, track->getPortVolume() == 0.f, /* muteFromStreamMuted= */ false, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), vlf == 0.f && vrf == 0.f, vh == 0.f, track->getPortMute()}); track->getPortMute(), track->isPlaybackRestrictedControl()}); } vlf *= volume; vrf *= volume; Loading Loading @@ -6093,19 +6095,21 @@ PlaybackThread::mixer_state MixerThread::prepareTracks_l( /*muteState=*/{masterVolume == 0.f, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), vlf == 0.f && vrf == 0.f, vh == 0.f, /*muteFromPortVolume=*/false}); /*muteFromPortVolume=*/false, track->isPlaybackRestrictedControl()}); } else { track->processMuteEvent_l(mAfThreadCallback->getOrCreateAudioManager(), /*muteState=*/{masterVolume == 0.f, track->getPortVolume() == 0.f, /* muteFromStreamMuted= */ false, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), vlf == 0.f && vrf == 0.f, vh == 0.f, track->getPortMute()}); track->getPortMute(), track->isPlaybackRestrictedControl()}); } // now apply the master volume and stream type volume and shaper volume vlf *= v * vh; Loading Loading @@ -6861,10 +6865,11 @@ void DirectOutputThread::processVolume_l(IAfTrack* track, bool lastTrack) /*muteState=*/{mMasterMute, mStreamTypes[track->streamType()].volume == 0.f, mStreamTypes[track->streamType()].mute, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), clientVolumeMute, shaperVolume == 0.f, /*muteFromPortVolume=*/false}); /*muteFromPortVolume=*/false, track->isPlaybackRestrictedControl()}); } else { if (mMasterMute || track->isPlaybackRestricted()) { left = right = 0; Loading @@ -6890,10 +6895,11 @@ void DirectOutputThread::processVolume_l(IAfTrack* track, bool lastTrack) /*muteState=*/{mMasterMute, track->getPortVolume() == 0.f, /* muteFromStreamMuted= */ false, track->isPlaybackRestricted(), track->isPlaybackRestrictedOp(), clientVolumeMute, shaperVolume == 0.f, track->getPortMute()}); track->getPortMute(), track->isPlaybackRestrictedControl()}); } if (lastTrack) { Loading