From 32ef0556ae58ff6b7c6fe6fb0a17d3ff7f01de31 Mon Sep 17 00:00:00 2001 From: Steve Kondik Date: Tue, 19 Apr 2016 02:41:45 -0700 Subject: audiopolicy: Clean up the mess * Since we're not using the policy directly to auto-attach, let's clean it up and remove the unused stuff. * Also fixes notifications for session release. This reverts commit 47f8c7303c9e2054f1492b02b6c7472385c52dc9. Change-Id: Ibe65f427773c6ef012dde4f289d10e4089c094ea --- .../audiopolicy/service/AudioPolicyEffects.cpp | 42 +----------- services/audiopolicy/service/AudioPolicyEffects.h | 5 -- .../service/AudioPolicyInterfaceImpl.cpp | 33 ++++------ .../service/AudioPolicyInterfaceImplLegacy.cpp | 38 ++++------- .../audiopolicy/service/AudioPolicyService.cpp | 76 ---------------------- services/audiopolicy/service/AudioPolicyService.h | 41 ------------ 6 files changed, 27 insertions(+), 208 deletions(-) (limited to 'services/audiopolicy/service') diff --git a/services/audiopolicy/service/AudioPolicyEffects.cpp b/services/audiopolicy/service/AudioPolicyEffects.cpp index bd1cc33..6a43bea 100644 --- a/services/audiopolicy/service/AudioPolicyEffects.cpp +++ b/services/audiopolicy/service/AudioPolicyEffects.cpp @@ -275,10 +275,11 @@ status_t AudioPolicyEffects::addOutputSessionEffects(audio_io_handle_t output, procDesc->setProcessorEnabled(true); } + return status; } -status_t AudioPolicyEffects::doAddOutputSessionEffects(audio_io_handle_t output, +status_t AudioPolicyEffects::doAddOutputSessionEffects(audio_io_handle_t /* output */, audio_stream_type_t stream, int session, audio_output_flags_t flags, @@ -289,12 +290,6 @@ status_t AudioPolicyEffects::doAddOutputSessionEffects(audio_io_handle_t output, } ALOGV("doAddOutputSessionEffects()"); - // create audio processors according to stream - status_t status = addOutputSessionEffects(output, stream, session); - if (status <= 0 && (status != NO_ERROR && status != ALREADY_EXISTS)) { - ALOGW("Failed to add effects on session %d", session); - } - // notify listeners mAudioPolicyService->onOutputSessionEffectsUpdate(stream, (audio_session_t)session, flags, channelMask, uid, true); @@ -319,42 +314,9 @@ status_t AudioPolicyEffects::releaseOutputSessionEffects(audio_io_handle_t outpu } EffectVector *procDesc = mOutputSessions.valueAt(index); - - // just in case it already has a death wish - if (procDesc->mRefCount == 0) { - return NO_ERROR; - } - procDesc->mRefCount--; ALOGV("releaseOutputSessionEffects(): session: %d, refCount: %d", audioSession, procDesc->mRefCount); - - if (procDesc->mRefCount == 0) { - mAudioPolicyService->releaseOutputSessionEffectsDelayed( - output, stream, audioSession, 10000); - } - - return status; -} - -status_t AudioPolicyEffects::doReleaseOutputSessionEffects(audio_io_handle_t output, - audio_stream_type_t stream, - int audioSession) -{ - status_t status = NO_ERROR; - (void) output; // argument not used for now - - Mutex::Autolock _l(mLock); - ssize_t index = mOutputSessions.indexOfKey(audioSession); - if (index < 0) { - ALOGV("doReleaseOutputSessionEffects: no output processing was attached to this stream"); - return NO_ERROR; - } - - EffectVector *procDesc = mOutputSessions.valueAt(index); - ALOGV("doReleaseOutputSessionEffects(): session: %d, refCount: %d", - audioSession, procDesc->mRefCount); - if (procDesc->mRefCount == 0) { procDesc->setProcessorEnabled(false); procDesc->mEffects.clear(); diff --git a/services/audiopolicy/service/AudioPolicyEffects.h b/services/audiopolicy/service/AudioPolicyEffects.h index 6364e40..1c251e0 100644 --- a/services/audiopolicy/service/AudioPolicyEffects.h +++ b/services/audiopolicy/service/AudioPolicyEffects.h @@ -86,11 +86,6 @@ public: audio_stream_type_t stream, int audioSession); - // For deferred release - status_t doReleaseOutputSessionEffects(audio_io_handle_t output, - audio_stream_type_t stream, - int audioSession); - status_t doAddOutputSessionEffects(audio_io_handle_t output, audio_stream_type_t stream, int audioSession, diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp index 51af20b..96bc4c7 100644 --- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp +++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp @@ -182,30 +182,12 @@ status_t AudioPolicyService::getOutputForAttr(const audio_attributes_t *attr, } if (audioPolicyEffects != 0) { - addOutputSessionEffects(*output, *stream, session, flags, channelMask, uid); + audioPolicyEffects->doAddOutputSessionEffects(*output, *stream, session, flags, channelMask, uid); } return status; } -status_t AudioPolicyService::addOutputSessionEffects(audio_io_handle_t output, - audio_stream_type_t stream, - audio_session_t session, - audio_output_flags_t flags, - audio_channel_mask_t channelMask, - uid_t uid) -{ - if (uint32_t(stream) >= AUDIO_STREAM_CNT) { - return BAD_VALUE; - } - if (mAudioPolicyManager == NULL) { - return NO_INIT; - } - ALOGV("addOutputSessionEffects()"); - return mOutputCommandThread->addOutputSessionEffectsCommand( - output, stream, session, flags, channelMask, uid); -} - status_t AudioPolicyService::startOutput(audio_io_handle_t output, audio_stream_type_t stream, audio_session_t session) @@ -231,8 +213,19 @@ status_t AudioPolicyService::doStartOutput(audio_io_handle_t output, return NO_INIT; } ALOGV("doStartOutput()"); + spaudioPolicyEffects; + { + Mutex::Autolock _l(mLock); + audioPolicyEffects = mAudioPolicyEffects; + } + if (audioPolicyEffects != 0) { + // create audio processors according to stream + status_t status = audioPolicyEffects->addOutputSessionEffects(output, stream, session); + if (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); } diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImplLegacy.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImplLegacy.cpp index e3d69ba..318c6d2 100644 --- a/services/audiopolicy/service/AudioPolicyInterfaceImplLegacy.cpp +++ b/services/audiopolicy/service/AudioPolicyInterfaceImplLegacy.cpp @@ -147,24 +147,6 @@ audio_io_handle_t AudioPolicyService::getOutput(audio_stream_type_t stream, format, channelMask, flags, offloadInfo); } -status_t AudioPolicyService::addOutputSessionEffects(audio_io_handle_t output, - audio_stream_type_t stream, - audio_session_t session, - audio_output_flags_t flags, - audio_channel_mask_t channelMask, - uid_t uid) -{ - if (uint32_t(stream) >= AUDIO_STREAM_CNT) { - return BAD_VALUE; - } - if (mAudioPolicyManager == NULL) { - return NO_INIT; - } - ALOGV("addOutputSessionEffects()"); - return mOutputCommandThread->addOutputSessionEffectsCommand( - output, stream, session, flags, channelMask, uid); -} - status_t AudioPolicyService::startOutput(audio_io_handle_t output, audio_stream_type_t stream, audio_session_t session) @@ -190,6 +172,18 @@ status_t AudioPolicyService::doStartOutput(audio_io_handle_t output, return NO_INIT; } ALOGV("doStartOutput()"); + spaudioPolicyEffects; + { + Mutex::Autolock _l(mLock); + audioPolicyEffects = mAudioPolicyEffects; + } + if (audioPolicyEffects != 0) { + // create audio processors according to stream + status_t status = audioPolicyEffects->addOutputSessionEffects(output, stream, session); + if (status != NO_ERROR && status != ALREADY_EXISTS) { + ALOGW("Failed to add effects on session %d", session); + } + } Mutex::Autolock _l(mLock); return mpAudioPolicy->start_output(mpAudioPolicy, output, stream, session); @@ -615,14 +609,6 @@ status_t AudioPolicyService::getOutputForAttr(const audio_attributes_t *attr, if (*output == AUDIO_IO_HANDLE_NONE) { return INVALID_OPERATION; } - - Mutex::Autolock _l(mLock); - sp audioPolicyEffects; - audioPolicyEffects = mAudioPolicyEffects; - if (audioPolicyEffects != 0) { - addOutputSessionEffects(*output, *stream, session, flags, channelMask, uid); - } - return NO_ERROR; } diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp index 0e871c2..eead3ac 100644 --- a/services/audiopolicy/service/AudioPolicyService.cpp +++ b/services/audiopolicy/service/AudioPolicyService.cpp @@ -366,13 +366,6 @@ void AudioPolicyService::binderDied(const wp& who) { IPCThreadState::self()->getCallingPid()); } -void AudioPolicyService::releaseOutputSessionEffectsDelayed( - audio_io_handle_t output, audio_stream_type_t stream, - audio_unique_id_t sessionId, int delayMs) -{ - mAudioCommandThread->releaseOutputSessionEffectsCommand(output, stream, sessionId, delayMs); -} - static bool tryLock(Mutex& mutex) { bool locked = false; @@ -658,35 +651,6 @@ bool AudioPolicyService::AudioCommandThread::threadLoop() data->mFlags, data->mChannelMask, data->mUid, data->mAdded); mLock.lock(); } break; - case RELEASE_OUTPUT_SESSION_EFFECTS: { - ReleaseOutputSessionEffectsData *data = - (ReleaseOutputSessionEffectsData *)command->mParam.get(); - ALOGV("AudioCommandThread() processing release output session effects %d %d %d", - data->mOutput, data->mStream, data->mSessionId); - svc = mService.promote(); - if (svc == 0) { - break; - } - mLock.unlock(); - svc->mAudioPolicyEffects->doReleaseOutputSessionEffects( - data->mOutput, data->mStream, data->mSessionId); - mLock.lock(); - } break; - case ADD_OUTPUT_SESSION_EFFECTS: { - AddOutputSessionEffectsData *data = (AddOutputSessionEffectsData *)command->mParam.get(); - ALOGV("AudioCommandThread() processing add output session effects %d", - data->mOutput); - svc = mService.promote(); - if (svc == 0) { - break; - } - mLock.unlock(); - svc->mAudioPolicyEffects->doAddOutputSessionEffects( - data->mOutput, data->mStream, data->mSessionId, - data->mFlags, data->mChannelMask, data->mUid); - mLock.lock(); - }break; - default: ALOGW("AudioCommandThread() unknown command %d", command->mCommand); @@ -852,29 +816,6 @@ status_t AudioPolicyService::AudioCommandThread::startOutputCommand(audio_io_han return sendCommand(command); } -status_t AudioPolicyService::AudioCommandThread::addOutputSessionEffectsCommand(audio_io_handle_t output, - audio_stream_type_t stream, - audio_session_t session, - audio_output_flags_t flags, - audio_channel_mask_t channelMask, - uid_t uid) -{ - sp command = new AudioCommand(); - command->mCommand = ADD_OUTPUT_SESSION_EFFECTS; - sp data = new AddOutputSessionEffectsData(); - data->mOutput = output; - data->mStream = stream; - data->mSessionId = session; - data->mFlags = flags; - data->mChannelMask = channelMask; - data->mUid = uid; - command->mParam = data; - command->mWaitStatus = false; - ALOGV("AudioCommandThread() adding start output %d", output); - return sendCommand(command); -} - - void AudioPolicyService::AudioCommandThread::stopOutputCommand(audio_io_handle_t output, audio_stream_type_t stream, audio_session_t session) @@ -1003,23 +944,6 @@ void AudioPolicyService::AudioCommandThread::effectSessionUpdateCommand( sendCommand(command); } -void AudioPolicyService::AudioCommandThread::releaseOutputSessionEffectsCommand( - audio_io_handle_t output, audio_stream_type_t stream, - audio_unique_id_t sessionId, int delayMs) -{ - sp command = new AudioCommand(); - command->mCommand = RELEASE_OUTPUT_SESSION_EFFECTS; - ReleaseOutputSessionEffectsData *data = new ReleaseOutputSessionEffectsData(); - data->mOutput = output; - data->mStream = stream; - data->mSessionId = sessionId; - command->mParam = data; - ALOGV("AudioCommandThread() sending release output session effects (id=%d) for stream %d", - sessionId, stream); - sendCommand(command, delayMs); -} - - status_t AudioPolicyService::AudioCommandThread::sendCommand(sp& command, int delayMs) { { diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h index 01e0e5e..bc2875d 100644 --- a/services/audiopolicy/service/AudioPolicyService.h +++ b/services/audiopolicy/service/AudioPolicyService.h @@ -204,13 +204,6 @@ public: virtual status_t setEffectSessionCallbacksEnabled(bool enabled); - virtual status_t addOutputSessionEffects(audio_io_handle_t output, - audio_stream_type_t stream, - audio_session_t session, - audio_output_flags_t flags, - audio_channel_mask_t channelMask, - uid_t uid); - status_t doStartOutput(audio_io_handle_t output, audio_stream_type_t stream, audio_session_t session); @@ -248,10 +241,6 @@ public: audio_output_flags_t flags, audio_channel_mask_t channelMask, uid_t uid, bool added); - void releaseOutputSessionEffectsDelayed(audio_io_handle_t output, - audio_stream_type_t stream, - audio_unique_id_t sessionId, - int delayMs); private: AudioPolicyService() ANDROID_API; @@ -286,8 +275,6 @@ private: SET_AUDIOPORT_CONFIG, DYN_POLICY_MIX_STATE_UPDATE, EFFECT_SESSION_UPDATE, - RELEASE_OUTPUT_SESSION_EFFECTS, - ADD_OUTPUT_SESSION_EFFECTS }; AudioCommandThread (String8 name, const wp& service); @@ -335,17 +322,6 @@ private: audio_output_flags_t flags, audio_channel_mask_t channelMask, uid_t uid, bool added); - void releaseOutputSessionEffectsCommand(audio_io_handle_t output, - audio_stream_type_t stream, - audio_unique_id_t sessionId, - int delayMs = 0); - status_t addOutputSessionEffectsCommand(audio_io_handle_t output, - audio_stream_type_t stream, - audio_session_t sessionId, - audio_output_flags_t flags, - audio_channel_mask_t channelMask, - uid_t uid); - private: class AudioCommandData; @@ -452,23 +428,6 @@ private: bool mAdded; }; - class ReleaseOutputSessionEffectsData : public AudioCommandData { - public: - audio_io_handle_t mOutput; - audio_stream_type_t mStream; - audio_unique_id_t mSessionId; - }; - - class AddOutputSessionEffectsData : public AudioCommandData { - public: - audio_io_handle_t mOutput; - audio_stream_type_t mStream; - audio_session_t mSessionId; - audio_output_flags_t mFlags; - audio_channel_mask_t mChannelMask; - uid_t mUid; - }; - Mutex mLock; Condition mWaitWorkCV; Vector < sp > mAudioCommands; // list of pending commands -- cgit v1.1