From e13b58b988ab642d4ae5ca6d0a89013510714956 Mon Sep 17 00:00:00 2001 From: Steve Kondik Date: Sun, 3 Apr 2016 11:50:58 -0700 Subject: audio: Send effect session notifications after startOutput success * Because we get a hellish firestorm during offload fallback, and our effects library really dislikes this. Change-Id: I22adb55d04502eedf03ce22f35f8b9f61de1c7b0 --- services/audiopolicy/service/AudioPolicyEffects.cpp | 3 +-- services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp | 13 ++++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'services/audiopolicy') diff --git a/services/audiopolicy/service/AudioPolicyEffects.cpp b/services/audiopolicy/service/AudioPolicyEffects.cpp index f2d7f6f..725bc64 100644 --- a/services/audiopolicy/service/AudioPolicyEffects.cpp +++ b/services/audiopolicy/service/AudioPolicyEffects.cpp @@ -246,8 +246,6 @@ status_t AudioPolicyEffects::addOutputSessionEffects(audio_io_handle_t output, if (idx < 0) { procDesc = new EffectVector(audioSession); mOutputSessions.add(audioSession, procDesc); - - mAudioPolicyService->onOutputSessionEffectsUpdate(stream, audioSession, true); } else { // EffectVector is existing and we just need to increase ref count procDesc = mOutputSessions.valueAt(idx); @@ -275,6 +273,7 @@ status_t AudioPolicyEffects::addOutputSessionEffects(audio_io_handle_t output, } procDesc->setProcessorEnabled(true); + return 1; } return status; } diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp index c0d3866..766012e 100644 --- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp +++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp @@ -206,15 +206,22 @@ status_t AudioPolicyService::doStartOutput(audio_io_handle_t output, Mutex::Autolock _l(mLock); audioPolicyEffects = mAudioPolicyEffects; } + + status_t status = NO_ERROR; if (audioPolicyEffects != 0) { // create audio processors according to stream - status_t status = audioPolicyEffects->addOutputSessionEffects(output, stream, session); - if (status != NO_ERROR && status != ALREADY_EXISTS) { + status = audioPolicyEffects->addOutputSessionEffects(output, stream, session); + if (status <= 0 && (status != NO_ERROR && status != ALREADY_EXISTS)) { ALOGW("Failed to add effects on session %d", session); } } Mutex::Autolock _l(mLock); - return mAudioPolicyManager->startOutput(output, stream, session); + status_t status2 = mAudioPolicyManager->startOutput(output, stream, session); + + if (audioPolicyEffects != 0 && status > 0 && status2 == NO_ERROR) { + onOutputSessionEffectsUpdate(stream, session, true); + } + return status2; } status_t AudioPolicyService::stopOutput(audio_io_handle_t output, -- cgit v1.1