Loading services/audioflinger/Threads.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -9560,6 +9560,12 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, if (isOutput()) { ret = AudioSystem::startOutput(portId); } else { { // Add the track record before starting input so that the silent status for the // client can be cached. Mutex::Autolock _l(mLock); setClientSilencedState_l(portId, false /*silenced*/); } ret = AudioSystem::startInput(portId); } Loading @@ -9578,6 +9584,7 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, } else { mHalStream->stop(); } eraseClientSilencedState_l(portId); return PERMISSION_DENIED; } Loading @@ -9586,6 +9593,9 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, mChannelMask, mSessionId, isOutput(), client.attributionSource, IPCThreadState::self()->getCallingPid(), portId); if (!isOutput()) { track->setSilenced_l(isClientSilenced_l(portId)); } if (isOutput()) { // force volume update when a new track is added Loading Loading @@ -9643,6 +9653,7 @@ status_t AudioFlinger::MmapThread::stop(audio_port_handle_t handle) } mActiveTracks.remove(track); eraseClientSilencedState_l(track->portId()); mLock.unlock(); if (isOutput()) { Loading Loading @@ -10423,6 +10434,7 @@ void AudioFlinger::MmapCaptureThread::setRecordSilenced(audio_port_handle_t port broadcast_l(); } } setClientSilencedIfExists_l(portId, silenced); } void AudioFlinger::MmapCaptureThread::toAudioPortConfig(struct audio_port_config *config) Loading services/audioflinger/Threads.h +21 −0 Original line number Diff line number Diff line Loading @@ -2057,6 +2057,26 @@ class MmapThread : public ThreadBase virtual bool isStreamInitialized() { return false; } void setClientSilencedState_l(audio_port_handle_t portId, bool silenced) { mClientSilencedStates[portId] = silenced; } size_t eraseClientSilencedState_l(audio_port_handle_t portId) { return mClientSilencedStates.erase(portId); } bool isClientSilenced_l(audio_port_handle_t portId) const { const auto it = mClientSilencedStates.find(portId); return it != mClientSilencedStates.end() ? it->second : false; } void setClientSilencedIfExists_l(audio_port_handle_t portId, bool silenced) { const auto it = mClientSilencedStates.find(portId); if (it != mClientSilencedStates.end()) { it->second = silenced; } } protected: void dumpInternals_l(int fd, const Vector<String16>& args) override; void dumpTracks_l(int fd, const Vector<String16>& args) override; Loading @@ -2076,6 +2096,7 @@ class MmapThread : public ThreadBase AudioHwDevice* const mAudioHwDev; ActiveTracks<MmapTrack> mActiveTracks; float mHalVolFloat; std::map<audio_port_handle_t, bool> mClientSilencedStates; int32_t mNoCallbackWarningCount; static constexpr int32_t kMaxNoCallbackWarnings = 5; Loading Loading
services/audioflinger/Threads.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -9560,6 +9560,12 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, if (isOutput()) { ret = AudioSystem::startOutput(portId); } else { { // Add the track record before starting input so that the silent status for the // client can be cached. Mutex::Autolock _l(mLock); setClientSilencedState_l(portId, false /*silenced*/); } ret = AudioSystem::startInput(portId); } Loading @@ -9578,6 +9584,7 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, } else { mHalStream->stop(); } eraseClientSilencedState_l(portId); return PERMISSION_DENIED; } Loading @@ -9586,6 +9593,9 @@ status_t AudioFlinger::MmapThread::start(const AudioClient& client, mChannelMask, mSessionId, isOutput(), client.attributionSource, IPCThreadState::self()->getCallingPid(), portId); if (!isOutput()) { track->setSilenced_l(isClientSilenced_l(portId)); } if (isOutput()) { // force volume update when a new track is added Loading Loading @@ -9643,6 +9653,7 @@ status_t AudioFlinger::MmapThread::stop(audio_port_handle_t handle) } mActiveTracks.remove(track); eraseClientSilencedState_l(track->portId()); mLock.unlock(); if (isOutput()) { Loading Loading @@ -10423,6 +10434,7 @@ void AudioFlinger::MmapCaptureThread::setRecordSilenced(audio_port_handle_t port broadcast_l(); } } setClientSilencedIfExists_l(portId, silenced); } void AudioFlinger::MmapCaptureThread::toAudioPortConfig(struct audio_port_config *config) Loading
services/audioflinger/Threads.h +21 −0 Original line number Diff line number Diff line Loading @@ -2057,6 +2057,26 @@ class MmapThread : public ThreadBase virtual bool isStreamInitialized() { return false; } void setClientSilencedState_l(audio_port_handle_t portId, bool silenced) { mClientSilencedStates[portId] = silenced; } size_t eraseClientSilencedState_l(audio_port_handle_t portId) { return mClientSilencedStates.erase(portId); } bool isClientSilenced_l(audio_port_handle_t portId) const { const auto it = mClientSilencedStates.find(portId); return it != mClientSilencedStates.end() ? it->second : false; } void setClientSilencedIfExists_l(audio_port_handle_t portId, bool silenced) { const auto it = mClientSilencedStates.find(portId); if (it != mClientSilencedStates.end()) { it->second = silenced; } } protected: void dumpInternals_l(int fd, const Vector<String16>& args) override; void dumpTracks_l(int fd, const Vector<String16>& args) override; Loading @@ -2076,6 +2096,7 @@ class MmapThread : public ThreadBase AudioHwDevice* const mAudioHwDev; ActiveTracks<MmapTrack> mActiveTracks; float mHalVolFloat; std::map<audio_port_handle_t, bool> mClientSilencedStates; int32_t mNoCallbackWarningCount; static constexpr int32_t kMaxNoCallbackWarnings = 5; Loading