mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-12-19 04:44:30 -05:00
44 lines
1.9 KiB
Diff
44 lines
1.9 KiB
Diff
|
From 620f9a1effe8cfb6b30d8a7f5247397259a618dc Mon Sep 17 00:00:00 2001
|
||
|
From: Weiyin Jiang <wjiang@codeaurora.org>
|
||
|
Date: Fri, 27 Apr 2018 00:39:29 +0800
|
||
|
Subject: [PATCH] audio: ensure effect chain with specific session id is unique
|
||
|
|
||
|
It's possible that tracks with the same session id running on various
|
||
|
playback outputs, which causes effect chain being created on the same
|
||
|
session twice. As a result, the same effect engine will be released
|
||
|
twice as the same context is reused.
|
||
|
|
||
|
Output that has effect chain with same session id is more preferable.
|
||
|
|
||
|
Test: No regression with Play Music and Effects
|
||
|
Bug: 123082420
|
||
|
Bug: 123237974
|
||
|
Merged-In: I690ea3cb942d1fdc96b46048e271557d48000f43
|
||
|
Change-Id: I690ea3cb942d1fdc96b46048e271557d48000f43
|
||
|
(cherry picked from commit 9aeb1770d49bab13ea5c6454c969a713641fe686)
|
||
|
(cherry picked from commit 5945746bcabff8d833229a6c230cbe873474087f)
|
||
|
---
|
||
|
services/audioflinger/AudioFlinger.cpp | 8 ++++++--
|
||
|
1 file changed, 6 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
|
||
|
index b5ec45884d..ecad12b867 100644
|
||
|
--- a/services/audioflinger/AudioFlinger.cpp
|
||
|
+++ b/services/audioflinger/AudioFlinger.cpp
|
||
|
@@ -2739,9 +2739,13 @@ sp<IEffect> AudioFlinger::createEffect(
|
||
|
}
|
||
|
// look for the thread where the specified audio session is present
|
||
|
for (size_t i = 0; i < mPlaybackThreads.size(); i++) {
|
||
|
- if (mPlaybackThreads.valueAt(i)->hasAudioSession(sessionId) != 0) {
|
||
|
+ uint32_t sessionType = mPlaybackThreads.valueAt(i)->hasAudioSession(sessionId);
|
||
|
+ if (sessionType != 0) {
|
||
|
io = mPlaybackThreads.keyAt(i);
|
||
|
- break;
|
||
|
+ // thread with same effect session is preferable
|
||
|
+ if ((sessionType & ThreadBase::EFFECT_SESSION) != 0) {
|
||
|
+ break;
|
||
|
+ }
|
||
|
}
|
||
|
}
|
||
|
if (io == 0) {
|