summaryrefslogtreecommitdiffstats
path: root/media/libmedia/AudioEffect.cpp
diff options
context:
space:
mode:
authorJean-Michel Trivi <jmtrivi@google.com>2014-09-18 14:07:18 -0700
committerJean-Michel Trivi <jmtrivi@google.com>2014-09-18 14:07:18 -0700
commita0fd9ca66a68baefd9d76800fd66823fd654ef45 (patch)
treec3102c24d002966b7c0038e885296d77136a47c3 /media/libmedia/AudioEffect.cpp
parent2720c8c45a0040d7007239c100591b9f092b780f (diff)
downloadframeworks_av-a0fd9ca66a68baefd9d76800fd66823fd654ef45.zip
frameworks_av-a0fd9ca66a68baefd9d76800fd66823fd654ef45.tar.gz
frameworks_av-a0fd9ca66a68baefd9d76800fd66823fd654ef45.tar.bz2
AudioEffect acquires session
Currently, users of audio sessions, AudioTrack and AudioRecord, are acquiring and releasing audio sessions according to their life-cycle. AudioEffect instances were not counting as users of an audio session. This caused an effect used on a session to be purged by AudioFlinger::purgeStaleEffects_l() whenever the last user of that session went away. This CL makes AudioEffect acquire and release a session when created and destroyed. Bug 15432115 Change-Id: I922532150009988d43872f9b5928044a830ae0b3
Diffstat (limited to 'media/libmedia/AudioEffect.cpp')
-rw-r--r--media/libmedia/AudioEffect.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/media/libmedia/AudioEffect.cpp b/media/libmedia/AudioEffect.cpp
index 35f6557..0d5d7e4 100644
--- a/media/libmedia/AudioEffect.cpp
+++ b/media/libmedia/AudioEffect.cpp
@@ -145,15 +145,19 @@ status_t AudioEffect::set(const effect_uuid_t *type,
return mStatus;
}
- mIEffect = iEffect;
mCblkMemory = cblk;
mCblk = static_cast<effect_param_cblk_t*>(cblk->pointer());
int bufOffset = ((sizeof(effect_param_cblk_t) - 1) / sizeof(int) + 1) * sizeof(int);
mCblk->buffer = (uint8_t *)mCblk + bufOffset;
iEffect->asBinder()->linkToDeath(mIEffectClient);
- ALOGV("set() %p OK effect: %s id: %d status %d enabled %d", this, mDescriptor.name, mId,
- mStatus, mEnabled);
+ mClientPid = IPCThreadState::self()->getCallingPid();
+ ALOGV("set() %p OK effect: %s id: %d status %d enabled %d pid %d", this, mDescriptor.name, mId,
+ mStatus, mEnabled, mClientPid);
+
+ if (mSessionId > AUDIO_SESSION_OUTPUT_MIX) {
+ AudioSystem::acquireAudioSessionId(mSessionId, mClientPid);
+ }
return mStatus;
}
@@ -164,6 +168,9 @@ AudioEffect::~AudioEffect()
ALOGV("Destructor %p", this);
if (mStatus == NO_ERROR || mStatus == ALREADY_EXISTS) {
+ if (mSessionId > AUDIO_SESSION_OUTPUT_MIX) {
+ AudioSystem::releaseAudioSessionId(mSessionId, mClientPid);
+ }
if (mIEffect != NULL) {
mIEffect->disconnect();
mIEffect->asBinder()->unlinkToDeath(mIEffectClient);