diff options
| author | Andy Hung <hunga@google.com> | 2019-04-10 23:53:27 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-04-10 23:53:27 +0000 |
| commit | 58f5458e2e22cac47be8754196dc41d529266e62 (patch) | |
| tree | 67e453149ec87addcee933561a86dfa809737575 /services | |
| parent | eedc6cb6579bec21808697d42bb705967c6b0500 (diff) | |
| parent | e786ae13e38b87f65604e794fbff8f2db17e7006 (diff) | |
| download | frameworks_av-58f5458e2e22cac47be8754196dc41d529266e62.tar.gz frameworks_av-58f5458e2e22cac47be8754196dc41d529266e62.tar.bz2 frameworks_av-58f5458e2e22cac47be8754196dc41d529266e62.zip | |
Merge changes from topic "am-f4faa2c1-7416-4076-9f85-b0cd734dba65" into oc-dev
* changes:
[automerger] AudioFlinger: Prevent multiple effect chains with same sessionId am: f963b2bfda am: fa4876957a am: 982715021c am: d6b2f10642 am: 426b85d639
[automerger] AudioFlinger: Prevent multiple effect chains with same sessionId am: f963b2bfda am: fa4876957a am: 982715021c am: d6b2f10642
[automerger] AudioFlinger: Prevent multiple effect chains with same sessionId am: f963b2bfda am: fa4876957a am: 982715021c
[automerger] AudioFlinger: Prevent multiple effect chains with same sessionId am: f963b2bfda am: fa4876957a
[automerger] AudioFlinger: Prevent multiple effect chains with same sessionId am: f963b2bfda
AudioFlinger: Prevent multiple effect chains with same sessionId
Diffstat (limited to 'services')
| -rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 86b733810a..0f43ed6e50 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -3028,6 +3028,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) { |
