summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorbryant_liu <bryant_liu@htc.com>2014-08-29 04:38:39 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-08-29 04:38:39 +0000
commit1f6b5c38ba0d2545bdb7b0d8fa9619fda813a543 (patch)
treefcf647b5f061d482f458674c55f83c03210985b9 /services
parent79e045c59fb1bdf94558a7799bf3de9d456efa36 (diff)
parent2725169aa7e5c18cf8b5b20a14b1153bb9073b38 (diff)
downloadframeworks_av-1f6b5c38ba0d2545bdb7b0d8fa9619fda813a543.zip
frameworks_av-1f6b5c38ba0d2545bdb7b0d8fa9619fda813a543.tar.gz
frameworks_av-1f6b5c38ba0d2545bdb7b0d8fa9619fda813a543.tar.bz2
am 2725169a: am 890a5637: frameworks: av: AudioPolicyEffect: Add refCount for each session
* commit '2725169aa7e5c18cf8b5b20a14b1153bb9073b38': frameworks: av: AudioPolicyEffect: Add refCount for each session
Diffstat (limited to 'services')
-rw-r--r--services/audiopolicy/AudioPolicyEffects.cpp36
-rw-r--r--services/audiopolicy/AudioPolicyEffects.h4
2 files changed, 29 insertions, 11 deletions
diff --git a/services/audiopolicy/AudioPolicyEffects.cpp b/services/audiopolicy/AudioPolicyEffects.cpp
index cc0e965..c45acd0 100644
--- a/services/audiopolicy/AudioPolicyEffects.cpp
+++ b/services/audiopolicy/AudioPolicyEffects.cpp
@@ -98,8 +98,12 @@ status_t AudioPolicyEffects::addInputEffects(audio_io_handle_t input,
inputDesc = new EffectVector(audioSession);
mInputs.add(input, inputDesc);
} else {
+ // EffectVector is existing and we just need to increase ref count
inputDesc = mInputs.valueAt(idx);
}
+ inputDesc->mRefCount++;
+
+ ALOGV("addInputEffects(): input: %d, refCount: %d", input, inputDesc->mRefCount);
Vector <EffectDesc *> effects = mInputSources.valueAt(index)->mEffects;
for (size_t i = 0; i < effects.size(); i++) {
@@ -133,10 +137,14 @@ status_t AudioPolicyEffects::releaseInputEffects(audio_io_handle_t input)
return status;
}
EffectVector *inputDesc = mInputs.valueAt(index);
- setProcessorEnabled(inputDesc, false);
- delete inputDesc;
- mInputs.removeItemsAt(index);
- ALOGV("releaseInputEffects(): all effects released");
+ inputDesc->mRefCount--;
+ ALOGV("releaseInputEffects(): input: %d, refCount: %d", input, inputDesc->mRefCount);
+ if (inputDesc->mRefCount == 0) {
+ setProcessorEnabled(inputDesc, false);
+ delete inputDesc;
+ mInputs.removeItemsAt(index);
+ ALOGV("releaseInputEffects(): all effects released");
+ }
return status;
}
@@ -223,8 +231,12 @@ status_t AudioPolicyEffects::addOutputSessionEffects(audio_io_handle_t output,
procDesc = new EffectVector(audioSession);
mOutputSessions.add(audioSession, procDesc);
} else {
+ // EffectVector is existing and we just need to increase ref count
procDesc = mOutputSessions.valueAt(idx);
}
+ procDesc->mRefCount++;
+
+ ALOGV("addOutputSessionEffects(): session: %d, refCount: %d", audioSession, procDesc->mRefCount);
Vector <EffectDesc *> effects = mOutputStreams.valueAt(index)->mEffects;
for (size_t i = 0; i < effects.size(); i++) {
@@ -262,12 +274,16 @@ status_t AudioPolicyEffects::releaseOutputSessionEffects(audio_io_handle_t outpu
}
EffectVector *procDesc = mOutputSessions.valueAt(index);
- setProcessorEnabled(procDesc, false);
- procDesc->mEffects.clear();
- delete procDesc;
- mOutputSessions.removeItemsAt(index);
- ALOGV("releaseOutputSessionEffects(): output processing released from session: %d",
- audioSession);
+ procDesc->mRefCount--;
+ ALOGV("releaseOutputSessionEffects(): session: %d, refCount: %d", audioSession, procDesc->mRefCount);
+ if (procDesc->mRefCount == 0) {
+ setProcessorEnabled(procDesc, false);
+ procDesc->mEffects.clear();
+ delete procDesc;
+ mOutputSessions.removeItemsAt(index);
+ ALOGV("releaseOutputSessionEffects(): output processing released from session: %d",
+ audioSession);
+ }
return status;
}
diff --git a/services/audiopolicy/AudioPolicyEffects.h b/services/audiopolicy/AudioPolicyEffects.h
index 351cb1a..dbe0d0e 100644
--- a/services/audiopolicy/AudioPolicyEffects.h
+++ b/services/audiopolicy/AudioPolicyEffects.h
@@ -131,9 +131,11 @@ private:
// class to store voctor of AudioEffects
class EffectVector {
public:
- EffectVector(int session) : mSessionId(session) {}
+ EffectVector(int session) : mSessionId(session), mRefCount(0) {}
/*virtual*/ ~EffectVector() {}
const int mSessionId;
+ // AudioPolicyManager keeps mLock, no need for lock on reference count here
+ int mRefCount;
Vector< sp<AudioEffect> >mEffects;
};