summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorAndroid Build Merger (Role) <noreply-android-build-merger@google.com>2019-03-13 21:33:59 +0000
committerAndroid Build Merger (Role) <noreply-android-build-merger@google.com>2019-03-13 21:33:59 +0000
commite786ae13e38b87f65604e794fbff8f2db17e7006 (patch)
tree7042c5b0510c445ea50d03285036649be09d8992 /services
parent6b7b14ad4c61e3a444309b0fe871c2fac7d33364 (diff)
parent426b85d639b7162e9859605e62de9d18573a2bd3 (diff)
downloadframeworks_av-e786ae13e38b87f65604e794fbff8f2db17e7006.tar.gz
frameworks_av-e786ae13e38b87f65604e794fbff8f2db17e7006.tar.bz2
frameworks_av-e786ae13e38b87f65604e794fbff8f2db17e7006.zip
[automerger] AudioFlinger: Prevent multiple effect chains with same sessionId am: f963b2bfda am: fa4876957a am: 982715021c am: d6b2f10642 am: 426b85d639
Change-Id: If3df519d292c22dc6a71c781926157f4f7ffee9c
Diffstat (limited to 'services')
-rw-r--r--services/audioflinger/AudioFlinger.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 328cc150b4..87c9bd50fd 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -3024,6 +3024,21 @@ sp<IEffect> AudioFlinger::createEffect(
io = mPlaybackThreads.keyAt(0);
}
ALOGV("createEffect() got io %d for effect %s", io, desc.name);
+ } else if (checkPlaybackThread_l(io) != nullptr) {
+ // allow only one effect chain per sessionId on mPlaybackThreads.
+ for (size_t i = 0; i < mPlaybackThreads.size(); i++) {
+ const audio_io_handle_t checkIo = mPlaybackThreads.keyAt(i);
+ if (io == checkIo) continue;
+ const uint32_t sessionType =
+ mPlaybackThreads.valueAt(i)->hasAudioSession(sessionId);
+ if ((sessionType & ThreadBase::EFFECT_SESSION) != 0) {
+ ALOGE("%s: effect %s io %d denied because session %d effect exists on io %d",
+ __func__, desc.name, (int)io, (int)sessionId, (int)checkIo);
+ android_errorWriteLog(0x534e4554, "123237974");
+ lStatus = BAD_VALUE;
+ goto Exit;
+ }
+ }
}
ThreadBase *thread = checkRecordThread_l(io);
if (thread == NULL) {