diff options
Diffstat (limited to 'services')
| -rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 11 | ||||
| -rw-r--r-- | services/audioflinger/AudioFlinger.h | 8 | 
2 files changed, 15 insertions, 4 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 3e0304f..69560e5 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -1332,7 +1332,13 @@ void AudioFlinger::ThreadBase::checkSuspendOnEffectEnabled(const sp<EffectModule                                                              int sessionId)  {      Mutex::Autolock _l(mLock); +    checkSuspendOnEffectEnabled_l(effect, enabled, sessionId); +} +void AudioFlinger::ThreadBase::checkSuspendOnEffectEnabled_l(const sp<EffectModule>& effect, +                                                            bool enabled, +                                                            int sessionId) +{      if (mType != RECORD) {          // suspend all effects in AUDIO_SESSION_OUTPUT_MIX when enabling any effect on          // another session. This gives the priority to well behaved effect control panels @@ -5224,6 +5230,9 @@ void AudioFlinger::purgeStaleEffects_l() {                      sp<EffectHandle> handle = effect->mHandles[j].promote();                      if (handle != 0) {                          handle->mEffect.clear(); +                        if (handle->mHasControl && handle->mEnabled) { +                            t->checkSuspendOnEffectEnabled_l(effect, false, effect->sessionId()); +                        }                      }                  }                  AudioSystem::unregisterEffect(effect->id()); @@ -6844,7 +6853,7 @@ void AudioFlinger::EffectHandle::disconnect(bool unpiniflast)      }      mEffect->disconnect(this, unpiniflast); -    if (mEnabled) { +    if (mHasControl && mEnabled) {          sp<ThreadBase> thread = mEffect->thread().promote();          if (thread != 0) {              thread->checkSuspendOnEffectEnabled(mEffect, false, mEffect->sessionId()); diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index ed9d81e..4b794ef 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -492,10 +492,12 @@ private:                                              int sessionId = AUDIO_SESSION_OUTPUT_MIX);                      // check if some effects must be suspended/restored when an effect is enabled                      // or disabled -        virtual     void checkSuspendOnEffectEnabled(const sp<EffectModule>& effect, +                    void checkSuspendOnEffectEnabled(const sp<EffectModule>& effect,                                                       bool enabled,                                                       int sessionId = AUDIO_SESSION_OUTPUT_MIX); - +                    void checkSuspendOnEffectEnabled_l(const sp<EffectModule>& effect, +                                                       bool enabled, +                                                       int sessionId = AUDIO_SESSION_OUTPUT_MIX);          mutable     Mutex                   mLock;      protected: @@ -1299,7 +1301,7 @@ private:          // suspend all eligible effects          void setEffectSuspendedAll_l(bool suspend);          // check if effects should be suspend or restored when a given effect is enable or disabled -        virtual void checkSuspendOnEffectEnabled(const sp<EffectModule>& effect, +        void checkSuspendOnEffectEnabled(const sp<EffectModule>& effect,                                                bool enabled);          status_t dump(int fd, const Vector<String16>& args);  | 
