diff options
author | Eric Laurent <elaurent@google.com> | 2013-09-12 17:37:00 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2013-09-18 11:52:40 -0700 |
commit | 5baf2af52cd186633b7173196c1e4a4cd3435f22 (patch) | |
tree | 9c6752456812c4a927574a71e1d2ec2495ff6ce3 /services/audioflinger/Tracks.cpp | |
parent | 9a98b6de791aeb130192df10744f5b35f8b6ef1a (diff) | |
download | frameworks_av-5baf2af52cd186633b7173196c1e4a4cd3435f22.zip frameworks_av-5baf2af52cd186633b7173196c1e4a4cd3435f22.tar.gz frameworks_av-5baf2af52cd186633b7173196c1e4a4cd3435f22.tar.bz2 |
more support for audio effect offload
Offloading of audio effects is now enabled for offloaded
output threads. If an effect not supporting offload is enabled,
the AudioTrack is invalidated so that it can be recreated in PCM
mode.
Fix some issues in effect proxy related to handling of effect
commands to offloaded and non offloaded effects.
Also fixed a bug on capture index in software Visualizer effect.
Bug: 8174034.
Change-Id: Ib23d3c2d5a652361b0aaec7faee09102f2b18fce
Diffstat (limited to 'services/audioflinger/Tracks.cpp')
-rw-r--r-- | services/audioflinger/Tracks.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/services/audioflinger/Tracks.cpp b/services/audioflinger/Tracks.cpp index 3b1874e..57aad1e 100644 --- a/services/audioflinger/Tracks.cpp +++ b/services/audioflinger/Tracks.cpp @@ -553,12 +553,12 @@ status_t AudioFlinger::PlaybackThread::Track::start(AudioSystem::sync_event_t ev sp<ThreadBase> thread = mThread.promote(); if (thread != 0) { - //TODO: remove when effect offload is implemented if (isOffloaded()) { Mutex::Autolock _laf(thread->mAudioFlinger->mLock); Mutex::Autolock _lth(thread->mLock); sp<EffectChain> ec = thread->getEffectChain_l(mSessionId); - if (thread->mAudioFlinger->isGlobalEffectEnabled_l() || (ec != 0 && ec->isEnabled())) { + if (thread->mAudioFlinger->isNonOffloadableGlobalEffectEnabled_l() || + (ec != 0 && ec->isNonOffloadableEnabled())) { invalidate(); return PERMISSION_DENIED; } @@ -797,7 +797,11 @@ status_t AudioFlinger::PlaybackThread::Track::attachAuxEffect(int EffectId) return INVALID_OPERATION; } srcThread->removeEffect_l(effect); - playbackThread->addEffect_l(effect); + status = playbackThread->addEffect_l(effect); + if (status != NO_ERROR) { + srcThread->addEffect_l(effect); + return INVALID_OPERATION; + } // removeEffect_l() has stopped the effect if it was active so it must be restarted if (effect->state() == EffectModule::ACTIVE || effect->state() == EffectModule::STOPPING) { |